{"version":3,"sources":["webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/surveyjs-widgets/surveyjs-widgets.js","webpack:///./node_modules/survey-vue/survey-vue.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/inputmask/dist/inputmask.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./src/views/Survey.vue?c38d","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/bootstrap-slider/dist/bootstrap-slider.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./src/views/Survey.vue?1621","webpack:///./src/components/customwidget.js","webpack:///src/views/Survey.vue","webpack:///./src/views/Survey.vue?bc8f","webpack:///./src/views/Survey.vue?baa3","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/sortablejs/modular/sortable.esm.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/nouislider/distribute/nouislider.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js"],"names":["utils","buildURL","InterceptorManager","dispatchRequest","mergeConfig","Axios","instanceConfig","this","defaults","interceptors","request","response","prototype","config","arguments","url","method","toLowerCase","chain","undefined","promise","Promise","resolve","forEach","interceptor","unshift","fulfilled","rejected","push","length","then","shift","getUri","params","paramsSerializer","replace","data","module","exports","callback","arr","apply","root","factory","self","__WEBPACK_EXTERNAL_MODULE_3__","__WEBPACK_EXTERNAL_MODULE_7__","__WEBPACK_EXTERNAL_MODULE_10__","__WEBPACK_EXTERNAL_MODULE_15__","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","hasOwnProperty","p","s","__webpack_exports__","escValue","val","init","Survey","$","window","widget","className","checkboxClass","radioClass","widgetIsLoaded","fn","iCheck","isFit","question","t","getType","isDefaultRender","afterRender","el","rootWidget","$el","getIndexByValue","value","Array","isArray","toString","find","hide","frozeUpdating","makeChoicesICheck","inputs","on","event","generatedVisibleRows","row","index","rows","fullName","target","oldValue","concat","slice","splice","uncheckIcheck","cEl","parentElement","classList","remove","select","values","qValue","visibleChoices","item","inEl","isChecked","wasChecked","removeAttr","parent","hasClass","setTimeout","visibleChoicesChangedCallback","valueChangedCallback","willUnmount","JsonObject","metaData","addProperty","category","CustomWidgetCollection","Instance","addCustomWidget","activatedBy","select2","activatedByChanged","removeProperty","default","choices","dependsOn","visibleIf","obj","renderAs","addClass","htmlTemplate","select2Config","settings","JSON","parse","is","$otherElement","cssClasses","other","bind","isSettingValue","comment","updateComment","isOtherSelected","show","updateValueHandler","trigger","newOption","Option","append","updateChoices","empty","placeholder","showOptionsCaption","optionsCaption","allowClear","theme","disabled","isReadOnly","ajax","keepIncorrectValues","id","text","map","choice","clearIncorrectValues","querySelector","style","width","nextElementSibling","marginBottom","prop","readOnlyChangedCallback","registerFunctionOnPropertyValueChanged","e","renderedValue","removeData","preventDefault","$select2","off","__WEBPACK_IMPORTED_MODULE_0_inputmask__","__WEBPACK_IMPORTED_MODULE_0_inputmask___default","numericGroupSeparator","numericAutoGroup","numericDigits","numericDigitsOptional","numericPlaceholder","autoUnmask","clearIncomplete","a","inputMask","inputFormat","findProperty","properties","visible","addProperties","applyInputMask","surveyElement","mask","options","option","groupSeparator","autoGroup","digits","digitsOptional","prefix","suffix","onblur","inputmask","getemptymask","customWidgetData","editorValue","oninput","isNeedRender","pushValueHandler","isComplete","unmaskedvalue","onfocusout","onchange","updateHandler","input","items","editor","inputId","title","iconName","barrating","defaultJSON","$customSelect","$questionInput","contentContainer","renderCustomSelect","format","css","after","selectedIndex","removeCustomSelect","renderBarrating","ratingTheme","initialRating","showValues","showSelectedRating","readonly","onSelect","valueChangingByWidget","parents","__barratingOnPropertyChangedCallback","sender","onPropertyChanged","add","$contentContainer","pdfQuestionType","bootstrapDP","datepicker","noConflict","isSelecting","extend","placeHolder","attr","dateFormat","minDate","maxDate","renderedMin","renderedMax","dateText","fixFocusIE","onClose","inst","beforeShow","result","navigator","userAgent","match","pickerWidget","updateDate","keyup","keyCode","_clearDate","blur","matrixDropdownColumnTypes","__WEBPACK_IMPORTED_MODULE_0_nouislider__","__WEBPACK_IMPORTED_MODULE_0_nouislider___default","categoryIndex","paddingBottom","paddingLeft","paddingRight","paddingTop","children","orientation","height","slider","create","start","rangeMin","rangeMax","connect","step","tooltips","pips","mode","pipsMode","pipsValues","pVal","pipValue","parseInt","density","pipsDensity","to","pipText","pipsText","range","min","max","direction","Number","set","setAttribute","noUiSlider","removeAttribute","destroy","pdfRender","_","point","SurveyHelper","createPoint","mergeRects","bricks","xLeft","controller","unitWidth","yTop","unitHeight","FlatQuestion","CONTENT_GAP_VERT_SCALE","rect","createTextFieldRect","textboxBrick","TextFieldBrick","defaultValue","tagbox","fixStyles","border","tags","allowAddNewTag","maxSelectedChoices","maximumSelectionLength","survey","checkbox","hasSelectAll","isAllSelected","selectAllItemValue","isAllItemSelected","_propertyValueChangedFnSelect2","selectAll","indexOf","clearValue","unRegisterFunctionOnPropertyValueChanged","__WEBPACK_IMPORTED_MODULE_0_sortablejs__","__WEBPACK_IMPORTED_MODULE_0_sortablejs___default","rootStyle","areaStyle","itemStyle","source","useDefaultTheme","cssText","resultEl","document","createElement","emptyEl","sourceEl","boxSizing","innerHTML","emptyText","appendChild","hasValueInResults","res","addChoiceToWidget","inResults","srcEl","newEl","innerText","dataset","getChoicesNotInResults","getChoicesInResults","ItemValue","getItemByValue","isUpdatingQuestionValue","notInResults","display","animation","group","put","from","maxAnswersCount","onSort","evt","CKEDITOR","editorConfig","language","toolbarCanCollapse","instances","removeAllListeners","readOnly","isValueChanging","setData","getData","setReadOnly","loc","LocalizableString","flatHtml","repository","generateFlats","htmlBricks","easyAutocomplete","getCssSelectorFromClassesString","classesString","cssSelector","questionRootClasses","cssRoot","questionRoot","overflow","adjustWidth","list","sort","enabled","onSelectItemEvent","selectedData","getSelectedItemData","choicesByUrl","phrase","getValue","valueName","supportedTypes","radiogroup","rootClass","inputType","states","stateClass","addOn","boolean","iconClass","isFitByType","supportedType","element","itemInputs","questionType","checkboxType","radiogroupType","booleanType","inChangeHandler","changeHandler","targetValue","targetChecked","checked","questionValue","createValueCopy","valueIndex","itemWidth","colCount","locText","locTitle","choiceItem","type","indeterminate","controlRoot","state","stateRoot","icon","label","hasHtml","html","textContent","renderedText","insertAdjacentHTML","itemRoot","newValue","checkedItems","inputItem","readOnlyHandler","Slider","inputEl","valueObj","setValue","disable","enable","bootstrapSlider","__WEBPACK_IMPORTED_MODULE_0_recordrtc__","__WEBPACK_IMPORTED_MODULE_0_recordrtc___default","buttonStartEl","getElementsByTagName","buttonStopEl","audioEl","successCallback","stream","mimeType","audioBitsPerSecond","sampleRate","bufferSize","numberOfAudioChannels","console","log","mystream","recordRTC","startRecording","errorCallback","alert","processAudio","audioVideoWebMURL","recordedBlob","getBlob","fileReader","FileReader","onload","dataUri","src","readAsDataURL","stopRecording","doNothingHandler","getAudioTracks","track","stop","mediaConstraints","video","audio","mediaDevices","getUserMedia","parentNode","removeChild","onclick","global","process","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","RecordRTC","mediaStream","RecordRTCConfiguration","config2","disableLogs","version","mediaRecorder","clearRecordedData","record","setState","recordingDuration","handleRecordingDuration","initRecorder","initCallback","Recorder","GetRecorderType","constructor","resumeRecording","warn","_callback","warningLog","__blob","keys","key","blob","bytesToSize","size","URL","createObjectURL","autoWriteToDisk","getDataURL","dataURL","parameter","DiskStorage","Store","pauseRecording","pause","resume","readFile","_blob","postMessage","FileReaderSync","_mediaRecorder","Worker","mozGetUserMedia","reader","webWorker","processInWebWorker","onmessage","_function","Blob","worker","revokeObjectURL","counter","onRecordingStopped","onStateChanged","WARNING","returnObject","setRecordingDuration","toURL","getInternalRecorder","save","fileName","invokeSaveAsDialog","getFromDisk","setAdvertisementArray","arrayOfWebPImages","advertisement","duration","image","buffer","reset","getState","disableLogsCache","Storage","AudioContextConstructor","close","recorderType","WhammyRecorder","CanvasRecorder","WebAssemblyRecorder","GifRecorder","StereoAudioRecorder","MediaStreamRecorder","getTracks","MediaRecorder","split","bitsPerSecond","recorder","isChrome","isEdge","isOpera","ReadableStream","isMediaRecorderCompatible","isTypeSupported","MultiStreamRecorder","isSafari","MRecordRTC","addStream","_mediaStream","mediaType","gif","audioRecorder","timeSlice","onTimeStamp","newStream","videoTrack","isFirefox","MediaStream","addTrack","videoRecorder","canvas","frameInterval","workerPath","webAssemblyPath","frameRate","bitrate","isSingleRecorder","gifRecorder","quality","blobURL","output","callback00","webkitURL","_audioDataURL","_videoDataURL","writeToDisk","args","Fetch","_type","audioDataURL","videoDataURL","gifDataURL","audioBlob","videoBlob","gifBlob","browserFakeUserAgent","that","error","documentElement","captureStream","mozCaptureStream","getContext","play","drawImage","toDataURL","HTMLVideoElement","location","protocol","href","hash","screen","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","lastTime","currTime","Date","getTime","timeToCall","Math","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","clearTimeout","AudioContext","webkitAudioContext","mozAudioContext","webkitGetUserMedia","msSaveBlob","msSaveOrOpenBlob","opera","test","isElectron","bytes","k","sizes","floor","pow","toPrecision","file","fileExtension","splitted","fileFullName","round","random","hyperlink","download","body","click","dispatchEvent","MouseEvent","view","bubbles","cancelable","versions","electron","kind","filter","setSrcObject","srcObject","mozSrcObject","getSeekableBlob","inputBlob","EBML","Error","Reader","decoder","Decoder","tools","ebmlElms","decode","read","refinedMetadataBuf","makeMetadataSeekable","metadatas","cues","metadataSize","newBlob","readAsArrayBuffer","webkitMediaStream","appVersion","verOffset","ix","nAgt","fullVersion","parseFloat","majorVersion","substring","isNaN","arrayOfBlobs","updateTimeStamp","timestamps","getMimeType","secondObject","clearRecordedDataCB","isMediaStreamActive","active","ended","getArrayOfBlobs","allStates","recorderHints","canRecordMimeType","ondataavailable","recordingCallback","getNativeBlob","onstart","onpause","onresume","onstop","onerror","looper","manuallyStopped","timeslice","getAllStates","checkForInactiveTracks","jsAudioNode","leftchannel","rightchannel","recording","recordingLength","desiredSampRate","mergeLeftRightBuffers","mergeAudioBuffers","cb","interleaved","leftBuffers","rightBuffers","internalInterleavedLength","interpolateArray","newSampleRate","oldSampleRate","fitCount","newData","springFactor","tmp","before","toFixed","ceil","atPoint","linearInterpolate","mergeBuffers","channelBuffer","rLength","Float64Array","offset","lng","interleave","leftChannel","rightChannel","inputIndex","writeUTFBytes","string","setUint8","charCodeAt","interleavedLength","resultingBufferLength","ArrayBuffer","DataView","setUint32","setUint16","volume","setInt16","noWorker","workerURL","terminate","resetVariables","isAudioProcessStarted","isPaused","byteLength","context","audioInput","createMediaStreamSource","legalBufferValues","stringify","createJavaScriptNode","createScriptProcessor","intervalsBasedBuffers","left","right","onaudioprocess","disconnect","onAudioProcessDataAvailable","onAudioProcessStarted","inputBuffer","getChannelData","chLeft","Float32Array","chRight","createMediaStreamDestination","destination","htmlElement","html2canvas","isCanvasSupportsStreamCapturing","globalCanvas","mediaStreamRecorder","isRecording","_isChrome","webkitRTCPeerConnection","chrome","chromeVersion","matchArray","useWhammyRecorder","HTMLCanvasElement","CanvasRenderingContext2D","canvasMediaStream","webkitCaptureStream","mdStream","whammy","frames","drawCanvasFrame","getWebPImages","nodeName","framesLength","frame","idx","framesRemaining","onEncodingCallback","webp","compile","isPausedRecording","cloneCanvas","newCanvas","grabMouse","showMousePointer","onrendered","Whammy","Video","drawFrames","paused","isStopDrawing","asyncLoop","loop","functionToLoop","dropBlackFrames","_frames","_framesToCheck","_pixTolerance","_frameTolerance","localCanvas","context2d","resultFrames","checkUntilNotBlack","endCheckFrame","sampleColor","r","g","b","maxColorDifference","sqrt","pixTolerance","frameTolerance","doNotCheckNext","f","matchPixCount","endPixCheck","maxPixCount","finishImage","Image","imageData","getImageData","pix","currentColor","colorDifference","cloneNode","onloadedmetadata","muted","_this","WhammyVideo","whammyInWebWorker","ArrayToWebM","info","checkFrames","clusterMaxDuration","doubleToString","frameNumber","clusterTimecode","clusterFrames","clusterDuration","clusterCounter","cluster","getClusterData","generateEBML","block","makeSimpleBlock","discardable","invisible","keyframe","lacing","trackNum","timecode","numToBuffer","num","parts","Uint8Array","reverse","strToBuffer","str","bitsToBuffer","bits","pad","join","substr","json","ebml","len","zeroes","sizeToString","padded","flags","out","String","fromCharCode","parseWebP","riff","VP8","RIFF","WEBP","frameStart","getStrLength","unpadded","parseRIFF","chunks","webm","atob","indexedDB","open","db","dbVersion","dbName","onError","onsuccess","setVersion","createObjectStore","putInDB","onupgradeneeded","dataBase","dataStoreName","transaction","getFromStore","portionName","objectStore","GIFEncoder","script","isHTMLObject","drawVideoFrame","time","clearedRecordedData","lastAnimationFrame","lastFrameTime","onGifPreview","gifEncoder","addFrame","isLoadedMetaData","offsetWidth","offsetHeight","setRepeat","setDelay","setQuality","onGifRecordingStarted","now","bin","autoplay","playsInline","MultiStreamsMixer","arrayOfMediaStreams","elementClass","videos","isStopDrawingFrames","opacity","position","zIndex","top","useGainNode","drawVideosToCanvas","videosLength","fullcanvas","remaining","x","y","onRender","getMixedStream","mixedVideoStream","getMixedVideoStream","mixedAudioStream","getMixedAudioStream","capturedStream","resetVideoStreams","videoStream","audioContext","audioSources","gainNode","createGain","gain","audioTracksLength","audioSource","audioDestination","getVideo","streams","startDrawingFrames","appendStreams","releaseStreams","clearRect","mixer","getAllVideoTracks","tracks","previewStream","addStreams","getMixer","RecordRTCPromisesHandler","reject","cameraStream","cvs","onplaying","ctx","frameTimeout","enqueue","addEventListener","timebaseDen","realtime","pipeTo","WritableStream","write","arrayOfBuffers","fetch","arrayBuffer","Function","eval","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","marker","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","Item","array","noop","nextTick","browser","env","argv","addListener","once","removeListener","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","emotionsRating","emotions","emotionSize","bgEmotion","color","emotionColor","count","emotionsCount","onUpdate","initWidget","__WEBPACK_IMPORTED_MODULE_0__icheck_js__","__WEBPACK_IMPORTED_MODULE_1__select2_js__","__WEBPACK_IMPORTED_MODULE_2__inputmask_js__","__WEBPACK_IMPORTED_MODULE_3__jquery_bar_rating_js__","__WEBPACK_IMPORTED_MODULE_4__jquery_ui_datepicker_js__","__WEBPACK_IMPORTED_MODULE_5__nouislider_js__","__WEBPACK_IMPORTED_MODULE_6__select2_tagbox_js__","__WEBPACK_IMPORTED_MODULE_7__sortablejs_js__","__WEBPACK_IMPORTED_MODULE_8__ck_editor_js__","__WEBPACK_IMPORTED_MODULE_9__easy_autocomplete_js__","__WEBPACK_IMPORTED_MODULE_10__pretty_checkbox_js__","__WEBPACK_IMPORTED_MODULE_11__bootstrap_slider_js__","__WEBPACK_IMPORTED_MODULE_12__microphone_js__","__WEBPACK_IMPORTED_MODULE_13__emotionsratings_js__","__WEBPACK_IMPORTED_MODULE_14__bootstrapdatepicker_js__","enableOnReadonly","startDate","endDate","todayHighlight","weekStart","clearBtn","autoclose","autoClose","daysOfWeekHighlighted","disableTouchKeyboard","newDate","toUTCString","__WEBPACK_EXTERNAL_MODULE_vue__","Symbol","toStringTag","ns","__webpack_module__","Point","Bezier","startPoint","control1","control2","endPoint","throttle","func","wait","previous","later","leading","trailing","SignaturePad","opts","velocityFilterWeight","minWidth","maxWidth","minDistance","_strokeMoveUpdate","_strokeUpdate","dotSize","penColor","backgroundColor","onBegin","onEnd","_canvas","_ctx","clear","_handleMouseDown","which","_mouseButtonDown","_strokeBegin","_handleMouseMove","_handleMouseUp","_strokeEnd","_handleTouchStart","targetTouches","touch","changedTouches","_handleTouchMove","_handleTouchEnd","wasCanvasTouched","velocityFrom","distanceTo","equals","steps","px","py","cx","_point","cy","xdiff","ydiff","c1","c2","end","fillStyle","fillRect","_data","_reset","_isEmpty","fromDataURL","dataUrl","ratio","devicePixelRatio","_toSVG","_len","_key","_handleMouseEvents","_handleTouchEvents","removeEventListener","isEmpty","clientX","clientY","_createPoint","lastPointGroup","lastPoint","isLastPointTooClose","_addPoint","curve","widths","_drawCurve","canDrawCurve","points","_drawDot","msTouchAction","touchAction","_lastVelocity","_lastWidth","getBoundingClientRect","_calculateCurveControlPoints","c3","_calculateCurveWidths","s1","s2","s3","dx1","dy1","dx2","dy2","m1","m2","l1","l2","dxm","dym","cm","tx","ty","velocity","newWidth","_strokeWidth","_drawPoint","moveTo","arc","PI","startWidth","endWidth","widthDelta","drawSteps","beginPath","tt","ttt","u","uu","uuu","closePath","fill","_fromData","pointGroups","drawCurve","drawDot","j","rawPoint","_addPoint2","_rawPoint","_this2","minX","minY","maxX","maxY","svg","createElementNS","setAttributeNS","path","circle","header","dummy","nodes","childNodes","footer","btoa","fromData","_this3","toData","_typeof","iterator","_defineProperty","writable","_extends","assign","_objectSpread","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","TypeError","MultiDragPlugin","Sortable","SwapPlugin","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","matches","selector","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","nodeType","closest","includeCTX","_throttleTimeout","R_SPACE","toggleClass","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","tagName","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","bottom","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","currentChild","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","indexOfObject","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","dst","isRectEqual","rect1","rect2","ms","cancelThrottle","scrollBy","Polymer","jQuery","Zepto","dom","setRect","unsetRect","expando","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","child","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","animationResetTimer","currentRect","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","easing","animated","plugins","initializeByDefault","PluginManager","mount","plugin","pluginName","pluginEvent","eventName","sortable","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","charAt","CustomEvent","createEvent","initEvent","pullMode","lastPutMode","allEventProperties","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","some","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_globalDragOver","dropEffect","_onMove","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_ghostIsLast","spacer","_getSwapDirection","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_generateId","sum","_saveInputCheckedState","_nextTick","_cancelNextTick","contains","_getDirection","pointerType","originalTarget","shadowRoot","composedPath","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","_onTouchMove","_onDragStart","selection","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","inserted","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","changed","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","dragIndex","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","handleEvent","toArray","order","getAttribute","useAnimation","querySelectorAll","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","AutoScrollPlugin","AutoScroll","scroll","scrollSensitivity","scrollSpeed","bubbleScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","_ref2","dragOverBubble","drop","clearPointerElemChangedInterval","clearAutoScrolls","nulling","autoScroll","ogElemScroller","newElem","pid","lastSwapEl","isFallback","scrollCustomFn","sens","speed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","toSortable","onSpill","Revert","Remove","Swap","swapClass","dragStart","dragOverValid","swap","prevSwapEl","_ref3","swapNodes","swapItem","n1","n2","i1","i2","p1","p2","isEqualNode","startIndex","_ref4","parentSortable","lastMultiDragSelect","multiDragSortable","dragEl$1","clonesFromRect","clonesHidden","multiDragElements","multiDragClones","initialFolding","folding","MultiDrag","_deselectMultiDrag","_checkKeyDown","_checkKeyUp","selectedClass","multiDragKey","multiDragElement","multiDragKeyDown","isMultiDrag","delayStartGlobal","delayEnded","setupClone","sortableIndex","insertMultiDragClones","showClone","hideClone","_ref5","dragStartGlobal","_ref6","multiDrag","_ref7","removeMultiDragElements","dragOver","_ref8","_ref9","insertMultiDragElements","_ref10","dragRectAbsolute","clonesHiddenBefore","dragOverAnimationCapture","_ref11","dragMatrix","dragOverAnimationComplete","_ref12","originalEvt","shiftKey","lastIndex","currentIndex","multiDragIndex","update","nullingGlobal","destroyGlobal","deselect","oldIndicies","newIndicies","clones","clonesInserted","elementsInserted","BooleanCheckbox","vue__WEBPACK_IMPORTED_MODULE_0__","vue__WEBPACK_IMPORTED_MODULE_0___default","vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__","_boolean__WEBPACK_IMPORTED_MODULE_2__","survey_core__WEBPACK_IMPORTED_MODULE_3__","__extends","extendStatics","setPrototypeOf","__proto__","__","__decorate","decorators","desc","Reflect","decorate","_super","component","registerRenderer","BooleanSwitch","ButtonGroup","vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__","_question__WEBPACK_IMPORTED_MODULE_1__","getModel","ButtonGroupItem","vue__WEBPACK_IMPORTED_MODULE_1__","vue__WEBPACK_IMPORTED_MODULE_1___default","survey_core__WEBPACK_IMPORTED_MODULE_2__","_base__WEBPACK_IMPORTED_MODULE_3__","props","model","Checkbox","_question__WEBPACK_IMPORTED_MODULE_2__","getItemClass","CheckboxItem","_base__WEBPACK_IMPORTED_MODULE_2__","getLabelClass","Comment","change","isInputTextUpdate","ActionBarItemDropdownViewModel","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__","ActionBarItemViewModel","stateItem","ActionBarSeparatorViewModel","innerCss","ActionBarViewModel","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_3__","_action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_4__","_action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_5__","setItems","getComponentName","DefaultTitle","vue_class_component__WEBPACK_IMPORTED_MODULE_1__","vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__","isCollapsed","isExpanded","changeExpanded","toggleState","getIconCss","iconExpanded","mounted","stateChangedCallback","List","SurveyQuestionMatrixDetailButton","SurveyQuestionMatrixDynamicRemoveButton","PopupContainer","showModal","clickInside","onUpdated","prevIsVisible","isVisible","isModal","updatePosition","componentName","onApply","onCancel","popupModel","popupViewModel","initializePopupContainer","popup","propsData","onHide","$destroy","destroyPopupContainer","Popup","_popup_container_vue__WEBPACK_IMPORTED_MODULE_3__","_base__WEBPACK_IMPORTED_MODULE_4__","onMounted","popupContainer","destroyed","SvgIcon","onSizePropertyChanged","onWidthPropertyChanged","onHeightPropertyChanged","onIconNamePropertyChanged","svgIconElement","$refs","TitleActions","getTitleActions","Composite","contentPanel","Custom","contentQuestion","customWidget","getTemplate","CustomWidget","hasVueComponent","components","updated","beforeDestroy","DragDropTD","Dropdown","hasOther","SurveyElementVue","isDefaultRendering","getRootClass","getContentClass","cssContent","isPanel","questionErrorLocation","ElementHeader","getTitleClass","cssTitle","getHeaderClass","cssHeader","Empty","Errors","classes","additionalClasses","locationTop","locationBottom","Expression","File","onDragOver","returnValue","onDrop","onChange","doChange","srcElement","doClean","needConfirmRemoveFile","isConfirmed","confirmRemoveAllMessage","doRemoveFile","getConfirmRemoveMessage","removeFile","doDownloadFile","content","getPlaceholderClass","placeholderInput","files","allowCount","allowMultiple","loadFiles","FlowPanel","isCollapsedValue","rootNodeValue","beforeMount","onCustomHtmlProducing","onGetHtmlForQuestion","renderQuestion","setRootNode","produceHtml","doc","DOMParser","parseFromString","afterRenderPanel","renderWidth","expand","collapse","getTitleStyle","panel","titleExpandable","FlowPanelElement","FlowPanelElement_1","getStyle","fontWeight","fontStyle","textDecoration","elementIdValue","idValue","node","hasTextChildNodesOnly","getQuestionByName","getChildDomNodes","domNodes","SurveyHeader","doAfterRenderHeader","Html","QuestionImage","ImagePicker","Matrix","cellClick","column","isInputReadOnly","MatrixCell","cell","showErrorOnTop","showErrorOnBottom","getHeaders","headers","getCellStyle","isDisabled","isEnabled","allowHover","itemClass","itemDisabled","itemChecked","itemHover","hasQuestion","onVisibilityChanged","cellQuestion","matrixAfterCellRender","MatrixDropdown","MatrixDynamic","addRowClick","addRow","MatrixTable","renderedTable","MultipleText","Navigation","showPrevBtn","showNextBtn","showCompleteBtn","onCreated","updateShowButtons","onCurrentPageChanged","isFirstPage","isShowPrevButton","isLastPage","nextButtonMouseDown","mouseDownPage","currentPage","navigationMouseDown","buttonMouseDown","prevPage","nextPage","completeLastPage","showPreview","OtherChoice","isSurveyInputTextUpdate","Page","isCurrentPageChanged","onPagePropertyChanged","page","afterRenderPage","$nextTick","scrollToTopOnPageChange","_showTitle","_showDescription","renderTitleActions","Panel","cancelPreview","containsErrors","titleOnError","requiredText","PanelDynamic","isRenderModeList","panels","currentPanel","addPanelClick","addPanel","getButtonAddCss","btnClasses","buttonAdd","renderMode","PanelDynamicProgress","isProgressTopShowing","progressTop","progressBottom","panelCount","addPanelUI","prevPanelClick","goToPrevPanel","nextPanelClick","goToNextPanel","changeRange","getButtonPrevCss","buttonPrev","isPrevButtonShowing","getButtonNextCss","buttonNext","isNextButtonShowing","PanelDynamicRemove","removePanelClick","removePanelUI","Progress","progressValue","ProgressButtons","hasScroller","updateScroller","progressButtonsModel","listContainerElement","isListElementClickable","getListElementCss","clickListElement","getScrollButtonCss","isLeftScroll","scrollCss","progressButtonsImageButtonLeft","progressButtonsImageButtonRight","progressButtonsImageButtonHidden","clickScrollButton","Radiogroup","RadiogroupItem","getControlLabelClass","RankingItem","Ranking","Rating","getCss","selected","Row","rowContainerDiv","startLazyRendering","isLazyRendering","SurveyStringEditor","onInput","locString","onClick","editableRenderer","SurveyStringViewer","defaultRenderer","SurveyString","currentPageId","forceUpdate","$forceUpdate","surveyOnMounted","onPageVisibleChanged","doAfterRenderSurvey","renderCallback","startTimerFromUI","stopTimer","showTitle","showCompletedPage","getCompletedPageClasses","completedPage","getProcessedCompletedHtml","hasCompletedPage","processedCompletedHtmlValue","processedCompletedHtml","getCompletedStateClasses","saveData","completedState","doTrySaveAgain","doComplete","currentType","newType","applyTheme","QuestionText","inputWidth","TimerPanel","timerInfoText","TitleContent","Window","_surveyModel__WEBPACK_IMPORTED_MODULE_2__","surveyWindow","isexpanded","closeOnCompleteTimeout","isShowing","closeWindowOnCompleteCallback","doHide","buttonCollapsed","buttonExpanded","doExpand","createDecorator","mixins","reflectionIsSupported","defineMetadata","getOwnMetadataKeys","copyReflectionMetadata","forwardMetadata","getOwnPropertyNames","propertyKey","metaKeys","metaKey","metadata","getOwnMetadata","fakeArray","hasProto","Ctor","__decorators__","Ctors","isPrimitive","message","collectDataFromConstructor","vm","Component","originalInit","_init","$options","plainData","$internalHooks","componentFactory","_componentTag","proto","descriptor","methods","computed","superProto","getPrototypeOf","Super","Extended","forwardStaticMembers","reservedPropertyNames","shouldIgnore","callee","caller","Original","extendedDescriptor","superDescriptor","registerHooks","render","staticRenderFns","_vm","_h","$createElement","_c","_self","class","directives","rawName","checkedValue","expression","control","attrs","isRequired","renderedHtml","errors","domProps","isIndeterminate","_i","$event","$$a","$$el","$$c","$$v","$$i","$set","_v","materialDecorator","itemDecorator","viewBox","uncheckedPath","checkedPath","indeterminatePath","staticClass","titleLocation","locDisplayLabel","_e","_withStripped","onLabelClick","locLabelFalse","switch","onSwitchClick","locLabelTrue","role","_l","caption","hasErrors","describeBy","_q","decorator","iconSize","showCaption","hasColumns","columns","colIndex","getColumnClass","selectAllItem","itemControl","hideLabel","controlLabel","otherItem","isReadOnlyRenderDiv","maxlength","getMaxLength","cols","_s","isActive","tooltip","action","hasItems","ref","wrappedItems","needSeparator","tag","showIcon","tabindex","contentId","_k","mousedown","selectItem","getDetailPanelButtonCss","getIsDetailPanelShowing","detailPanelId","showHideDetailPanelClick","getDetailPanelIconCss","buttonRemove","removeRowUI","locRemoveRowText","iconRemove","styleClass","clickOutside","showPointer","pointerTarget","contentComponentName","_b","contentComponentData","cancelButtonText","applyButtonText","isPage","customHtml","hasDefaultRender","itemIcon","itemIconHoverMod","xmlns","otherText","displayValue","selectWrapper","autocomplete","autoComplete","$$selectedVal","_value","multiple","hasTitleOnLeftTop","hasErrorsOnTop","hasComment","formGroup","commentText","commentClass","hasErrorsOnBottom","hasDescriptionUnderInput","descriptionUnderInput","locDescription","hasTitleOnBottom","hasInput","focus","hasTitle","ariaTitleId","getTitleComponentName","hasDescriptionUnderTitle","description","hasVisibleErrors","fileInput","inputTitle","accept","acceptedTypes","staticStyle","fileDecorator","dragover","wrapper","chooseFile","controlDisabled","for","chooseButtonCaption","noFileChosen","noFileChosenCaption","removeButton","cleanButtonCaption","previewValue","preview","fileSign","imageWidth","canPreviewImage","imageHeight","alt","removeFileCaption","removeFileSvg","fileSignBottom","removeButtonBottom","iconCss","innerPaddingLeft","rootNode","elNode","elementId","flexBasis","flexGrow","flexShrink","hasLogo","isLogoBefore","logoClassNames","logoImage","objectFit","logoFit","locLogo","logoWidth","logoHeight","headerText","titleMaxWidth","isLogoAfter","locHtml","contentMode","imageFit","imageLink","multiSelect","showLabel","itemText","tableWrapper","showHeader","allowRowsDragAndDrop","hasRows","visibleColumns","columnIndex","headerCell","visibleRows","rowIndex","rowClasses","hasCellText","getCellDisplayLocText","itemValue","colspan","colSpans","isActionsCell","hasPanel","isChoice","isCheckbox","horizontalScroll","showAddRowOnTop","locAddRowText","iconAdd","showTable","emptyRowsSection","emptyRowsText","locEmptyRowsText","emptyRowsButton","showAddRowOnBottom","table","headerRow","cells","cellIndex","showFooter","footerRow","getRows","rowindex","itemTitle","isRequireTextBeforeTitle","isRequireTextOnStart","isRequireTextAfterTitle","cssNavigationPrev","pagePrevText","cssNavigationNext","pageNextText","isPreviewButtonVisible","cssNavigationPreview","previewText","isCompleteButtonVisible","cssNavigationComplete","completeText","getOthersMaxLength","otherPlaceHolder","showDescription","requiredTextCss","no","number","hasEditButton","cssNavigationEdit","editText","renderedPanels","getPanelWrapperCss","separator","isProgressBottomShowing","canAddPanel","panelAddText","cssClass","progressContainer","panelPrevText","isRangeShowing","progress","progressBar","panelNextText","progressText","canRemovePanel","getPanelRemoveButtonCss","panelRemoveText","progressTextInBar","progressTextUnderBar","progressButtonsContainerCenter","progressButtonsContainer","progressButtonsListContainer","progressButtonsList","visiblePages","progressButtonsPageTitle","locNavigationTitle","progressButtonsPageDescription","locNavigationDescription","canShowClearButton","clearButton","clearButtonCaption","keydown","handleKeydown","outline","itemGhostNode","itemContent","itemIconContainer","itemIconFocusMod","itemIndex","rankingChoices","getNumberByIndex","visibleRateValues","setValueFromClick","minText","locMinRateDescription","maxText","locMaxRateDescription","elements","ariaRole","_m","controls","contenteditable","onsubmit","isNavigationButtonsShowingOnTop","cssNavigationStart","startSurveyText","startedPage","isNavigationButtonsShowingOnBottom","isShowProgressBarOnTop","progressBarType","isTimerPanelShowingOnTop","navId","pageId","isTimerPanelShowingOnBottom","isShowProgressBarOnBottom","completedStateText","saveAgainButton","getLocString","processedCompletedBeforeHtml","processedLoadingHtml","bodyEmpty","emptySurveyText","inputStyle","renderedStep","inputSize","dataListId","dataList","cursor","windowSurvey","expandedCss","isExpandedSurvey","float","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","_injectStyles","originalRender","h","existing","beforeCreate","Emit","__spreadArrays","il","jl","hyphenateRE","hyphenate","_target","original","emitName","$emit","isPromise","Inject","vue_class_component__WEBPACK_IMPORTED_MODULE_0__","componentOptions","inject","InjectReactive","_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__","fromKey_1","defaultVal_1","Model","_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__","ModelSync","propName","Prop","PropSync","Provide","provide","managed","ProvideReactive","managedReactive","Ref","refKey","cache","VModel","valueKey","Watch","_a","deep","immediate","handler","watch","applyMetadata","reflectMetadataIsSupported","getMetadata","needToProduceProvide","produceProvide","rv","reactiveInjectKey","_loop_1","this_1","inheritInjected","_decorators_Emit__WEBPACK_IMPORTED_MODULE_2__","_decorators_Inject__WEBPACK_IMPORTED_MODULE_3__","_decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__","_decorators_Model__WEBPACK_IMPORTED_MODULE_5__","_decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__","_decorators_Prop__WEBPACK_IMPORTED_MODULE_7__","_decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__","_decorators_Provide__WEBPACK_IMPORTED_MODULE_9__","_decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__","_decorators_Ref__WEBPACK_IMPORTED_MODULE_11__","_decorators_VModel__WEBPACK_IMPORTED_MODULE_12__","_decorators_Watch__WEBPACK_IMPORTED_MODULE_13__","ActionBarItem","AdaptiveActionBarItemWrapper","AdaptiveElement","ActionBar","_base__WEBPACK_IMPORTED_MODULE_0__","_jsonobject__WEBPACK_IMPORTED_MODULE_1__","_list__WEBPACK_IMPORTED_MODULE_2__","_popup__WEBPACK_IMPORTED_MODULE_3__","_utils_utils__WEBPACK_IMPORTED_MODULE_4__","owner","visibleIndex","showTitles","template","invisibleItemsListModel","invisibleItemSelected","dotsItemPopupModel","toggleVisibility","canGrow","dotsItem","showFirstN","visibleItemsCount","leftItemsToShow","invisibleItems","shrink","grow","onSet","wrapItems","sortItems","firstItem","secondItem","Bindings","Base","ArrayChanges","SurveyError","SurveyElement","Event","EventBase","_localizablestring__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_1__","_jsonobject__WEBPACK_IMPORTED_MODULE_2__","_settings__WEBPACK_IMPORTED_MODULE_3__","_rendererFactory__WEBPACK_IMPORTED_MODULE_4__","__spreadArray","getNames","fillProperties","getProperties","setBinding","propertyName","clearBinding","getValueNameByPropertyName","getPropertiesByValueName","getJson","setJson","objProperties","getPropertiesByObj","isBindable","propertyHash","eventList","isLoadingFromJsonValue","loadingOwner","addEvent","onItemValuePropertyChanged","isCreating","bindingsValue","createProperties","onBaseCreating","isSurveyElement","commentPrefix","isValueEmpty","trimString","trimValue","IsPropertyEmpty","dispose","isDisposedValue","getSurvey","isLive","checkBindings","updateBindings","bindings","updateBindingValue","getIsLoadingFromJson","isLoadingFromJson","startLoadingFromJson","endLoadingFromJson","toJSON","toJsonObject","fromJSON","toObject","clonedObj","createClass","getProgressInfo","createProgressInfo","localeChanged","locStrsChanged","arraysInfo","isItemValues","getPropertyValue","itemValueLocStrChanged","localizableStrings","getLocalizableString","strChanged","getPropertyValueCore","isCustom","onGetValue","propertiesHash","getPropertyValueCoreHandler","geValueFromHash","setPropertyValueCore","setPropertyValueCoreHandler","iteratePropertiesHash","setPropertyValue","isTwoValueEquals","arrayInfo","setArray","onPush","propertyValueChanged","clearPropertyValue","onPropertyValueChangedCallback","arrayChanges","itemValuePropertyChanged","fire","ownerPropertyName","onPropertyValueChanged","doPropertyValueChangedCallback","onPropChangeFunctions","isInternal","notifier","registerFunctionOnPropertiesValueChanged","names","unRegisterFunctionOnPropertiesValueChanged","createCustomLocalizableObj","locStr","getLocale","createLocalizableString","useMarkDown","onStrChanged","getLocalizableStringText","defaultStr","setLocalizableStringText","addUsedLocales","locales","AddLocStringToUsedLocales","searchText","founded","strs","getSearchableLocalizedStrings","setFindText","keys_1","getSearchableLocKeys","getSearchableItemValueKeys","locs","getLocales","createItemValues","createNewArray","locOwner","notifyArrayChanged","ar","onArrayChanged","createNewArrayCore","createArrayCoreHandler","ensureArray","onRemove","newArray","pop","deleteCount","getItemValueType","dest","deletedItems","createItemValue","caseInSensitive","getValueInLowCase","copyObject","copyCssClasses","itemsToAdd","errorOwner","locTextValue","getText","getDefaultText","getErrorCustomText","getErrorType","titleActions","selectedElementInDesignValue","disableDesignActions","CreateDisabledDesignElements","isContentElement","onReadOnlyChanged","updateVisibleErrors","questionCount","answeredQuestionCount","requiredQuestionCount","requiredAnsweredQuestionCount","getProgressInfoByElements","childInfo","ScrollElementToTop","getElementById","scrollIntoView","elemTop","GetFirstNonTextElement","removeSpaces","tEl","FocusElement","notifyStateChanged","elementContentVisibilityChanged","isDesignMode","expandAction","defineProperties","getRenderer","setSurveyImpl","surveyImplValue","surveyDataValue","getSurveyData","setSurveyCore","textProcessorValue","getTextProcessor","onSetData","live","surveyValue","surveyChangedCallback","areInvisibleElementsShowing","updateElementCss","reNew","getValidName","onNameChanged","updateContainsErrors","getContainsErrors","getElementsInDesign","includeHidden","updateCustomWidgets","onSurveyLoad","onFirstRendering","setVisibleIndex","delete","removeSelfFromList","getProcessedHtml","textProcessor","processText","getPage","moveToBase","removeElement","isNumber","addElement","setPage","oldPage","callbacks","hasFunc","fireCallbackChanged","onCallbacksChanged","CalculatedValue","_helpers__WEBPACK_IMPORTED_MODULE_0__","_base__WEBPACK_IMPORTED_MODULE_1__","_conditions__WEBPACK_IMPORTED_MODULE_2__","_jsonobject__WEBPACK_IMPORTED_MODULE_3__","expressionIsRunning","isCalculated","setOwner","rerunExpression","locCalculation","unlocCalculation","resetCalculation","doCalculation","calculatedValues","runExpressionCore","runExpression","getVariable","setVariable","canRunExpression","getFilteredValues","getFilteredProperties","ensureExpression","runDependentExpressions","expressionRunner","variables","getVariables","calcItem","onRunComplete","isUnique","ChoicesRestful","ChoicesRestfull","_itemvalue__WEBPACK_IMPORTED_MODULE_1__","_error__WEBPACK_IMPORTED_MODULE_3__","_settings__WEBPACK_IMPORTED_MODULE_4__","XmlParser","parser","assignValue","xml2Json","xmlNode","childNode","childObject","parseXmlString","xmlString","xmlRoot","lastObjHash","isRunningValue","processedUrl","processedPath","isUsingCacheFromUrl","webserviceEncodeParameters","clearCache","itemsResult","sendingSameRequests","addSameRequest","isUsingCache","objHash","unregisterSameRequests","getResultCallback","getCachedItemsResult","processedText","doEmptyResultCallback","useChangedItemsResults","sendRequest","useCachingForChoicesRestful","getIsRunning","serverResult","updateResultCallback","urlText","cacheText","noCacheText","pUrl","processTextEx","pPath","hasAllValuesOnLastRun","onProcessedUrlCallback","parseResponse","parsedResponse","xhr","XMLHttpRequest","setRequestHeader","loadingObjHash","status","onLoad","statusText","responseText","onBeforeSendRequest","beforeSendRequest","send","titleName","imageLinkName","getCustomPropertiesNames","getCustomProperties","getCustomPropertyName","itemValueType","allowEmptyResponse","attachOriginalItems","beforeSendRequestCallback","updatedResult","getResultAfterPath","getItemValueCallback","setTitle","setCustomProperties","originalItem","getImageLink","callResultCallback","getValueCore","getPropertyBinding","pathes","getPathes","EncodeParameters","ProcessValue","getFirstName","getFirstPropertyName","ch","hasValue","nonNestedObj","getNonNestedObject","getValueInfo","valueInfo","getValueFromPath","ind_name","curValue","lastIndexOf","getObjectValue","createPath","curName","objInArray","getObjInArray","getIntValue","createProp","nameInLow","A","first","keyName","ind","ExpressionRunnerBase","ConditionRunner","ExpressionRunner","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__","_conditionsParser__WEBPACK_IMPORTED_MODULE_1__","processValue","isAsyncValue","hasFunctionValue","expressionValue","operand","parseExpression","canRun","hasFunction","hasAsyncFunction","setVariables","runCore","isAsync","runValues","asyncFuncList","addToAsyncList","onAsyncReady","doAsyncFunctionReady","evaluateAsync","isReady","evaluate","doOnComplete","ConditionsParserError","ConditionsParser","_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__","at","code","patchExpression","createCondition","parserCache","conditionError","defaultBootstrapCss","_cssstandard__WEBPACK_IMPORTED_MODULE_0__","logo","navigationButton","navigation","complete","prev","next","edit","progressButtonsListElementPassed","progressButtonsListElementCurrent","progressButtonsListElementNonClickable","pageTitle","pageDescription","mainRoot","flowRoot","headerLeft","contentLeft","titleLeftRoot","required","titleRequired","hasError","indent","itemIndeterminate","disabledLabel","itemSelectAll","itemNone","itemInline","labelChecked","ranking","rootMobileMod","rootDragMod","itemGhostMod","itemDragMod","dropdown","cellText","cellTextSelected","cellLabel","matrixdropdown","detailRow","detailRowText","detailCell","detailButton","detailButtonExpanded","detailIcon","detailIconExpanded","detailPanelCell","actionsCell","matrixdynamic","paneldynamic","buttonRemoveRight","panelWrapper","panelWrapperInRow","multipletext","buttongroup","itemCaption","itemSelected","imagepicker","rating","signaturepad","saving","success","defaultBootstrapMaterialCss","modernCss","asCell","headerTop","headerBottom","titleOnAnswer","small","rowError","cellTextDisabled","choiceCell","surveyCss","defaultStandardCss","dxSurveyService","_settings__WEBPACK_IMPORTED_MODULE_0__","surveyServiceUrl","loadSurvey","surveyId","serviceUrl","getSurveyJsonAndIsCompleted","clientId","surveyJson","isCompleted","sendResult","postId","onSendResult","isPartialCompleted","surveyResult","dataStringify","sendFile","onSendFile","formData","FormData","getResult","resultId","onGetResult","QuestionResult","onIsCompleted","Version","_settings__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_2__","_validator__WEBPACK_IMPORTED_MODULE_3__","_itemvalue__WEBPACK_IMPORTED_MODULE_4__","_base__WEBPACK_IMPORTED_MODULE_5__","_calculatedValue__WEBPACK_IMPORTED_MODULE_6__","_error__WEBPACK_IMPORTED_MODULE_7__","_localizablestring__WEBPACK_IMPORTED_MODULE_8__","_expressionItems__WEBPACK_IMPORTED_MODULE_9__","_choicesRestful__WEBPACK_IMPORTED_MODULE_10__","_functionsfactory__WEBPACK_IMPORTED_MODULE_11__","_conditions__WEBPACK_IMPORTED_MODULE_12__","_expressions_expressions__WEBPACK_IMPORTED_MODULE_13__","_conditionsParser__WEBPACK_IMPORTED_MODULE_14__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_15__","_jsonobject__WEBPACK_IMPORTED_MODULE_16__","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__","_question_matrixdropdown__WEBPACK_IMPORTED_MODULE_18__","_question_matrixdynamic__WEBPACK_IMPORTED_MODULE_19__","_question_matrix__WEBPACK_IMPORTED_MODULE_20__","_question_multipletext__WEBPACK_IMPORTED_MODULE_21__","_panel__WEBPACK_IMPORTED_MODULE_22__","_flowpanel__WEBPACK_IMPORTED_MODULE_23__","_page__WEBPACK_IMPORTED_MODULE_24__","_question__WEBPACK_IMPORTED_MODULE_26__","_questionnonvalue__WEBPACK_IMPORTED_MODULE_27__","_question_empty__WEBPACK_IMPORTED_MODULE_28__","_question_baseselect__WEBPACK_IMPORTED_MODULE_29__","_question_checkbox__WEBPACK_IMPORTED_MODULE_30__","_question_ranking__WEBPACK_IMPORTED_MODULE_31__","_question_comment__WEBPACK_IMPORTED_MODULE_32__","_question_dropdown__WEBPACK_IMPORTED_MODULE_33__","_questionfactory__WEBPACK_IMPORTED_MODULE_34__","_question_file__WEBPACK_IMPORTED_MODULE_35__","_question_html__WEBPACK_IMPORTED_MODULE_36__","_question_radiogroup__WEBPACK_IMPORTED_MODULE_37__","_question_rating__WEBPACK_IMPORTED_MODULE_38__","_question_expression__WEBPACK_IMPORTED_MODULE_39__","_question_text__WEBPACK_IMPORTED_MODULE_40__","_question_boolean__WEBPACK_IMPORTED_MODULE_41__","_question_imagepicker__WEBPACK_IMPORTED_MODULE_42__","_question_image__WEBPACK_IMPORTED_MODULE_43__","_question_signaturepad__WEBPACK_IMPORTED_MODULE_44__","_question_paneldynamic__WEBPACK_IMPORTED_MODULE_45__","_surveytimer__WEBPACK_IMPORTED_MODULE_46__","_surveyProgressButtons__WEBPACK_IMPORTED_MODULE_47__","_survey__WEBPACK_IMPORTED_MODULE_48__","_trigger__WEBPACK_IMPORTED_MODULE_49__","_surveyWindow__WEBPACK_IMPORTED_MODULE_50__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_51__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_52__","_localization_english__WEBPACK_IMPORTED_MODULE_53__","_surveyStrings__WEBPACK_IMPORTED_MODULE_54__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_55__","_question_custom__WEBPACK_IMPORTED_MODULE_56__","_stylesmanager__WEBPACK_IMPORTED_MODULE_57__","_action_bar__WEBPACK_IMPORTED_MODULE_58__","_list__WEBPACK_IMPORTED_MODULE_59__","_popup__WEBPACK_IMPORTED_MODULE_60__","_question_buttongroup__WEBPACK_IMPORTED_MODULE_61__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_62__","_utils_utils__WEBPACK_IMPORTED_MODULE_63__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_64__","_chunks_model__WEBPACK_IMPORTED_MODULE_0__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__","_defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__","_defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__","_defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__","_rendererFactory__WEBPACK_IMPORTED_MODULE_6__","_utils_responsivitymanager__WEBPACK_IMPORTED_MODULE_7__","_utils_utils__WEBPACK_IMPORTED_MODULE_8__","_vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__","_vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__","_vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__","_vue_string_vue__WEBPACK_IMPORTED_MODULE_3__","_vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__","_vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__","_vue_element_vue__WEBPACK_IMPORTED_MODULE_6__","_vue_window_vue__WEBPACK_IMPORTED_MODULE_7__","_vue_page_vue__WEBPACK_IMPORTED_MODULE_8__","_vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__","_vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__","_vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__","_vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__","_vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__","_vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__","_vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__","_vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__","_vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__","_vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__","_vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__","_vue_text_vue__WEBPACK_IMPORTED_MODULE_20__","_vue_boolean__WEBPACK_IMPORTED_MODULE_21__","_vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__","_vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__","_vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__","_vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__","_vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__","_vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__","_vue_file_vue__WEBPACK_IMPORTED_MODULE_28__","_vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__","_vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__","_vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__","_vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__","_vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__","_vue_html_vue__WEBPACK_IMPORTED_MODULE_34__","_vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__","_vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__","_vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__","_vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__","_vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__","_vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__","_vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__","_vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__","_vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__","_vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__","_vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__","_vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__","_vue_row_vue__WEBPACK_IMPORTED_MODULE_47__","_vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__","_vue_image_vue__WEBPACK_IMPORTED_MODULE_49__","_vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__","_vue_header_vue__WEBPACK_IMPORTED_MODULE_51__","_vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__","_vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__","_vue_drag_drop_td_vue__WEBPACK_IMPORTED_MODULE_54__","_vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_55__","_vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_56__","_vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_57__","_vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_58__","_vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_59__","_vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_60__","_vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_61__","_vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_62__","_vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_63__","_core__WEBPACK_IMPORTED_MODULE_0__","_vue_ui__WEBPACK_IMPORTED_MODULE_1__","AnswerRequiredError","OneAnswerRequiredError","RequreNumericError","ExceedSizeError","WebRequestError","WebRequestEmptyError","OtherEmptyError","UploadingFileError","RequiredInAllRowsError","MinRowCountError","KeyDuplicationError","CustomError","_surveyStrings__WEBPACK_IMPORTED_MODULE_0__","getString","maxSize","getTextSize","fixed","minRowCount","ExpressionItem","HtmlConditionItem","UrlConditionItem","_jsonobject__WEBPACK_IMPORTED_MODULE_0__","runCondition","getMarkdownHtml","getProcessedText","serializationProperty","SyntaxError","_expressions__WEBPACK_IMPORTED_MODULE_0__","expected","found","captureStackTrace","buildMessage","hex","literalEscape","classEscape","describeExpectation","expectation","escapedParts","part","inverted","describeExpected","expected1","descriptions","describeFound","found1","peg$parse","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parseExpression","peg$startRuleFunction","peg$c0","head","tail","buildBinaryOperand","peg$c1","peg$c2","peg$literalExpectation","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","expr","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","op","peg$c92","peg$c93","peg$c94","peg$c95","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$c112","peg$c113","peg$c114","peg$c115","peg$c116","peg$c117","peg$c118","peg$c119","peg$c120","peg$c121","peg$c122","peg$c123","peg$c124","sequence","peg$c125","peg$c126","peg$c127","flatten","flattenArray","peg$c128","peg$c129","peg$c130","peg$c131","peg$c132","peg$c133","peg$c134","peg$c135","peg$c136","peg$c137","peg$c138","peg$classExpectation","peg$c139","sign","peg$c140","peg$c141","peg$c142","peg$c143","peg$c144","peg$c145","peg$c146","peg$c147","chars","peg$c148","peg$c149","peg$c150","peg$c151","peg$c152","peg$c153","peg$c154","peg$c155","peg$c156","peg$c157","peg$c158","peg$c159","peg$c160","peg$c161","peg$c162","peg$c163","peg$c164","peg$c165","peg$otherExpectation","peg$c166","peg$c167","peg$currPos","peg$savedPos","peg$posDetailsCache","line","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$resultsCache","startRule","text1","ignoreCase","peg$endExpectation","peg$computePosDetails","pos","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","location1","s0","s4","s5","s6","s7","s8","cached","nextPos","peg$parse_","peg$parseLogicOr","peg$parseOrSign","peg$parseLogicAnd","peg$parseAndSign","peg$parseCompOps","peg$parseComparableOperators","peg$parsePlusMinusOps","peg$parsePlusMinusSigns","peg$parseMulDivOps","peg$parseMulDivSigns","peg$parseBinaryFuncOp","peg$parsePowerSigns","peg$parseFactor","peg$parseBinFunctions","peg$parseFunctionOp","peg$parseUnaryFunctionOp","peg$parseAtom","peg$parseArrayOp","peg$parseLettersAndDigits","peg$parseSequence","peg$parseUnFunctions","peg$parseConstValue","peg$parseValueInput","peg$parseLogicValue","peg$parseArithmeticValue","peg$parseAnyInput","peg$parseDigits","peg$parseNumber","peg$parseNonZeroDigits","peg$parseValueCharacters","peg$parseAnyCharacters","peg$parseLetters","isArithmeticOp","reduce","Operand","BinaryOperand","UnaryOperand","ArrayOperand","Const","Variable","FunctionOperand","OperandMaker","_functionsfactory__WEBPACK_IMPORTED_MODULE_1__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__","operatorName","isArithmeticValue","consumer","binaryFunctions","throwInvalidOperatorError","isConjunction","evaluateParam","safeToString","operatorToString","unaryFunctions","getCorrectValue","isBooleanValue","isQuote","isNumeric","variableName","useValueAsItIs","DisableConversionChar","originalValue","parameters","isReadyValue","asyncProcessValue","createCopy","returnResult","asynResult","evaluateCore","isAsyncFunction","toOperandString","isSpaceString","opStr","signs","notempty","negate","arithmeticOp","and","or","plus","minus","mul","div","mod","power","greater","less","greaterorequal","equal","lessorequal","notequal","containsCore","notcontains","anyof","allof","isContains","rightArray","rIndex","FlowPanelModel","_panel__WEBPACK_IMPORTED_MODULE_1__","onContentChanged","getChildrenLayoutType","contentChangedCallback","regEx","exec","getQuestionFromText","getHtmlForQuestion","RegExp","contentElementNamePrefix","getQuestionHtmlId","onAddElement","addElementToContent","onRemoveElement","searchStr","getElementContentText","dragDropMoveElement","targetIndex","insertTextAtCursor","prevName","sel","getRangeAt","rangeCount","deleteContents","insertNode","createTextNode","getContent","FunctionFactory","registerFunction","functionHash","isAsyncHash","register","unregister","getAll","classRunner","getParamsAsArray","min_max","isMin","avg","getInArrayParams","calcInArray","v","sumInArray","minInArray","maxInArray","countInArray","avgInArray","iif","getDate","age","birthDate","today","getFullYear","getMonth","isContainerReady","getPageByName","getPanelByName","questions","isDisplayMode","currentDate","setDate","diffDays","date1","date2","diffTime","Helpers","isArrayContainsEqual","isArraysEqual","ignoreOrder","xSorted","ySorted","isConvertibleToNumber","toLocaleLowerCase","isDiposed","randomizeArray","temp","getUnbindValue","isFinite","maxLength","surveyLength","startIndexStr","postfix","strIndex","hasDigit","isCharDigit","checkLetter","isCharNotLetterAndDigit","newPostfix","_conditions__WEBPACK_IMPORTED_MODULE_3__","_settings__WEBPACK_IMPORTED_MODULE_5__","typeName","isVisibleValue","onGetTextCallback","txt","onCreating","itemValueSeparator","createArray","setupArray","getTextOrHtmlByValue","textOrHtml","runConditionsForItems","filteredItems","runner","useItemExpression","runConditionsForItemsCore","runEnabledConditionsForItems","onItemCallBack","choiceValue","hasChanded","itemRunner","getConditionRunner","setIsVisible","setIsEnabled","locale","setLocText","pureText","calculatedText","newText","jsoObj","valueToJson","hasText","onChanged","funcName","getVisibleConditionRunner","getEnableConditionRunner","visibleConditionRunner","enableIf","enableConditionRunner","getItemValuesDefaultValue","showMode","propertyArray","JsonObjectProperty","CustomPropertiesCollection","JsonMetadataClass","JsonMetadata","JsonError","JsonUnknownPropertyError","JsonMissingTypeErrorBase","JsonMissingTypeError","JsonIncorrectTypeError","JsonRequiredPropertyError","Serializer","ensureLocString","localizable","defaultSource","classInfo","typeValue","choicesValue","baseValue","isRequiredValue","isUniqueValue","readOnlyValue","visibleValue","isLocalizableValue","choicesfunc","dependedProperties","isSerializable","isLightSerializable","isDynamicChoices","alternativeName","classNamePart","baseClassName","defaultValueValue","displayName","nextToProperty","layout","onSetValue","classInfoValue","Index","isDescendantOf","isDefaultValue","isLocalizable","jsonConv","getObjType","objType","getClassName","getChoices","choicesCallback","setChoices","valueFunc","getBaseValue","setBaseValue","isLayout","dataListValue","mergeWith","valuesNames","mergableValues","mergeValue","addDependedProperty","getDependedProperties","schemaType","parentClassName","parentClasses","createPropertiesCore","createPropertiesInObj","parentClass","createPropertyInObj","locDesc","isArrayProp","creator","parentName","createProperty","propInfo","propertyType","typeIndex","typeSymbol","getIsPropertyNameRequired","getPropertyName","maxValue","minValue","onPropertyEditorUpdate","choicesFunc","addDependsOnProperties","addDependsOnProperty","requiredSymbol","alternativeNames","childrenClasses","classProperties","classHashProperties","getObjPropertyValue","isObjWrapper","orignalObj","getOriginalObj","getObjPropertyValueCore","setObjPropertyValue","metaDataClass","removeClass","metaClass","findClass","overrideClassCreatore","overrideClassCreator","fillPropertiesForClass","getHashProperties","hashProperties","dynamicProps","getDynamicType","dProp","getDynamicPropertiesByObj","dynamicType","dType","hasOriginalProperty","getOriginalProperty","findProperties","propertyNames","getAllPropertiesByName","getAllClasses","createCustomType","customTypeName","customTemplateName","getChildrenClasses","canBeCreated","fillChildrenClasses","getRequiredProperties","propertiesInfos","addCustomPropertyCore","propertyInfo","addPropertyToClass","emptyClassPropertiesHash","removePropertyFromClass","childClasses","newName","ancestorClassName","class_","addAlterNativeClassName","generateSchema","$schema","definitions","generateSchemaProperties","schemaProperties","schemaDef","generateSchemaProperty","hasChoices","enum","$ref","generateChemaClass","usedClasses","hasParent","$id","allOff","addPropertyCore","getFullDescription","types","lightSerializing","metaDataValue","storeDefaults","toJsonObjectCore","jsonObj","toObjectCore","getRequiredError","addNewError","needAddErrors","addDynamicProperties","typePropertyName","positionPropertyName","valueToObj","propertiesToJson","getDynamicProperties","getDynamicPropertyName","dynamicPropName","dynamicProperties","isValueArray","arrValue","removePos","hasToUseSetValue","valueToArray","newObj","createNewObj","removePosFromObj","checkNewObjectOnErrors","jsonValue","requiredProperties","valueRes","addValuesIntoArray","ListModel","onItemSelect","allowSelection","selectedItem","isItemDisabled","isItemSelected","LocalizableStrings","_surveyStrings__WEBPACK_IMPORTED_MODULE_1__","_settings__WEBPACK_IMPORTED_MODULE_2__","useMarkdown","htmlValues","defaultLocaleName","searchableText","calculatedTextValue","calText","setLocaleText","defaultLocale","hasHtmlValue","getHtmlValue","getValuesKeys","getLocaleText","curLoc","hasOnStrChanged","deleteValuesEqualsToDefault","deleteValue","hasNonDefaultText","sharedData","serializeLocalizableStringAsObject","searchIndex","onSearchChanged","SerializeAsObject","useDefault","defLoc","arabicSurveyStrings","otherItemText","noneItemText","selectAllItemText","panelDynamicProgressText","questionsProgressText","emptySurvey","completingSurvey","completingSurveyBefore","loadingSurvey","requiredError","requiredErrorInPanel","requiredInAllRowsError","numericError","textMinLength","textMaxLength","textMinMaxLength","minRowCountError","minSelectError","maxSelectError","numericMinMax","numericMin","numericMax","invalidEmail","invalidExpression","urlRequestError","urlGetChoicesError","exceedMaxSize","otherRequiredError","uploadingFile","loadingFile","confirmDelete","keyDuplicationError","addColumn","removeRow","removePanel","choices_Item","matrix_column","matrix_row","savingData","savingDataError","savingDataSuccess","timerMin","timerSec","timerSpentAll","timerSpentPage","timerSpentSurvey","timerLimitAll","timerLimitPage","timerLimitSurvey","cleanCaption","clearCaption","chooseFileCaption","booleanCheckedLabel","booleanUncheckedLabel","confirmRemoveFile","confirmRemoveAllFiles","questionTitlePatternText","localeNames","bulgarianStrings","catalanSurveyStrings","choices_firstItem","choices_secondItem","choices_thirdItem","croatianStrings","modalCancelButtonText","modalApplyButtonText","czechSurveyStrings","danishSurveyStrings","dutchSurveyStrings","englishStrings","minError","maxError","multipletext_itemname","estonianSurveyStrings","finnishSurveyStrings","frenchSurveyStrings","georgianSurveyStrings","otherRequiredEror","germanSurveyStrings","greekSurveyStrings","hebrewSurveyStrings","hindiStrings","noneItemTex","hungarianSurveyStrings","icelandicSurveyStrings","indonesianStrings","italianSurveyStrings","japaneseSurveyStrings","koreanStrings","latvianSurveyStrings","lithuaniaSurveyStrings","macedonianSurveyStrings","norwegianSurveyStrings","persianSurveyStrings","polishSurveyStrings","portugueseBrSurveyStrings","portugueseSurveyStrings","romanianSurveyStrings","russianSurveyStrings","serbianStrings","simplifiedChineseSurveyStrings","spanishSurveyStrings","swahiliStrings","swedishSurveyStrings","tajikSurveyStrings","thaiStrings","traditionalChineseSurveyStrings","turkishSurveyStrings","ukrainianSurveyStrings","welshSurveyStrings","QuestionMatrixBaseModel","_itemvalue__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_4__","sortablejs__WEBPACK_IMPORTED_MODULE_5__","generatedTotalRow","moveRowByIndex","fromIndex","toIndex","movableRow","filteredRows","filteredColumns","createColumnValues","afterRenderQuestionElement","initSortable","beforeDestroyQuestionElement","sortableInst","newRows","processRowsOnSet","filterItems","getVisibleRows","runItemsCondition","onRowsChanged","getDataFilteredValues","getDataFilteredProperties","onColumnsChanged","fireCallback","visibleRowsChangedCallback","shouldRunColumnExpression","hasRowsAsItems","oldVisibleRows","hasChanges","runConditionsForRows","hasColumnsChanged","runConditionsForColumns","isClearValueOnHidden","restoreNewVisibleRowsValues","clearGeneratedRows","showInvisibile","rowsVisibleIf","hasChanged","useColumnsExpression","columnsVisibleIf","newVal","isChanged","clearInvisibleValuesInRows","domNode","PageModel","_panel__WEBPACK_IMPORTED_MODULE_2__","hasShownValue","isRandomizing","timeSpent","pages","wasShown","isPageStarted","calcCssClasses","updatePageCssClasses","getIsPageVisible","exceptionQuestion","isStarted","onNumChanged","setWasShown","areQuestionsRandomized","randomizeElements","oldElements","newElements","questionsOrder","scrollToTop","scrollElementToTop","getPanels","visibleOnly","includingDesignTime","addPanelsIntoList","onVisibleChanged","pageVisibilityChanged","dragDropStart","nestedPanelDepth","dragDropInfo","dragDropMoveTo","isBottom","correctDragDropInfo","dragDropCanDropTagert","dragDropCanDropSource","dragDropAllowFromSurvey","dragDropFindRow","updateRowsRemoveElementFromRow","dragDropAddTarget","getUpdatedPageTitleActions","isLayoutTypeSupported","insertAfter","dragAndDropAllow","dragDropFinish","isCancel","dragDropGetElementIndex","isSamePanel","prevRow","prevElement","dragDropCanDropCore","dragDropCanDropNotNext","dragDropIsSameElement","pnl","containsElement","getElementByName","srcIndex","destIndex","el1","el2","ensureRowsVisibility","DragDropInfo","QuestionRowModel","PanelModelBase","PanelModel","_question__WEBPACK_IMPORTED_MODULE_3__","_conditions__WEBPACK_IMPORTED_MODULE_4__","_questionfactory__WEBPACK_IMPORTED_MODULE_5__","_error__WEBPACK_IMPORTED_MODULE_6__","_settings__WEBPACK_IMPORTED_MODULE_7__","_scrollableParent","_updateVisibility","getRowId","rowCounter","findScrollableContainer","isRowContainerDivVisible","stopLazyRendering","ensureVisibility","updateVisible","calcVisible","setWidth","q","visCount","visibleElements","preSetWidthElements","setElementMaxMinWidth","getElementWidth","getRenderedWidthFromWidth","rightIndent","getRenderedCalcWidth","calcWidthEl","isQuestionsReady","questionsValue","elementsValue","getPanelId","updateVisibleIndexes","panelCounter","markQuestionListDirty","showPageTitles","allowShowEmptyTitleInDesignMode","getUpdatedPanelTitleActions","allowShowEmptyDescriptionInDesignMode","questionTitlePattern","titlePattern","getSurveyMarkdownHtml","getRendererForString","depth","cssClassesValue","updatePanelCssClasses","getPanel","getLayoutType","layoutType","qs","getQuestionByValueName","getValueName","getComment","getDisplayValue","keysAsText","getComments","comments","clearErrors","focusOnFirstError","rec","focuseOnFirstError","firstErrorQuestion","hasErrorsCore","hasErrorsInPanels","hasRequiredError","customError","validatePanel","beforeSettingPanelErrors","visQuestions","addQuestionsToList","requiredErrorText","updateElementVisibility","getFirstQuestionToFocus","withError","currentErrorCount","focusFirstQuestion","focusFirstErrorQuestion","addElementsToList","addElementsToListCore","getQuestionTitleLocation","onGetQuestionTitleLocation","questionTitleLocation","getStartIndex","getQuestionStartIndex","questionStartIndex","childVisibilityChanged","newIsVisibleValue","oldIsVisibleValue","createRow","onElementVisibilityChanged","buildRows","surveyImpl","updateRowsOnElementAdded","panelAdded","questionAdded","addElementCallback","onElementStartWithNewLineChanged","updateRowsOnElementRemoved","panelRemoved","questionRemoved","removeElementCallback","updateRowsVisibility","canBuildRows","isNewRow","startWithNewLine","dragDropAddTargetToRow","findRowByElement","elIndex","elementWidthChanged","getRenderedTitle","isClearValueOnHiddenContainer","updateValueWithDefaults","resetVisibleIndexes","lastVisibleIndex","beforeSetVisibleIndex","panelStartIndex","getPanelStartIndex","panelIndex","isContinueNumbering","isParentReadOnly","isSurveyReadOnly","canAddElement","insertElementAfter","insertElementBefore","addQuestion","addNewQuestion","createQuestion","addNewPanel","createNewPanel","removeQuestion","runVisibleCondition","runEnableCondition","runRequiredCondition","conditionRunner","requiredIf","onAnyValueChanged","els","findElement","dragDropAddTargetToEmptyPanel","destRow","dragDropAddTargetToNewRow","dragDropAddTargetToExistingRow","dragDropAddTargetToEmptyPanelCore","prevRowIndex","srcRow","targetRow","onIndentChanged","notifySurveyOnVisibilityChanged","setNo","showNumber","showQuestionNumbers","panelVisibilityChanged","getIndentSize","innerIndent","clearOnDeletingContainer","cancelPreviewByPage","registerElement","PopupModel","PopupBaseViewModel","_surveyStrings__WEBPACK_IMPORTED_MODULE_2__","_utils_popup__WEBPACK_IMPORTED_MODULE_3__","verticalPosition","horizontalPosition","onShow","targetElement","popupDirection","background","calculatePopupDirection","calculatePosition","calculatePointerTarget","Question","_surveyStrings__WEBPACK_IMPORTED_MODULE_3__","_error__WEBPACK_IMPORTED_MODULE_4__","_validator__WEBPACK_IMPORTED_MODULE_5__","_localizablestring__WEBPACK_IMPORTED_MODULE_6__","_conditions__WEBPACK_IMPORTED_MODULE_7__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__","_settings__WEBPACK_IMPORTED_MODULE_9__","_rendererFactory__WEBPACK_IMPORTED_MODULE_10__","isCustomWidgetRequested","onReadyChanged","parentQuestionValue","isRunningValidatorsValue","isValueChangedInSurvey","allowNotifyValueChanged","getQuestionId","validator","locTitleValue","getUpdatedQuestionTitle","locProcessedTitle","locCommentText","updateQuestionCss","initCommentFromSurvey","questionCounter","readOnlyCommentRenderMode","onGetSurvey","oldValueName","onValueNameChanged","questionRenamed","initDataFromSurvey","choicesLoaded","notifySurveyVisibilityChanged","runConditions","areEmptyElementsHidden","questionCreated","onParentChanged","setParentQuestion","onParentQuestionChanged","getTitleLocation","isVisibilityChanged","questionVisibilityChanged","isFlowLayout","getTitleLocationCore","isAllowTitleLeft","getDescriptionLocation","descriptionLocation","questionDescriptionLocation","getAllErrors","getErrorByType","errorType","customWidgetValue","updateCustomWidget","getCustomWidget","hasSingleInput","afterRenderQuestionInput","afterRenderQuestion","afterRenderQuestionCallback","updateElementCssCore","updateCssClasses","updateQuestionCssClasses","ensureElementCss","setCssRoot","getCssRoot","hasTitleOnLeft","setCssHeader","getCssHeader","hasTitleOnTop","setCssContent","getCssContent","setCssTitle","getCssTitle","isAnswered","setCssError","getCssError","errorLocation","objCss","getCssType","getFirstErrorInputElementId","getFirstInputElementId","focusCallback","maxOthersLength","getProcessedTextValue","textValue","isExists","TextPreprocessorValuesMap","supportComment","supportOther","hasOtherChanged","isDesignModeV2","supportCreatorV2","runVisibleIfCondition","runEnableIfCondition","runRequiredIfCondition","conditionEnabelRunner","conditionRequiredRunner","calcNo","hideNumber","getUpdatedQuestionNo","surveyLoadCallback","onSurveyValueChanged","updateValueFromSurvey","requireUpdateCommentValue","updateCommentFromSurvey","commentChangedCallback","setNewValue","valueToDataCallback","unbindValue","isEditingSurveyElement","canClearValueAsInvisible","isParentVisible","hasVisibleQuestionByValueName","clearValueIfInvisible","getDisplayValueCore","keyAsText","isValueExpression","defaultValueExpression","convertDefaultValue","getPlainData","includeEmpty","includeQuestionTypes","questionPlainData","isNode","calculations","calculation","isComment","correctAnswer","getQuizQuestionCount","getCorrectAnswerCount","isAnswerCorrect","correctAnswerCount","quizQuestionCount","isDefaultValueEmpty","setDefaultValue","getQuestionFromArray","getDefaultValue","setValueAndRunExpression","setFunc","toISOString","getQuestionComment","setQuestionComment","questionComment","setNewComment","updateIsAnswered","getIsAnswered","getValidators","validators","getSupportedValidators","classValidators","supportedValidators","addSupportedValidators","addConditionObjectsByContext","objects","processedTitle","getConditionJson","operator","oldHasErrors","checkForErrors","isOnValueChanged","beforeSettingQuestionErrors","addError","newError","removeError","qErrors","collectErrors","onCheckForErrors","canRunValidators","runValidators","fireSurveyValidation","validateValueCallback","validateQuestion","getIsRunningValidators","validatorRunner","onAsyncCompleted","doOnAsyncCompleted","raiseOnCompletedAsyncValidators","onCompletedAsyncValidators","isRunningValidators","oldAnswered","setNewValueInData","onValueChanged","isTextValue","isUpdateValueTextOnTyping","getDataLocNotification","valueToData","setValueCore","setQuestionValue","canSetValueToSurvey","valueForSurvey","valueFromData","setComment","valueFromDataCallback","setQuestionVisibleIndexForHiddenTitle","setQuestionVisibleIndexForHiddenNumber","supportGoNextPageAutomatic","supportGoNextPageError","clearUnusedValues","useDisplayValuesInTitle","getRendererByQuestion","getUpdatedQuestionTitleActions","getValidatorTitle","getAllValues","require","numberingAllowedByParent","QuestionCustomWidget","widgetJson","isFirstRender","onLocaleChangedEvent","isLibraryLoaded","showInToolbox","getActivatedBy","widgetsValues","widgetsActivatedBy","onCustomWidgetAdded","widgets","widgetName","setActivatedBy","getCustomWidgetByName","QuestionSelectBase","QuestionCheckboxBase","_survey__WEBPACK_IMPORTED_MODULE_1__","_itemvalue__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_4__","_error__WEBPACK_IMPORTED_MODULE_5__","_choicesRestful__WEBPACK_IMPORTED_MODULE_6__","_helpers__WEBPACK_IMPORTED_MODULE_8__","otherItemValue","dependedQuestions","noneItemValue","isSettingDefaultValue","isSettingComment","isRunningChoices","isFirstLoadChoicesFromUrl","isUpdatingChoicesDependedQuestions","onVisibleChoicesChanged","updateVisibilityBasedOnChoices","setNewRestfulProperty","locOtherText","onLoadChoicesFromUrl","updateChoicesFromServer","choicesFromQuestion","removeFromDependedQuestion","getQuestionWithChoices","choicesOrder","updateVisibleChoices","choicesFromUrl","getHasOther","runItemsEnableCondition","hasUnknownValue","prevCommentValue","getIsMultipleValue","setConditionalChoicesRunner","filteredChoicesValue","activeChoices","setConditionalEnableChoicesRunner","conditionChoicesEnableIfRunner","onEnableItemCallBack","clearDisabledValues","onAfterRunItemsEnableCondition","choicesVisibleIf","conditionChoicesVisibleIfRunner","choicesEnableIf","getFilteredChoices","rendredValueToDataCore","createRestful","commentValue","getStoreOthersAsComment","isRenderedValueSetting","rendredValueToData","rendredValueFromData","isOtherSel","oldComment","isRunning","isWaitingForParameters","cachedValueForUrlRequests","choiceitem","renderedValueFromDataCore","includeOther","isFilteredChoices","hasNone","noneItem","isValueDisabled","addIntoDependedQuestion","calcValue","calcVisibleChoices","canUseFilteredChoices","sortVisibleChoices","addToVisibleChoices","isAddDefaultItems","isAddAll","newItemValue","supportNone","isItemInList","parentQuestion","dataValue","choiceDataItem","getChoicesDisplayValue","isOther","getChoicesFromQuestion","isSelected","choicesFromQuestionMode","isBuiltInChoice","itemsSelected","otherErrorText","runChoicesByUrl","storeOthersAsComment","newComment","getCommentFromValue","setOtherValueIntoValue","processor","isChoicesLoaded","disableOnGettingChoicesFromWeb","enableOnLoadingChoices","newChoices","checkCachedValuesOnExisting","cachedValues","createCachedValueForUrlRequests","updateCachedValueForUrlRequests","checkOnExisting","updatedValue","updateChoicesDependedQuestions","hideIfChoicesEmpty","filteredChoices","sortArray","mult","questionCountByValueName","clearIncorrectValuesCallback","clearIncorrectValuesCore","clearValueOnDisableItems","clearDisabledValuesCore","canClearValueAnUnknow","columnClass","getItemIndex","isNone","labelClass","controlLabelClass","controlLabelChecked","showItemsInOrder","prevIndex","leftElementsCount","oldIsReady","getItemValueWrapperComponentName","TemplateRendererComponentName","getItemValueWrapperComponentData","colCountChangedCallback","QuestionBooleanModel","_questionfactory__WEBPACK_IMPORTED_MODULE_0__","getValueTrue","setCheckedValue","getValueFalse","locLabel","valueTrue","valueFalse","registerQuestion","ButtonGroupItemValue","QuestionButtonGroupModel","ButtonGroupItemModel","_question_baseselect__WEBPACK_IMPORTED_MODULE_2__","QuestionCheckboxModel","_questionfactory__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_5__","invisibleOldValues","isChangingValueOnClearIncorrect","allItemCount","selectedCount","toggleSelectAll","shouldCheckMaxSelectedChoices","isSelectAll","prevNoneIndex","noneIndexInArray","newNoneIndex","getFirstUnknownIndex","noneValue","supportSelectAll","valStr","clearIncorrectAndDisabledValues","clearDisabled","restoredValues","restoreValuesFromInvisible","isUnkown","visItems","setDefaultValueWithOthers","hasActiveChoices","DefaultChoices","QuestionCommentModel","_question__WEBPACK_IMPORTED_MODULE_0__","_questionfactory__WEBPACK_IMPORTED_MODULE_2__","maxTextLength","textUpdateMode","ComponentQuestionJSON","ComponentCollection","QuestionCustomModelBase","QuestionCustomModel","QuestionCompositeModel","_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__","onInit","onLoaded","onAfterRender","onAfterRenderContentElement","elementsJSON","createElements","customQuestionValues","getCustomQuestionByName","customQuestion","onAddingJson","isComposite","questionJSON","createCompositeModel","createCustomModel","onCreateComposite","onCreateCustom","createWrapper","getElement","initElement","locNotification","convertDataName","convertDataValue","questionWrapper","qType","QuestionCompositeTextProcessor","composite","settingNewValue","textProcessing","ItemVariableName","createPanel","setAfterRenderCallbacks","setIsContentElement","oldComposite","prefixName","prefixText","QuestionDropdownModel","minMaxChoices","choicesMax","choicesMin","choicesStep","QuestionEmptyModel","QuestionExpressionModel","getCurrecyCodes","_questionfactory__WEBPACK_IMPORTED_MODULE_3__","getValueAsStr","displayStyle","toLocaleDateString","currency","useGrouping","maximumFractionDigits","minimumFractionDigits","toLocaleString","QuestionFileModel","isUploading","currentState","clearFiles","doneCallback","allFilesOk","stateChanged","loadFilesProc","storeDataAsText","uploadFiles","fileItem","allowImagesPreview","isFileImage","newValues","downloadFile","waitForUpload","errorLength","imagePrefix","subStr","QuestionHtmlModel","_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__","ignoreHtmlProgressing","processHtml","QuestionImageModel","ImageItemValue","QuestionImagePickerModel","convertValToArrayForMultSelect","MatrixRowModel","MatrixCells","QuestionMatrixModel","_martixBase__WEBPACK_IMPORTED_MODULE_2__","_questionfactory__WEBPACK_IMPORTED_MODULE_7__","_question_dropdown__WEBPACK_IMPORTED_MODULE_9__","_settings__WEBPACK_IMPORTED_MODULE_10__","onMatrixRowChanged","getCorrectedRowValue","rowClass","rowErrorClass","cellsOwner","setCellText","getCellRowColumnValue","createString","setDefaultCellText","matrixDefaultRowName","getCellLocText","getDefaultCellLocText","getCellText","getDefaultCellText","getCellDisplayText","getColumns","resRow","rowValues","col","isRowChanging","emptyLocalizableString","cellsValue","updateVisibilityBasedOnRows","rowsOrder","cellDisabledClass","cellSelectedClass","itemHoverClass","cellClass","createMatrixRow","sortVisibleRows","hasValuesInAllRows","hasErrorInRows","isAllRowRequired","onMatrixRowCreated","rowVal","newKey","rowName","rowDataItem","hideIfRowsEmpty","DefaultRows","DefaultColums","MatrixDropdownRowModel","QuestionMatrixDropdownModel","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__","_itemvalue__WEBPACK_IMPORTED_MODULE_2__","buildCells","resetRenderedTable","getFooterText","locTotalText","getRowTitleWidth","rowTitleWidth","rowValue","displayRowValue","getRowDisplayValue","hasContext","prefixTitle","fullTitle","generateRows","addDefaultColumns","MatrixDropdownColumn","MatrixDropdownCell","MatrixDropdownTotalCell","MatrixDropdownRowModelBase","MatrixDropdownTotalRowModel","QuestionMatrixDropdownRenderedCell","QuestionMatrixDropdownRenderedRow","QuestionMatrixDropdownRenderedTable","QuestionMatrixDropdownModelBase","_martixBase__WEBPACK_IMPORTED_MODULE_1__","_itemvalue__WEBPACK_IMPORTED_MODULE_5__","_surveyStrings__WEBPACK_IMPORTED_MODULE_6__","_question_expression__WEBPACK_IMPORTED_MODULE_9__","_functionsfactory__WEBPACK_IMPORTED_MODULE_10__","_settings__WEBPACK_IMPORTED_MODULE_11__","_error__WEBPACK_IMPORTED_MODULE_12__","_action_bar__WEBPACK_IMPORTED_MODULE_13__","onUpdateSelectBaseCellQuestion","onCellQuestionUpdate","locOptionsCaption","columnColCount","colOwnerValue","indexValue","_isVisible","_hasVisibleCell","doShowInMultipleColumnsChanged","updateTemplateQuestion","getColumnTypes","templateQuestion","getClassNameProperty","colOwner","calcCellQuestionType","setIndex","onColumnCellTypeChanged","templateQuestionValue","locRequiredErrorText","cellType","showInMultipleColumns","isSupportMultipleColumns","totalType","totalExpression","createCellQuestion","createNewQuestion","callOnCellQuestionUpdate","updateCellQuestion","onUpdateJson","setQuestionProperties","qDefinition","defaultCellTypeChanged","getCellType","matrixDefaultCellType","prevCellType","curCellType","removeProperties","onColumnPropertyChanged","onShowInMultipleColumnsChanged","validateCell","getTotalExpression","totalFormat","totalCurrency","totalDisplayStyle","totalMaximumFractionDigits","totalMinimumFractionDigits","funName","MatrixDropdownRowTextProcessor","getValues","onCustomProcessText","IndexVariableName","RowValueVariableName","detailPanelValue","isCreatingDetailPanel","subscribeToChanges","textPreProcessor","RowVariableName","showHideDetailPanel","getId","idCounter","getCellValue","hasDetailPanel","detailPanel","setIsDetailPanelShowing","isDetailPanelShowing","hideDetailPanel","showDetailPanel","ensureDetailPanel","destroyPanel","createRowDetailPanel","getRowValue","getRowIndex","allValues","OwnerVariableName","getDataValueCore","valuesHash","newColumnValue","changedName","changedValue","changedQuestion","changingValue","onRowChanging","isValidateOnValueChanging","hasQuestonError","onRowChanged","getCellByColumnName","checkIfValueInRowDuplicated","getQuestionByColumn","columnName","getQuestionByColumnName","detailQuestions","getQuestionsByName","getSharedQuestionByName","qVal","matrixTotalValuePostFix","updateCellQuestionOnColumnChanged","updateCellOnColumnChanged","onQuestionReadOnlyChanged","parentIsReadOnly","panelHasError","hideErroredPanel","isSingleDetailPanel","createCell","cellValue","commentKey","editingObj","editingObjValue","onEditingObjPropertyChanged","updateOnSetValue","onTotalValueChanged","prevValue","showErrorOnCore","getShowErrorLocation","isFirstChoice","hideCaption","choiceIndex","cssError","isShowInMultipleColumns","calculateFinalClassName","matrixCssClasses","questionCss","isDetailRow","hasActionCellInRowsValues","build","hasFooter","isColumnLayoutHorizontal","hasRemoveRowsValue","isRequireReset","hasRemoveRows","canRemoveRows","headerRowValue","footerRowValue","buildRowsActions","buildHeader","buildFooter","updateShowTableAndAddRow","getShowColumnsIfEmpty","showAddRow","canAddRow","getAddRowLocation","columnLayout","onAddedRow","getRenderedDataRowCount","rowsActions","buildRowActions","addHorizontalRow","onRemovedRow","getRenderedRowIndex","removeCount","onDetailPanelChangeVisibility","panelRowIndex","createDetailPanelRow","colHeaders","isShown","hasRowText","hasActionCellInRows","createHeaderCell","hasVisibleCell","createMutlipleColumnsHeader","createTextCell","visibleTotalRow","createMutlipleColumnsFooter","createEditCell","buildHorizontalRows","buildVerticalRows","getRowActions","canRemoveRow","renderedRows","useAsHeader","renderedRow","createHorizontalRow","getRowActionsCell","rowActions","actions","setDefaultRowActions","getUpdatedMatrixRowActions","addRowActionsCell","renderedCell","setHeaderCellWidth","createMutlipleEditCells","buttonCell","onCreateDetailPanelRenderedRowCallback","createMutlipleVerticalRows","createVerticalRow","createEndVerticalActionRow","getMultipleColumnChoices","lTitle","hCell","setRequriedToHeaderCell","rChoice","rChoiceIndex","visChoices","rCell","hasTotal","rRow","isFooter","setHeaderCell","getColumnWidth","createRemoveRowCell","isRemoveRow","lockResetRenderedTable","isDoingonAnyValueChanged","createNewDetailPanel","selectedElementInDesign","newColumns","updateColumnsIndexes","clearRowsAndResetRenderedTable","updateColumnsCellType","colNames","onStartRowAddingRemoving","onEndRowAdding","onEndRowRemoving","columnsChangedCallback","renderedTableValue","onRenderedTableResetCallback","createRenderedTable","onRenderedTableCreatedCallback","onCellCreatedCallback","matrixCellCreated","getRequiredText","updateHasFooter","getColumnByName","prevTotalValue","totalValue","runCellsCondition","runTotalsCondition","getRowConditionValues","checkColumnsVisibility","isColumnVisibilityChanged","curVis","hasVisCell","totalRow","getColumnName","columnMinWidth","updateValueOnRowsGeneration","createNewValue","rValue","getNewValueOnRowChanged","getVisibleTotalRow","generateTotalRow","visRows","getRowValueCore","checkedRow","addDuplicationError","setRowValue","nullOnEmpty","isMatrixValueEmpty","getRowObj","displayvalue","getCellQuestions","onBeforeValueChanged","onSetQuestionValue","checkForAnswersOrErrors","predicate","every","errosInRows","isDuplicated","isValueDuplicated","detailPanelMode","getUniqueColumns","isValueInColumnDuplicated","keyValues","isValueDuplicatedInRow","getFirstCellQuestion","createQuestionCore","deleteRowValue","isObject","getOnCellValueChangedOptions","getQuestion","colName","getCellQuestion","onCellValueChanged","onCellValueChangedCallback","matrixCellValueChanged","matrixCellValidate","oldRowValue","matrixCellValueChanging","newRowValue","isDeletingValue","rowObj","columnValue","combine","detailElements","onHasDetailPanelCallback","updateDetailPanelButtonCss","onCreateDetailPanelCallback","getQuestionByValueNameFromArray","isSett","getCellTemplateData","SurveyModel","getMatrixCellTemplateData","getCellWrapperComponentName","getElementWrapperComponentName","getCellWrapperComponentData","getElementWrapperComponentData","getColumnHeaderWrapperComponentName","getColumnHeaderWrapperComponentData","getRowHeaderWrapperComponentName","getRowHeaderWrapperComponentData","MatrixDynamicRowModel","QuestionMatrixDynamicModel","_helpers__WEBPACK_IMPORTED_MODULE_5__","_settings__WEBPACK_IMPORTED_MODULE_6__","_utils_utils__WEBPACK_IMPORTED_MODULE_7__","initialRowCount","setRowCountValueFromData","defaultAddRowText","defaultRowValue","rowCount","rowCountValue","matrixMaximumRowCount","newRow","getValueForNewRow","onGetValueForNewRowCallBack","maxRowCount","allowAddRows","allowRemoveRows","matrixAllowRemoveRow","matrixBeforeRowAdded","addRowCore","prevRowCount","getDefaultRowValue","matrixRowAdded","isRowAdded","defaultValueFromLastRow","isRequireConfirmOnRowDelete","confirmDeleteText","matrixRowRemoving","removeRowCore","matrixRowRemoved","addRowLocation","hideColumnsIfEmpty","addColumnIntoaddConditionObjectsByContext","matrixMaxRowCountInCondition","hasErrorInMinRows","setRowCount","getRowValueByIndex","newRowCount","MultipleTextItemModel","QuestionMultipleTextModel","_question_text__WEBPACK_IMPORTED_MODULE_2__","_questionfactory__WEBPACK_IMPORTED_MODULE_4__","createEditor","questionTitleTemplateCallback","getItemDefaultValue","locPlaceHolder","getMultipleTextValue","setMultipleTextValue","isMultipleItemValueChanging","updateItemsSize","addDefaultItems","DefaultMutlipleTextItems","addItem","editorsOnSurveyLoad","performForEveryEditor","updateInputSize","createTextItem","getItemByName","onItemValueChanged","itemName","getIsRequiredText","QuestionPanelDynamicItem","QuestionPanelDynamicTemplateSurveyImpl","QuestionPanelDynamicModel","_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__","_question__WEBPACK_IMPORTED_MODULE_4__","_jsonobject__WEBPACK_IMPORTED_MODULE_5__","_questionfactory__WEBPACK_IMPORTED_MODULE_6__","_settings__WEBPACK_IMPORTED_MODULE_8__","_utils_utils__WEBPACK_IMPORTED_MODULE_9__","QuestionPanelDynamicItemTextProcessor","panelItem","getSharedQuestionFromArray","ParentItemVariableName","returnDisplayValue","panelValue","setPanelItemData","getPanelItemData","surveyValues","getRootData","loadingPanelCount","currentIndexValue","isAddingNewPanels","templateValue","createAndSetupNewPanelObject","addOnPropertyChangedCallback","rebuildPanels","setPanelsState","setTemplatePanelSurveyImpl","setPanelsSurveyImpl","assignOnPropertyChangedToTemplate","onTemplateElementPropertyChanged","currentIndexChangedCallback","showRangeInProgress","templateElements","prepareValueForPanelCreating","addingNewPanelsValue","isNewPanelsValueChanged","setValueAfterPanelsCreating","isValueChangingInternally","panelsState","setValueBasedOnPanelCount","reRunCondition","panelCountChangedCallback","templateTitle","minPanelCount","maxPanelCount","panelMaximumPanelCount","renderModeChangedCallback","setPanelVisibleIndex","showIndex","allowAddPanel","allowRemovePanel","defaultPanelValue","isRowEmpty","newPanel","hasModified","copyValue","defaultValueFromLastPanel","dynamicPanelAdded","getPanelIndex","dynamicPanelRemoved","clearIncorrectValuesInPanel","iscorrectValueWithPostPrefix","postPrefix","panelObjs","questionName","runPanelsCondition","panelValues","hasKeysDuplicated","updatePanelsContainsErrors","changingValueQuestion","errosInPanels","hasErrorInPanels","visibleQuestions","getPanelDisplayValue","setOnCompleteAsyncInPanel","pnlError","createNewPanelObject","getTemplateQuestionTitleLocation","templateTitleLocation","setPanelCountBasedOnValue","newPanelCount","panelUpdateValueFromSurvey","panelSurveyValueChanged","isSetPanelItemData","dynamicPanelItemValueChanged","panelDataItem","panelRemoveButtonLocation","QuestionRadiogroupModel","showClearButton","QuestionRankingModel","sortablejs__WEBPACK_IMPORTED_MODULE_0__","_question_checkbox__WEBPACK_IMPORTED_MODULE_3__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__","handleArrowUp","handleArrowDown","moveArrayItemBack","syncNumbers","setValueFromUI","focusItem","moveArrayItemForward","itemsNodes","textNodes","textNode","visibleChoice","indexNodes","indexNode","setGhostText","ghostNode","removeOtherChoiceFromChoices","mergeValueAndVisibleChoices","onStart","QuestionRatingModel","rateValuesChangedCallback","locMinRateDescriptionValue","locMaxRateDescriptionValue","rateMax","rateStep","rateMin","rateValues","ratingMaximumRateValueCount","correctValue","fr","QuestionSignaturePadModel","signature_pad__WEBPACK_IMPORTED_MODULE_3__","defaultWidth","defaultHeight","resizeCanvas","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","oldWidth","oldHeight","scale","updateValue","signaturePad","dataFormat","initSignaturePad","destroySignaturePad","buttonEl","propertyChangedHandler","QuestionTextModel","_localizablestring__WEBPACK_IMPORTED_MODULE_3__","locDataListValue","setRenderedMinMax","minValueExpression","maxValueExpression","isTextInput","minMaxTypes","isValueLessMin","getMinMaxErrorText","minErrorText","getCalculatedMinMax","isValueGreaterMax","maxErrorText","isMinMaxType","errorText","minMax","isDateInputType","locDataList","correctValueType","propertyEditor","QuestionFactory","ElementFactory","creatorHash","questionCreator","unregisterElement","elementType","getAllTypes","elementCreator","removeFromSerializer","QuestionNonValue","RendererFactory","renderersHash","unregisterRenderer","rendererAs","renderer","executeCompleteTriggerOnValueChanged","executeSkipTriggerOnValueChanged","confirmActionFunc","confirm","maximumConditionRunCountOnValueChanged","lazyRowsRendering","StylesManager","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__","sheet","Enabled","findSheet","SurveyJSStylesSheetId","createSheet","initializeStyles","styleSheetId","styleSheets","ownerNode","themeName","themeSelector","ThemeCss","sheet_1","theme_1","ThemeColors","cssRuleText","colorVariableName","insertRule","Styles","Media","media","orange","darkblue","darkrose","stone","winter","winterstone","modern","bootstrap","bootstrapmaterial","modernThemeCss","bootstrapThemeCss","bootstrapmaterialThemeCss","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_3__","_page__WEBPACK_IMPORTED_MODULE_4__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_5__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_7__","_surveyStrings__WEBPACK_IMPORTED_MODULE_8__","_error__WEBPACK_IMPORTED_MODULE_9__","_localizablestring__WEBPACK_IMPORTED_MODULE_10__","_stylesmanager__WEBPACK_IMPORTED_MODULE_11__","_surveytimer__WEBPACK_IMPORTED_MODULE_12__","_conditions__WEBPACK_IMPORTED_MODULE_13__","_settings__WEBPACK_IMPORTED_MODULE_14__","_utils_utils__WEBPACK_IMPORTED_MODULE_15__","variablesHash","localeValue","completedStateValue","completedStateTextValue","isTimerStarted","onCompleting","onComplete","onNavigateToUrl","onStarted","onPartialSend","onCurrentPageChanging","onValueChanging","onPanelVisibleChanged","onQuestionCreated","onQuestionAdded","onQuestionRemoved","onPanelAdded","onPanelRemoved","onPageAdded","onValidateQuestion","onSettingQuestionErrors","onServerValidateQuestions","onValidatePanel","onErrorCustomText","onValidatedErrorsOnCurrentPage","onProcessHtml","onGetQuestionTitle","onGetQuestionNo","onProgressText","onTextMarkdown","onTextRenderAs","onUploadFiles","onDownloadFile","onClearFiles","onLoadChoicesFromServer","onLoadedSurveyFromService","onProcessTextValue","onUpdateQuestionCssClasses","onUpdatePanelCssClasses","onUpdatePageCssClasses","onAfterRenderSurvey","onAfterRenderHeader","onAfterRenderPage","onAfterRenderQuestion","onAfterRenderQuestionInput","onAfterRenderPanel","onMatrixRowAdded","onMatrixBeforeRowAdded","onMatrixRowRemoving","onMatrixRowRemoved","onMatrixAllowRemoveRow","onMatrixCellCreated","onMatrixAfterCellRender","onMatrixCellValueChanged","onMatrixCellValueChanging","onMatrixCellValidate","onDynamicPanelAdded","onDynamicPanelRemoved","onTimer","onTimerPanelInfoText","onDynamicPanelItemValueChanged","onIsAnswerCorrect","onDragDropAllow","onScrollingElementToTop","onGetQuestionTitleActions","onGetPanelTitleActions","onGetPageTitleActions","onGetMatrixRowActions","onElementContentVisibilityChanged","jsonErrors","cssValue","hideRequiredErrors","_isMobile","_isDesignMode","ignoreValidation","isNavigationButtonPressed","isCalculatingProgressText","isTriggerIsRunning","triggerValues","triggerKeys","conditionValues","isValueChangedOnRunningCondition","conditionRunnerCounter","conditionUpdateVisibleIndexes","conditionNotifyElementsOnAnyValueOrVariableChanged","isEndLoadingFromJson","questionHashes","namesInsensitive","valueNames","valueNamesInsensitive","timerFunc","stylesManager","onProcess","doOnPageAdded","doOnPageRemoved","onFirstPageIsStartedChanged","onModeChanged","updateProgressText","onBeforeCreating","loadSurveyFromService","platform","onQuestionsOnPageModeChanged","mergeValues","getNavigationCss","main","btn","lazyRenderingValue","lazyRendering","getNavigateToUrl","getExpressionItemOnRunCondition","navigateToUrlOnCondition","navigateToUrl","navigateTo","maakeRequiredErrorsInvisibgle","erType","removeNonExisingRootKeys","getCalculatedValueByName","includeIntoResult","currentLocale","getUsedLocales","defaultLoc","defIndex","currentPageValue","activePage","getBuiltInRendererForString","getSize","lastSymbol","logoPosition","logoClasses","setIsMobile","isMobile","runTriggers","checkTriggers","completedHtmlOnCondition","completedHtml","getQuestionTitlePatternOptions","getNewTitlePattern","getNewQuestionTitleElement","currentValue","showPageNumbers","canShowProresBar","showProgressBar","isShowingPreview","showPreviewBeforeComplete","setCalcuatedValuesIntoResult","setDataCore","mergeData","setDataValueCore","updateAllQuestionsValue","notifyAllQuestionsOnValueChanged","notifyElementsOnAnyValueOrVariableChanged","isDisposed","getAllQuestions","calValue","resultItem","addCalculatedValuesIntoFilteredValues","caclValues","deleteDataValueCore","pageCount","firstPageIsStarted","vPages","onContainsPageCallback","newPage","getPageByObject","currentPageChanging","currentPageChanged","isStartedState","focusFirstQuestionAutomatic","isLoading","isCompletedBefore","isEditMode","onShowingPreviewChanged","setCompletedState","clearData","gotoFirstPage","passed","visiblePageCount","updateValuesWithDefaults","oldCurrentPage","newCurrentPage","allowChanging","isNextPage","isPrevPage","getProgress","navigationButtonsVisibility","showNavigationButtons","getIsNavigationButtonsShowingOn","buttonPosition","isNavigationButtonsShowing","isShowPreviewBeforeComplete","setDesignMode","visPages","updateAllElementsVisibility","showInvisibleElements","cookieName","cookies","cookie","setCookie","deleteCookie","doCurrentPageComplete","hasErrorsOnNavigate","doCurrentPageCompleteCore","checkErrorsMode","hasCurrentPageErrors","checkForAsyncQuestionValidation","clearAsyncValidationQuesitons","onCompletedAsyncQuestionValidators","asyncValidationQuesitons","asynQuestions","checkIsCurrentPageHasErrors","onAsyncValidation","hasPageErrors","checkIsPageHasErrors","firstErrorPage","ensureUniqueNames","ensureUniqueName","ensureUniquePageName","ensureUniquePanelName","ensureUniqueQuestionName","ensureUniqueElementName","existingElement","getNewName","base","isFocuseOnFirstError","fireValidatedErrorsOnPage","questionsOnPage","resetNavigationButton","doServerValidation","curPage","isValidatingOnServer","doNextPage","questionsOnPageMode","runningPages","setupPagesForPageModes","restoreOrigionalPages","currentPageNo","origionalPages","isSinglePage","originalPages","questionHashesClear","newPages","createPagesForQuestionOnPageMode","deletedLen","doElementsOnLoad","createSinglePage","createPagesForEveryQuestion","single","createNewPage","originalPage","originalElement","pageJson","questionHashesAdded","showPrevButton","getPageMaxTimeToFinish","isCompleteOnTrigger","onCompletingOptions","allowComplete","previousCookie","hasCookie","setCompleted","savingDataStarted","onCompleteOptions","showDataSaving","showDataSavingError","showDataSavingSuccess","showDataSavingClear","surveyPostId","setIsValidatingOnServer","onIsValidatingOnServerChanged","isPreview","completeServerValidation","hasToFocus","checkOnPageTriggers","sendResultOnPageNext","renderedCompletedHtml","completedBeforeHtml","loadingHtml","getProgressText","getProgressTextCore","correctAnswersCount","getCorrectedAnswerCount","afterRenderSurvey","afterRenderHeader","getQuestionsByValueName","allow","uploadingCallback","uploadFilesCore","fileValue","createSurveyService","responses","addPage","addNewPage","removePage","caseInsensitive","getQuestionsByNames","getPageByElement","getPageByQuestion","getPagesByNames","getQuizQuestions","getAllPanels","panelName","questionOnValueChanging","updateQuestionValue","checkQuestionErrorOnValueChanged","checkQuestionErrorOnValueChangedCore","oldErrorCount","checkErrorsOnValueChanging","notifyQuestionOnValueChanged","isRunningConditions","valName","getCurrentPageQuestions","includeInvsible","isOnNextPage","triggers","checkExpression","oldCurrentPageIndex","runConditionsCore","checkIfNewPagesBecomeVisible","runConditionOnValueChanged","newCurrentPageIndex","surveyShowDataSaving","cliendId","onLoadingSurveyFromService","loadSurveyFromServiceJson","onLoadSurveyFromService","updatePageVisibleIndexes","isPageVisible","jsonConverter","setJsonObject","getProcessedTextValueCore","wasEmpty","getInCorrectedAnswerCount","variable","firstName","reduceFirstName","pos1","pos2","clearInvisibleValues","clearInvisibleQuestionValues","getVariableNames","newQuestionValue","isValueEqual","tryGoNextPageAutomatic","generateNewName","questionHashesPanelAdded","baseName","goNextPageAutomatic","allowCompleteSurveyAutomatic","commentName","parentPanel","rootPanel","questionHashesRemoved","oldName","questionHashAddedCore","questionHashRemovedCore","doEncoding","processTextCore","getCorrectedAnswerCountCore","isCorrect","correctAnswers","incorrectAnswers","addCount","getCorrectedAnswers","getInCorrectedAnswers","showTimerPanel","getTimerInfoText","pageSpent","getDisplayTime","surveySpent","pageLimitSec","pageLimit","surveyLimit","maxTimeToFinish","showTimerPanelMode","getTimerInfoPageText","getTimerInfoSurveyText","pageText","surveyText","sec","startTimer","doTimer","instance","maxTimeToFinishPage","getObjects","setTriggerValue","isVariable","copyTriggerValue","fromName","focusQuestion","getRowWrapperComponentName","getRowWrapperComponentData","reason","SurveyProgressButtonsModel","elementCss","surveyLocalization","surveyStrings","_localization_english__WEBPACK_IMPORTED_MODULE_0__","currentLocaleValue","defaultLocaleValue","supportedLocales","getLocaleStrings","getCurrentStrings","strName","removeDefaultLoc","locName","str1","str2","SurveyWindowModel","initialModel","createSurvey","windowElement","onSurveyComplete","showingChangedCallback","expandedChangedCallback","expandcollapse","closeWindowOnComplete","timerId","surveyElementName","surveyTimerFunctions","SurveyTimer","listenerCounter","instanceValue","TextPreProcessorItem","TextPreProcessorValue","TextPreProcessor","QuestionTextProcessor","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__","canProcess","hasAllValuesOnLastRunValue","getItems","getName","replacedValue","encodeURIComponent","Trigger","SurveyTrigger","SurveyTriggerVisible","SurveyTriggerComplete","SurveyTriggerSetValue","SurveyTriggerSkip","SurveyTriggerRunExpression","SurveyTriggerCopyValue","_expressions_expressions__WEBPACK_IMPORTED_MODULE_4__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__","usedNames","oldPropertiesChanged","onExpressionChanged","operatorsValue","expectedValue","exp","buildExpression","operators","isCheckRequired","perform","check","triggerResult","onSuccess","onFailure","isRequireValue","buildUsedNames","keyValue","ownerValue","onTrigger","onItemSuccess","onItemFailure","setToName","gotoName","onCompleteRunExpression","IsMobile","vendor","PopupUtils","targetPos","ResponsivityManager","VerticalResponsivityManager","itemsSelector","dotsItemSize","IGNORE_SHRINK_LIMIT_PX","previousParentOffset","previousVisibleItemsCount","MAX_VALUE","_itemsSizes","resizeObserver","ResizeObserver","observe","getDimensions","getAvailableSpace","space","calcItemSize","calcItemsSizes","getVisibleItemsCount","itemsSizes","currSize","scrollOffset","hiddenWidth","parentOffsetWidth","canShrink","unwrap","compareVersions","confirmAction","detectIEOrEdge","detectIEBrowser","loadFileFromBase64","isElementVisible","findScrollableParent","createSvg","diff","regExStrip0","segmentsA","segmentsB","ua","oldIe","elevenIe","isIEOrEdge","msie","trident","edge","b64Data","byteString","mimeString","ab","ia","bb","elementRect","viewHeight","topWin","bottomWin","topEl","bottomEl","maxTop","minBottom","svgElem","ValidatorResult","SurveyValidator","ValidatorRunner","NumericValidator","TextValidator","AnswerCountValidator","RegexValidator","EmailValidator","ExpressionValidator","_error__WEBPACK_IMPORTED_MODULE_1__","getErrorText","getDefaultErrorText","validate","createCustomError","prepareAsyncValidators","asyncResults","isValidateAllValues","asyncValidators","validatorResult","validatedValue","vName","minLength","allowDigits","reg","minCount","maxCount","regex","re","ensureConditionRunner","generateError","BaseVue","setIsRendering","isRendering","getIsRendering","onDestroyed","created","beforeUpdate","_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__","_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","__file","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__","_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__","_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__","Boolean","preventDefaults","isRightClick","offsetX","isRtl","_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__","_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__","_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__","_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__","_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__","_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__","_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__","_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__","_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__","_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__","_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__","_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__","_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__","_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__","_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__","_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__","_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__","_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__","_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__","_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__","_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__","_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__","_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__","_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__","_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__","_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__","_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__","_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__","_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__","_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__","_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__","_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__","_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__","_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__","_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__","_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__","_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__","_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__","_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__","_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__","_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__","_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__","_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__","_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__","_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__","_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__","_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__","_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__","_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__","_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__","_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__","_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__","_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__","_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__","_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__","_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__","_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__","_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__","_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__","_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__","_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__","_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__","_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__","_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__","_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__","_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__","_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__","_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__","_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__","_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__","_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__","_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__","_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__","_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__","_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__","_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__","_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__","_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__","_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__","_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__","_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__","_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__","_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__","_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__","_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__","_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__","_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__","QuestionVue","innerValue","changeQuestion","new_val","old_val","_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__","_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__","_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__","_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__","_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__","_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__","_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__","_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__","_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__","_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__","_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__","_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__","_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__","_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__","_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__","_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__","_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__","_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__","_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__","_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__","_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__","_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__","VueSurveyModel","VueSurveyWindowModel","survey_core__WEBPACK_IMPORTED_MODULE_1__","_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__","_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__","_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__","_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__","_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__","_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__","_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__","_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__","thisArg","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","isUndefined","getDefaultAdapter","adapter","transformRequest","isFormData","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","isURLSearchParams","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","merge","4528","8741","3976","_maxTestPos","optionalmarker","quantifiermarker","groupmarker","alternatormarker","escapeChar","oncomplete","onincomplete","oncleared","repeat","greedy","removeMaskOnSubmit","clearMaskOnLostFocus","insertMode","insertModeVisual","alias","onKeyDown","onBeforeMask","onBeforePaste","onBeforeWrite","onUnMask","showMaskOnFocus","showMaskOnHover","onKeyValidation","skipOptionalPartCharacter","numericInput","rightAlign","undoOnEscape","radixPoint","_radixDance","keepStatic","positionCaretOnTab","tabThrough","supportsInputType","ignorables","BACKSPACE","TAB","ESCAPE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","INSERT","DELETE","preValidation","postValidation","staticDefinitionSymbol","jitMasking","nullable","inputEventOnly","noValuePatching","positionCaretOnClick","casing","inputmode","importDataAttributes","shiftPositions","usePrototypeDefinitions","validationEventTimeOut","7392","9","definitionSymbol","253","__data","3776","attachEvent","eventRegistry","detachEvent","ev","namespace","detail","InputEvent","initCustomEvent","createEventObject","eventType","fireEvent","Element","600","4963","9845","iphone","iemobile","mobile","ie","7184","6030","EventHandlers","keydownEvent","dependencyLib","maskset","caret","getBuffer","BACKSPACE_SAFARI","ctrlKey","X","handleRemove","writeBuffer","_valueGet","seekNext","getLastValidPosition","begin","altKey","checkVal","undoValue","seekPrevious","getTest","static","maskLength","translatePosition","caretPos","isRTL","ignorable","includes","keypressEvent","charCode","ENTER","skipInputEvent","writeOutBuffer","isValid","resetMaskSet","forwardPosition","keyupEvent","isComposing","KEY_229","pasteEvent","getBufferTemplate","clipboardData","inputFallBackEvent","getPlaceholder","isMask","activeElement","applyInputValue","compositionendEvent","setValueEvent","focusEvent","mouseEnter","clickEvent","invalidEvent","validationEvent","mouseleaveEvent","HandleNativePlaceholder","originalPlaceholder","determineNewCaretPosition","cutEvent","execCommand","blurEvent","clearOptionalTail","mouseenterEvent","submitEvent","_valueSet","resetEvent","refreshValue","9716","EventRuler","skipKeyPressEvent","form","events","219","dd","ddd","dddd","setMonth","mm","mmm","mmmm","yy","setFullYear","yyyy","setHours","getHours","hh","hx","H","HH","Hx","M","setMinutes","getMinutes","MM","setSeconds","getSeconds","ss","setMilliseconds","getMilliseconds","L","T","TT","Z","S","isoDate","isoTime","isoDateTime","isoUtcDateTime","tokenizer","rawday","date","rawmonth","month","day","rawyear","P","targetMatch","targetMatchIndex","insert","year","nextMatch","extendAliases","datetime","i18n","ordinalSuffix","displayFormat","outputFormat","dayNames","monthNames","fuzzy","refreshFromBuffer","validPositions","prefillYear","strict","nativeDef","3851","extendDefinitions","cssunit","ip","email","mac","vin","V","ssn","getMaskTemplate","207","negationSymbol","back","tests","def","numeric","__financeInput","generated","_mask","parseMinMaxOptions","NaN","MIN_VALUE","enforceDigitsOnBlur","allowMinus","front","SetMaxOnOverflow","unmaskAsNumber","roundingFN","shortcuts","0","1","fromIsValid","rewritePosition","__valueGet","__valueSet","decimal","integer","percentage","indianns","9380","7760","generatedInput","alternation","E","2394","noMasksCache","userOptions","aliases","dataAttribute","masksCache","textAlign","generateMaskSet","__lookupGetter__","__defineGetter__","__defineSetter__","hasMaskedValue","getmetadata","determineLastRequiredPosition","analyseMask","extendDefaults","unmask","Inputmask","5296","ReferenceError","Map","has","construct","sham","Proxy","valueOf","attachShadow","customElements","getAttributeNames","HTMLElement","define","2391","maskToken","_buffer","excludes","jitOffset","optionality","newBlockMarker","isAlternator","isGroup","openGroup","alternatorGroup","isQuantifier","w","O","quantifier","jit","C","D","B","157","__lookupSetter__","valHooks","inputmaskpatch","inputMode","9695","isOptional","3194","7149","8711","selectionStart","selectionEnd","commonAncestorContainer","startOffset","endOffset","createRange","duplicate","moveStart","fontSize","setSelectionRange","firstChild","setStart","setEnd","addRange","createTextRange","moveEnd","locator","getTestTemplate","optionalQuantifier","checkAlternationMatch","getTests","determineTestTemplate","4713","mloc","cd","R","I","F","N","G","K","U","Q","W","z","getDecisionTaker","isSubsetOf","7215","alternate","revalidateMask","SPACE","enhanceError","__CANCEL__","encode","serializedParams","isDate","hashmarkIndex","isAxiosError","lineNumber","columnNumber","stack","isStandardBrowserEnv","originURL","urlParsingNode","resolveURL","search","hostname","port","pathname","requestURL","parsed","isString","windowIsDefined","NAMESPACE_MAIN","NAMESPACE_ALTERNATE","defineBridget","logError","bridget","PluginClass","addOptionMethod","bridge","isPlainObject","isFunction","autoRegisterNamespace","ErrorMsgs","formatInvalidInputErrorMsg","callingContextNotSliderInstance","SliderScale","linear","toValue","rawValue","shouldAdjustWithBase","ticks_positions","minv","maxv","minp","maxp","ticks","partialPercentage","adjustment","toPercentage","logarithmic","createNewSlider","_state","inDrag","over","tickIndex","ticksCallbackMap","handleCallbackMap","optionTypes","defaultOptions","isMinSet","isMaxSet","optName","getDataAttrib","ticksAreValid","lock_to_ticks","rtl","computedStyle","dataName","dataValString","tooltip_position","sliderTrackSelection","sliderTrackLow","sliderTrackHigh","sliderMinHandle","sliderMaxHandle","origWidth","updateSlider","sliderElem","sliderTrack","rangeHighlightElements","rangeHighlightsOpts","rangeHighlights","rangeHighlightElement","customClassString","isLabelledbyArray","labelledby","ticksContainer","tick","ticks_tooltip","tickListenerReference","_addTickListener","enterCallback","addMouseEnter","leaveCallback","addMouseLeave","mouseLeave","tickLabels","ticks_labels","tickLabelContainer","noTickPositionsSpecified","tickLabelsIndex","reversed","createAndAppendTooltipSubElements","tooltipElem","arrow","inner","sliderTooltip","sliderTooltipMin","sliderTooltipMax","$element","$sliderElem","eventToCallbackMap","touchCapable","DocumentTouch","touchX","touchY","tooltipInner","tooltip_min","tooltipInner_min","tooltip_max","tooltipInner_max","_removeClass","_removeProperty","trackLow","trackSelection","trackHigh","handle1","handle2","_addClass","stylePos","mousePos","sizePos","_setTooltipPosition","availableHandleModifiers","isValidHandleType","_offset","handle1Keydown","_keydown","handle2Keydown","_mousedown","touchstart","_touchstart","touchmove","_touchmove","resize","_resize","_showTooltip","_alwaysShowTooltip","showTooltip","hideTooltip","_hideTooltip","callbackHandle","precision","tooltip_split","formatter","natural_arrow_keys","ticks_snap_bounds","triggerSlideEvent","triggerChangeEvent","_validateInputValue","applyPrecision","_applyPrecision","_getClosestTickIndex","_setTickIndex","_toPercentage","_layout","_setDataVal","_trigger","_removeSliderEventHandlers","_cleanUpEventCallbacksMap","_unbindJQueryEventHandlers","toggle","_bindNonQueryEventHandler","_unbindNonQueryEventHandler","attribute","refresh","useCurrentValue","relayout","_removeTooltipListener","getElementsByClassName","eventNames","_setToolTipOnMouseOver","tempState","formattedTooltipVal","positionPercentages","getPositionPercentages","_setText","_copyState","keyCtrl","reference","enter","per","leave","formattedValue","startPercent","endPercent","sp","currentRange","_createHighlightRange","styleMargin","styleSize","labelSize","extraMargin","innerTooltipMinText","innerTooltipMaxText","offset_min","offset_max","_isHighlightRange","_getPercentage","diff1","diff2","_adjustPercentageForRangeSliders","mousemove","mouseup","_mousemove","_mouseup","_calculateValue","_triggerFocusOnHandle","handleIdx","isHorizontal","isVertical","isReversed","val1","val2","_pauseEvent","cancelBubble","_getNumDigitsAfterDecimalPlace","percentageWithAdjustedPrecision","_applyToFixedAndParseFloat","_setValues","comp","_toValue","snapToClosestTick","_snapToClosestTick","Infinity","toFixedInput","truncatedNum","eventPosition","sliderOffset","distanceToSlide","_validateArray","callbackFnArray","callbackFn","_triggerJQueryEvent","eventData","classString","newClasses","classTag","ifClassExists","_offsetLeft","_offsetRight","_offsetTop","offsetParent","_css","elementRef","styleName","all","letter","tooltipPos","oppositeSide","outerHeight","difference","arch","execPath","exit","kill","dlopen","uptime","memoryUsage","uvCounters","features","createError","config1","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","axiosKeys","otherKeys","transformData","throwIfCancellationRequested","cancelToken","throwIfRequested","buttonText","onValueChangedCallback","onReadOnlyChangedCallback","cssType","payload","Cancel","expires","domain","secure","toGMTString","decodeURIComponent","isAbsoluteURL","combineURLs","baseURL","requestedURL","CancelToken","executor","resolvePromise","token","settle","buildFullPath","parseHeaders","isURLSameOrigin","requestData","requestHeaders","auth","username","password","unescape","Authorization","fullPath","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseData","responseType","onabort","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","onDownloadProgress","onUploadProgress","upload","abort","ignoreDuplicateOf","fns","isView","pipe","URLSearchParams","product","stripBOM","normalizedName","createInstance","defaultConfig","axios","promises","spread","normalizeArray","allowAboveRoot","up","basename","matchedSlash","xs","resolvedPath","resolvedAbsolute","normalize","isAbsolute","trailingSlash","paths","relative","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","hasRoot","ext","extname","startDot","startPart","preDotState","relativeURL","VERSION","isValidFormatter","entry","unique","docElem","pageOffset","getPageOffset","clientTop","clientLeft","addClassFor","limit","asArray","countDecimals","numStr","pieces","supportPageOffset","pageXOffset","isCSS1Compat","compatMode","pageYOffset","getActions","pointerEnabled","move","msPointerEnabled","getSupportsPassive","supportsPassive","getSupportsTouchActionNone","CSS","supports","subRangeRatio","pa","pb","fromPercentage","isPercentage","getJ","toStepping","xVal","xPct","va","vb","fromStepping","getStep","xSteps","snap","handleEntryPoint","xHighestCompleteStep","handleStepPoint","totalSteps","xNumSteps","highestStep","Spectrum","singleStep","ordered","getMargin","getNearbySteps","stepBefore","startValue","thisStep","stepAfter","countStepDecimals","stepDecimals","convert","defaultFormatter","validateFormat","testStep","testRange","spectrum","testStart","handles","testSnap","testAnimate","testAnimationDuration","animationDuration","testConnect","testOrientation","ort","testMargin","margin","testLimit","testPadding","padding","testDirection","testBehaviour","tap","drag","hover","testMultitouch","multitouch","testTooltips","testAriaFormat","ariaFormat","testFormat","testCssPrefix","cssPrefix","testCssClasses","testUseRaf","useRequestAnimationFrame","testOptions","origin","handleLower","handleUpper","horizontal","ltr","pipsHorizontal","pipsVertical","markerHorizontal","markerVertical","markerNormal","markerLarge","markerSub","valueHorizontal","valueVertical","valueNormal","valueLarge","valueSub","styles","styleOposite","closure","originalOptions","scope_Base","scope_Handles","scope_Connects","scope_Self","scope_Pips","supportsTouchActionNone","scope_Target","scope_Locations","scope_HandleNumbers","scope_ActiveHandlesCount","scope_Spectrum","scope_Values","scope_Events","scope_Document","scope_DocumentElement","scope_Body","addNodeTo","addOrigin","handleNumber","addConnect","addElements","connectOptions","addSlider","addTooltip","tips","bindEvent","unencoded","aria","positions","checkHandlePosition","getGroup","stepped","generateSpread","safeIncrement","increment","indexes","firstInRange","lastInRange","ignoreFirst","ignoreLast","prevPct","current","newPct","pctDifference","pctPos","realSteps","stepsize","low","high","addMarking","filterFunc","valueSizeClasses","markerSizeClasses","valueOrientationClasses","markerOrientationClasses","getClasses","orientationClasses","sizeClasses","addSpread","removePips","grid","baseSize","hasAttribute","fixEvent","buttons","calcPoint","mouse","pointer","isTouchOnTarget","pageX","pageY","targetTouch","calcPointToPercentage","proposal","getClosestHandle","moveHandles","upward","locations","handleNumbers","proposals","setHandle","targetEvent","documentLeave","relatedTarget","eventEnd","eventMove","buttonsProperty","movement","startCalcPoint","setZindex","eventStart","handleOrigin","moveEvent","endEvent","outEvent","eventTap","eventHover","bindSliderEvents","behaviour","handleBefore","handleAfter","eventHolders","eventHolder","lookBackward","lookForward","toPct","pct","updateHandlePosition","stateUpdate","updateConnect","valueSet","fireSetEvent","isInit","valueReset","valueGet","getCurrentStep","nearbySteps","decrement","namespacedEvent","removeEvent","tEvent","tNamespace","updateOptions","optionsToUpdate","updateAble","newOptions","__moveHandles","initialize","api","handlers","use","eject"],"mappings":"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,SAAU7zJ,KAAK6zJ,SACfC,YAAa9zJ,KAAK8zJ,aAQtB,OANI9zJ,KAAK+zJ,uBAAyB,IAC9BpmJ,EAAQ,yBAA2B3N,KAAK+zJ,uBAExC/zJ,KAAKg0J,uBAAyB,IAC9BrmJ,EAAQ,yBAA2B3N,KAAKg0J,uBAErC3vJ,EAAI4vJ,eAAe7iC,EAAQzjH,GAEtC,OAAOtJ,EAAIyB,YAERytJ,EArMiC,CAsM1Ch7F,EAAuC,aAEzC,SAASi7F,IACL,MAAO,CACH,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGRvmE,EAAyC,cAAc5jF,SAAS,aAAc,CAC1E,wBACA,CA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","file":"js/survey.9cc0fcf3.js","sourcesContent":["'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"inputmask\"), require(\"nouislider\"), require(\"sortablejs\"), require(\"bootstrap-slider\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"surveyjs-widgets\", [\"inputmask\", \"nouislider\", \"sortablejs\", \"bootstrap-slider\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"surveyjs-widgets\"] = factory(require(\"inputmask\"), require(\"nouislider\"), require(\"sortablejs\"), require(\"bootstrap-slider\"));\n\telse\n\t\troot[\"surveyjs-widgets\"] = factory(root[\"Inputmask\"], root[\"noUiSlider\"], root[\"Sortable\"], root[\"Slider\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_7__, __WEBPACK_EXTERNAL_MODULE_10__, __WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 21);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction escValue(val) {\n if (typeof val === \"string\") {\n return (val || \"\").replace(/(['])/g, \"\\\\$1\");\n }\n return val;\n}\n\nfunction init(Survey, $) {\n $ = $ || window.$;\n var widget = {\n className: \"iradio_square-blue\",\n checkboxClass: \"iradio_square-blue\",\n radioClass: \"iradio_square-blue\",\n name: \"icheck\",\n widgetIsLoaded: function () {\n return typeof $ == \"function\" && !!$.fn.iCheck;\n },\n isFit: function (question) {\n var t = question.getType();\n return t === \"radiogroup\" || t === \"checkbox\" || t === \"matrix\";\n },\n isDefaultRender: true,\n afterRender: function (question, el) {\n var rootWidget = this;\n var $el = $(el);\n\n $el.find(\".sv-item__decorator\").hide();\n\n $el.find(\"input\").data({\n iCheck: undefined,\n });\n function getIndexByValue(arr, value) {\n if (!Array.isArray(arr)) return -1;\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] == value) return i;\n if (!!arr[i] && arr[i].toString().toLowerCase() == value) return i;\n }\n return -1;\n }\n var frozeUpdating = false;\n var makeChoicesICheck = function () {\n var inputs = $el.find(\"input\");\n inputs.iCheck({\n checkboxClass:\n question.checkboxClass ||\n rootWidget.checkboxClass ||\n rootWidget.className,\n radioClass:\n question.radioClass ||\n rootWidget.radioClass ||\n rootWidget.className,\n });\n inputs.on(\"ifChecked\", function (event) {\n if (frozeUpdating) return;\n if (question.getType() === \"matrix\") {\n question.generatedVisibleRows.forEach(function (row, index, rows) {\n if (row.fullName === event.target.name) {\n row.value = event.target.value;\n }\n });\n } else if (question.getType() === \"checkbox\") {\n var oldValue = question.value || [];\n var index = getIndexByValue(oldValue, event.target.value);\n if (index === -1) {\n question.value = oldValue.concat([event.target.value]);\n }\n } else {\n question.value = event.target.value;\n }\n });\n\n inputs.on(\"ifUnchecked\", function (event) {\n if (frozeUpdating) return;\n if (question.getType() === \"checkbox\") {\n var oldValue = (question.value || []).slice();\n var index = getIndexByValue(oldValue, event.target.value);\n if (index >= 0) {\n oldValue.splice(index, 1);\n question.value = oldValue;\n }\n }\n });\n };\n function uncheckIcheck(cEl) {\n cEl.iCheck(\"uncheck\");\n cEl[0].parentElement.classList.remove(\"checked\");\n }\n var select = function () {\n frozeUpdating = true;\n if (question.getType() !== \"matrix\") {\n var values = question.value;\n if (!Array.isArray(values)) {\n values = [values];\n }\n if (question.getType() == \"checkbox\") {\n var qValue = question.value;\n question.visibleChoices.forEach(function (item) {\n var inEl = $el.find(\n \"input[value='\" + escValue(item.value) + \"']\"\n );\n if (!inEl) return;\n var isChecked = getIndexByValue(qValue, item.value) > -1;\n if (isChecked) {\n inEl.iCheck(\"check\");\n } else {\n var cEl = inEl[0];\n var wasChecked = !!cEl[\"checked\"];\n if (wasChecked) {\n inEl.removeAttr(\"checked\");\n if (!inEl.parent().hasClass(\"checked\"))\n setTimeout(function () {\n uncheckIcheck(inEl);\n });\n else uncheckIcheck(inEl);\n }\n }\n });\n } else {\n values.forEach(function (value) {\n $el\n .find(\"input[value='\" + escValue(value) + \"']\")\n .iCheck(\"check\");\n });\n }\n } else {\n question.generatedVisibleRows.forEach(function (row, index, rows) {\n if (row.value) {\n $(el)\n .find(\n \"input[name='\" +\n row.fullName +\n \"'][value='\" +\n escValue(row.value) +\n \"']\"\n )\n .iCheck(\"check\");\n }\n });\n }\n frozeUpdating = false;\n };\n makeChoicesICheck();\n\n question.visibleChoicesChangedCallback = function () {\n makeChoicesICheck();\n $el.find(\".sv-item__decorator\").hide();\n };\n question.valueChangedCallback = select;\n select();\n },\n willUnmount: function (question, el) {\n var $el = $(el);\n $el.find(\"input\").iCheck(\"destroy\");\n question.visibleChoicesChangedCallback = null;\n },\n };\n\n Survey.JsonObject.metaData.addProperty(\"radiogroup\", {\n name: \"radioClass\",\n category: \"general\",\n });\n Survey.JsonObject.metaData.addProperty(\"checkbox\", {\n name: \"checkboxClass\",\n category: \"general\",\n });\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"type\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey, $) {\n $ = $ || window.$;\n var widget = {\n activatedBy: \"property\",\n name: \"select2\",\n widgetIsLoaded: function () {\n return typeof $ == \"function\" && !!$.fn.select2;\n },\n isFit: function (question) {\n if (widget.activatedBy == \"property\")\n return (\n question[\"renderAs\"] === \"select2\" &&\n question.getType() === \"dropdown\"\n );\n if (widget.activatedBy == \"type\")\n return question.getType() === \"dropdown\";\n if (widget.activatedBy == \"customtype\")\n return question.getType() === \"select2\";\n return false;\n },\n activatedByChanged: function (activatedBy) {\n if (!this.widgetIsLoaded()) return;\n widget.activatedBy = activatedBy;\n Survey.JsonObject.metaData.removeProperty(\"dropdown\", \"renderAs\");\n if (activatedBy == \"property\") {\n Survey.JsonObject.metaData.addProperty(\"dropdown\", {\n name: \"renderAs\",\n category: \"general\",\n default: \"default\",\n choices: [\"select2\", \"default\"],\n });\n Survey.JsonObject.metaData.addProperty(\"dropdown\", {\n dependsOn: \"renderAs\",\n category: \"general\",\n name: \"select2Config\",\n visibleIf: function (obj) {\n return obj.renderAs == \"select2\";\n },\n });\n }\n if (activatedBy == \"customtype\") {\n Survey.JsonObject.metaData.addClass(\"select2\", [], null, \"dropdown\");\n Survey.JsonObject.metaData.addProperty(\"select2\", {\n name: \"select2Config\",\n category: \"general\",\n default: null,\n });\n }\n },\n htmlTemplate:\n \"
\",\n afterRender: function (question, el) {\n var select2Config = question.select2Config;\n var settings =\n select2Config && typeof select2Config == \"string\"\n ? JSON.parse(select2Config)\n : select2Config;\n if (!settings) settings = {};\n var $el = $(el).is(\"select\") ? $(el) : $(el).find(\"select\");\n var $otherElement = $(el).find(\"textarea\");\n $otherElement.addClass(question.cssClasses.other);\n $otherElement.bind(\"input propertychange\", function () {\n if (isSettingValue) return;\n question.comment = $otherElement.val();\n });\n\n var updateComment = function () {\n $otherElement.val(question.comment);\n if (question.isOtherSelected) {\n $otherElement.show();\n } else {\n $otherElement.hide();\n }\n };\n var isSettingValue = false;\n var updateValueHandler = function () {\n if (isSettingValue) return;\n isSettingValue = true;\n if ($el.find(\"option[value='\" + (question.value || \"\") + \"']\").length) {\n $el.val(question.value).trigger(\"change\");\n } else {\n if (question.value !== null && question.value !== undefined) {\n var newOption = new Option(\n question.value, //TODO if question value is object then need to improve\n question.value,\n true,\n true\n );\n $el.append(newOption).trigger(\"change\");\n }\n }\n updateComment();\n isSettingValue = false;\n };\n var updateChoices = function () {\n $el.select2().empty();\n if (!settings.placeholder && question.showOptionsCaption) {\n settings.placeholder = question.optionsCaption;\n settings.allowClear = true;\n }\n if (!settings.theme) {\n settings.theme = \"classic\";\n }\n settings.disabled = question.isReadOnly;\n if (settings.ajax) {\n $el.select2(settings);\n question.keepIncorrectValues = true;\n } else {\n var data = [];\n if (!!settings.placeholder || question.showOptionsCaption) {\n data.push({ id: \"\", text: \"\" });\n }\n settings.data = data.concat(\n question.visibleChoices.map(function (choice) {\n return {\n id: choice.value,\n text: choice.text,\n };\n })\n );\n question.clearIncorrectValues();\n $el.select2(settings);\n }\n // fixed width accrording to https://stackoverflow.com/questions/45276778/select2-not-responsive-width-larger-than-container\n if (!!el.querySelector(\".select2\")) {\n el.querySelector(\".select2\").style.width = \"100%\";\n }\n if (!!el.nextElementSibling) {\n el.nextElementSibling.style.marginBottom = \"1px\";\n }\n updateValueHandler();\n };\n\n $otherElement.prop(\"disabled\", question.isReadOnly);\n question.readOnlyChangedCallback = function () {\n $el.prop(\"disabled\", question.isReadOnly);\n $otherElement.prop(\"disabled\", question.isReadOnly);\n };\n\n question.registerFunctionOnPropertyValueChanged(\n \"visibleChoices\",\n function () {\n updateChoices();\n }\n );\n updateChoices();\n $el.on(\"select2:select\", function (e) {\n setTimeout(function() {\n question.renderedValue = e.target.value;\n updateComment();\n }, 1);\n });\n $el.on('select2:opening', function(e) {\n if ($(this).data('unselecting')) {\n $(this).removeData('unselecting');\n e.preventDefault();\n }\n });\n $el.on(\"select2:unselecting\", function (e) {\n $(this).data('unselecting', true);\n setTimeout(function() {\n question.renderedValue = null;\n updateComment();\n }, 1);\n });\n question.valueChangedCallback = updateValueHandler;\n updateValueHandler();\n },\n willUnmount: function (question, el) {\n question.readOnlyChangedCallback = null;\n question.valueChangedCallback = null;\n var $select2 = $(el).find(\"select\");\n if (!!$select2.data(\"select2\")) {\n $select2\n .off(\"select2:select\")\n .off(\"select2:unselecting\")\n .off(\"select2:opening\")\n .select2(\"destroy\");\n }\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget);\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_inputmask__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_inputmask___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_inputmask__);\n\n\nfunction init(Survey) {\n var widget = {\n name: \"maskedit\",\n numericGroupSeparator: \",\",\n numericAutoGroup: true,\n numericDigits: 2,\n numericDigitsOptional: false,\n numericPlaceholder: \"0\",\n autoUnmask: true,\n clearIncomplete: true,\n widgetIsLoaded: function () {\n return typeof __WEBPACK_IMPORTED_MODULE_0_inputmask___default.a != \"undefined\";\n },\n isFit: function (question) {\n if (question.getType() == \"multipletext\") return true;\n return (\n question.getType() == \"text\" &&\n (question.inputMask != \"none\" || question.inputFormat)\n );\n },\n isDefaultRender: true,\n activatedByChanged: function (activatedBy) {\n if (Survey.JsonObject.metaData.findProperty(\"text\", \"inputMask\")) return;\n var properties = [\n {\n name: \"autoUnmask:boolean\",\n category: \"general\",\n default: true,\n },\n {\n name: \"clearIncomplete:boolean\",\n category: \"general\",\n default: true,\n },\n { name: \"inputFormat\", category: \"general\" },\n {\n name: \"inputMask\",\n category: \"general\",\n default: \"none\",\n choices: [\n \"none\",\n \"datetime\",\n \"currency\",\n \"decimal\",\n \"email\",\n \"phone\",\n \"ip\",\n ],\n },\n {\n name: \"numericDigits\",\n category: \"general\",\n visible: false,\n },\n {\n name: \"options\",\n category: \"general\",\n visible: false,\n },\n {\n name: \"prefix\",\n category: \"general\",\n visible: false,\n },\n {\n name: \"suffix\",\n category: \"general\",\n visible: false,\n },\n ];\n Survey.JsonObject.metaData.addProperties(\"text\", properties);\n Survey.JsonObject.metaData.addProperties(\n \"matrixdropdowncolumn\",\n properties\n );\n Survey.JsonObject.metaData.addProperties(\"multipletextitem\", properties);\n },\n applyInputMask: function (surveyElement, el) {\n var rootWidget = this;\n var mask =\n surveyElement.inputMask !== \"none\"\n ? surveyElement.inputMask\n : surveyElement.inputFormat;\n var options = {};\n if (typeof surveyElement.options === \"object\") {\n for (var option in surveyElement.options) {\n options[option] = surveyElement.options[option];\n }\n }\n options.autoUnmask = typeof surveyElement.autoUnmask !== \"undefined\"\n ? surveyElement.autoUnmask\n : rootWidget.autoUnmask;\n options.clearIncomplete = typeof surveyElement.clearIncomplete !== \"undefined\"\n ? surveyElement.clearIncomplete\n : rootWidget.clearIncomplete;\n if (surveyElement.inputMask !== \"none\") {\n options.inputFormat = surveyElement.inputFormat;\n }\n if (\n surveyElement.inputMask === \"currency\" ||\n surveyElement.inputMask === \"decimal\"\n ) {\n options.groupSeparator = rootWidget.numericGroupSeparator;\n options.autoGroup = rootWidget.numericAutoGroup;\n }\n if (surveyElement.inputMask === \"currency\") {\n options.digits = surveyElement.numericDigits || rootWidget.numericDigits;\n options.digitsOptional = rootWidget.numericDigitsOptional;\n options.prefix = surveyElement.prefix || \"\";\n options.suffix = surveyElement.suffix || \"\";\n options.placeholder = rootWidget.numericPlaceholder;\n }\n // if (surveyElement.inputMask == \"datetime\") {\n // mask = surveyElement.inputFormat;\n // }\n if (surveyElement.inputMask === \"phone\" && !!surveyElement.inputFormat) {\n mask = surveyElement.inputFormat;\n }\n\n __WEBPACK_IMPORTED_MODULE_0_inputmask___default()(mask, options).mask(el);\n\n el.onblur = function () {\n if (!el.inputmask) return;\n if (surveyElement.value === el.inputmask.getemptymask()) {\n surveyElement.value = \"\";\n }\n };\n\n var customWidgetData =\n surveyElement.getType() === \"multipletextitem\"\n ? surveyElement.editorValue.customWidgetData\n : surveyElement.customWidgetData;\n el.oninput = function () {\n customWidgetData.isNeedRender = true;\n };\n\n var pushValueHandler = function () {\n if (!el.inputmask) return;\n if (el.inputmask.isComplete()) {\n surveyElement.value = options.autoUnmask\n ? el.inputmask.unmaskedvalue()\n : el.value;\n } else {\n surveyElement.value = null;\n }\n };\n el.onfocusout = el.onchange = pushValueHandler;\n\n var updateHandler = function () {\n el.value =\n surveyElement.value === undefined || surveyElement.value === null\n ? \"\"\n : surveyElement.value;\n };\n surveyElement.valueChangedCallback = updateHandler;\n updateHandler();\n },\n afterRender: function (question, el) {\n if (question.getType() != \"multipletext\") {\n var input = el.querySelector(\"input\") || el;\n this.applyInputMask(question, input);\n } else {\n for (var i = 0; i < question.items.length; i++) {\n var item = question.items[i];\n if (item.inputMask != \"none\" || item.inputFormat) {\n var input = el.querySelector(\"#\" + item.editor.inputId);\n if (input) {\n this.applyInputMask(item, input);\n }\n }\n }\n }\n },\n willUnmount: function (question, el) {\n var input = el.querySelector(\"input\") || el;\n if (!!input && !!input.inputmask) {\n input.inputmask.remove();\n }\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget);\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey, $) {\n $ = $ || window.$;\n var widget = {\n name: \"barrating\",\n title: \"Bar rating\",\n iconName: \"icon-barrating\",\n widgetIsLoaded: function () {\n return typeof $ == \"function\" && !!$.fn.barrating;\n },\n defaultJSON: { choices: [1, 2, 3, 4, 5] },\n isFit: function (question) {\n return question.getType() === \"barrating\";\n },\n isDefaultRender: true,\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\n \"barrating\",\n [\n { name: \"hasOther\", visible: false },\n { name: \"otherText\", visible: false },\n { name: \"optionsCaption\", visible: false },\n { name: \"otherErrorText\", visible: false },\n { name: \"storeOthersAsComment\", visible: false },\n { name: \"renderAs\", visible: false },\n { name: \"select2Config\", visible: false },\n ],\n null,\n \"dropdown\"\n );\n Survey.JsonObject.metaData.addProperty(\"barrating\", {\n name: \"showValues:boolean\",\n default: false,\n category: \"general\",\n });\n Survey.JsonObject.metaData.addProperty(\"barrating\", {\n name: \"ratingTheme\",\n category: \"general\",\n default: \"css-stars\",\n choices: [\n \"fontawesome-stars\",\n \"css-stars\",\n \"bars-pill\",\n \"bars-1to10\",\n \"bars-movie\",\n \"bars-reversed\",\n \"bars-horizontal\",\n \"fontawesome-stars-o\",\n ],\n });\n },\n afterRender: function (question, el) {\n var $customSelect;\n var $questionInput;\n var contentContainer = $(el).is(\"select\")\n ? $(el).parent().parent()[0]\n : $(el).parent()[0];\n var renderCustomSelect = function () {\n $customSelect = $(\"\");\n question.visibleChoices.forEach(function (choice) {\n $customSelect.append(\n ''.format(choice.value, choice.text)\n );\n });\n $questionInput = $(contentContainer).find(\n '[id=\"{0}\"]'.format(question.inputId)\n );\n\n $questionInput.css(\"display\", \"none\");\n $questionInput.after($customSelect);\n $customSelect[0].selectedIndex = -1;\n };\n var removeCustomSelect = function () {\n $questionInput.css(\"display\", \"\");\n $customSelect.barrating(\"destroy\");\n $customSelect.remove();\n };\n var renderBarrating = function () {\n $customSelect.barrating(\"show\", {\n theme: question.ratingTheme,\n initialRating: question.value,\n showValues: question.showValues,\n showSelectedRating: false,\n readonly: question.isReadOnly,\n onSelect: function (value, text) {\n valueChangingByWidget = true;\n question.value = value;\n valueChangingByWidget = false;\n },\n });\n };\n renderCustomSelect();\n renderBarrating();\n if (!!$customSelect.parents()[0])\n $customSelect.parents()[0].style.marginBottom = \"3px\";\n var valueChangingByWidget = false;\n\n question.valueChangedCallback = function () {\n if (\n !valueChangingByWidget &&\n $(contentContainer).find(\"select.sv-widget-select\")[0].value !==\n question.value\n ) {\n $(contentContainer)\n .find(\"select.sv-widget-select\")\n .barrating(\"set\", question.value);\n }\n };\n question.__barratingOnPropertyChangedCallback = function (\n sender,\n options\n ) {\n if (options.name == \"ratingTheme\") {\n $customSelect.barrating(\"destroy\");\n renderBarrating();\n }\n };\n question.onPropertyChanged.add(\n question.__barratingOnPropertyChangedCallback\n );\n question.readOnlyChangedCallback = function () {\n removeCustomSelect();\n renderCustomSelect();\n renderBarrating();\n };\n question.visibleChoicesChangedCallback = function () {\n renderBarrating();\n };\n },\n willUnmount: function (question, el) {\n var $contentContainer = $(el).is(\"select\")\n ? $(el).parent().parent()\n : $(el).parent();\n var $el = $contentContainer.find(\"select.sv-widget-select\");\n $el.barrating(\"destroy\");\n $el.remove();\n question.valueChangedCallback = undefined;\n question.onPropertyChanged.remove(\n question.__barratingOnPropertyChangedCallback\n );\n question.__barratingOnPropertyChangedCallback = undefined;\n },\n pdfQuestionType: \"dropdown\",\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey, $) {\n $ = $ || window.$;\n if (\n !!$ &&\n !$.fn.bootstrapDP &&\n !!$.fn.datepicker &&\n !!$.fn.datepicker.noConflict\n ) {\n $.fn.bootstrapDP = $.fn.datepicker.noConflict();\n if (!$.fn.datepicker) {\n $.fn.datepicker = $.fn.bootstrapDP;\n }\n }\n var widget = {\n name: \"datepicker\",\n title: \"Date picker\",\n iconName: \"icon-datepicker\",\n widgetIsLoaded: function () {\n return !!$ && !!$.fn.datepicker && !$.fn.datepicker.noConflict;\n },\n isFit: function (question) {\n return question.getType() === \"datepicker\";\n },\n htmlTemplate: \"\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\n \"datepicker\",\n [\n { name: \"inputType\", visible: false },\n { name: \"inputFormat\", visible: false },\n { name: \"inputMask\", visible: false },\n ],\n null,\n \"text\"\n );\n Survey.JsonObject.metaData.addProperty(\"datepicker\", {\n name: \"dateFormat\",\n category: \"general\",\n });\n Survey.JsonObject.metaData.addProperty(\"datepicker\", {\n name: \"config\",\n category: \"general\",\n visible: false,\n default: null,\n });\n Survey.JsonObject.metaData.addProperty(\"datepicker\", {\n name: \"maxDate\",\n category: \"general\",\n });\n Survey.JsonObject.metaData.addProperty(\"datepicker\", {\n name: \"minDate\",\n category: \"general\",\n });\n },\n afterRender: function (question, el) {\n var $el = $(el).is(\".widget-datepicker\")\n ? $(el)\n : $(el).find(\".widget-datepicker\");\n $el.addClass(question.css.text.root);\n var isSelecting = false;\n var config = $.extend(true, {}, question.config || {});\n if (!!question.placeHolder) {\n $el.attr(\"placeholder\", question.placeHolder);\n }\n if (config.dateFormat === undefined) {\n config.dateFormat = !!question.dateFormat\n ? question.dateFormat\n : undefined;\n }\n if (config.option === undefined) {\n config.option = {\n minDate: null,\n maxDate: null,\n };\n }\n if (!!question.minDate) {\n config.minDate = question.minDate;\n }\n if (!!question.maxDate) {\n config.maxDate = question.maxDate;\n }\n if (!!question.renderedMin) {\n config.minDate = question.renderedMin;\n }\n if (!!question.renderedMax) {\n config.maxDate = question.renderedMax;\n }\n config.disabled = question.isReadOnly;\n if (config.onSelect === undefined) {\n config.onSelect = function (dateText) {\n isSelecting = true;\n question.value = dateText;\n isSelecting = false;\n this.fixFocusIE = true;\n };\n }\n config.fixFocusIE = false;\n config.onClose = function (dateText, inst) {\n this.fixFocusIE = true;\n };\n config.beforeShow = function (input, inst) {\n var result = !!navigator.userAgent.match(/Trident\\/7\\./)\n ? !this.fixFocusIE\n : true;\n this.fixFocusIE = false;\n return result;\n };\n var pickerWidget = $el.datepicker(config);\n\n $el.keyup(function (e) {\n if (e.keyCode == 8 || e.keyCode == 46) {\n $.datepicker._clearDate(this);\n }\n });\n\n question.readOnlyChangedCallback = function () {\n $el.datepicker(\"option\", \"disabled\", question.isReadOnly);\n };\n function updateDate() {\n if (question.value) {\n pickerWidget.datepicker(\"setDate\", question.value);\n } else {\n pickerWidget.datepicker(\"setDate\", null);\n }\n }\n question.registerFunctionOnPropertyValueChanged(\n \"dateFormat\",\n function () {\n question.dateFormat &&\n pickerWidget.datepicker(\n \"option\",\n \"dateFormat\",\n question.dateFormat\n );\n updateDate();\n }\n );\n question.valueChangedCallback = function () {\n if (!isSelecting) {\n updateDate();\n $el.blur();\n }\n };\n question.valueChangedCallback();\n },\n willUnmount: function (question, el) {\n var $el = $(el).is(\".widget-datepicker\")\n ? $(el)\n : $(el).find(\".widget-datepicker\");\n $el.datepicker(\"destroy\");\n },\n pdfQuestionType: \"text\",\n };\n\n Survey.matrixDropdownColumnTypes.datepicker = { properties: [\"placeHolder\"] };\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_nouislider__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_nouislider___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_nouislider__);\n\n\nfunction init(Survey) {\n var widget = {\n name: \"nouislider\",\n title: \"noUiSlider\",\n iconName: \"icon-nouislider\",\n widgetIsLoaded: function () {\n return typeof __WEBPACK_IMPORTED_MODULE_0_nouislider___default.a != \"undefined\";\n },\n isFit: function (question) {\n return question.getType() === \"nouislider\";\n },\n htmlTemplate:\n \"
\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\"nouislider\", [], null, \"empty\");\n Survey.JsonObject.metaData.addProperties(\"nouislider\", [\n {\n name: \"step:number\",\n category: \"slider\",\n categoryIndex: 1,\n default: 1,\n },\n {\n name: \"rangeMin:number\",\n category: \"slider\",\n default: 0,\n },\n {\n name: \"rangeMax:number\",\n category: \"slider\",\n default: 100,\n },\n {\n name: \"pipsMode\",\n category: \"slider\",\n default: \"positions\",\n },\n {\n name: \"pipsValues:itemvalues\",\n category: \"slider\",\n default: [0, 25, 50, 75, 100],\n },\n {\n name: \"pipsText:itemvalues\",\n category: \"slider\",\n default: [0, 25, 50, 75, 100],\n },\n {\n name: \"pipsDensity:number\",\n category: \"slider\",\n default: 5,\n },\n {\n name: \"orientation\",\n category: \"slider\",\n default: \"horizontal\",\n choices: [\"horizontal\", \"vertical\"]\n },\n {\n name: \"direction:string\",\n category: \"slider\",\n default: \"ltr\",\n },\n {\n name: \"tooltips:boolean\",\n category: \"slider\",\n default: true,\n },\n ]);\n },\n afterRender: function (question, el) {\n el.style.paddingBottom = \"19px\";\n el.style.paddingLeft = \"20px\";\n el.style.paddingRight = \"20px\";\n el.style.paddingTop = \"44px\";\n el = el.children[0];\n el.style.marginBottom = \"60px\";\n if (question.orientation === \"vertical\") {\n el.style.height = \"250px\";\n }\n var slider = __WEBPACK_IMPORTED_MODULE_0_nouislider___default.a.create(el, {\n start: question.value || (question.rangeMin + question.rangeMax) / 2,\n connect: [true, false],\n step: question.step,\n tooltips: question.tooltips,\n pips: {\n mode: question.pipsMode || \"positions\",\n values: question.pipsValues.map(function (pVal) {\n var pipValue = pVal;\n if (pVal.value !== undefined) {\n pipValue = pVal.value;\n }\n return parseInt(pipValue);\n }),\n density: question.pipsDensity || 5,\n format: {\n to: function (pVal) {\n var pipText = pVal;\n question.pipsText.map(function (el) {\n if (el.text !== undefined && pVal === el.value) {\n pipText = el.text;\n }\n });\n return pipText;\n },\n },\n },\n range: {\n min: question.rangeMin,\n max: question.rangeMax,\n },\n orientation: question.orientation,\n direction: question.direction,\n });\n slider.on(\"change\", function () {\n question.value = Number(slider.get());\n });\n var updateValueHandler = function () {\n slider.set(question.value);\n };\n if (question.isReadOnly) {\n el.setAttribute(\"disabled\", true);\n }\n updateValueHandler();\n question.noUiSlider = slider;\n question.valueChangedCallback = updateValueHandler;\n question.readOnlyChangedCallback = function () {\n if (question.isReadOnly) {\n el.setAttribute(\"disabled\", true);\n } else {\n el.removeAttribute(\"disabled\");\n }\n };\n },\n willUnmount: function (question, el) {\n if (!!question.noUiSlider) {\n question.noUiSlider.destroy();\n question.noUiSlider = null;\n }\n question.readOnlyChangedCallback = null;\n },\n pdfRender: function (_, options) {\n if (options.question.getType() === \"nouislider\") {\n var point = options.module.SurveyHelper.createPoint(\n options.module.SurveyHelper.mergeRects.apply(null, options.bricks)\n );\n point.xLeft += options.controller.unitWidth;\n point.yTop +=\n options.controller.unitHeight *\n options.module.FlatQuestion.CONTENT_GAP_VERT_SCALE;\n var rect = options.module.SurveyHelper.createTextFieldRect(\n point,\n options.controller\n );\n var textboxBrick = new options.module.TextFieldBrick(\n options.question,\n options.controller,\n rect,\n true,\n options.question.id,\n options.question.value || options.question.defaultValue || \"\",\n \"\",\n options.question.isReadOnly,\n false,\n \"text\"\n );\n options.bricks.push(textboxBrick);\n }\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_7__;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey, $) {\n $ = $ || window.$;\n var widget = {\n name: \"tagbox\",\n title: \"Tag box\",\n iconName: \"icon-tagbox\",\n widgetIsLoaded: function () {\n return typeof $ == \"function\" && !!$.fn.select2;\n },\n defaultJSON: {\n choices: [\"Item 1\", \"Item 2\", \"Item 3\"],\n },\n htmlTemplate:\n \"
\",\n isFit: function (question) {\n return question.getType() === \"tagbox\";\n },\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\n \"tagbox\",\n [\n { name: \"hasOther:boolean\", visible: false },\n { name: \"hasSelectAll:boolean\", visible: false },\n { name: \"hasNone:boolean\", visible: false },\n { name: \"otherText\", visible: false },\n { name: \"selectAllText\", visible: false },\n { name: \"noneText\", visible: false },\n ],\n null,\n \"checkbox\"\n );\n Survey.JsonObject.metaData.addProperty(\"tagbox\", {\n name: \"select2Config\",\n category: \"general\",\n default: null,\n });\n Survey.JsonObject.metaData.addProperty(\"tagbox\", {\n name: \"placeholder\",\n category: \"general\",\n default: \"\",\n });\n Survey.JsonObject.metaData.addProperty(\"tagbox\", {\n name: \"allowAddNewTag:boolean\",\n category: \"general\",\n default: false,\n });\n Survey.matrixDropdownColumnTypes.tagbox = {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"optionsCaption\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n };\n },\n fixStyles: function (el) {\n el.parentElement.querySelector(\".select2-search__field\").style.border =\n \"none\";\n },\n afterRender: function (question, el) {\n var self = this;\n var select2Config = question.select2Config;\n var settings =\n select2Config && typeof select2Config == \"string\"\n ? JSON.parse(select2Config)\n : select2Config;\n var $el = $(el).is(\"select\") ? $(el) : $(el).find(\"select\");\n\n self.willUnmount(question, el);\n\n if (!settings) settings = {};\n settings.placeholder = question.placeholder;\n settings.tags = question.allowAddNewTag;\n settings.disabled = question.isReadOnly;\n settings.theme = \"classic\";\n if (!!question.maxSelectedChoices) {\n settings.maximumSelectionLength = question.maxSelectedChoices;\n }\n\n $el.select2(settings);\n\n var $otherElement = $(el).find(\"textarea\");\n if (\n !!question.survey &&\n !!question.survey.css &&\n !!question.survey.css.checkbox\n ) {\n $otherElement.addClass(question.survey.css.checkbox.other);\n }\n $otherElement.bind(\"input propertychange\", function () {\n question.comment = $otherElement.val();\n });\n var updateComment = function () {\n $otherElement.val(question.comment);\n if (question.isOtherSelected) {\n $otherElement.show();\n } else {\n $otherElement.hide();\n }\n };\n\n self.fixStyles(el);\n var question;\n var updateValueHandler = function () {\n if (question.hasSelectAll && question.isAllSelected) {\n $el\n .val([question.selectAllItemValue.value].concat(question.value))\n .trigger(\"change\");\n } else {\n $el.val(question.value).trigger(\"change\");\n }\n self.fixStyles(el);\n updateComment();\n };\n var updateChoices = function () {\n $el.select2().empty();\n if (settings.ajax) {\n $el.select2(settings);\n } else {\n settings.data = question.visibleChoices.map(function (choice) {\n return {\n id: choice.value,\n text: choice.text,\n };\n });\n $el.select2(settings);\n }\n updateValueHandler();\n };\n var isAllItemSelected = function (value) {\n return (\n question.hasSelectAll && value === question.selectAllItemValue.value\n );\n };\n question._propertyValueChangedFnSelect2 = function () {\n updateChoices();\n };\n\n $otherElement.prop(\"disabled\", question.isReadOnly);\n question.readOnlyChangedCallback = function () {\n $el.prop(\"disabled\", question.isReadOnly);\n $otherElement.prop(\"disabled\", question.isReadOnly);\n };\n question.registerFunctionOnPropertyValueChanged(\n \"visibleChoices\",\n question._propertyValueChangedFnSelect2\n );\n question.valueChangedCallback = updateValueHandler;\n $el.on(\"select2:select\", function (e) {\n if (isAllItemSelected(e.params.data.id)) {\n question.selectAll();\n } else {\n question.value = (question.value || []).concat(e.params.data.id);\n }\n updateComment();\n });\n $el.on(\"select2:unselect\", function (e) {\n var index = (question.value || []).indexOf(e.params.data.id);\n if (isAllItemSelected(e.params.data.id)) {\n question.clearValue();\n } else if (index !== -1) {\n var val = [].concat(question.value);\n val.splice(index, 1);\n question.value = val;\n }\n updateComment();\n });\n updateChoices();\n },\n willUnmount: function (question, el) {\n if (!question._propertyValueChangedFnSelect2) return;\n\n var $select2 = $(el).find(\"select\");\n if (!!$select2.data(\"select2\")) {\n $select2.off(\"select2:select\").select2(\"destroy\");\n }\n question.readOnlyChangedCallback = null;\n question.valueChangedCallback = null;\n question.unRegisterFunctionOnPropertyValueChanged(\n \"visibleChoices\",\n question._propertyValueChangedFnSelect2\n );\n question._propertyValueChangedFnSelect2 = undefined;\n },\n pdfQuestionType: \"checkbox\",\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sortablejs__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sortablejs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_sortablejs__);\n\n\nfunction init(Survey) {\n var widget = {\n name: \"sortablelist\",\n title: \"Sortable list\",\n iconName: \"icon-sortablejs\",\n widgetIsLoaded: function () {\n return typeof __WEBPACK_IMPORTED_MODULE_0_sortablejs___default.a != \"undefined\";\n },\n defaultJSON: { choices: [\"Item 1\", \"Item 2\", \"Item 3\"] },\n rootStyle: \"width:100%:\",\n areaStyle:\n \"border: 1px solid #1ab394; width:100%; min-height:50px; margin-top:10px;\",\n itemStyle: \"background-color:#1ab394;color:#fff;margin:5px;padding:10px;\",\n isFit: function (question) {\n return question.getType() === \"sortablelist\";\n },\n htmlTemplate: \"
\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\n \"sortablelist\",\n [\n { name: \"hasOther\", visible: false },\n { name: \"storeOthersAsComment\", visible: false },\n { name: \"hasNone\", visible: false },\n { name: \"renderAs\", visible: false },\n { name: \"checkboxClass\", visible: false },\n { name: \"hasSelectAll\", visible: false },\n { name: \"noneText\", visible: false },\n { name: \"selectAllText\", visible: false },\n ],\n null,\n \"checkbox\"\n );\n Survey.JsonObject.metaData.addProperty(\"sortablelist\", {\n name: \"emptyText\",\n default: \"Move items here.\",\n category: \"general\",\n });\n Survey.JsonObject.metaData.addProperty(\"sortablelist\", {\n name: \"useDefaultTheme:switch\",\n default: true,\n category: \"general\",\n });\n Survey.JsonObject.metaData.addProperty(\"sortablelist\", {\n name: \"maxAnswersCount:number\",\n default: -1,\n category: \"general\",\n });\n },\n afterRender: function (question, el) {\n var self = this;\n\n if (!question.useDefaultTheme) {\n self.rootStyle = \"\";\n self.itemStyle = \"\";\n self.areaStyle = \"\";\n }\n el.style.cssText = self.rootStyle;\n el.className = \"sjs-sortablejs-root\";\n var source, result;\n var resultEl = document.createElement(\"div\");\n var emptyEl = document.createElement(\"span\");\n var sourceEl = document.createElement(\"div\");\n\n resultEl.style.cssText = self.areaStyle;\n resultEl.style.boxSizing = \"border-box\";\n resultEl.className = \"sjs-sortablejs-result\";\n\n emptyEl.innerHTML = question.emptyText;\n resultEl.appendChild(emptyEl);\n\n sourceEl.style.cssText = self.areaStyle;\n sourceEl.style.boxSizing = \"border-box\";\n sourceEl.className = \"sjs-sortablejs-source\";\n el.appendChild(resultEl);\n el.appendChild(sourceEl);\n var hasValueInResults = function (val) {\n var res = question.value;\n if (!Array.isArray(res)) return false;\n for (var i = 0; i < res.length; i++) {\n if (res[i] == val) return true;\n }\n return false;\n };\n var addChoiceToWidget = function (choice, inResults) {\n var srcEl = inResults ? resultEl : sourceEl;\n var newEl = document.createElement(\"div\");\n newEl.className = \"sjs-sortablejs-item\";\n newEl.style.cssText = self.itemStyle;\n newEl.innerText = choice.text;\n newEl.dataset[\"value\"] = choice.value;\n srcEl.appendChild(newEl);\n choice.onPropertyChanged.add(function (sender, options) {\n newEl.innerText = sender.text;\n });\n };\n var getChoicesNotInResults = function () {\n var res = [];\n question.visibleChoices.forEach(function (choice) {\n if (!hasValueInResults(choice.value)) {\n res.push(choice);\n }\n });\n return res;\n };\n var getChoicesInResults = function () {\n var res = [];\n var val = question.value;\n if (!Array.isArray(val)) return res;\n for (var i = 0; i < val.length; i++) {\n var item = Survey.ItemValue.getItemByValue(\n question.visibleChoices,\n val[i]\n );\n if (!!item) {\n res.push(item);\n }\n }\n return res;\n };\n var isUpdatingQuestionValue = false;\n var updateValueHandler = function () {\n if (isUpdatingQuestionValue) return;\n resultEl.innerHTML = \"\";\n resultEl.appendChild(emptyEl);\n sourceEl.innerHTML = \"\";\n var notInResults = getChoicesNotInResults();\n var inResults = getChoicesInResults();\n emptyEl.style.display = inResults.length > 0 ? \"none\" : \"\";\n inResults.forEach(function (choice) {\n addChoiceToWidget(choice, true);\n });\n notInResults.forEach(function (choice) {\n addChoiceToWidget(choice, false);\n });\n };\n result = question.resultEl = __WEBPACK_IMPORTED_MODULE_0_sortablejs___default.a.create(resultEl, {\n animation: 150,\n disabled: question.isReadOnly,\n group: {\n name: question.name,\n put: function (to, from) {\n return (\n to.options.group && from.options.group && to.options.group.name === from.options.group.name &&\n (question.maxAnswersCount < 0 ||\n to.el.children.length <= question.maxAnswersCount)\n );\n },\n },\n onSort: function (evt) {\n var result = [];\n if (resultEl.children.length === 1) {\n emptyEl.style.display = \"\";\n } else {\n emptyEl.style.display = \"none\";\n for (var i = 0; i < resultEl.children.length; i++) {\n if (typeof resultEl.children[i].dataset.value === \"undefined\")\n continue;\n result.push(resultEl.children[i].dataset.value);\n }\n }\n isUpdatingQuestionValue = true;\n question.value = result;\n isUpdatingQuestionValue = false;\n },\n });\n source = question.sourceEl = __WEBPACK_IMPORTED_MODULE_0_sortablejs___default.a.create(sourceEl, {\n animation: 150,\n disabled: question.isReadOnly,\n group: question.name,\n });\n question.valueChangedCallback = updateValueHandler;\n question.onPropertyChanged.add(function (sender, options) {\n if (options.name == \"emptyText\") {\n emptyEl.innerHTML = question.emptyText;\n }\n });\n question.readOnlyChangedCallback = function () {\n if (question.isReadOnly) {\n result.options.disabled = true;\n source.options.disabled = true;\n } else {\n result.options.disabled = false;\n source.options.disabled = false;\n }\n };\n question.registerFunctionOnPropertyValueChanged(\n \"visibleChoices\",\n updateValueHandler\n );\n updateValueHandler();\n },\n willUnmount: function (question, el) {\n question.resultEl.destroy();\n question.sourceEl.destroy();\n question.readOnlyChangedCallback = null;\n },\n pdfQuestionType: \"checkbox\",\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_10__;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey) {\n var widget = {\n name: \"editor\",\n title: \"Editor\",\n iconName: \"icon-editor\",\n widgetIsLoaded: function () {\n return typeof CKEDITOR != \"undefined\";\n },\n isFit: function (question) {\n return question.getType() === \"editor\";\n },\n htmlTemplate:\n \"\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\"editor\", [], null, \"empty\");\n Survey.JsonObject.metaData.addProperty(\"editor\", {\n name: \"height\",\n default: 300,\n category: \"general\",\n });\n },\n afterRender: function (question, el) {\n var name = question.inputId;\n CKEDITOR.editorConfig = function (config) {\n config.language = \"es\";\n config.height = question.height;\n config.toolbarCanCollapse = true;\n };\n el.name = name;\n\n if (CKEDITOR.instances[name]) {\n CKEDITOR.instances[name].removeAllListeners();\n CKEDITOR.remove(CKEDITOR.instances[name]);\n }\n\n var editor = CKEDITOR.replace(el);\n CKEDITOR.instances[name].config.readOnly = question.isReadOnly;\n\n var isValueChanging = false;\n var updateValueHandler = function () {\n if (isValueChanging || typeof question.value === \"undefined\") return;\n editor.setData(question.value);\n };\n editor.on(\"change\", function () {\n isValueChanging = true;\n question.value = editor.getData();\n isValueChanging = false;\n });\n\n question.valueChangedCallback = updateValueHandler;\n question.readOnlyChangedCallback = function () {\n if (question.isReadOnly) {\n editor.setReadOnly(true);\n } else {\n editor.setReadOnly(false);\n }\n };\n updateValueHandler();\n },\n willUnmount: function (question, el) {\n question.readOnlyChangedCallback = null;\n CKEDITOR.instances[question.inputId].destroy(false);\n },\n pdfRender: function (survey, options) {\n if (options.question.getType() === \"editor\") {\n const loc = new Survey.LocalizableString(survey, true);\n loc.text = options.question.value || options.question.defaultValue;\n options.question[\"locHtml\"] = loc;\n if (\n options.question.renderAs === \"standard\" ||\n options.question.renderAs === \"image\"\n ) {\n options.question[\"renderAs\"] = options.question.renderAs;\n } else options.question[\"renderAs\"] = \"auto\";\n const flatHtml = options.repository.create(\n survey,\n options.question,\n options.controller,\n \"html\"\n );\n return new Promise(function (resolve) {\n flatHtml.generateFlats(options.point).then(function (htmlBricks) {\n options.bricks = htmlBricks;\n resolve();\n });\n });\n }\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey, $) {\n $ = $ || window.$;\n var widget = {\n name: \"autocomplete\",\n widgetIsLoaded: function () {\n return typeof $ == \"function\" && !!$.fn.easyAutocomplete;\n },\n isFit: function (question) {\n return question.getType() === \"text\";\n },\n isDefaultRender: true,\n activatedByChanged: function (activatedBy) {\n if (\n Survey.JsonObject.metaData.findProperty(\"text\", \"choices\") !== null ||\n Survey.JsonObject.metaData.findProperty(\"text\", \"choicesByUrl\") !== null\n ) {\n return;\n }\n Survey.JsonObject.metaData.addProperty(\"text\", {\n name: \"choices:itemvalues\",\n category: \"choices\",\n categoryIndex: 1,\n });\n Survey.JsonObject.metaData.addProperty(\"text\", {\n name: \"choicesByUrl:restfull\",\n className: \"ChoicesRestfull\",\n category: \"choicesByUrl\",\n categoryIndex: 2,\n });\n Survey.JsonObject.metaData.addProperty(\"text\", {\n name: \"config\",\n category: \"general\",\n default: null,\n });\n Array.prototype.push.apply(\n Survey.matrixDropdownColumnTypes.text.properties,\n [\"choices\", \"choicesOrder\", \"choicesByUrl\", \"otherText\"]\n );\n },\n afterRender: function (question, el) {\n var $el = $(el).is(\"input\") ? $(el) : $(el).find(\"input\");\n\n var getCssSelectorFromClassesString = function (classesString) {\n if (!classesString) return \"\";\n var cssSelector = classesString.replace(/(^\\s*)|(\\s+)/g, \".\"); // replace whitespaces with '.'\n return cssSelector;\n };\n\n var questionRootClasses = getCssSelectorFromClassesString(\n question.cssRoot\n );\n\n var questionRoot = $el.parents(questionRootClasses)[0];\n if (!!questionRootClasses && !!questionRoot) {\n questionRoot.style.overflow = \"visible\";\n }\n\n var config = question.config;\n var options =\n config && typeof config == \"string\" ? JSON.parse(config) : config;\n if (!options) options = {};\n\n options.data = (question.choices || []).map(function (item) {\n return item.text;\n });\n if (options.adjustWidth === undefined) {\n options.adjustWidth = false;\n }\n if (!options.list) {\n options.list = {\n sort: {\n enabled: true,\n },\n match: {\n enabled: true,\n },\n onSelectItemEvent: function() {\n var selectedData = $el.getSelectedItemData();\n question.value = selectedData;\n }\n };\n }\n if (!options.placeholder) {\n options.placeholder = question.placeholder;\n }\n\n if (!!question.choicesByUrl) {\n options.url = function (phrase) {\n return question.choicesByUrl.url;\n };\n options.getValue = question.choicesByUrl.valueName;\n // options.ajaxSettings = {\n // dataType: \"jsonp\"\n // };\n }\n $el.easyAutocomplete(options);\n\n $el[0].oninput = function () {\n question.customWidgetData.isNeedRender = true;\n };\n var updateHandler = function () {\n $el[0].value =\n typeof question.value === \"undefined\" ? \"\" : question.value;\n };\n question.valueChangedCallback = updateHandler;\n updateHandler();\n },\n willUnmount: function (question, el) {\n // var $el = $(el).find(\"input\");\n // $el.autocomplete(\"destroy\");\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"type\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey) {\n var widget = {\n settings: {\n supportedTypes: [\"radiogroup\", \"checkbox\", \"boolean\"],\n radiogroup: {\n rootClass: \"pretty p-default p-round\",\n inputType: \"radio\",\n states: [{ stateClass: \"state p-success\", addOn: \"\" }],\n },\n checkbox: {\n rootClass: \"pretty p-default\",\n inputType: \"checkbox\",\n states: [{ stateClass: \"state p-success\", addOn: \"\" }],\n },\n boolean: {\n rootClass: \"pretty p-icon p-default p-has-indeterminate\",\n inputType: \"checkbox\",\n states: [\n { stateClass: \"state p-success\", addOn: \"\" },\n {\n stateClass: \"state p-success p-is-indeterminate\",\n iconClass: \"icon mdi mdi-minus\",\n addOn: \"\",\n },\n ],\n },\n },\n name: \"pretty-checkbox\",\n activatedBy: \"property\",\n widgetIsLoaded: function () {\n return true;\n },\n htmlTemplate: \"
\",\n isFit: function (question) {\n var isFitByType =\n widget.settings.supportedTypes.indexOf(question.getType()) !== -1;\n\n if (widget.activatedBy === \"property\") {\n return question[\"renderAs\"] === \"prettycheckbox\" && isFitByType;\n } else if (widget.activatedBy === \"type\") {\n return isFitByType;\n }\n\n return false;\n },\n activatedByChanged: function (value) {\n if (this.widgetIsLoaded()) {\n widget.activatedBy = value;\n widget.settings.supportedTypes.forEach(function (supportedType) {\n Survey.JsonObject.metaData.removeProperty(supportedType, \"renderAs\");\n\n if (value === \"property\") {\n Survey.JsonObject.metaData.addProperty(supportedType, {\n name: \"renderAs\",\n category: \"general\",\n default: \"default\",\n choices: [\"default\", \"prettycheckbox\"],\n });\n }\n });\n }\n },\n isDefaultRender: false,\n afterRender: function (question, element) {\n var itemInputs = {};\n var questionType = question.getType();\n var options = this.settings[questionType];\n var checkboxType = questionType === \"checkbox\";\n var radiogroupType = questionType === \"radiogroup\";\n var booleanType = questionType === \"boolean\";\n\n var inChangeHandler = false;\n var changeHandler = function (event) {\n inChangeHandler = true;\n try {\n var target = arguments[0].target;\n var targetValue = target.value;\n var targetChecked = target.checked;\n\n if (checkboxType) {\n var questionValue = question.createValueCopy() || [];\n var valueIndex = questionValue.indexOf(targetValue);\n if (targetChecked) {\n if (valueIndex === -1) {\n questionValue.push(targetValue);\n }\n } else {\n if (valueIndex !== -1) {\n questionValue.splice(valueIndex, 1);\n }\n }\n\n question.value = questionValue;\n } else if (radiogroupType) {\n question.value = targetValue;\n } else {\n question.value = targetChecked;\n }\n } finally {\n inChangeHandler = false;\n }\n };\n\n var itemWidth =\n question.colCount > 0 ? 100 / question.colCount + \"%\" : \"\";\n\n var choices = booleanType\n ? [{ locText: question.locTitle, value: !!question.value }]\n : question.visibleChoices;\n choices.forEach(function (choiceItem, index) {\n var input = document.createElement(\"input\");\n input.type = options.inputType;\n input.name = question.name + (checkboxType ? \"\" + index : \"\");\n input.onchange = changeHandler;\n input.value = choiceItem.value;\n\n if (booleanType && question.value === null) {\n input.indeterminate = question.defaultValue === \"indeterminate\";\n }\n\n var controlRoot = document.createElement(\"div\");\n controlRoot.className = options.rootClass;\n controlRoot.appendChild(input);\n\n options.states.forEach(function (state) {\n var stateRoot = document.createElement(\"div\");\n stateRoot.className = state.stateClass;\n if (!!state.iconClass) {\n var icon = document.createElement(\"i\");\n icon.className = state.iconClass;\n stateRoot.appendChild(icon);\n }\n\n var label = document.createElement(\"label\");\n if (choiceItem.locText.hasHtml) {\n label.innerHTML = choiceItem.locText.html;\n } else {\n label.textContent = choiceItem.locText.renderedText;\n }\n stateRoot.appendChild(label);\n\n controlRoot.appendChild(stateRoot);\n if (!!state.addOn) {\n stateRoot.insertAdjacentHTML(\"afterbegin\", state.addOn);\n }\n });\n\n var itemRoot = document.createElement(\"div\");\n itemRoot.className = \"sv_cw_pretty_checkbox_\" + questionType;\n itemRoot.style.display = \"inline-block\";\n itemRoot.style.width = itemWidth;\n itemRoot.appendChild(controlRoot);\n\n element.appendChild(itemRoot);\n\n itemInputs[choiceItem.value] = input;\n });\n\n var updateValueHandler = function (newValue) {\n if (!inChangeHandler) {\n var checkedItems = newValue || [];\n if (radiogroupType || booleanType) {\n checkedItems = [newValue && newValue.toString()];\n }\n\n Object.values(itemInputs).forEach(function (inputItem) {\n if (checkedItems.indexOf(inputItem.value) !== -1) {\n inputItem.setAttribute(\"checked\", undefined);\n } else {\n inputItem.removeAttribute(\"checked\");\n }\n });\n }\n };\n var readOnlyHandler = function () {\n Object.values(itemInputs).forEach(function (inputItem) {\n if (question.isReadOnly) {\n inputItem.setAttribute(\"disabled\", true);\n } else {\n inputItem.removeAttribute(\"disabled\");\n }\n });\n };\n\n question.valueChangedCallback = updateValueHandler;\n question.readOnlyChangedCallback = readOnlyHandler;\n updateValueHandler(question.value);\n readOnlyHandler();\n },\n willUnmount: function (question, el) {\n question.valueChangedCallback = undefined;\n question.readOnlyChangedCallback = undefined;\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"property\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nvar Slider = __webpack_require__(15);\n\nfunction init(Survey) {\n var widget = {\n name: \"bootstrapslider\",\n title: \"Bootstrap Slider\",\n iconName: \"icon-bootstrap-slider\",\n widgetIsLoaded: function () {\n return typeof Slider !== \"undefined\";\n },\n isFit: function (question) {\n return question.getType() === \"bootstrapslider\";\n },\n htmlTemplate: \"
\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\"bootstrapslider\", [], null, \"empty\");\n Survey.JsonObject.metaData.addProperties(\"bootstrapslider\", [\n {\n name: \"step:number\",\n default: 1,\n category: \"general\",\n },\n {\n name: \"rangeMin:number\",\n default: 0,\n category: \"general\",\n },\n {\n name: \"rangeMax:number\",\n default: 100,\n category: \"general\",\n },\n {\n name: \"orientation\",\n default: \"horizontal\",\n choices: [\"horizontal\", \"vertical\"],\n category: \"general\"\n },\n ]);\n Survey.JsonObject.metaData.addProperty(\"bootstrapslider\", {\n name: \"config\",\n default: null,\n category: \"general\",\n });\n },\n afterRender: function (question, el) {\n el.style.paddingTop = \"20px\";\n el.style.paddingBottom = \"17px\";\n el.style.paddingLeft = \"10px\";\n var inputEl = document.createElement(\"input\");\n inputEl.id = question.id;\n inputEl.type = \"text\";\n inputEl.setAttribute(\"data-slider-id\", question.name + \"_\" + question.id);\n inputEl.setAttribute(\"data-slider-min\", question.rangeMin);\n inputEl.setAttribute(\"data-slider-max\", question.rangeMax);\n inputEl.setAttribute(\"data-slider-step\", question.step);\n if(question.orientation == \"vertical\") {\n inputEl.setAttribute(\"data-slider-orientation\", \"vertical\");\n }\n inputEl.setAttribute(\"data-slider-step\", question.step);\n inputEl.setAttribute(\n \"data-slider-value\",\n question.value || question.rangeMin\n );\n el.appendChild(inputEl);\n\n var config = question.config || {};\n\n if (config.id === undefined) {\n config.id = question.name + \"_\" + question.id;\n }\n\n if (config.min === undefined) {\n config.min = question.rangeMin;\n }\n\n if (config.max === undefined) {\n config.max = question.rangeMax;\n }\n\n if (config.step === undefined) {\n config.step = question.step;\n }\n\n if (config.enabled === undefined) {\n config.enabled = !question.isReadOnly;\n }\n\n if (config.value === undefined) {\n config.value = question.value || question.rangeMin;\n }\n\n var slider = new Slider(inputEl, config);\n\n slider.on(\"change\", function (valueObj) {\n question.value = slider.getValue();\n });\n var updateValueHandler = function () {\n slider.setValue(question.value || question.rangeMin);\n };\n question.readOnlyChangedCallback = function () {\n if (question.isReadOnly) {\n slider.disable();\n } else {\n slider.enable();\n }\n };\n question.bootstrapSlider = slider;\n question.valueChangedCallback = updateValueHandler;\n },\n willUnmount: function (question, el) {\n question.bootstrapSlider && question.bootstrapSlider.destroy();\n question.bootstrapSlider = null;\n question.readOnlyChangedCallback = null;\n },\n pdfRender: function (_, options) {\n if (options.question.getType() === \"bootstrapslider\") {\n var point = options.module.SurveyHelper.createPoint(\n options.module.SurveyHelper.mergeRects.apply(null, options.bricks)\n );\n point.xLeft += options.controller.unitWidth;\n point.yTop +=\n options.controller.unitHeight *\n options.module.FlatQuestion.CONTENT_GAP_VERT_SCALE;\n var rect = options.module.SurveyHelper.createTextFieldRect(\n point,\n options.controller\n );\n var textboxBrick = new options.module.TextFieldBrick(\n options.question,\n options.controller,\n rect,\n true,\n options.question.id,\n (\n options.question.value ||\n options.question.defaultValue ||\n \"\"\n ).toString(),\n \"\",\n options.question.isReadOnly,\n false,\n \"text\"\n );\n options.bricks.push(textboxBrick);\n }\n },\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_recordrtc__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_recordrtc___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_recordrtc__);\n\n\nfunction init(Survey) {\n var widget = {\n name: \"microphone\",\n title: \"Microphone\",\n iconName: \"icon-microphone\",\n widgetIsLoaded: function() {\n return typeof __WEBPACK_IMPORTED_MODULE_0_recordrtc___default.a != \"undefined\";\n },\n isFit: function(question) {\n return question.getType() === \"microphone\";\n },\n htmlTemplate:\n \"
\" +\n \"\" +\n \" \" +\n \" \" +\n \"
\",\n activatedByChanged: function(activatedBy) {\n Survey.JsonObject.metaData.addClass(\"microphone\", [], null, \"empty\");\n },\n\n afterRender: function(question, el) {\n var rootWidget = this;\n var buttonStartEl = el.getElementsByTagName(\"button\")[0];\n var buttonStopEl = el.getElementsByTagName(\"button\")[1];\n var audioEl = el.getElementsByTagName(\"audio\")[0];\n\n ////////// RecordRTC logic\n\n var successCallback = function(stream) {\n var options = {\n type: \"audio\",\n mimeType: \"audio/webm\",\n audioBitsPerSecond: 44100,\n sampleRate: 44100,\n bufferSize: 16384,\n numberOfAudioChannels: 1\n };\n console.log(\"successCallback\");\n question.survey.mystream = stream;\n question.survey.recordRTC = __WEBPACK_IMPORTED_MODULE_0_recordrtc___default()(\n question.survey.mystream,\n options\n );\n if (typeof question.survey.recordRTC != \"undefined\") {\n console.log(\"startRecording\");\n question.survey.recordRTC.startRecording();\n }\n };\n\n var errorCallback = function() {\n alert(\"No microphone\");\n question.survey.recordRTC = undefined;\n question.survey.mystream = undefined;\n };\n\n var processAudio = function(audioVideoWebMURL) {\n console.log(\"processAudio\");\n var recordedBlob = question.survey.recordRTC.getBlob();\n\n var fileReader = new FileReader();\n fileReader.onload = function(event) {\n var dataUri = event.target.result;\n console.log(\"dataUri: \" + dataUri);\n question.value = dataUri;\n audioEl.src = dataUri;\n\n console.log(\"cleaning\");\n question.survey.recordRTC = undefined;\n question.survey.mystream = undefined;\n };\n fileReader.readAsDataURL(recordedBlob);\n };\n\n var startRecording = function() {\n // erase previous data\n question.value = undefined;\n\n // if recorder open on another question\t- try to stop recording\n if (typeof question.survey.recordRTC != \"undefined\") {\n question.survey.recordRTC.stopRecording(doNothingHandler);\n if (typeof question.survey.mystream != \"undefined\") {\n question.survey.mystream.getAudioTracks().forEach(function(track) {\n track.stop();\n });\n }\n }\n\n var mediaConstraints = {\n video: false,\n audio: true\n };\n\n navigator.mediaDevices\n .getUserMedia(mediaConstraints)\n .then(successCallback.bind(this), errorCallback.bind(this));\n };\n\n var stopRecording = function() {\n console.log(\"stopRecording\");\n if (typeof question.survey.recordRTC != \"undefined\") {\n question.survey.recordRTC.stopRecording(processAudio.bind(this));\n if (typeof question.survey.mystream != \"undefined\") {\n question.survey.mystream.getAudioTracks().forEach(function(track) {\n track.stop();\n });\n }\n }\n };\n\n ////////////// end RTC logic //////////////////\n\n if (!question.isReadOnly) {\n buttonStartEl.onclick = startRecording;\n } else {\n buttonStartEl.parentNode.removeChild(buttonStartEl);\n }\n\n if (!question.isReadOnly) {\n buttonStopEl.onclick = stopRecording;\n } else {\n buttonStopEl.parentNode.removeChild(buttonStopEl);\n }\n\n audioEl.src = question.value;\n\n var updateValueHandler = function() {};\n\n var doNothingHandler = function() {};\n\n question.valueChangedCallback = updateValueHandler;\n updateValueHandler();\n },\n willUnmount: function(question, el) {\n console.log(\"unmount microphone no record \");\n if (typeof question.survey.recordRTC != \"undefined\") {\n question.survey.recordRTC.stopRecording(doNothingHandler);\n if (typeof question.survey.mystream != \"undefined\") {\n question.survey.mystream.getAudioTracks().forEach(function(track) {\n track.stop();\n });\n }\n question.value = undefined;\n question.survey.recordRTC = undefined;\n question.survey.mystream = undefined;\n }\n }\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global, process) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\r\n\r\n// Last time updated: 2020-02-26 1:11:47 PM UTC\r\n\r\n// ________________\r\n// RecordRTC v5.5.9\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/RecordRTC\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\n// ____________\r\n// RecordRTC.js\r\n\r\n/**\r\n * {@link https://github.com/muaz-khan/RecordRTC|RecordRTC} is a WebRTC JavaScript library for audio/video as well as screen activity recording. It supports Chrome, Firefox, Opera, Android, and Microsoft Edge. Platforms: Linux, Mac and Windows. \r\n * @summary Record audio, video or screen inside the browser.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTC\r\n * @class\r\n * @example\r\n * var recorder = RecordRTC(mediaStream or [arrayOfMediaStream], {\r\n * type: 'video', // audio or video or gif or canvas\r\n * recorderType: MediaStreamRecorder || CanvasRecorder || StereoAudioRecorder || Etc\r\n * });\r\n * recorder.startRecording();\r\n * @see For further information:\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc.\r\n * @param {object} config - {type:\"video\", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, desiredSampRate: 16000, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction RecordRTC(mediaStream, config) {\r\n if (!mediaStream) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n config = config || {\r\n type: 'video'\r\n };\r\n\r\n config = new RecordRTCConfiguration(mediaStream, config);\r\n\r\n // a reference to user's recordRTC object\r\n var self = this;\r\n\r\n function startRecording(config2) {\r\n if (!config.disableLogs) {\r\n console.log('RecordRTC version: ', self.version);\r\n }\r\n\r\n if (!!config2) {\r\n // allow users to set options using startRecording method\r\n // config2 is similar to main \"config\" object (second parameter over RecordRTC constructor)\r\n config = new RecordRTCConfiguration(mediaStream, config2);\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('started recording ' + config.type + ' stream.');\r\n }\r\n\r\n if (mediaRecorder) {\r\n mediaRecorder.clearRecordedData();\r\n mediaRecorder.record();\r\n\r\n setState('recording');\r\n\r\n if (self.recordingDuration) {\r\n handleRecordingDuration();\r\n }\r\n return self;\r\n }\r\n\r\n initRecorder(function() {\r\n if (self.recordingDuration) {\r\n handleRecordingDuration();\r\n }\r\n });\r\n\r\n return self;\r\n }\r\n\r\n function initRecorder(initCallback) {\r\n if (initCallback) {\r\n config.initCallback = function() {\r\n initCallback();\r\n initCallback = config.initCallback = null; // recorder.initRecorder should be call-backed once.\r\n };\r\n }\r\n\r\n var Recorder = new GetRecorderType(mediaStream, config);\r\n\r\n mediaRecorder = new Recorder(mediaStream, config);\r\n mediaRecorder.record();\r\n\r\n setState('recording');\r\n\r\n if (!config.disableLogs) {\r\n console.log('Initialized recorderType:', mediaRecorder.constructor.name, 'for output-type:', config.type);\r\n }\r\n }\r\n\r\n function stopRecording(callback) {\r\n callback = callback || function() {};\r\n\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state === 'paused') {\r\n self.resumeRecording();\r\n\r\n setTimeout(function() {\r\n stopRecording(callback);\r\n }, 1);\r\n return;\r\n }\r\n\r\n if (self.state !== 'recording' && !config.disableLogs) {\r\n console.warn('Recording state should be: \"recording\", however current state is: ', self.state);\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('Stopped recording ' + config.type + ' stream.');\r\n }\r\n\r\n if (config.type !== 'gif') {\r\n mediaRecorder.stop(_callback);\r\n } else {\r\n mediaRecorder.stop();\r\n _callback();\r\n }\r\n\r\n setState('stopped');\r\n\r\n function _callback(__blob) {\r\n if (!mediaRecorder) {\r\n if (typeof callback.call === 'function') {\r\n callback.call(self, '');\r\n } else {\r\n callback('');\r\n }\r\n return;\r\n }\r\n\r\n Object.keys(mediaRecorder).forEach(function(key) {\r\n if (typeof mediaRecorder[key] === 'function') {\r\n return;\r\n }\r\n\r\n self[key] = mediaRecorder[key];\r\n });\r\n\r\n var blob = mediaRecorder.blob;\r\n\r\n if (!blob) {\r\n if (__blob) {\r\n mediaRecorder.blob = blob = __blob;\r\n } else {\r\n throw 'Recording failed.';\r\n }\r\n }\r\n\r\n if (blob && !config.disableLogs) {\r\n console.log(blob.type, '->', bytesToSize(blob.size));\r\n }\r\n\r\n if (callback) {\r\n var url;\r\n\r\n try {\r\n url = URL.createObjectURL(blob);\r\n } catch (e) {}\r\n\r\n if (typeof callback.call === 'function') {\r\n callback.call(self, url);\r\n } else {\r\n callback(url);\r\n }\r\n }\r\n\r\n if (!config.autoWriteToDisk) {\r\n return;\r\n }\r\n\r\n getDataURL(function(dataURL) {\r\n var parameter = {};\r\n parameter[config.type + 'Blob'] = dataURL;\r\n DiskStorage.Store(parameter);\r\n });\r\n }\r\n }\r\n\r\n function pauseRecording() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state !== 'recording') {\r\n if (!config.disableLogs) {\r\n console.warn('Unable to pause the recording. Recording state: ', self.state);\r\n }\r\n return;\r\n }\r\n\r\n setState('paused');\r\n\r\n mediaRecorder.pause();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Paused recording.');\r\n }\r\n }\r\n\r\n function resumeRecording() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state !== 'paused') {\r\n if (!config.disableLogs) {\r\n console.warn('Unable to resume the recording. Recording state: ', self.state);\r\n }\r\n return;\r\n }\r\n\r\n setState('recording');\r\n\r\n // not all libs have this method yet\r\n mediaRecorder.resume();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Resumed recording.');\r\n }\r\n }\r\n\r\n function readFile(_blob) {\r\n postMessage(new FileReaderSync().readAsDataURL(_blob));\r\n }\r\n\r\n function getDataURL(callback, _mediaRecorder) {\r\n if (!callback) {\r\n throw 'Pass a callback function over getDataURL.';\r\n }\r\n\r\n var blob = _mediaRecorder ? _mediaRecorder.blob : (mediaRecorder || {}).blob;\r\n\r\n if (!blob) {\r\n if (!config.disableLogs) {\r\n console.warn('Blob encoder did not finish its job yet.');\r\n }\r\n\r\n setTimeout(function() {\r\n getDataURL(callback, _mediaRecorder);\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (typeof Worker !== 'undefined' && !navigator.mozGetUserMedia) {\r\n var webWorker = processInWebWorker(readFile);\r\n\r\n webWorker.onmessage = function(event) {\r\n callback(event.data);\r\n };\r\n\r\n webWorker.postMessage(blob);\r\n } else {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = function(event) {\r\n callback(event.target.result);\r\n };\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n try {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n URL.revokeObjectURL(blob);\r\n return worker;\r\n } catch (e) {}\r\n }\r\n }\r\n\r\n function handleRecordingDuration(counter) {\r\n counter = counter || 0;\r\n\r\n if (self.state === 'paused') {\r\n setTimeout(function() {\r\n handleRecordingDuration(counter);\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (self.state === 'stopped') {\r\n return;\r\n }\r\n\r\n if (counter >= self.recordingDuration) {\r\n stopRecording(self.onRecordingStopped);\r\n return;\r\n }\r\n\r\n counter += 1000; // 1-second\r\n\r\n setTimeout(function() {\r\n handleRecordingDuration(counter);\r\n }, 1000);\r\n }\r\n\r\n function setState(state) {\r\n if (!self) {\r\n return;\r\n }\r\n\r\n self.state = state;\r\n\r\n if (typeof self.onStateChanged.call === 'function') {\r\n self.onStateChanged.call(self, state);\r\n } else {\r\n self.onStateChanged(state);\r\n }\r\n }\r\n\r\n var WARNING = 'It seems that recorder is destroyed or \"startRecording\" is not invoked for ' + config.type + ' recorder.';\r\n\r\n function warningLog() {\r\n if (config.disableLogs === true) {\r\n return;\r\n }\r\n\r\n console.warn(WARNING);\r\n }\r\n\r\n var mediaRecorder;\r\n\r\n var returnObject = {\r\n /**\r\n * This method starts the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var recorder = RecordRTC(mediaStream, {\r\n * type: 'video'\r\n * });\r\n * recorder.startRecording();\r\n */\r\n startRecording: startRecording,\r\n\r\n /**\r\n * This method stops the recording. It is strongly recommended to get \"blob\" or \"URI\" inside the callback to make sure all recorders finished their job.\r\n * @param {function} callback - Callback to get the recorded blob.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * // use either \"this\" or \"recorder\" object; both are identical\r\n * video.src = this.toURL();\r\n * var blob = this.getBlob();\r\n * });\r\n */\r\n stopRecording: stopRecording,\r\n\r\n /**\r\n * This method pauses the recording. You can resume recording using \"resumeRecording\" method.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo Firefox is unable to pause the recording. Fix it.\r\n * @example\r\n * recorder.pauseRecording(); // pause the recording\r\n * recorder.resumeRecording(); // resume again\r\n */\r\n pauseRecording: pauseRecording,\r\n\r\n /**\r\n * This method resumes the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.pauseRecording(); // first of all, pause the recording\r\n * recorder.resumeRecording(); // now resume it\r\n */\r\n resumeRecording: resumeRecording,\r\n\r\n /**\r\n * This method initializes the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo This method should be deprecated.\r\n * @example\r\n * recorder.initRecorder();\r\n */\r\n initRecorder: initRecorder,\r\n\r\n /**\r\n * Ask RecordRTC to auto-stop the recording after 5 minutes.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var fiveMinutes = 5 * 1000 * 60;\r\n * recorder.setRecordingDuration(fiveMinutes, function() {\r\n * var blob = this.getBlob();\r\n * video.src = this.toURL();\r\n * });\r\n * \r\n * // or otherwise\r\n * recorder.setRecordingDuration(fiveMinutes).onRecordingStopped(function() {\r\n * var blob = this.getBlob();\r\n * video.src = this.toURL();\r\n * });\r\n */\r\n setRecordingDuration: function(recordingDuration, callback) {\r\n if (typeof recordingDuration === 'undefined') {\r\n throw 'recordingDuration is required.';\r\n }\r\n\r\n if (typeof recordingDuration !== 'number') {\r\n throw 'recordingDuration must be a number.';\r\n }\r\n\r\n self.recordingDuration = recordingDuration;\r\n self.onRecordingStopped = callback || function() {};\r\n\r\n return {\r\n onRecordingStopped: function(callback) {\r\n self.onRecordingStopped = callback;\r\n }\r\n };\r\n },\r\n\r\n /**\r\n * This method can be used to clear/reset all the recorded data.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo Figure out the difference between \"reset\" and \"clearRecordedData\" methods.\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n clearRecordedData: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n mediaRecorder.clearRecordedData();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Cleared old recorded data.');\r\n }\r\n },\r\n\r\n /**\r\n * Get the recorded blob. Use this method inside the \"stopRecording\" callback.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var blob = this.getBlob();\r\n *\r\n * var file = new File([blob], 'filename.webm', {\r\n * type: 'video/webm'\r\n * });\r\n *\r\n * var formData = new FormData();\r\n * formData.append('file', file); // upload \"File\" object rather than a \"Blob\"\r\n * uploadToServer(formData);\r\n * });\r\n * @returns {Blob} Returns recorded data as \"Blob\" object.\r\n */\r\n getBlob: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n return mediaRecorder.blob;\r\n },\r\n\r\n /**\r\n * Get data-URI instead of Blob.\r\n * @param {function} callback - Callback to get the Data-URI.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * recorder.getDataURL(function(dataURI) {\r\n * video.src = dataURI;\r\n * });\r\n * });\r\n */\r\n getDataURL: getDataURL,\r\n\r\n /**\r\n * Get virtual/temporary URL. Usage of this URL is limited to current tab.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * video.src = this.toURL();\r\n * });\r\n * @returns {String} Returns a virtual/temporary URL for the recorded \"Blob\".\r\n */\r\n toURL: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n return URL.createObjectURL(mediaRecorder.blob);\r\n },\r\n\r\n /**\r\n * Get internal recording object (i.e. internal module) e.g. MutliStreamRecorder, MediaStreamRecorder, StereoAudioRecorder or WhammyRecorder etc.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var internalRecorder = recorder.getInternalRecorder();\r\n * if(internalRecorder instanceof MultiStreamRecorder) {\r\n * internalRecorder.addStreams([newAudioStream]);\r\n * internalRecorder.resetVideoStreams([screenStream]);\r\n * }\r\n * @returns {Object} Returns internal recording object.\r\n */\r\n getInternalRecorder: function() {\r\n return mediaRecorder;\r\n },\r\n\r\n /**\r\n * Invoke save-as dialog to save the recorded blob into your disk.\r\n * @param {string} fileName - Set your own file name.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * this.save('file-name');\r\n *\r\n * // or manually:\r\n * invokeSaveAsDialog(this.getBlob(), 'filename.webm');\r\n * });\r\n */\r\n save: function(fileName) {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n invokeSaveAsDialog(mediaRecorder.blob, fileName);\r\n },\r\n\r\n /**\r\n * This method gets a blob from indexed-DB storage.\r\n * @param {function} callback - Callback to get the recorded blob.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.getFromDisk(function(dataURL) {\r\n * video.src = dataURL;\r\n * });\r\n */\r\n getFromDisk: function(callback) {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n RecordRTC.getFromDisk(config.type, callback);\r\n },\r\n\r\n /**\r\n * This method appends an array of webp images to the recorded video-blob. It takes an \"array\" object.\r\n * @type {Array.}\r\n * @param {Array} arrayOfWebPImages - Array of webp images.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo This method should be deprecated.\r\n * @example\r\n * var arrayOfWebPImages = [];\r\n * arrayOfWebPImages.push({\r\n * duration: index,\r\n * image: 'data:image/webp;base64,...'\r\n * });\r\n * recorder.setAdvertisementArray(arrayOfWebPImages);\r\n */\r\n setAdvertisementArray: function(arrayOfWebPImages) {\r\n config.advertisement = [];\r\n\r\n var length = arrayOfWebPImages.length;\r\n for (var i = 0; i < length; i++) {\r\n config.advertisement.push({\r\n duration: i,\r\n image: arrayOfWebPImages[i]\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * It is equivalent to \"recorder.getBlob()\" method. Usage of \"getBlob\" is recommended, though.\r\n * @property {Blob} blob - Recorded Blob can be accessed using this property.\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var blob = this.blob;\r\n *\r\n * // below one is recommended\r\n * var blob = this.getBlob();\r\n * });\r\n */\r\n blob: null,\r\n\r\n /**\r\n * This works only with {recorderType:StereoAudioRecorder}. Use this property on \"stopRecording\" to verify the encoder's sample-rates.\r\n * @property {number} bufferSize - Buffer-size used to encode the WAV container\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * alert('Recorder used this buffer-size: ' + this.bufferSize);\r\n * });\r\n */\r\n bufferSize: 0,\r\n\r\n /**\r\n * This works only with {recorderType:StereoAudioRecorder}. Use this property on \"stopRecording\" to verify the encoder's sample-rates.\r\n * @property {number} sampleRate - Sample-rates used to encode the WAV container\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * alert('Recorder used these sample-rates: ' + this.sampleRate);\r\n * });\r\n */\r\n sampleRate: 0,\r\n\r\n /**\r\n * {recorderType:StereoAudioRecorder} returns ArrayBuffer object.\r\n * @property {ArrayBuffer} buffer - Audio ArrayBuffer, supported only in Chrome.\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var arrayBuffer = this.buffer;\r\n * alert(arrayBuffer.byteLength);\r\n * });\r\n */\r\n buffer: null,\r\n\r\n /**\r\n * This method resets the recorder. So that you can reuse single recorder instance many times.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.reset();\r\n * recorder.startRecording();\r\n */\r\n reset: function() {\r\n if (self.state === 'recording' && !config.disableLogs) {\r\n console.warn('Stop an active recorder.');\r\n }\r\n\r\n if (mediaRecorder && typeof mediaRecorder.clearRecordedData === 'function') {\r\n mediaRecorder.clearRecordedData();\r\n }\r\n mediaRecorder = null;\r\n setState('inactive');\r\n self.blob = null;\r\n },\r\n\r\n /**\r\n * This method is called whenever recorder's state changes. Use this as an \"event\".\r\n * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.onStateChanged = function(state) {\r\n * console.log('Recorder state: ', state);\r\n * };\r\n */\r\n onStateChanged: function(state) {\r\n if (!config.disableLogs) {\r\n console.log('Recorder state changed:', state);\r\n }\r\n },\r\n\r\n /**\r\n * A recorder can have inactive, recording, paused or stopped states.\r\n * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive.\r\n * @memberof RecordRTC\r\n * @static\r\n * @readonly\r\n * @example\r\n * // this looper function will keep you updated about the recorder's states.\r\n * (function looper() {\r\n * document.querySelector('h1').innerHTML = 'Recorder\\'s state is: ' + recorder.state;\r\n * if(recorder.state === 'stopped') return; // ignore+stop\r\n * setTimeout(looper, 1000); // update after every 3-seconds\r\n * })();\r\n * recorder.startRecording();\r\n */\r\n state: 'inactive',\r\n\r\n /**\r\n * Get recorder's readonly state.\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * var state = recorder.getState();\r\n * @returns {String} Returns recording state.\r\n */\r\n getState: function() {\r\n return self.state;\r\n },\r\n\r\n /**\r\n * Destroy RecordRTC instance. Clear all recorders and objects.\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * recorder.destroy();\r\n */\r\n destroy: function() {\r\n var disableLogsCache = config.disableLogs;\r\n\r\n config = {\r\n disableLogs: true\r\n };\r\n self.reset();\r\n setState('destroyed');\r\n returnObject = self = null;\r\n\r\n if (Storage.AudioContextConstructor) {\r\n Storage.AudioContextConstructor.close();\r\n Storage.AudioContextConstructor = null;\r\n }\r\n\r\n config.disableLogs = disableLogsCache;\r\n\r\n if (!config.disableLogs) {\r\n console.log('RecordRTC is destroyed.');\r\n }\r\n },\r\n\r\n /**\r\n * RecordRTC version number\r\n * @property {String} version - Release version number.\r\n * @memberof RecordRTC\r\n * @static\r\n * @readonly\r\n * @example\r\n * alert(recorder.version);\r\n */\r\n version: '5.5.9'\r\n };\r\n\r\n if (!this) {\r\n self = returnObject;\r\n return returnObject;\r\n }\r\n\r\n // if someone wants to use RecordRTC with the \"new\" keyword.\r\n for (var prop in returnObject) {\r\n this[prop] = returnObject[prop];\r\n }\r\n\r\n self = this;\r\n\r\n return returnObject;\r\n}\r\n\r\nRecordRTC.version = '5.5.9';\r\n\r\nif (true /* && !!module.exports*/ ) {\r\n module.exports = RecordRTC;\r\n}\r\n\r\nif (true) {\r\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\r\n return RecordRTC;\r\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n}\n\r\nRecordRTC.getFromDisk = function(type, callback) {\r\n if (!callback) {\r\n throw 'callback is mandatory.';\r\n }\r\n\r\n console.log('Getting recorded ' + (type === 'all' ? 'blobs' : type + ' blob ') + ' from disk!');\r\n DiskStorage.Fetch(function(dataURL, _type) {\r\n if (type !== 'all' && _type === type + 'Blob' && callback) {\r\n callback(dataURL);\r\n }\r\n\r\n if (type === 'all' && callback) {\r\n callback(dataURL, _type.replace('Blob', ''));\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * This method can be used to store recorded blobs into IndexedDB storage.\r\n * @param {object} options - {audio: Blob, video: Blob, gif: Blob}\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * RecordRTC.writeToDisk({\r\n * audio: audioBlob,\r\n * video: videoBlob,\r\n * gif : gifBlob\r\n * });\r\n */\r\nRecordRTC.writeToDisk = function(options) {\r\n console.log('Writing recorded blob(s) to disk!');\r\n options = options || {};\r\n if (options.audio && options.video && options.gif) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n videoBlob: videoDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n });\r\n } else if (options.audio && options.video) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n videoBlob: videoDataURL\r\n });\r\n });\r\n });\r\n } else if (options.audio && options.gif) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n } else if (options.video && options.gif) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n videoBlob: videoDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n } else if (options.audio) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL\r\n });\r\n });\r\n } else if (options.video) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n DiskStorage.Store({\r\n videoBlob: videoDataURL\r\n });\r\n });\r\n } else if (options.gif) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n }\r\n};\n\r\n// __________________________\r\n// RecordRTC-Configuration.js\r\n\r\n/**\r\n * {@link RecordRTCConfiguration} is an inner/private helper for {@link RecordRTC}.\r\n * @summary It configures the 2nd parameter passed over {@link RecordRTC} and returns a valid \"config\" object.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTCConfiguration\r\n * @class\r\n * @example\r\n * var options = RecordRTCConfiguration(mediaStream, options);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {type:\"video\", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, getNativeBlob:true, etc.}\r\n */\r\n\r\nfunction RecordRTCConfiguration(mediaStream, config) {\r\n if (!config.recorderType && !config.type) {\r\n if (!!config.audio && !!config.video) {\r\n config.type = 'video';\r\n } else if (!!config.audio && !config.video) {\r\n config.type = 'audio';\r\n }\r\n }\r\n\r\n if (config.recorderType && !config.type) {\r\n if (config.recorderType === WhammyRecorder || config.recorderType === CanvasRecorder || (typeof WebAssemblyRecorder !== 'undefined' && config.recorderType === WebAssemblyRecorder)) {\r\n config.type = 'video';\r\n } else if (config.recorderType === GifRecorder) {\r\n config.type = 'gif';\r\n } else if (config.recorderType === StereoAudioRecorder) {\r\n config.type = 'audio';\r\n } else if (config.recorderType === MediaStreamRecorder) {\r\n if (getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) {\r\n config.type = 'video';\r\n } else if (!getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) {\r\n config.type = 'video';\r\n } else if (getTracks(mediaStream, 'audio').length && !getTracks(mediaStream, 'video').length) {\r\n config.type = 'audio';\r\n } else {\r\n // config.type = 'UnKnown';\r\n }\r\n }\r\n }\r\n\r\n if (typeof MediaStreamRecorder !== 'undefined' && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {\r\n if (!config.mimeType) {\r\n config.mimeType = 'video/webm';\r\n }\r\n\r\n if (!config.type) {\r\n config.type = config.mimeType.split('/')[0];\r\n }\r\n\r\n if (!config.bitsPerSecond) {\r\n // config.bitsPerSecond = 128000;\r\n }\r\n }\r\n\r\n // consider default type=audio\r\n if (!config.type) {\r\n if (config.mimeType) {\r\n config.type = config.mimeType.split('/')[0];\r\n }\r\n if (!config.type) {\r\n config.type = 'audio';\r\n }\r\n }\r\n\r\n return config;\r\n}\n\r\n// __________________\r\n// GetRecorderType.js\r\n\r\n/**\r\n * {@link GetRecorderType} is an inner/private helper for {@link RecordRTC}.\r\n * @summary It returns best recorder-type available for your browser.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef GetRecorderType\r\n * @class\r\n * @example\r\n * var RecorderType = GetRecorderType(options);\r\n * var recorder = new RecorderType(options);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {type:\"video\", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction GetRecorderType(mediaStream, config) {\r\n var recorder;\r\n\r\n // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome\r\n // todo: detect if it is Edge, then auto use: StereoAudioRecorder\r\n if (isChrome || isEdge || isOpera) {\r\n // Media Stream Recording API has not been implemented in chrome yet;\r\n // That's why using WebAudio API to record stereo audio in WAV format\r\n recorder = StereoAudioRecorder;\r\n }\r\n\r\n if (typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype && !isChrome) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n\r\n // video recorder (in WebM format)\r\n if (config.type === 'video' && (isChrome || isOpera)) {\r\n recorder = WhammyRecorder;\r\n\r\n if (typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined') {\r\n recorder = WebAssemblyRecorder;\r\n }\r\n }\r\n\r\n // video recorder (in Gif format)\r\n if (config.type === 'gif') {\r\n recorder = GifRecorder;\r\n }\r\n\r\n // html2canvas recording!\r\n if (config.type === 'canvas') {\r\n recorder = CanvasRecorder;\r\n }\r\n\r\n if (isMediaRecorderCompatible() && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {\r\n if (getTracks(mediaStream, 'video').length || getTracks(mediaStream, 'audio').length) {\r\n // audio-only recording\r\n if (config.type === 'audio') {\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('audio/webm')) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n // else recorder = StereoAudioRecorder;\r\n } else {\r\n // video or screen tracks\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('video/webm')) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (mediaStream instanceof Array && mediaStream.length) {\r\n recorder = MultiStreamRecorder;\r\n }\r\n\r\n if (config.recorderType) {\r\n recorder = config.recorderType;\r\n }\r\n\r\n if (!config.disableLogs && !!recorder && !!recorder.name) {\r\n console.log('Using recorderType:', recorder.name || recorder.constructor.name);\r\n }\r\n\r\n if (!recorder && isSafari) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n\r\n return recorder;\r\n}\n\r\n// _____________\r\n// MRecordRTC.js\r\n\r\n/**\r\n * MRecordRTC runs on top of {@link RecordRTC} to bring multiple recordings in a single place, by providing simple API.\r\n * @summary MRecordRTC stands for \"Multiple-RecordRTC\".\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef MRecordRTC\r\n * @class\r\n * @example\r\n * var recorder = new MRecordRTC();\r\n * recorder.addStream(MediaStream);\r\n * recorder.mediaType = {\r\n * audio: true, // or StereoAudioRecorder or MediaStreamRecorder\r\n * video: true, // or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder\r\n * gif: true // or GifRecorder\r\n * };\r\n * // mimeType is optional and should be set only in advance cases.\r\n * recorder.mimeType = {\r\n * audio: 'audio/wav',\r\n * video: 'video/webm',\r\n * gif: 'image/gif'\r\n * };\r\n * recorder.startRecording();\r\n * @see For further information:\r\n * @see {@link https://github.com/muaz-khan/RecordRTC/tree/master/MRecordRTC|MRecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @requires {@link RecordRTC}\r\n */\r\n\r\nfunction MRecordRTC(mediaStream) {\r\n\r\n /**\r\n * This method attaches MediaStream object to {@link MRecordRTC}.\r\n * @param {MediaStream} mediaStream - A MediaStream object, either fetched using getUserMedia API, or generated using captureStreamUntilEnded or WebAudio API.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.addStream(MediaStream);\r\n */\r\n this.addStream = function(_mediaStream) {\r\n if (_mediaStream) {\r\n mediaStream = _mediaStream;\r\n }\r\n };\r\n\r\n /**\r\n * This property can be used to set the recording type e.g. audio, or video, or gif, or canvas.\r\n * @property {object} mediaType - {audio: true, video: true, gif: true}\r\n * @memberof MRecordRTC\r\n * @example\r\n * var recorder = new MRecordRTC();\r\n * recorder.mediaType = {\r\n * audio: true, // TRUE or StereoAudioRecorder or MediaStreamRecorder\r\n * video: true, // TRUE or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder\r\n * gif : true // TRUE or GifRecorder\r\n * };\r\n */\r\n this.mediaType = {\r\n audio: true,\r\n video: true\r\n };\r\n\r\n /**\r\n * This method starts recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.startRecording();\r\n */\r\n this.startRecording = function() {\r\n var mediaType = this.mediaType;\r\n var recorderType;\r\n var mimeType = this.mimeType || {\r\n audio: null,\r\n video: null,\r\n gif: null\r\n };\r\n\r\n if (typeof mediaType.audio !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'audio').length) {\r\n mediaType.audio = false;\r\n }\r\n\r\n if (typeof mediaType.video !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) {\r\n mediaType.video = false;\r\n }\r\n\r\n if (typeof mediaType.gif !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) {\r\n mediaType.gif = false;\r\n }\r\n\r\n if (!mediaType.audio && !mediaType.video && !mediaType.gif) {\r\n throw 'MediaStream must have either audio or video tracks.';\r\n }\r\n\r\n if (!!mediaType.audio) {\r\n recorderType = null;\r\n if (typeof mediaType.audio === 'function') {\r\n recorderType = mediaType.audio;\r\n }\r\n\r\n this.audioRecorder = new RecordRTC(mediaStream, {\r\n type: 'audio',\r\n bufferSize: this.bufferSize,\r\n sampleRate: this.sampleRate,\r\n numberOfAudioChannels: this.numberOfAudioChannels || 2,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.audio,\r\n timeSlice: this.timeSlice,\r\n onTimeStamp: this.onTimeStamp\r\n });\r\n\r\n if (!mediaType.video) {\r\n this.audioRecorder.startRecording();\r\n }\r\n }\r\n\r\n if (!!mediaType.video) {\r\n recorderType = null;\r\n if (typeof mediaType.video === 'function') {\r\n recorderType = mediaType.video;\r\n }\r\n\r\n var newStream = mediaStream;\r\n\r\n if (isMediaRecorderCompatible() && !!mediaType.audio && typeof mediaType.audio === 'function') {\r\n var videoTrack = getTracks(mediaStream, 'video')[0];\r\n\r\n if (isFirefox) {\r\n newStream = new MediaStream();\r\n newStream.addTrack(videoTrack);\r\n\r\n if (recorderType && recorderType === WhammyRecorder) {\r\n // Firefox does NOT supports webp-encoding yet\r\n // But Firefox do supports WebAssemblyRecorder\r\n recorderType = MediaStreamRecorder;\r\n }\r\n } else {\r\n newStream = new MediaStream();\r\n newStream.addTrack(videoTrack);\r\n }\r\n }\r\n\r\n this.videoRecorder = new RecordRTC(newStream, {\r\n type: 'video',\r\n video: this.video,\r\n canvas: this.canvas,\r\n frameInterval: this.frameInterval || 10,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.video,\r\n timeSlice: this.timeSlice,\r\n onTimeStamp: this.onTimeStamp,\r\n workerPath: this.workerPath,\r\n webAssemblyPath: this.webAssemblyPath,\r\n frameRate: this.frameRate, // used by WebAssemblyRecorder; values: usually 30; accepts any.\r\n bitrate: this.bitrate // used by WebAssemblyRecorder; values: 0 to 1000+\r\n });\r\n\r\n if (!mediaType.audio) {\r\n this.videoRecorder.startRecording();\r\n }\r\n }\r\n\r\n if (!!mediaType.audio && !!mediaType.video) {\r\n var self = this;\r\n\r\n var isSingleRecorder = isMediaRecorderCompatible() === true;\r\n\r\n if (mediaType.audio instanceof StereoAudioRecorder && !!mediaType.video) {\r\n isSingleRecorder = false;\r\n } else if (mediaType.audio !== true && mediaType.video !== true && mediaType.audio !== mediaType.video) {\r\n isSingleRecorder = false;\r\n }\r\n\r\n if (isSingleRecorder === true) {\r\n self.audioRecorder = null;\r\n self.videoRecorder.startRecording();\r\n } else {\r\n self.videoRecorder.initRecorder(function() {\r\n self.audioRecorder.initRecorder(function() {\r\n // Both recorders are ready to record things accurately\r\n self.videoRecorder.startRecording();\r\n self.audioRecorder.startRecording();\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (!!mediaType.gif) {\r\n recorderType = null;\r\n if (typeof mediaType.gif === 'function') {\r\n recorderType = mediaType.gif;\r\n }\r\n this.gifRecorder = new RecordRTC(mediaStream, {\r\n type: 'gif',\r\n frameRate: this.frameRate || 200,\r\n quality: this.quality || 10,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.gif\r\n });\r\n this.gifRecorder.startRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method stops recording.\r\n * @param {function} callback - Callback function is invoked when all encoders finished their jobs.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.stopRecording(function(recording){\r\n * var audioBlob = recording.audio;\r\n * var videoBlob = recording.video;\r\n * var gifBlob = recording.gif;\r\n * });\r\n */\r\n this.stopRecording = function(callback) {\r\n callback = callback || function() {};\r\n\r\n if (this.audioRecorder) {\r\n this.audioRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'audio');\r\n });\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'video');\r\n });\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'gif');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * This method pauses recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.pauseRecording();\r\n */\r\n this.pauseRecording = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.pauseRecording();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.pauseRecording();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.pauseRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.resumeRecording();\r\n */\r\n this.resumeRecording = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.resumeRecording();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.resumeRecording();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.resumeRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to manually get all recorded blobs.\r\n * @param {function} callback - All recorded blobs are passed back to the \"callback\" function.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.getBlob(function(recording){\r\n * var audioBlob = recording.audio;\r\n * var videoBlob = recording.video;\r\n * var gifBlob = recording.gif;\r\n * });\r\n * // or\r\n * var audioBlob = recorder.getBlob().audio;\r\n * var videoBlob = recorder.getBlob().video;\r\n */\r\n this.getBlob = function(callback) {\r\n var output = {};\r\n\r\n if (this.audioRecorder) {\r\n output.audio = this.audioRecorder.getBlob();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n output.video = this.videoRecorder.getBlob();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n output.gif = this.gifRecorder.getBlob();\r\n }\r\n\r\n if (callback) {\r\n callback(output);\r\n }\r\n\r\n return output;\r\n };\r\n\r\n /**\r\n * Destroy all recorder instances.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.destroy();\r\n */\r\n this.destroy = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.destroy();\r\n this.audioRecorder = null;\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.destroy();\r\n this.videoRecorder = null;\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.destroy();\r\n this.gifRecorder = null;\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to manually get all recorded blobs' DataURLs.\r\n * @param {function} callback - All recorded blobs' DataURLs are passed back to the \"callback\" function.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.getDataURL(function(recording){\r\n * var audioDataURL = recording.audio;\r\n * var videoDataURL = recording.video;\r\n * var gifDataURL = recording.gif;\r\n * });\r\n */\r\n this.getDataURL = function(callback) {\r\n this.getBlob(function(blob) {\r\n if (blob.audio && blob.video) {\r\n getDataURL(blob.audio, function(_audioDataURL) {\r\n getDataURL(blob.video, function(_videoDataURL) {\r\n callback({\r\n audio: _audioDataURL,\r\n video: _videoDataURL\r\n });\r\n });\r\n });\r\n } else if (blob.audio) {\r\n getDataURL(blob.audio, function(_audioDataURL) {\r\n callback({\r\n audio: _audioDataURL\r\n });\r\n });\r\n } else if (blob.video) {\r\n getDataURL(blob.video, function(_videoDataURL) {\r\n callback({\r\n video: _videoDataURL\r\n });\r\n });\r\n }\r\n });\r\n\r\n function getDataURL(blob, callback00) {\r\n if (typeof Worker !== 'undefined') {\r\n var webWorker = processInWebWorker(function readFile(_blob) {\r\n postMessage(new FileReaderSync().readAsDataURL(_blob));\r\n });\r\n\r\n webWorker.onmessage = function(event) {\r\n callback00(event.data);\r\n };\r\n\r\n webWorker.postMessage(blob);\r\n } else {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = function(event) {\r\n callback00(event.target.result);\r\n };\r\n }\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n var url;\r\n if (typeof URL !== 'undefined') {\r\n url = URL;\r\n } else if (typeof webkitURL !== 'undefined') {\r\n url = webkitURL;\r\n } else {\r\n throw 'Neither URL nor webkitURL detected.';\r\n }\r\n url.revokeObjectURL(blob);\r\n return worker;\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to ask {@link MRecordRTC} to write all recorded blobs into IndexedDB storage.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.writeToDisk();\r\n */\r\n this.writeToDisk = function() {\r\n RecordRTC.writeToDisk({\r\n audio: this.audioRecorder,\r\n video: this.videoRecorder,\r\n gif: this.gifRecorder\r\n });\r\n };\r\n\r\n /**\r\n * This method can be used to invoke a save-as dialog for all recorded blobs.\r\n * @param {object} args - {audio: 'audio-name', video: 'video-name', gif: 'gif-name'}\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.save({\r\n * audio: 'audio-file-name',\r\n * video: 'video-file-name',\r\n * gif : 'gif-file-name'\r\n * });\r\n */\r\n this.save = function(args) {\r\n args = args || {\r\n audio: true,\r\n video: true,\r\n gif: true\r\n };\r\n\r\n if (!!args.audio && this.audioRecorder) {\r\n this.audioRecorder.save(typeof args.audio === 'string' ? args.audio : '');\r\n }\r\n\r\n if (!!args.video && this.videoRecorder) {\r\n this.videoRecorder.save(typeof args.video === 'string' ? args.video : '');\r\n }\r\n if (!!args.gif && this.gifRecorder) {\r\n this.gifRecorder.save(typeof args.gif === 'string' ? args.gif : '');\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * This method can be used to get all recorded blobs from IndexedDB storage.\r\n * @param {string} type - 'all' or 'audio' or 'video' or 'gif'\r\n * @param {function} callback - Callback function to get all stored blobs.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * MRecordRTC.getFromDisk('all', function(dataURL, type){\r\n * if(type === 'audio') { }\r\n * if(type === 'video') { }\r\n * if(type === 'gif') { }\r\n * });\r\n */\r\nMRecordRTC.getFromDisk = RecordRTC.getFromDisk;\r\n\r\n/**\r\n * This method can be used to store recorded blobs into IndexedDB storage.\r\n * @param {object} options - {audio: Blob, video: Blob, gif: Blob}\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * MRecordRTC.writeToDisk({\r\n * audio: audioBlob,\r\n * video: videoBlob,\r\n * gif : gifBlob\r\n * });\r\n */\r\nMRecordRTC.writeToDisk = RecordRTC.writeToDisk;\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MRecordRTC = MRecordRTC;\r\n}\n\r\nvar browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n(function(that) {\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.log === 'undefined' || typeof global.console.error === 'undefined') {\r\n global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {\r\n documentElement: {\r\n appendChild: function() {\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n },\r\n style: {}\r\n };\r\n return obj;\r\n };\r\n\r\n that.HTMLVideoElement = function() {};\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n})(typeof global !== 'undefined' ? global : null);\n\r\n// _____________________________\r\n// Cross-Browser-Declarations.js\r\n\r\n// animation-frame used in WebM recording\r\n\r\n/*jshint -W079 */\r\nvar requestAnimationFrame = window.requestAnimationFrame;\r\nif (typeof requestAnimationFrame === 'undefined') {\r\n if (typeof webkitRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = webkitRequestAnimationFrame;\r\n } else if (typeof mozRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = mozRequestAnimationFrame;\r\n } else if (typeof msRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = msRequestAnimationFrame;\r\n } else if (typeof requestAnimationFrame === 'undefined') {\r\n // via: https://gist.github.com/paulirish/1579671\r\n var lastTime = 0;\r\n\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = function(callback, element) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = setTimeout(function() {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n }\r\n}\r\n\r\n/*jshint -W079 */\r\nvar cancelAnimationFrame = window.cancelAnimationFrame;\r\nif (typeof cancelAnimationFrame === 'undefined') {\r\n if (typeof webkitCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = webkitCancelAnimationFrame;\r\n } else if (typeof mozCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = mozCancelAnimationFrame;\r\n } else if (typeof msCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = msCancelAnimationFrame;\r\n } else if (typeof cancelAnimationFrame === 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = function(id) {\r\n clearTimeout(id);\r\n };\r\n }\r\n}\r\n\r\n// WebAudio API representer\r\nvar AudioContext = window.AudioContext;\r\n\r\nif (typeof AudioContext === 'undefined') {\r\n if (typeof webkitAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = webkitAudioContext;\r\n }\r\n\r\n if (typeof mozAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = mozAudioContext;\r\n }\r\n}\r\n\r\n/*jshint -W079 */\r\nvar URL = window.URL;\r\n\r\nif (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') {\r\n /*global URL:true */\r\n URL = webkitURL;\r\n}\r\n\r\nif (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator?\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n}\r\n\r\nvar isEdge = navigator.userAgent.indexOf('Edge') !== -1 && (!!navigator.msSaveBlob || !!navigator.msSaveOrOpenBlob);\r\nvar isOpera = !!window.opera || navigator.userAgent.indexOf('OPR/') !== -1;\r\nvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && ('netscape' in window) && / rv:/.test(navigator.userAgent);\r\nvar isChrome = (!isOpera && !isEdge && !!navigator.webkitGetUserMedia) || isElectron() || navigator.userAgent.toLowerCase().indexOf('chrome/') !== -1;\r\n\r\nvar isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n\r\nif (isSafari && !isChrome && navigator.userAgent.indexOf('CriOS') !== -1) {\r\n isSafari = false;\r\n isChrome = true;\r\n}\r\n\r\nvar MediaStream = window.MediaStream;\r\n\r\nif (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n}\r\n\r\n/*global MediaStream:true */\r\nif (typeof MediaStream !== 'undefined') {\r\n // override \"stop\" method for all browsers\r\n if (typeof MediaStream.prototype.stop === 'undefined') {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n}\r\n\r\n// below function via: http://goo.gl/B3ae8c\r\n/**\r\n * Return human-readable file size.\r\n * @param {number} bytes - Pass bytes and get formatted string.\r\n * @returns {string} - formatted string\r\n * @example\r\n * bytesToSize(1024*1024*5) === '5 GB'\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction bytesToSize(bytes) {\r\n var k = 1000;\r\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n if (bytes === 0) {\r\n return '0 Bytes';\r\n }\r\n var i = parseInt(Math.floor(Math.log(bytes) / Math.log(k)), 10);\r\n return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * @param {Blob} file - File or Blob object. This parameter is required.\r\n * @param {string} fileName - Optional file name e.g. \"Recorded-Video.webm\"\r\n * @example\r\n * invokeSaveAsDialog(blob or file, [optional] fileName);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction invokeSaveAsDialog(file, fileName) {\r\n if (!file) {\r\n throw 'Blob object is required.';\r\n }\r\n\r\n if (!file.type) {\r\n try {\r\n file.type = 'video/webm';\r\n } catch (e) {}\r\n }\r\n\r\n var fileExtension = (file.type || 'video/webm').split('/')[1];\r\n\r\n if (fileName && fileName.indexOf('.') !== -1) {\r\n var splitted = fileName.split('.');\r\n fileName = splitted[0];\r\n fileExtension = splitted[1];\r\n }\r\n\r\n var fileFullName = (fileName || (Math.round(Math.random() * 9999999999) + 888888888)) + '.' + fileExtension;\r\n\r\n if (typeof navigator.msSaveOrOpenBlob !== 'undefined') {\r\n return navigator.msSaveOrOpenBlob(file, fileFullName);\r\n } else if (typeof navigator.msSaveBlob !== 'undefined') {\r\n return navigator.msSaveBlob(file, fileFullName);\r\n }\r\n\r\n var hyperlink = document.createElement('a');\r\n hyperlink.href = URL.createObjectURL(file);\r\n hyperlink.download = fileFullName;\r\n\r\n hyperlink.style = 'display:none;opacity:0;color:transparent;';\r\n (document.body || document.documentElement).appendChild(hyperlink);\r\n\r\n if (typeof hyperlink.click === 'function') {\r\n hyperlink.click();\r\n } else {\r\n hyperlink.target = '_blank';\r\n hyperlink.dispatchEvent(new MouseEvent('click', {\r\n view: window,\r\n bubbles: true,\r\n cancelable: true\r\n }));\r\n }\r\n\r\n URL.revokeObjectURL(hyperlink.href);\r\n}\r\n\r\n/**\r\n * from: https://github.com/cheton/is-electron/blob/master/index.js\r\n **/\r\nfunction isElectron() {\r\n // Renderer process\r\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\r\n return true;\r\n }\r\n\r\n // Main process\r\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\r\n return true;\r\n }\r\n\r\n // Detect the user agent when the `nodeIntegration` option is set to true\r\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTracks(stream, kind) {\r\n if (!stream || !stream.getTracks) {\r\n return [];\r\n }\r\n\r\n return stream.getTracks().filter(function(t) {\r\n return t.kind === (kind || 'audio');\r\n });\r\n}\r\n\r\nfunction setSrcObject(stream, element) {\r\n if ('srcObject' in element) {\r\n element.srcObject = stream;\r\n } else if ('mozSrcObject' in element) {\r\n element.mozSrcObject = stream;\r\n } else {\r\n element.srcObject = stream;\r\n }\r\n}\r\n\r\n/**\r\n * @param {Blob} file - File or Blob object.\r\n * @param {function} callback - Callback function.\r\n * @example\r\n * getSeekableBlob(blob or file, callback);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction getSeekableBlob(inputBlob, callback) {\r\n // EBML.js copyrights goes to: https://github.com/legokichi/ts-ebml\r\n if (typeof EBML === 'undefined') {\r\n throw new Error('Please link: https://www.webrtc-experiment.com/EBML.js');\r\n }\r\n\r\n var reader = new EBML.Reader();\r\n var decoder = new EBML.Decoder();\r\n var tools = EBML.tools;\r\n\r\n var fileReader = new FileReader();\r\n fileReader.onload = function(e) {\r\n var ebmlElms = decoder.decode(this.result);\r\n ebmlElms.forEach(function(element) {\r\n reader.read(element);\r\n });\r\n reader.stop();\r\n var refinedMetadataBuf = tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\r\n var body = this.result.slice(reader.metadataSize);\r\n var newBlob = new Blob([refinedMetadataBuf, body], {\r\n type: 'video/webm'\r\n });\r\n\r\n callback(newBlob);\r\n };\r\n fileReader.readAsArrayBuffer(inputBlob);\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.invokeSaveAsDialog = invokeSaveAsDialog;\r\n RecordRTC.getTracks = getTracks;\r\n RecordRTC.getSeekableBlob = getSeekableBlob;\r\n RecordRTC.bytesToSize = bytesToSize;\r\n RecordRTC.isElectron = isElectron;\r\n}\n\r\n// __________ (used to handle stuff like http://goo.gl/xmE5eg) issue #129\r\n// Storage.js\r\n\r\n/**\r\n * Storage is a standalone object used by {@link RecordRTC} to store reusable objects e.g. \"new AudioContext\".\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @example\r\n * Storage.AudioContext === webkitAudioContext\r\n * @property {webkitAudioContext} AudioContext - Keeps a reference to AudioContext object.\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\nvar Storage = {};\r\n\r\nif (typeof AudioContext !== 'undefined') {\r\n Storage.AudioContext = AudioContext;\r\n} else if (typeof webkitAudioContext !== 'undefined') {\r\n Storage.AudioContext = webkitAudioContext;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.Storage = Storage;\r\n}\n\r\nfunction isMediaRecorderCompatible() {\r\n if (isFirefox || isSafari || isEdge) {\r\n return true;\r\n }\r\n\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n var fullVersion = '' + parseFloat(navigator.appVersion);\r\n var majorVersion = parseInt(navigator.appVersion, 10);\r\n var nameOffset, verOffset, ix;\r\n\r\n if (isChrome || isOpera) {\r\n verOffset = nAgt.indexOf('Chrome');\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n }\r\n\r\n // trim the fullVersion string at semicolon/space if present\r\n if ((ix = fullVersion.indexOf(';')) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n if ((ix = fullVersion.indexOf(' ')) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n majorVersion = parseInt('' + fullVersion, 10);\r\n\r\n if (isNaN(majorVersion)) {\r\n fullVersion = '' + parseFloat(navigator.appVersion);\r\n majorVersion = parseInt(navigator.appVersion, 10);\r\n }\r\n\r\n return majorVersion >= 49;\r\n}\n\r\n// ______________________\r\n// MediaStreamRecorder.js\r\n\r\n/**\r\n * MediaStreamRecorder is an abstraction layer for {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}. It is used by {@link RecordRTC} to record MediaStream(s) in both Chrome and Firefox.\r\n * @summary Runs top over {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://github.com/muaz-khan|Muaz Khan}\r\n * @typedef MediaStreamRecorder\r\n * @class\r\n * @example\r\n * var config = {\r\n * mimeType: 'video/webm', // vp8, vp9, h264, mkv, opus/vorbis\r\n * audioBitsPerSecond : 256 * 8 * 1024,\r\n * videoBitsPerSecond : 256 * 8 * 1024,\r\n * bitsPerSecond: 256 * 8 * 1024, // if this is provided, skip above two\r\n * checkForInactiveTracks: true,\r\n * timeSlice: 1000, // concatenate intervals based blobs\r\n * ondataavailable: function() {} // get intervals based blobs\r\n * }\r\n * var recorder = new MediaStreamRecorder(mediaStream, config);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n *\r\n * // or\r\n * var blob = recorder.blob;\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {disableLogs:true, initCallback: function, mimeType: \"video/webm\", timeSlice: 1000}\r\n * @throws Will throw an error if first argument \"MediaStream\" is missing. Also throws error if \"MediaRecorder API\" are not supported by the browser.\r\n */\r\n\r\nfunction MediaStreamRecorder(mediaStream, config) {\r\n var self = this;\r\n\r\n if (typeof mediaStream === 'undefined') {\r\n throw 'First argument \"MediaStream\" is required.';\r\n }\r\n\r\n if (typeof MediaRecorder === 'undefined') {\r\n throw 'Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.';\r\n }\r\n\r\n config = config || {\r\n // bitsPerSecond: 256 * 8 * 1024,\r\n mimeType: 'video/webm'\r\n };\r\n\r\n if (config.type === 'audio') {\r\n if (getTracks(mediaStream, 'video').length && getTracks(mediaStream, 'audio').length) {\r\n var stream;\r\n if (!!navigator.mozGetUserMedia) {\r\n stream = new MediaStream();\r\n stream.addTrack(getTracks(mediaStream, 'audio')[0]);\r\n } else {\r\n // webkitMediaStream\r\n stream = new MediaStream(getTracks(mediaStream, 'audio'));\r\n }\r\n mediaStream = stream;\r\n }\r\n\r\n if (!config.mimeType || config.mimeType.toString().toLowerCase().indexOf('audio') === -1) {\r\n config.mimeType = isChrome ? 'audio/webm' : 'audio/ogg';\r\n }\r\n\r\n if (config.mimeType && config.mimeType.toString().toLowerCase() !== 'audio/ogg' && !!navigator.mozGetUserMedia) {\r\n // forcing better codecs on Firefox (via #166)\r\n config.mimeType = 'audio/ogg';\r\n }\r\n }\r\n\r\n var arrayOfBlobs = [];\r\n\r\n /**\r\n * This method returns array of blobs. Use only with \"timeSlice\". Its useful to preview recording anytime, without using the \"stop\" method.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var arrayOfBlobs = recorder.getArrayOfBlobs();\r\n * @returns {Array} Returns array of recorded blobs.\r\n */\r\n this.getArrayOfBlobs = function() {\r\n return arrayOfBlobs;\r\n };\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n // set defaults\r\n self.blob = null;\r\n self.clearRecordedData();\r\n self.timestamps = [];\r\n allStates = [];\r\n arrayOfBlobs = [];\r\n\r\n var recorderHints = config;\r\n\r\n if (!config.disableLogs) {\r\n console.log('Passing following config over MediaRecorder API.', recorderHints);\r\n }\r\n\r\n if (mediaRecorder) {\r\n // mandatory to make sure Firefox doesn't fails to record streams 3-4 times without reloading the page.\r\n mediaRecorder = null;\r\n }\r\n\r\n if (isChrome && !isMediaRecorderCompatible()) {\r\n // to support video-only recording on stable\r\n recorderHints = 'video/vp8';\r\n }\r\n\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && recorderHints.mimeType) {\r\n if (!MediaRecorder.isTypeSupported(recorderHints.mimeType)) {\r\n if (!config.disableLogs) {\r\n console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType);\r\n }\r\n\r\n recorderHints.mimeType = config.type === 'audio' ? 'audio/webm' : 'video/webm';\r\n }\r\n }\r\n\r\n // using MediaRecorder API here\r\n try {\r\n mediaRecorder = new MediaRecorder(mediaStream, recorderHints);\r\n\r\n // reset\r\n config.mimeType = recorderHints.mimeType;\r\n } catch (e) {\r\n // chrome-based fallback\r\n mediaRecorder = new MediaRecorder(mediaStream);\r\n }\r\n\r\n // old hack?\r\n if (recorderHints.mimeType && !MediaRecorder.isTypeSupported && 'canRecordMimeType' in mediaRecorder && mediaRecorder.canRecordMimeType(recorderHints.mimeType) === false) {\r\n if (!config.disableLogs) {\r\n console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType);\r\n }\r\n }\r\n\r\n // Dispatching OnDataAvailable Handler\r\n mediaRecorder.ondataavailable = function(e) {\r\n if (e.data) {\r\n allStates.push('ondataavailable: ' + bytesToSize(e.data.size));\r\n }\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n if (e.data && e.data.size && e.data.size > 100) {\r\n arrayOfBlobs.push(e.data);\r\n updateTimeStamp();\r\n\r\n if (typeof config.ondataavailable === 'function') {\r\n // intervals based blobs\r\n var blob = config.getNativeBlob ? e.data : new Blob([e.data], {\r\n type: getMimeType(recorderHints)\r\n });\r\n config.ondataavailable(blob);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!e.data || !e.data.size || e.data.size < 100 || self.blob) {\r\n // make sure that stopRecording always getting fired\r\n // even if there is invalid data\r\n if (self.recordingCallback) {\r\n self.recordingCallback(new Blob([], {\r\n type: getMimeType(recorderHints)\r\n }));\r\n self.recordingCallback = null;\r\n }\r\n return;\r\n }\r\n\r\n self.blob = config.getNativeBlob ? e.data : new Blob([e.data], {\r\n type: getMimeType(recorderHints)\r\n });\r\n\r\n if (self.recordingCallback) {\r\n self.recordingCallback(self.blob);\r\n self.recordingCallback = null;\r\n }\r\n };\r\n\r\n mediaRecorder.onstart = function() {\r\n allStates.push('started');\r\n };\r\n\r\n mediaRecorder.onpause = function() {\r\n allStates.push('paused');\r\n };\r\n\r\n mediaRecorder.onresume = function() {\r\n allStates.push('resumed');\r\n };\r\n\r\n mediaRecorder.onstop = function() {\r\n allStates.push('stopped');\r\n };\r\n\r\n mediaRecorder.onerror = function(error) {\r\n if (!error) {\r\n return;\r\n }\r\n\r\n if (!error.name) {\r\n error.name = 'UnknownError';\r\n }\r\n\r\n allStates.push('error: ' + error);\r\n\r\n if (!config.disableLogs) {\r\n // via: https://w3c.github.io/mediacapture-record/MediaRecorder.html#exception-summary\r\n if (error.name.toString().toLowerCase().indexOf('invalidstate') !== -1) {\r\n console.error('The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.', error);\r\n } else if (error.name.toString().toLowerCase().indexOf('notsupported') !== -1) {\r\n console.error('MIME type (', recorderHints.mimeType, ') is not supported.', error);\r\n } else if (error.name.toString().toLowerCase().indexOf('security') !== -1) {\r\n console.error('MediaRecorder security error', error);\r\n }\r\n\r\n // older code below\r\n else if (error.name === 'OutOfMemory') {\r\n console.error('The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'IllegalStreamModification') {\r\n console.error('A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'OtherRecordingError') {\r\n console.error('Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'GenericError') {\r\n console.error('The UA cannot provide the codec or recording option that has been requested.', error);\r\n } else {\r\n console.error('MediaRecorder Error', error);\r\n }\r\n }\r\n\r\n (function(looper) {\r\n if (!self.manuallyStopped && mediaRecorder && mediaRecorder.state === 'inactive') {\r\n delete config.timeslice;\r\n\r\n // 10 minutes, enough?\r\n mediaRecorder.start(10 * 60 * 1000);\r\n return;\r\n }\r\n\r\n setTimeout(looper, 1000);\r\n })();\r\n\r\n if (mediaRecorder.state !== 'inactive' && mediaRecorder.state !== 'stopped') {\r\n mediaRecorder.stop();\r\n }\r\n };\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n updateTimeStamp();\r\n mediaRecorder.start(config.timeSlice);\r\n } else {\r\n // default is 60 minutes; enough?\r\n // use config => {timeSlice: 1000} otherwise\r\n\r\n mediaRecorder.start(3.6e+6);\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback(); // old code\r\n }\r\n };\r\n\r\n /**\r\n * @property {Array} timestamps - Array of time stamps\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * console.log(recorder.timestamps);\r\n */\r\n this.timestamps = [];\r\n\r\n function updateTimeStamp() {\r\n self.timestamps.push(new Date().getTime());\r\n\r\n if (typeof config.onTimeStamp === 'function') {\r\n config.onTimeStamp(self.timestamps[self.timestamps.length - 1], self.timestamps);\r\n }\r\n }\r\n\r\n function getMimeType(secondObject) {\r\n if (mediaRecorder && mediaRecorder.mimeType) {\r\n return mediaRecorder.mimeType;\r\n }\r\n\r\n return secondObject.mimeType || 'video/webm';\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n self.manuallyStopped = true; // used inside the mediaRecorder.onerror\r\n\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n this.recordingCallback = callback;\r\n\r\n if (mediaRecorder.state === 'recording') {\r\n mediaRecorder.stop();\r\n }\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n setTimeout(function() {\r\n self.blob = new Blob(arrayOfBlobs, {\r\n type: getMimeType(config)\r\n });\r\n\r\n self.recordingCallback(self.blob);\r\n }, 100);\r\n }\r\n };\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n if (mediaRecorder.state === 'recording') {\r\n mediaRecorder.pause();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n if (mediaRecorder.state === 'paused') {\r\n mediaRecorder.resume();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (mediaRecorder && mediaRecorder.state === 'recording') {\r\n self.stop(clearRecordedDataCB);\r\n }\r\n\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n arrayOfBlobs = [];\r\n mediaRecorder = null;\r\n self.timestamps = [];\r\n }\r\n\r\n // Reference to \"MediaRecorder\" object\r\n var mediaRecorder;\r\n\r\n /**\r\n * Access to native MediaRecorder API\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @instance\r\n * @example\r\n * var internal = recorder.getInternalRecorder();\r\n * internal.ondataavailable = function() {}; // override\r\n * internal.stream, internal.onpause, internal.onstop, etc.\r\n * @returns {Object} Returns internal recording object.\r\n */\r\n this.getInternalRecorder = function() {\r\n return mediaRecorder;\r\n };\r\n\r\n function isMediaStreamActive() {\r\n if ('active' in mediaStream) {\r\n if (!mediaStream.active) {\r\n return false;\r\n }\r\n } else if ('ended' in mediaStream) { // old hack\r\n if (mediaStream.ended) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * @property {Blob} blob - Recorded data as \"Blob\" object.\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = null;\r\n\r\n\r\n /**\r\n * Get MediaRecorder readonly state.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var state = recorder.getState();\r\n * @returns {String} Returns recording state.\r\n */\r\n this.getState = function() {\r\n if (!mediaRecorder) {\r\n return 'inactive';\r\n }\r\n\r\n return mediaRecorder.state || 'inactive';\r\n };\r\n\r\n // list of all recording states\r\n var allStates = [];\r\n\r\n /**\r\n * Get MediaRecorder all recording states.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var state = recorder.getAllStates();\r\n * @returns {Array} Returns all recording states\r\n */\r\n this.getAllStates = function() {\r\n return allStates;\r\n };\r\n\r\n // if any Track within the MediaStream is muted or not enabled at any time, \r\n // the browser will only record black frames \r\n // or silence since that is the content produced by the Track\r\n // so we need to stopRecording as soon as any single track ends.\r\n if (typeof config.checkForInactiveTracks === 'undefined') {\r\n config.checkForInactiveTracks = false; // disable to minimize CPU usage\r\n }\r\n\r\n var self = this;\r\n\r\n // this method checks if media stream is stopped\r\n // or if any track is ended.\r\n (function looper() {\r\n if (!mediaRecorder || config.checkForInactiveTracks === false) {\r\n return;\r\n }\r\n\r\n if (isMediaStreamActive() === false) {\r\n if (!config.disableLogs) {\r\n console.log('MediaStream seems stopped.');\r\n }\r\n self.stop();\r\n return;\r\n }\r\n\r\n setTimeout(looper, 1000); // check every second\r\n })();\r\n\r\n // for debugging\r\n this.name = 'MediaStreamRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MediaStreamRecorder = MediaStreamRecorder;\r\n}\n\r\n// source code from: http://typedarray.org/wp-content/projects/WebAudioRecorder/script.js\r\n// https://github.com/mattdiamond/Recorderjs#license-mit\r\n// ______________________\r\n// StereoAudioRecorder.js\r\n\r\n/**\r\n * StereoAudioRecorder is a standalone class used by {@link RecordRTC} to bring \"stereo\" audio-recording in chrome.\r\n * @summary JavaScript standalone object for stereo audio recording.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef StereoAudioRecorder\r\n * @class\r\n * @example\r\n * var recorder = new StereoAudioRecorder(MediaStream, {\r\n * sampleRate: 44100,\r\n * bufferSize: 4096\r\n * });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {sampleRate: 44100, bufferSize: 4096, numberOfAudioChannels: 1, etc.}\r\n */\r\n\r\nfunction StereoAudioRecorder(mediaStream, config) {\r\n if (!getTracks(mediaStream, 'audio').length) {\r\n throw 'Your stream has no audio tracks.';\r\n }\r\n\r\n config = config || {};\r\n\r\n var self = this;\r\n\r\n // variables\r\n var leftchannel = [];\r\n var rightchannel = [];\r\n var recording = false;\r\n var recordingLength = 0;\r\n var jsAudioNode;\r\n\r\n var numberOfAudioChannels = 2;\r\n\r\n /**\r\n * Set sample rates such as 8K or 16K. Reference: http://stackoverflow.com/a/28977136/552182\r\n * @property {number} desiredSampRate - Desired Bits per sample * 1000\r\n * @memberof StereoAudioRecorder\r\n * @instance\r\n * @example\r\n * var recorder = StereoAudioRecorder(mediaStream, {\r\n * desiredSampRate: 16 * 1000 // bits-per-sample * 1000\r\n * });\r\n */\r\n var desiredSampRate = config.desiredSampRate;\r\n\r\n // backward compatibility\r\n if (config.leftChannel === true) {\r\n numberOfAudioChannels = 1;\r\n }\r\n\r\n if (config.numberOfAudioChannels === 1) {\r\n numberOfAudioChannels = 1;\r\n }\r\n\r\n if (!numberOfAudioChannels || numberOfAudioChannels < 1) {\r\n numberOfAudioChannels = 2;\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('StereoAudioRecorder is set to record number of channels: ' + numberOfAudioChannels);\r\n }\r\n\r\n // if any Track within the MediaStream is muted or not enabled at any time, \r\n // the browser will only record black frames \r\n // or silence since that is the content produced by the Track\r\n // so we need to stopRecording as soon as any single track ends.\r\n if (typeof config.checkForInactiveTracks === 'undefined') {\r\n config.checkForInactiveTracks = true;\r\n }\r\n\r\n function isMediaStreamActive() {\r\n if (config.checkForInactiveTracks === false) {\r\n // always return \"true\"\r\n return true;\r\n }\r\n\r\n if ('active' in mediaStream) {\r\n if (!mediaStream.active) {\r\n return false;\r\n }\r\n } else if ('ended' in mediaStream) { // old hack\r\n if (mediaStream.ended) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (isMediaStreamActive() === false) {\r\n throw 'Please make sure MediaStream is active.';\r\n }\r\n\r\n resetVariables();\r\n\r\n isAudioProcessStarted = isPaused = false;\r\n recording = true;\r\n\r\n if (typeof config.timeSlice !== 'undefined') {\r\n looper();\r\n }\r\n };\r\n\r\n function mergeLeftRightBuffers(config, callback) {\r\n function mergeAudioBuffers(config, cb) {\r\n var numberOfAudioChannels = config.numberOfAudioChannels;\r\n\r\n // todo: \"slice(0)\" --- is it causes loop? Should be removed?\r\n var leftBuffers = config.leftBuffers.slice(0);\r\n var rightBuffers = config.rightBuffers.slice(0);\r\n var sampleRate = config.sampleRate;\r\n var internalInterleavedLength = config.internalInterleavedLength;\r\n var desiredSampRate = config.desiredSampRate;\r\n\r\n if (numberOfAudioChannels === 2) {\r\n leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength);\r\n rightBuffers = mergeBuffers(rightBuffers, internalInterleavedLength);\r\n\r\n if (desiredSampRate) {\r\n leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate);\r\n rightBuffers = interpolateArray(rightBuffers, desiredSampRate, sampleRate);\r\n }\r\n }\r\n\r\n if (numberOfAudioChannels === 1) {\r\n leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength);\r\n\r\n if (desiredSampRate) {\r\n leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate);\r\n }\r\n }\r\n\r\n // set sample rate as desired sample rate\r\n if (desiredSampRate) {\r\n sampleRate = desiredSampRate;\r\n }\r\n\r\n // for changing the sampling rate, reference:\r\n // http://stackoverflow.com/a/28977136/552182\r\n function interpolateArray(data, newSampleRate, oldSampleRate) {\r\n var fitCount = Math.round(data.length * (newSampleRate / oldSampleRate));\r\n var newData = [];\r\n var springFactor = Number((data.length - 1) / (fitCount - 1));\r\n newData[0] = data[0];\r\n for (var i = 1; i < fitCount - 1; i++) {\r\n var tmp = i * springFactor;\r\n var before = Number(Math.floor(tmp)).toFixed();\r\n var after = Number(Math.ceil(tmp)).toFixed();\r\n var atPoint = tmp - before;\r\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\r\n }\r\n newData[fitCount - 1] = data[data.length - 1];\r\n return newData;\r\n }\r\n\r\n function linearInterpolate(before, after, atPoint) {\r\n return before + (after - before) * atPoint;\r\n }\r\n\r\n function mergeBuffers(channelBuffer, rLength) {\r\n var result = new Float64Array(rLength);\r\n var offset = 0;\r\n var lng = channelBuffer.length;\r\n\r\n for (var i = 0; i < lng; i++) {\r\n var buffer = channelBuffer[i];\r\n result.set(buffer, offset);\r\n offset += buffer.length;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function interleave(leftChannel, rightChannel) {\r\n var length = leftChannel.length + rightChannel.length;\r\n\r\n var result = new Float64Array(length);\r\n\r\n var inputIndex = 0;\r\n\r\n for (var index = 0; index < length;) {\r\n result[index++] = leftChannel[inputIndex];\r\n result[index++] = rightChannel[inputIndex];\r\n inputIndex++;\r\n }\r\n return result;\r\n }\r\n\r\n function writeUTFBytes(view, offset, string) {\r\n var lng = string.length;\r\n for (var i = 0; i < lng; i++) {\r\n view.setUint8(offset + i, string.charCodeAt(i));\r\n }\r\n }\r\n\r\n // interleave both channels together\r\n var interleaved;\r\n\r\n if (numberOfAudioChannels === 2) {\r\n interleaved = interleave(leftBuffers, rightBuffers);\r\n }\r\n\r\n if (numberOfAudioChannels === 1) {\r\n interleaved = leftBuffers;\r\n }\r\n\r\n var interleavedLength = interleaved.length;\r\n\r\n // create wav file\r\n var resultingBufferLength = 44 + interleavedLength * 2;\r\n\r\n var buffer = new ArrayBuffer(resultingBufferLength);\r\n\r\n var view = new DataView(buffer);\r\n\r\n // RIFF chunk descriptor/identifier \r\n writeUTFBytes(view, 0, 'RIFF');\r\n\r\n // RIFF chunk length\r\n // changed \"44\" to \"36\" via #401\r\n view.setUint32(4, 36 + interleavedLength * 2, true);\r\n\r\n // RIFF type \r\n writeUTFBytes(view, 8, 'WAVE');\r\n\r\n // format chunk identifier \r\n // FMT sub-chunk\r\n writeUTFBytes(view, 12, 'fmt ');\r\n\r\n // format chunk length \r\n view.setUint32(16, 16, true);\r\n\r\n // sample format (raw)\r\n view.setUint16(20, 1, true);\r\n\r\n // stereo (2 channels)\r\n view.setUint16(22, numberOfAudioChannels, true);\r\n\r\n // sample rate \r\n view.setUint32(24, sampleRate, true);\r\n\r\n // byte rate (sample rate * block align)\r\n view.setUint32(28, sampleRate * 2, true);\r\n\r\n // block align (channel count * bytes per sample) \r\n view.setUint16(32, numberOfAudioChannels * 2, true);\r\n\r\n // bits per sample \r\n view.setUint16(34, 16, true);\r\n\r\n // data sub-chunk\r\n // data chunk identifier \r\n writeUTFBytes(view, 36, 'data');\r\n\r\n // data chunk length \r\n view.setUint32(40, interleavedLength * 2, true);\r\n\r\n // write the PCM samples\r\n var lng = interleavedLength;\r\n var index = 44;\r\n var volume = 1;\r\n for (var i = 0; i < lng; i++) {\r\n view.setInt16(index, interleaved[i] * (0x7FFF * volume), true);\r\n index += 2;\r\n }\r\n\r\n if (cb) {\r\n return cb({\r\n buffer: buffer,\r\n view: view\r\n });\r\n }\r\n\r\n postMessage({\r\n buffer: buffer,\r\n view: view\r\n });\r\n }\r\n\r\n if (config.noWorker) {\r\n mergeAudioBuffers(config, function(data) {\r\n callback(data.buffer, data.view);\r\n });\r\n return;\r\n }\r\n\r\n\r\n var webWorker = processInWebWorker(mergeAudioBuffers);\r\n\r\n webWorker.onmessage = function(event) {\r\n callback(event.data.buffer, event.data.view);\r\n\r\n // release memory\r\n URL.revokeObjectURL(webWorker.workerURL);\r\n\r\n // kill webworker (or Chrome will kill your page after ~25 calls)\r\n webWorker.terminate();\r\n };\r\n\r\n webWorker.postMessage(config);\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n var workerURL = URL.createObjectURL(new Blob([_function.toString(),\r\n ';this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(workerURL);\r\n worker.workerURL = workerURL;\r\n return worker;\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n // stop recording\r\n recording = false;\r\n\r\n mergeLeftRightBuffers({\r\n desiredSampRate: desiredSampRate,\r\n sampleRate: sampleRate,\r\n numberOfAudioChannels: numberOfAudioChannels,\r\n internalInterleavedLength: recordingLength,\r\n leftBuffers: leftchannel,\r\n rightBuffers: numberOfAudioChannels === 1 ? [] : rightchannel,\r\n noWorker: config.noWorker\r\n }, function(buffer, view) {\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n self.blob = new Blob([view], {\r\n type: 'audio/wav'\r\n });\r\n\r\n /**\r\n * @property {ArrayBuffer} buffer - The recorded buffer object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var buffer = recorder.buffer;\r\n * });\r\n */\r\n self.buffer = new ArrayBuffer(view.buffer.byteLength);\r\n\r\n /**\r\n * @property {DataView} view - The recorded data-view object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var view = recorder.view;\r\n * });\r\n */\r\n self.view = view;\r\n\r\n self.sampleRate = desiredSampRate || sampleRate;\r\n self.bufferSize = bufferSize;\r\n\r\n // recorded audio length\r\n self.length = recordingLength;\r\n\r\n isAudioProcessStarted = false;\r\n\r\n if (callback) {\r\n callback(self.blob);\r\n }\r\n });\r\n };\r\n\r\n if (typeof RecordRTC.Storage === 'undefined') {\r\n RecordRTC.Storage = {\r\n AudioContextConstructor: null,\r\n AudioContext: window.AudioContext || window.webkitAudioContext\r\n };\r\n }\r\n\r\n if (!RecordRTC.Storage.AudioContextConstructor || RecordRTC.Storage.AudioContextConstructor.state === 'closed') {\r\n RecordRTC.Storage.AudioContextConstructor = new RecordRTC.Storage.AudioContext();\r\n }\r\n\r\n var context = RecordRTC.Storage.AudioContextConstructor;\r\n\r\n // creates an audio node from the microphone incoming stream\r\n var audioInput = context.createMediaStreamSource(mediaStream);\r\n\r\n var legalBufferValues = [0, 256, 512, 1024, 2048, 4096, 8192, 16384];\r\n\r\n /**\r\n * From the spec: This value controls how frequently the audioprocess event is\r\n * dispatched and how many sample-frames need to be processed each call.\r\n * Lower values for buffer size will result in a lower (better) latency.\r\n * Higher values will be necessary to avoid audio breakup and glitches\r\n * The size of the buffer (in sample-frames) which needs to\r\n * be processed each time onprocessaudio is called.\r\n * Legal values are (256, 512, 1024, 2048, 4096, 8192, 16384).\r\n * @property {number} bufferSize - Buffer-size for how frequently the audioprocess event is dispatched.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder = new StereoAudioRecorder(mediaStream, {\r\n * bufferSize: 4096\r\n * });\r\n */\r\n\r\n // \"0\" means, let chrome decide the most accurate buffer-size for current platform.\r\n var bufferSize = typeof config.bufferSize === 'undefined' ? 4096 : config.bufferSize;\r\n\r\n if (legalBufferValues.indexOf(bufferSize) === -1) {\r\n if (!config.disableLogs) {\r\n console.log('Legal values for buffer-size are ' + JSON.stringify(legalBufferValues, null, '\\t'));\r\n }\r\n }\r\n\r\n if (context.createJavaScriptNode) {\r\n jsAudioNode = context.createJavaScriptNode(bufferSize, numberOfAudioChannels, numberOfAudioChannels);\r\n } else if (context.createScriptProcessor) {\r\n jsAudioNode = context.createScriptProcessor(bufferSize, numberOfAudioChannels, numberOfAudioChannels);\r\n } else {\r\n throw 'WebAudio API has no support on this browser.';\r\n }\r\n\r\n // connect the stream to the script processor\r\n audioInput.connect(jsAudioNode);\r\n\r\n if (!config.bufferSize) {\r\n bufferSize = jsAudioNode.bufferSize; // device buffer-size\r\n }\r\n\r\n /**\r\n * The sample rate (in sample-frames per second) at which the\r\n * AudioContext handles audio. It is assumed that all AudioNodes\r\n * in the context run at this rate. In making this assumption,\r\n * sample-rate converters or \"varispeed\" processors are not supported\r\n * in real-time processing.\r\n * The sampleRate parameter describes the sample-rate of the\r\n * linear PCM audio data in the buffer in sample-frames per second.\r\n * An implementation must support sample-rates in at least\r\n * the range 22050 to 96000.\r\n * @property {number} sampleRate - Buffer-size for how frequently the audioprocess event is dispatched.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder = new StereoAudioRecorder(mediaStream, {\r\n * sampleRate: 44100\r\n * });\r\n */\r\n var sampleRate = typeof config.sampleRate !== 'undefined' ? config.sampleRate : context.sampleRate || 44100;\r\n\r\n if (sampleRate < 22050 || sampleRate > 96000) {\r\n // Ref: http://stackoverflow.com/a/26303918/552182\r\n if (!config.disableLogs) {\r\n console.log('sample-rate must be under range 22050 and 96000.');\r\n }\r\n }\r\n\r\n if (!config.disableLogs) {\r\n if (config.desiredSampRate) {\r\n console.log('Desired sample-rate: ' + config.desiredSampRate);\r\n }\r\n }\r\n\r\n var isPaused = false;\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPaused = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (isMediaStreamActive() === false) {\r\n throw 'Please make sure MediaStream is active.';\r\n }\r\n\r\n if (!recording) {\r\n if (!config.disableLogs) {\r\n console.log('Seems recording has been restarted.');\r\n }\r\n this.record();\r\n return;\r\n }\r\n\r\n isPaused = false;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n config.checkForInactiveTracks = false;\r\n\r\n if (recording) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n\r\n clearRecordedDataCB();\r\n };\r\n\r\n function resetVariables() {\r\n leftchannel = [];\r\n rightchannel = [];\r\n recordingLength = 0;\r\n isAudioProcessStarted = false;\r\n recording = false;\r\n isPaused = false;\r\n context = null;\r\n\r\n self.leftchannel = leftchannel;\r\n self.rightchannel = rightchannel;\r\n self.numberOfAudioChannels = numberOfAudioChannels;\r\n self.desiredSampRate = desiredSampRate;\r\n self.sampleRate = sampleRate;\r\n self.recordingLength = recordingLength;\r\n\r\n intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n }\r\n\r\n function clearRecordedDataCB() {\r\n if (jsAudioNode) {\r\n jsAudioNode.onaudioprocess = null;\r\n jsAudioNode.disconnect();\r\n jsAudioNode = null;\r\n }\r\n\r\n if (audioInput) {\r\n audioInput.disconnect();\r\n audioInput = null;\r\n }\r\n\r\n resetVariables();\r\n }\r\n\r\n // for debugging\r\n this.name = 'StereoAudioRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var isAudioProcessStarted = false;\r\n\r\n function onAudioProcessDataAvailable(e) {\r\n if (isPaused) {\r\n return;\r\n }\r\n\r\n if (isMediaStreamActive() === false) {\r\n if (!config.disableLogs) {\r\n console.log('MediaStream seems stopped.');\r\n }\r\n jsAudioNode.disconnect();\r\n recording = false;\r\n }\r\n\r\n if (!recording) {\r\n if (audioInput) {\r\n audioInput.disconnect();\r\n audioInput = null;\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * This method is called on \"onaudioprocess\" event's first invocation.\r\n * @method {function} onAudioProcessStarted\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.onAudioProcessStarted: function() { };\r\n */\r\n if (!isAudioProcessStarted) {\r\n isAudioProcessStarted = true;\r\n if (config.onAudioProcessStarted) {\r\n config.onAudioProcessStarted();\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n }\r\n\r\n var left = e.inputBuffer.getChannelData(0);\r\n\r\n // we clone the samples\r\n var chLeft = new Float32Array(left);\r\n leftchannel.push(chLeft);\r\n\r\n if (numberOfAudioChannels === 2) {\r\n var right = e.inputBuffer.getChannelData(1);\r\n var chRight = new Float32Array(right);\r\n rightchannel.push(chRight);\r\n }\r\n\r\n recordingLength += bufferSize;\r\n\r\n // export raw PCM\r\n self.recordingLength = recordingLength;\r\n\r\n if (typeof config.timeSlice !== 'undefined') {\r\n intervalsBasedBuffers.recordingLength += bufferSize;\r\n intervalsBasedBuffers.left.push(chLeft);\r\n\r\n if (numberOfAudioChannels === 2) {\r\n intervalsBasedBuffers.right.push(chRight);\r\n }\r\n }\r\n }\r\n\r\n jsAudioNode.onaudioprocess = onAudioProcessDataAvailable;\r\n\r\n // to prevent self audio to be connected with speakers\r\n if (context.createMediaStreamDestination) {\r\n jsAudioNode.connect(context.createMediaStreamDestination());\r\n } else {\r\n jsAudioNode.connect(context.destination);\r\n }\r\n\r\n // export raw PCM\r\n this.leftchannel = leftchannel;\r\n this.rightchannel = rightchannel;\r\n this.numberOfAudioChannels = numberOfAudioChannels;\r\n this.desiredSampRate = desiredSampRate;\r\n this.sampleRate = sampleRate;\r\n self.recordingLength = recordingLength;\r\n\r\n // helper for intervals based blobs\r\n var intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n\r\n // this looper is used to support intervals based blobs (via timeSlice+ondataavailable)\r\n function looper() {\r\n if (!recording || typeof config.ondataavailable !== 'function' || typeof config.timeSlice === 'undefined') {\r\n return;\r\n }\r\n\r\n if (intervalsBasedBuffers.left.length) {\r\n mergeLeftRightBuffers({\r\n desiredSampRate: desiredSampRate,\r\n sampleRate: sampleRate,\r\n numberOfAudioChannels: numberOfAudioChannels,\r\n internalInterleavedLength: intervalsBasedBuffers.recordingLength,\r\n leftBuffers: intervalsBasedBuffers.left,\r\n rightBuffers: numberOfAudioChannels === 1 ? [] : intervalsBasedBuffers.right\r\n }, function(buffer, view) {\r\n var blob = new Blob([view], {\r\n type: 'audio/wav'\r\n });\r\n config.ondataavailable(blob);\r\n\r\n setTimeout(looper, config.timeSlice);\r\n });\r\n\r\n intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n } else {\r\n setTimeout(looper, config.timeSlice);\r\n }\r\n }\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.StereoAudioRecorder = StereoAudioRecorder;\r\n}\r\n\r\n// _________________\r\n// CanvasRecorder.js\r\n\r\n/**\r\n * CanvasRecorder is a standalone class used by {@link RecordRTC} to bring HTML5-Canvas recording into video WebM. It uses HTML2Canvas library and runs top over {@link Whammy}.\r\n * @summary HTML2Canvas recording into video WebM.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef CanvasRecorder\r\n * @class\r\n * @example\r\n * var recorder = new CanvasRecorder(htmlElement, { disableLogs: true, useWhammyRecorder: true });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {HTMLElement} htmlElement - querySelector/getElementById/getElementsByTagName[0]/etc.\r\n * @param {object} config - {disableLogs:true, initCallback: function}\r\n */\r\n\r\nfunction CanvasRecorder(htmlElement, config) {\r\n if (typeof html2canvas === 'undefined') {\r\n throw 'Please link: https://www.webrtc-experiment.com/screenshot.js';\r\n }\r\n\r\n config = config || {};\r\n if (!config.frameInterval) {\r\n config.frameInterval = 10;\r\n }\r\n\r\n // via DetectRTC.js\r\n var isCanvasSupportsStreamCapturing = false;\r\n ['captureStream', 'mozCaptureStream', 'webkitCaptureStream'].forEach(function(item) {\r\n if (item in document.createElement('canvas')) {\r\n isCanvasSupportsStreamCapturing = true;\r\n }\r\n });\r\n\r\n var _isChrome = (!!window.webkitRTCPeerConnection || !!window.webkitGetUserMedia) && !!window.chrome;\r\n\r\n var chromeVersion = 50;\r\n var matchArray = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\r\n if (_isChrome && matchArray && matchArray[2]) {\r\n chromeVersion = parseInt(matchArray[2], 10);\r\n }\r\n\r\n if (_isChrome && chromeVersion < 52) {\r\n isCanvasSupportsStreamCapturing = false;\r\n }\r\n\r\n if (config.useWhammyRecorder) {\r\n isCanvasSupportsStreamCapturing = false;\r\n }\r\n\r\n var globalCanvas, mediaStreamRecorder;\r\n\r\n if (isCanvasSupportsStreamCapturing) {\r\n if (!config.disableLogs) {\r\n console.log('Your browser supports both MediRecorder API and canvas.captureStream!');\r\n }\r\n\r\n if (htmlElement instanceof HTMLCanvasElement) {\r\n globalCanvas = htmlElement;\r\n } else if (htmlElement instanceof CanvasRenderingContext2D) {\r\n globalCanvas = htmlElement.canvas;\r\n } else {\r\n throw 'Please pass either HTMLCanvasElement or CanvasRenderingContext2D.';\r\n }\r\n } else if (!!navigator.mozGetUserMedia) {\r\n if (!config.disableLogs) {\r\n console.error('Canvas recording is NOT supported in Firefox.');\r\n }\r\n }\r\n\r\n var isRecording;\r\n\r\n /**\r\n * This method records Canvas.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n isRecording = true;\r\n\r\n if (isCanvasSupportsStreamCapturing && !config.useWhammyRecorder) {\r\n // CanvasCaptureMediaStream\r\n var canvasMediaStream;\r\n if ('captureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.captureStream(25); // 25 FPS\r\n } else if ('mozCaptureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.mozCaptureStream(25);\r\n } else if ('webkitCaptureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.webkitCaptureStream(25);\r\n }\r\n\r\n try {\r\n var mdStream = new MediaStream();\r\n mdStream.addTrack(getTracks(canvasMediaStream, 'video')[0]);\r\n canvasMediaStream = mdStream;\r\n } catch (e) {}\r\n\r\n if (!canvasMediaStream) {\r\n throw 'captureStream API are NOT available.';\r\n }\r\n\r\n // Note: Jan 18, 2016 status is that, \r\n // Firefox MediaRecorder API can't record CanvasCaptureMediaStream object.\r\n mediaStreamRecorder = new MediaStreamRecorder(canvasMediaStream, {\r\n mimeType: config.mimeType || 'video/webm'\r\n });\r\n mediaStreamRecorder.record();\r\n } else {\r\n whammy.frames = [];\r\n lastTime = new Date().getTime();\r\n drawCanvasFrame();\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n this.getWebPImages = function(callback) {\r\n if (htmlElement.nodeName.toLowerCase() !== 'canvas') {\r\n callback();\r\n return;\r\n }\r\n\r\n var framesLength = whammy.frames.length;\r\n whammy.frames.forEach(function(frame, idx) {\r\n var framesRemaining = framesLength - idx;\r\n if (!config.disableLogs) {\r\n console.log(framesRemaining + '/' + framesLength + ' frames remaining');\r\n }\r\n\r\n if (config.onEncodingCallback) {\r\n config.onEncodingCallback(framesRemaining, framesLength);\r\n }\r\n\r\n var webp = frame.image.toDataURL('image/webp', 1);\r\n whammy.frames[idx].image = webp;\r\n });\r\n\r\n if (!config.disableLogs) {\r\n console.log('Generating WebM');\r\n }\r\n\r\n callback();\r\n };\r\n\r\n /**\r\n * This method stops recording Canvas.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n isRecording = false;\r\n\r\n var that = this;\r\n\r\n if (isCanvasSupportsStreamCapturing && mediaStreamRecorder) {\r\n mediaStreamRecorder.stop(callback);\r\n return;\r\n }\r\n\r\n this.getWebPImages(function() {\r\n /**\r\n * @property {Blob} blob - Recorded frames in video/webm blob.\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n whammy.compile(function(blob) {\r\n if (!config.disableLogs) {\r\n console.log('Recording finished!');\r\n }\r\n\r\n that.blob = blob;\r\n\r\n if (that.blob.forEach) {\r\n that.blob = new Blob([], {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback(that.blob);\r\n }\r\n\r\n whammy.frames = [];\r\n });\r\n });\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n\r\n if (mediaStreamRecorder instanceof MediaStreamRecorder) {\r\n mediaStreamRecorder.pause();\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n\r\n if (mediaStreamRecorder instanceof MediaStreamRecorder) {\r\n mediaStreamRecorder.resume();\r\n return;\r\n }\r\n\r\n if (!isRecording) {\r\n this.record();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (isRecording) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n whammy.frames = [];\r\n isRecording = false;\r\n isPausedRecording = false;\r\n }\r\n\r\n // for debugging\r\n this.name = 'CanvasRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n function cloneCanvas() {\r\n //create a new canvas\r\n var newCanvas = document.createElement('canvas');\r\n var context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = htmlElement.width;\r\n newCanvas.height = htmlElement.height;\r\n\r\n //apply the old canvas to the new one\r\n context.drawImage(htmlElement, 0, 0);\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n }\r\n\r\n function drawCanvasFrame() {\r\n if (isPausedRecording) {\r\n lastTime = new Date().getTime();\r\n return setTimeout(drawCanvasFrame, 500);\r\n }\r\n\r\n if (htmlElement.nodeName.toLowerCase() === 'canvas') {\r\n var duration = new Date().getTime() - lastTime;\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n whammy.frames.push({\r\n image: cloneCanvas(),\r\n duration: duration\r\n });\r\n\r\n if (isRecording) {\r\n setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n return;\r\n }\r\n\r\n html2canvas(htmlElement, {\r\n grabMouse: typeof config.showMousePointer === 'undefined' || config.showMousePointer,\r\n onrendered: function(canvas) {\r\n var duration = new Date().getTime() - lastTime;\r\n if (!duration) {\r\n return setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n whammy.frames.push({\r\n image: canvas.toDataURL('image/webp', 1),\r\n duration: duration\r\n });\r\n\r\n if (isRecording) {\r\n setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n }\r\n });\r\n }\r\n\r\n var lastTime = new Date().getTime();\r\n\r\n var whammy = new Whammy.Video(100);\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.CanvasRecorder = CanvasRecorder;\r\n}\n\r\n// _________________\r\n// WhammyRecorder.js\r\n\r\n/**\r\n * WhammyRecorder is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It runs top over {@link Whammy}.\r\n * @summary Video recording feature in Chrome.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef WhammyRecorder\r\n * @class\r\n * @example\r\n * var recorder = new WhammyRecorder(mediaStream);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {disableLogs: true, initCallback: function, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction WhammyRecorder(mediaStream, config) {\r\n\r\n config = config || {};\r\n\r\n if (!config.frameInterval) {\r\n config.frameInterval = 10;\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('Using frames-interval:', config.frameInterval);\r\n }\r\n\r\n /**\r\n * This method records video.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (!config.width) {\r\n config.width = 320;\r\n }\r\n\r\n if (!config.height) {\r\n config.height = 240;\r\n }\r\n\r\n if (!config.video) {\r\n config.video = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n if (!config.canvas) {\r\n config.canvas = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n canvas.width = config.canvas.width || 320;\r\n canvas.height = config.canvas.height || 240;\r\n\r\n context = canvas.getContext('2d');\r\n\r\n // setting defaults\r\n if (config.video && config.video instanceof HTMLVideoElement) {\r\n video = config.video.cloneNode();\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n } else {\r\n video = document.createElement('video');\r\n\r\n setSrcObject(mediaStream, video);\r\n\r\n video.onloadedmetadata = function() { // \"onloadedmetadata\" may NOT work in FF?\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n video.width = config.video.width;\r\n video.height = config.video.height;\r\n }\r\n\r\n video.muted = true;\r\n video.play();\r\n\r\n lastTime = new Date().getTime();\r\n whammy = new Whammy.Video();\r\n\r\n if (!config.disableLogs) {\r\n console.log('canvas resolutions', canvas.width, '*', canvas.height);\r\n console.log('video width/height', video.width || canvas.width, '*', video.height || canvas.height);\r\n }\r\n\r\n drawFrames(config.frameInterval);\r\n };\r\n\r\n /**\r\n * Draw and push frames to Whammy\r\n * @param {integer} frameInterval - set minimum interval (in milliseconds) between each time we push a frame to Whammy\r\n */\r\n function drawFrames(frameInterval) {\r\n frameInterval = typeof frameInterval !== 'undefined' ? frameInterval : 10;\r\n\r\n var duration = new Date().getTime() - lastTime;\r\n if (!duration) {\r\n return setTimeout(drawFrames, frameInterval, frameInterval);\r\n }\r\n\r\n if (isPausedRecording) {\r\n lastTime = new Date().getTime();\r\n return setTimeout(drawFrames, 100);\r\n }\r\n\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n if (video.paused) {\r\n // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316\r\n // Tweak for Android Chrome\r\n video.play();\r\n }\r\n\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n whammy.frames.push({\r\n duration: duration,\r\n image: canvas.toDataURL('image/webp')\r\n });\r\n\r\n if (!isStopDrawing) {\r\n setTimeout(drawFrames, frameInterval, frameInterval);\r\n }\r\n }\r\n\r\n function asyncLoop(o) {\r\n var i = -1,\r\n length = o.length;\r\n\r\n (function loop() {\r\n i++;\r\n if (i === length) {\r\n o.callback();\r\n return;\r\n }\r\n\r\n // \"setTimeout\" added by Jim McLeod\r\n setTimeout(function() {\r\n o.functionToLoop(loop, i);\r\n }, 1);\r\n })();\r\n }\r\n\r\n\r\n /**\r\n * remove black frames from the beginning to the specified frame\r\n * @param {Array} _frames - array of frames to be checked\r\n * @param {number} _framesToCheck - number of frame until check will be executed (-1 - will drop all frames until frame not matched will be found)\r\n * @param {number} _pixTolerance - 0 - very strict (only black pixel color) ; 1 - all\r\n * @param {number} _frameTolerance - 0 - very strict (only black frame color) ; 1 - all\r\n * @returns {Array} - array of frames\r\n */\r\n // pull#293 by @volodalexey\r\n function dropBlackFrames(_frames, _framesToCheck, _pixTolerance, _frameTolerance, callback) {\r\n var localCanvas = document.createElement('canvas');\r\n localCanvas.width = canvas.width;\r\n localCanvas.height = canvas.height;\r\n var context2d = localCanvas.getContext('2d');\r\n var resultFrames = [];\r\n\r\n var checkUntilNotBlack = _framesToCheck === -1;\r\n var endCheckFrame = (_framesToCheck && _framesToCheck > 0 && _framesToCheck <= _frames.length) ?\r\n _framesToCheck : _frames.length;\r\n var sampleColor = {\r\n r: 0,\r\n g: 0,\r\n b: 0\r\n };\r\n var maxColorDifference = Math.sqrt(\r\n Math.pow(255, 2) +\r\n Math.pow(255, 2) +\r\n Math.pow(255, 2)\r\n );\r\n var pixTolerance = _pixTolerance && _pixTolerance >= 0 && _pixTolerance <= 1 ? _pixTolerance : 0;\r\n var frameTolerance = _frameTolerance && _frameTolerance >= 0 && _frameTolerance <= 1 ? _frameTolerance : 0;\r\n var doNotCheckNext = false;\r\n\r\n asyncLoop({\r\n length: endCheckFrame,\r\n functionToLoop: function(loop, f) {\r\n var matchPixCount, endPixCheck, maxPixCount;\r\n\r\n var finishImage = function() {\r\n if (!doNotCheckNext && maxPixCount - matchPixCount <= maxPixCount * frameTolerance) {\r\n // console.log('removed black frame : ' + f + ' ; frame duration ' + _frames[f].duration);\r\n } else {\r\n // console.log('frame is passed : ' + f);\r\n if (checkUntilNotBlack) {\r\n doNotCheckNext = true;\r\n }\r\n resultFrames.push(_frames[f]);\r\n }\r\n loop();\r\n };\r\n\r\n if (!doNotCheckNext) {\r\n var image = new Image();\r\n image.onload = function() {\r\n context2d.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n var imageData = context2d.getImageData(0, 0, canvas.width, canvas.height);\r\n matchPixCount = 0;\r\n endPixCheck = imageData.data.length;\r\n maxPixCount = imageData.data.length / 4;\r\n\r\n for (var pix = 0; pix < endPixCheck; pix += 4) {\r\n var currentColor = {\r\n r: imageData.data[pix],\r\n g: imageData.data[pix + 1],\r\n b: imageData.data[pix + 2]\r\n };\r\n var colorDifference = Math.sqrt(\r\n Math.pow(currentColor.r - sampleColor.r, 2) +\r\n Math.pow(currentColor.g - sampleColor.g, 2) +\r\n Math.pow(currentColor.b - sampleColor.b, 2)\r\n );\r\n // difference in color it is difference in color vectors (r1,g1,b1) <=> (r2,g2,b2)\r\n if (colorDifference <= maxColorDifference * pixTolerance) {\r\n matchPixCount++;\r\n }\r\n }\r\n finishImage();\r\n };\r\n image.src = _frames[f].image;\r\n } else {\r\n finishImage();\r\n }\r\n },\r\n callback: function() {\r\n resultFrames = resultFrames.concat(_frames.slice(endCheckFrame));\r\n\r\n if (resultFrames.length <= 0) {\r\n // at least one last frame should be available for next manipulation\r\n // if total duration of all frames will be < 1000 than ffmpeg doesn't work well...\r\n resultFrames.push(_frames[_frames.length - 1]);\r\n }\r\n callback(resultFrames);\r\n }\r\n });\r\n }\r\n\r\n var isStopDrawing = false;\r\n\r\n /**\r\n * This method stops recording video.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n isStopDrawing = true;\r\n\r\n var _this = this;\r\n // analyse of all frames takes some time!\r\n setTimeout(function() {\r\n // e.g. dropBlackFrames(frames, 10, 1, 1) - will cut all 10 frames\r\n // e.g. dropBlackFrames(frames, 10, 0.5, 0.5) - will analyse 10 frames\r\n // e.g. dropBlackFrames(frames, 10) === dropBlackFrames(frames, 10, 0, 0) - will analyse 10 frames with strict black color\r\n dropBlackFrames(whammy.frames, -1, null, null, function(frames) {\r\n whammy.frames = frames;\r\n\r\n // to display advertisement images!\r\n if (config.advertisement && config.advertisement.length) {\r\n whammy.frames = config.advertisement.concat(whammy.frames);\r\n }\r\n\r\n /**\r\n * @property {Blob} blob - Recorded frames in video/webm blob.\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n whammy.compile(function(blob) {\r\n _this.blob = blob;\r\n\r\n if (_this.blob.forEach) {\r\n _this.blob = new Blob([], {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback(_this.blob);\r\n }\r\n });\r\n });\r\n }, 10);\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n\r\n if (isStopDrawing) {\r\n this.record();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (!isStopDrawing) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n whammy.frames = [];\r\n isStopDrawing = true;\r\n isPausedRecording = false;\r\n }\r\n\r\n // for debugging\r\n this.name = 'WhammyRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n\r\n var video;\r\n var lastTime;\r\n var whammy;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.WhammyRecorder = WhammyRecorder;\r\n}\n\r\n// https://github.com/antimatter15/whammy/blob/master/LICENSE\r\n// _________\r\n// Whammy.js\r\n\r\n// todo: Firefox now supports webp for webm containers!\r\n// their MediaRecorder implementation works well!\r\n// should we provide an option to record via Whammy.js or MediaRecorder API is a better solution?\r\n\r\n/**\r\n * Whammy is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It is written by {@link https://github.com/antimatter15|antimatter15}\r\n * @summary A real time javascript webm encoder based on a canvas hack.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef Whammy\r\n * @class\r\n * @example\r\n * var recorder = new Whammy().Video(15);\r\n * recorder.add(context || canvas || dataURL);\r\n * var output = recorder.compile();\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\nvar Whammy = (function() {\r\n // a more abstract-ish API\r\n\r\n function WhammyVideo(duration) {\r\n this.frames = [];\r\n this.duration = duration || 1;\r\n this.quality = 0.8;\r\n }\r\n\r\n /**\r\n * Pass Canvas or Context or image/webp(string) to {@link Whammy} encoder.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * recorder.add(canvas || context || 'image/webp');\r\n * @param {string} frame - Canvas || Context || image/webp\r\n * @param {number} duration - Stick a duration (in milliseconds)\r\n */\r\n WhammyVideo.prototype.add = function(frame, duration) {\r\n if ('canvas' in frame) { //CanvasRenderingContext2D\r\n frame = frame.canvas;\r\n }\r\n\r\n if ('toDataURL' in frame) {\r\n frame = frame.toDataURL('image/webp', this.quality);\r\n }\r\n\r\n if (!(/^data:image\\/webp;base64,/ig).test(frame)) {\r\n throw 'Input must be formatted properly as a base64 encoded DataURI of type image/webp';\r\n }\r\n this.frames.push({\r\n image: frame,\r\n duration: duration || this.duration\r\n });\r\n };\r\n\r\n function processInWebWorker(_function) {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n URL.revokeObjectURL(blob);\r\n return worker;\r\n }\r\n\r\n function whammyInWebWorker(frames) {\r\n function ArrayToWebM(frames) {\r\n var info = checkFrames(frames);\r\n if (!info) {\r\n return [];\r\n }\r\n\r\n var clusterMaxDuration = 30000;\r\n\r\n var EBML = [{\r\n 'id': 0x1a45dfa3, // EBML\r\n 'data': [{\r\n 'data': 1,\r\n 'id': 0x4286 // EBMLVersion\r\n }, {\r\n 'data': 1,\r\n 'id': 0x42f7 // EBMLReadVersion\r\n }, {\r\n 'data': 4,\r\n 'id': 0x42f2 // EBMLMaxIDLength\r\n }, {\r\n 'data': 8,\r\n 'id': 0x42f3 // EBMLMaxSizeLength\r\n }, {\r\n 'data': 'webm',\r\n 'id': 0x4282 // DocType\r\n }, {\r\n 'data': 2,\r\n 'id': 0x4287 // DocTypeVersion\r\n }, {\r\n 'data': 2,\r\n 'id': 0x4285 // DocTypeReadVersion\r\n }]\r\n }, {\r\n 'id': 0x18538067, // Segment\r\n 'data': [{\r\n 'id': 0x1549a966, // Info\r\n 'data': [{\r\n 'data': 1e6, //do things in millisecs (num of nanosecs for duration scale)\r\n 'id': 0x2ad7b1 // TimecodeScale\r\n }, {\r\n 'data': 'whammy',\r\n 'id': 0x4d80 // MuxingApp\r\n }, {\r\n 'data': 'whammy',\r\n 'id': 0x5741 // WritingApp\r\n }, {\r\n 'data': doubleToString(info.duration),\r\n 'id': 0x4489 // Duration\r\n }]\r\n }, {\r\n 'id': 0x1654ae6b, // Tracks\r\n 'data': [{\r\n 'id': 0xae, // TrackEntry\r\n 'data': [{\r\n 'data': 1,\r\n 'id': 0xd7 // TrackNumber\r\n }, {\r\n 'data': 1,\r\n 'id': 0x73c5 // TrackUID\r\n }, {\r\n 'data': 0,\r\n 'id': 0x9c // FlagLacing\r\n }, {\r\n 'data': 'und',\r\n 'id': 0x22b59c // Language\r\n }, {\r\n 'data': 'V_VP8',\r\n 'id': 0x86 // CodecID\r\n }, {\r\n 'data': 'VP8',\r\n 'id': 0x258688 // CodecName\r\n }, {\r\n 'data': 1,\r\n 'id': 0x83 // TrackType\r\n }, {\r\n 'id': 0xe0, // Video\r\n 'data': [{\r\n 'data': info.width,\r\n 'id': 0xb0 // PixelWidth\r\n }, {\r\n 'data': info.height,\r\n 'id': 0xba // PixelHeight\r\n }]\r\n }]\r\n }]\r\n }]\r\n }];\r\n\r\n //Generate clusters (max duration)\r\n var frameNumber = 0;\r\n var clusterTimecode = 0;\r\n while (frameNumber < frames.length) {\r\n\r\n var clusterFrames = [];\r\n var clusterDuration = 0;\r\n do {\r\n clusterFrames.push(frames[frameNumber]);\r\n clusterDuration += frames[frameNumber].duration;\r\n frameNumber++;\r\n } while (frameNumber < frames.length && clusterDuration < clusterMaxDuration);\r\n\r\n var clusterCounter = 0;\r\n var cluster = {\r\n 'id': 0x1f43b675, // Cluster\r\n 'data': getClusterData(clusterTimecode, clusterCounter, clusterFrames)\r\n }; //Add cluster to segment\r\n EBML[1].data.push(cluster);\r\n clusterTimecode += clusterDuration;\r\n }\r\n\r\n return generateEBML(EBML);\r\n }\r\n\r\n function getClusterData(clusterTimecode, clusterCounter, clusterFrames) {\r\n return [{\r\n 'data': clusterTimecode,\r\n 'id': 0xe7 // Timecode\r\n }].concat(clusterFrames.map(function(webp) {\r\n var block = makeSimpleBlock({\r\n discardable: 0,\r\n frame: webp.data.slice(4),\r\n invisible: 0,\r\n keyframe: 1,\r\n lacing: 0,\r\n trackNum: 1,\r\n timecode: Math.round(clusterCounter)\r\n });\r\n clusterCounter += webp.duration;\r\n return {\r\n data: block,\r\n id: 0xa3\r\n };\r\n }));\r\n }\r\n\r\n // sums the lengths of all the frames and gets the duration\r\n\r\n function checkFrames(frames) {\r\n if (!frames[0]) {\r\n postMessage({\r\n error: 'Something went wrong. Maybe WebP format is not supported in the current browser.'\r\n });\r\n return;\r\n }\r\n\r\n var width = frames[0].width,\r\n height = frames[0].height,\r\n duration = frames[0].duration;\r\n\r\n for (var i = 1; i < frames.length; i++) {\r\n duration += frames[i].duration;\r\n }\r\n return {\r\n duration: duration,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n function numToBuffer(num) {\r\n var parts = [];\r\n while (num > 0) {\r\n parts.push(num & 0xff);\r\n num = num >> 8;\r\n }\r\n return new Uint8Array(parts.reverse());\r\n }\r\n\r\n function strToBuffer(str) {\r\n return new Uint8Array(str.split('').map(function(e) {\r\n return e.charCodeAt(0);\r\n }));\r\n }\r\n\r\n function bitsToBuffer(bits) {\r\n var data = [];\r\n var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : '';\r\n bits = pad + bits;\r\n for (var i = 0; i < bits.length; i += 8) {\r\n data.push(parseInt(bits.substr(i, 8), 2));\r\n }\r\n return new Uint8Array(data);\r\n }\r\n\r\n function generateEBML(json) {\r\n var ebml = [];\r\n for (var i = 0; i < json.length; i++) {\r\n var data = json[i].data;\r\n\r\n if (typeof data === 'object') {\r\n data = generateEBML(data);\r\n }\r\n\r\n if (typeof data === 'number') {\r\n data = bitsToBuffer(data.toString(2));\r\n }\r\n\r\n if (typeof data === 'string') {\r\n data = strToBuffer(data);\r\n }\r\n\r\n var len = data.size || data.byteLength || data.length;\r\n var zeroes = Math.ceil(Math.ceil(Math.log(len) / Math.log(2)) / 8);\r\n var sizeToString = len.toString(2);\r\n var padded = (new Array((zeroes * 7 + 7 + 1) - sizeToString.length)).join('0') + sizeToString;\r\n var size = (new Array(zeroes)).join('0') + '1' + padded;\r\n\r\n ebml.push(numToBuffer(json[i].id));\r\n ebml.push(bitsToBuffer(size));\r\n ebml.push(data);\r\n }\r\n\r\n return new Blob(ebml, {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n function toBinStrOld(bits) {\r\n var data = '';\r\n var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : '';\r\n bits = pad + bits;\r\n for (var i = 0; i < bits.length; i += 8) {\r\n data += String.fromCharCode(parseInt(bits.substr(i, 8), 2));\r\n }\r\n return data;\r\n }\r\n\r\n function makeSimpleBlock(data) {\r\n var flags = 0;\r\n\r\n if (data.keyframe) {\r\n flags |= 128;\r\n }\r\n\r\n if (data.invisible) {\r\n flags |= 8;\r\n }\r\n\r\n if (data.lacing) {\r\n flags |= (data.lacing << 1);\r\n }\r\n\r\n if (data.discardable) {\r\n flags |= 1;\r\n }\r\n\r\n if (data.trackNum > 127) {\r\n throw 'TrackNumber > 127 not supported';\r\n }\r\n\r\n var out = [data.trackNum | 0x80, data.timecode >> 8, data.timecode & 0xff, flags].map(function(e) {\r\n return String.fromCharCode(e);\r\n }).join('') + data.frame;\r\n\r\n return out;\r\n }\r\n\r\n function parseWebP(riff) {\r\n var VP8 = riff.RIFF[0].WEBP[0];\r\n\r\n var frameStart = VP8.indexOf('\\x9d\\x01\\x2a'); // A VP8 keyframe starts with the 0x9d012a header\r\n for (var i = 0, c = []; i < 4; i++) {\r\n c[i] = VP8.charCodeAt(frameStart + 3 + i);\r\n }\r\n\r\n var width, height, tmp;\r\n\r\n //the code below is literally copied verbatim from the bitstream spec\r\n tmp = (c[1] << 8) | c[0];\r\n width = tmp & 0x3FFF;\r\n tmp = (c[3] << 8) | c[2];\r\n height = tmp & 0x3FFF;\r\n return {\r\n width: width,\r\n height: height,\r\n data: VP8,\r\n riff: riff\r\n };\r\n }\r\n\r\n function getStrLength(string, offset) {\r\n return parseInt(string.substr(offset + 4, 4).split('').map(function(i) {\r\n var unpadded = i.charCodeAt(0).toString(2);\r\n return (new Array(8 - unpadded.length + 1)).join('0') + unpadded;\r\n }).join(''), 2);\r\n }\r\n\r\n function parseRIFF(string) {\r\n var offset = 0;\r\n var chunks = {};\r\n\r\n while (offset < string.length) {\r\n var id = string.substr(offset, 4);\r\n var len = getStrLength(string, offset);\r\n var data = string.substr(offset + 4 + 4, len);\r\n offset += 4 + 4 + len;\r\n chunks[id] = chunks[id] || [];\r\n\r\n if (id === 'RIFF' || id === 'LIST') {\r\n chunks[id].push(parseRIFF(data));\r\n } else {\r\n chunks[id].push(data);\r\n }\r\n }\r\n return chunks;\r\n }\r\n\r\n function doubleToString(num) {\r\n return [].slice.call(\r\n new Uint8Array((new Float64Array([num])).buffer), 0).map(function(e) {\r\n return String.fromCharCode(e);\r\n }).reverse().join('');\r\n }\r\n\r\n var webm = new ArrayToWebM(frames.map(function(frame) {\r\n var webp = parseWebP(parseRIFF(atob(frame.image.slice(23))));\r\n webp.duration = frame.duration;\r\n return webp;\r\n }));\r\n\r\n postMessage(webm);\r\n }\r\n\r\n /**\r\n * Encodes frames in WebM container. It uses WebWorkinvoke to invoke 'ArrayToWebM' method.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * recorder.compile(function(blob) {\r\n * // blob.size - blob.type\r\n * });\r\n */\r\n WhammyVideo.prototype.compile = function(callback) {\r\n var webWorker = processInWebWorker(whammyInWebWorker);\r\n\r\n webWorker.onmessage = function(event) {\r\n if (event.data.error) {\r\n console.error(event.data.error);\r\n return;\r\n }\r\n callback(event.data);\r\n };\r\n\r\n webWorker.postMessage(this.frames);\r\n };\r\n\r\n return {\r\n /**\r\n * A more abstract-ish API.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * @param {?number} speed - 0.8\r\n * @param {?number} quality - 100\r\n */\r\n Video: WhammyVideo\r\n };\r\n})();\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.Whammy = Whammy;\r\n}\n\r\n// ______________ (indexed-db)\r\n// DiskStorage.js\r\n\r\n/**\r\n * DiskStorage is a standalone object used by {@link RecordRTC} to store recorded blobs in IndexedDB storage.\r\n * @summary Writing blobs into IndexedDB.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @example\r\n * DiskStorage.Store({\r\n * audioBlob: yourAudioBlob,\r\n * videoBlob: yourVideoBlob,\r\n * gifBlob : yourGifBlob\r\n * });\r\n * DiskStorage.Fetch(function(dataURL, type) {\r\n * if(type === 'audioBlob') { }\r\n * if(type === 'videoBlob') { }\r\n * if(type === 'gifBlob') { }\r\n * });\r\n * // DiskStorage.dataStoreName = 'recordRTC';\r\n * // DiskStorage.onError = function(error) { };\r\n * @property {function} init - This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally.\r\n * @property {function} Fetch - This method fetches stored blobs from IndexedDB.\r\n * @property {function} Store - This method stores blobs in IndexedDB.\r\n * @property {function} onError - This function is invoked for any known/unknown error.\r\n * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage.\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\n\r\nvar DiskStorage = {\r\n /**\r\n * This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.init();\r\n */\r\n init: function() {\r\n var self = this;\r\n\r\n if (typeof indexedDB === 'undefined' || typeof indexedDB.open === 'undefined') {\r\n console.error('IndexedDB API are not available in this browser.');\r\n return;\r\n }\r\n\r\n var dbVersion = 1;\r\n var dbName = this.dbName || location.href.replace(/\\/|:|#|%|\\.|\\[|\\]/g, ''),\r\n db;\r\n var request = indexedDB.open(dbName, dbVersion);\r\n\r\n function createObjectStore(dataBase) {\r\n dataBase.createObjectStore(self.dataStoreName);\r\n }\r\n\r\n function putInDB() {\r\n var transaction = db.transaction([self.dataStoreName], 'readwrite');\r\n\r\n if (self.videoBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.videoBlob, 'videoBlob');\r\n }\r\n\r\n if (self.gifBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.gifBlob, 'gifBlob');\r\n }\r\n\r\n if (self.audioBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.audioBlob, 'audioBlob');\r\n }\r\n\r\n function getFromStore(portionName) {\r\n transaction.objectStore(self.dataStoreName).get(portionName).onsuccess = function(event) {\r\n if (self.callback) {\r\n self.callback(event.target.result, portionName);\r\n }\r\n };\r\n }\r\n\r\n getFromStore('audioBlob');\r\n getFromStore('videoBlob');\r\n getFromStore('gifBlob');\r\n }\r\n\r\n request.onerror = self.onError;\r\n\r\n request.onsuccess = function() {\r\n db = request.result;\r\n db.onerror = self.onError;\r\n\r\n if (db.setVersion) {\r\n if (db.version !== dbVersion) {\r\n var setVersion = db.setVersion(dbVersion);\r\n setVersion.onsuccess = function() {\r\n createObjectStore(db);\r\n putInDB();\r\n };\r\n } else {\r\n putInDB();\r\n }\r\n } else {\r\n putInDB();\r\n }\r\n };\r\n request.onupgradeneeded = function(event) {\r\n createObjectStore(event.target.result);\r\n };\r\n },\r\n /**\r\n * This method fetches stored blobs from IndexedDB.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.Fetch(function(dataURL, type) {\r\n * if(type === 'audioBlob') { }\r\n * if(type === 'videoBlob') { }\r\n * if(type === 'gifBlob') { }\r\n * });\r\n */\r\n Fetch: function(callback) {\r\n this.callback = callback;\r\n this.init();\r\n\r\n return this;\r\n },\r\n /**\r\n * This method stores blobs in IndexedDB.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.Store({\r\n * audioBlob: yourAudioBlob,\r\n * videoBlob: yourVideoBlob,\r\n * gifBlob : yourGifBlob\r\n * });\r\n */\r\n Store: function(config) {\r\n this.audioBlob = config.audioBlob;\r\n this.videoBlob = config.videoBlob;\r\n this.gifBlob = config.gifBlob;\r\n\r\n this.init();\r\n\r\n return this;\r\n },\r\n /**\r\n * This function is invoked for any known/unknown error.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.onError = function(error){\r\n * alerot( JSON.stringify(error) );\r\n * };\r\n */\r\n onError: function(error) {\r\n console.error(JSON.stringify(error, null, '\\t'));\r\n },\r\n\r\n /**\r\n * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage.\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.dataStoreName = 'recordRTC';\r\n */\r\n dataStoreName: 'recordRTC',\r\n dbName: null\r\n};\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.DiskStorage = DiskStorage;\r\n}\n\r\n// ______________\r\n// GifRecorder.js\r\n\r\n/**\r\n * GifRecorder is standalone calss used by {@link RecordRTC} to record video or canvas into animated gif.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef GifRecorder\r\n * @class\r\n * @example\r\n * var recorder = new GifRecorder(mediaStream || canvas || context, { onGifPreview: function, onGifRecordingStarted: function, width: 1280, height: 720, frameRate: 200, quality: 10 });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * img.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object or HTMLCanvasElement or CanvasRenderingContext2D.\r\n * @param {object} config - {disableLogs:true, initCallback: function, width: 320, height: 240, frameRate: 200, quality: 10}\r\n */\r\n\r\nfunction GifRecorder(mediaStream, config) {\r\n if (typeof GIFEncoder === 'undefined') {\r\n var script = document.createElement('script');\r\n script.src = 'https://www.webrtc-experiment.com/gif-recorder.js';\r\n (document.body || document.documentElement).appendChild(script);\r\n }\r\n\r\n config = config || {};\r\n\r\n var isHTMLObject = mediaStream instanceof CanvasRenderingContext2D || mediaStream instanceof HTMLCanvasElement;\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (typeof GIFEncoder === 'undefined') {\r\n setTimeout(self.record, 1000);\r\n return;\r\n }\r\n\r\n if (!isLoadedMetaData) {\r\n setTimeout(self.record, 1000);\r\n return;\r\n }\r\n\r\n if (!isHTMLObject) {\r\n if (!config.width) {\r\n config.width = video.offsetWidth || 320;\r\n }\r\n\r\n if (!config.height) {\r\n config.height = video.offsetHeight || 240;\r\n }\r\n\r\n if (!config.video) {\r\n config.video = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n if (!config.canvas) {\r\n config.canvas = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n canvas.width = config.canvas.width || 320;\r\n canvas.height = config.canvas.height || 240;\r\n\r\n video.width = config.video.width || 320;\r\n video.height = config.video.height || 240;\r\n }\r\n\r\n // external library to record as GIF images\r\n gifEncoder = new GIFEncoder();\r\n\r\n // void setRepeat(int iter) \r\n // Sets the number of times the set of GIF frames should be played. \r\n // Default is 1; 0 means play indefinitely.\r\n gifEncoder.setRepeat(0);\r\n\r\n // void setFrameRate(Number fps) \r\n // Sets frame rate in frames per second. \r\n // Equivalent to setDelay(1000/fps).\r\n // Using \"setDelay\" instead of \"setFrameRate\"\r\n gifEncoder.setDelay(config.frameRate || 200);\r\n\r\n // void setQuality(int quality) \r\n // Sets quality of color quantization (conversion of images to the \r\n // maximum 256 colors allowed by the GIF specification). \r\n // Lower values (minimum = 1) produce better colors, \r\n // but slow processing significantly. 10 is the default, \r\n // and produces good color mapping at reasonable speeds. \r\n // Values greater than 20 do not yield significant improvements in speed.\r\n gifEncoder.setQuality(config.quality || 10);\r\n\r\n // Boolean start() \r\n // This writes the GIF Header and returns false if it fails.\r\n gifEncoder.start();\r\n\r\n if (typeof config.onGifRecordingStarted === 'function') {\r\n config.onGifRecordingStarted();\r\n }\r\n\r\n startTime = Date.now();\r\n\r\n function drawVideoFrame(time) {\r\n if (self.clearedRecordedData === true) {\r\n return;\r\n }\r\n\r\n if (isPausedRecording) {\r\n return setTimeout(function() {\r\n drawVideoFrame(time);\r\n }, 100);\r\n }\r\n\r\n lastAnimationFrame = requestAnimationFrame(drawVideoFrame);\r\n\r\n if (typeof lastFrameTime === undefined) {\r\n lastFrameTime = time;\r\n }\r\n\r\n // ~10 fps\r\n if (time - lastFrameTime < 90) {\r\n return;\r\n }\r\n\r\n if (!isHTMLObject && video.paused) {\r\n // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316\r\n // Tweak for Android Chrome\r\n video.play();\r\n }\r\n\r\n if (!isHTMLObject) {\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n if (config.onGifPreview) {\r\n config.onGifPreview(canvas.toDataURL('image/png'));\r\n }\r\n\r\n gifEncoder.addFrame(context);\r\n lastFrameTime = time;\r\n }\r\n\r\n lastAnimationFrame = requestAnimationFrame(drawVideoFrame);\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * img.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n if (lastAnimationFrame) {\r\n cancelAnimationFrame(lastAnimationFrame);\r\n }\r\n\r\n endTime = Date.now();\r\n\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = new Blob([new Uint8Array(gifEncoder.stream().bin)], {\r\n type: 'image/gif'\r\n });\r\n\r\n callback(this.blob);\r\n\r\n // bug: find a way to clear old recorded blobs\r\n gifEncoder.stream().bin = [];\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n self.clearedRecordedData = true;\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n if (gifEncoder) {\r\n gifEncoder.stream().bin = [];\r\n }\r\n }\r\n\r\n // for debugging\r\n this.name = 'GifRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n\r\n if (isHTMLObject) {\r\n if (mediaStream instanceof CanvasRenderingContext2D) {\r\n context = mediaStream;\r\n canvas = context.canvas;\r\n } else if (mediaStream instanceof HTMLCanvasElement) {\r\n context = mediaStream.getContext('2d');\r\n canvas = mediaStream;\r\n }\r\n }\r\n\r\n var isLoadedMetaData = true;\r\n\r\n if (!isHTMLObject) {\r\n var video = document.createElement('video');\r\n video.muted = true;\r\n video.autoplay = true;\r\n video.playsInline = true;\r\n\r\n isLoadedMetaData = false;\r\n video.onloadedmetadata = function() {\r\n isLoadedMetaData = true;\r\n };\r\n\r\n setSrcObject(mediaStream, video);\r\n\r\n video.play();\r\n }\r\n\r\n var lastAnimationFrame = null;\r\n var startTime, endTime, lastFrameTime;\r\n\r\n var gifEncoder;\r\n\r\n var self = this;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.GifRecorder = GifRecorder;\r\n}\n\r\n// Last time updated: 2019-06-21 4:09:42 AM UTC\r\n\r\n// ________________________\r\n// MultiStreamsMixer v1.2.2\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/MultiStreamsMixer\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\nfunction MultiStreamsMixer(arrayOfMediaStreams, elementClass) {\r\n\r\n var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n (function(that) {\r\n if (typeof RecordRTC !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.log === 'undefined' || typeof global.console.error === 'undefined') {\r\n global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {\r\n documentElement: {\r\n appendChild: function() {\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n },\r\n style: {}\r\n };\r\n return obj;\r\n };\r\n\r\n that.HTMLVideoElement = function() {};\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n })(typeof global !== 'undefined' ? global : null);\r\n\r\n // requires: chrome://flags/#enable-experimental-web-platform-features\r\n\r\n elementClass = elementClass || 'multi-streams-mixer';\r\n\r\n var videos = [];\r\n var isStopDrawingFrames = false;\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n canvas.style.opacity = 0;\r\n canvas.style.position = 'absolute';\r\n canvas.style.zIndex = -1;\r\n canvas.style.top = '-1000em';\r\n canvas.style.left = '-1000em';\r\n canvas.className = elementClass;\r\n (document.body || document.documentElement).appendChild(canvas);\r\n\r\n this.disableLogs = false;\r\n this.frameInterval = 10;\r\n\r\n this.width = 360;\r\n this.height = 240;\r\n\r\n // use gain node to prevent echo\r\n this.useGainNode = true;\r\n\r\n var self = this;\r\n\r\n // _____________________________\r\n // Cross-Browser-Declarations.js\r\n\r\n // WebAudio API representer\r\n var AudioContext = window.AudioContext;\r\n\r\n if (typeof AudioContext === 'undefined') {\r\n if (typeof webkitAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = webkitAudioContext;\r\n }\r\n\r\n if (typeof mozAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = mozAudioContext;\r\n }\r\n }\r\n\r\n /*jshint -W079 */\r\n var URL = window.URL;\r\n\r\n if (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') {\r\n /*global URL:true */\r\n URL = webkitURL;\r\n }\r\n\r\n if (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator?\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n }\r\n\r\n var MediaStream = window.MediaStream;\r\n\r\n if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n }\r\n\r\n /*global MediaStream:true */\r\n if (typeof MediaStream !== 'undefined') {\r\n // override \"stop\" method for all browsers\r\n if (typeof MediaStream.prototype.stop === 'undefined') {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n }\r\n\r\n var Storage = {};\r\n\r\n if (typeof AudioContext !== 'undefined') {\r\n Storage.AudioContext = AudioContext;\r\n } else if (typeof webkitAudioContext !== 'undefined') {\r\n Storage.AudioContext = webkitAudioContext;\r\n }\r\n\r\n function setSrcObject(stream, element) {\r\n if ('srcObject' in element) {\r\n element.srcObject = stream;\r\n } else if ('mozSrcObject' in element) {\r\n element.mozSrcObject = stream;\r\n } else {\r\n element.srcObject = stream;\r\n }\r\n }\r\n\r\n this.startDrawingFrames = function() {\r\n drawVideosToCanvas();\r\n };\r\n\r\n function drawVideosToCanvas() {\r\n if (isStopDrawingFrames) {\r\n return;\r\n }\r\n\r\n var videosLength = videos.length;\r\n\r\n var fullcanvas = false;\r\n var remaining = [];\r\n videos.forEach(function(video) {\r\n if (!video.stream) {\r\n video.stream = {};\r\n }\r\n\r\n if (video.stream.fullcanvas) {\r\n fullcanvas = video;\r\n } else {\r\n // todo: video.stream.active or video.stream.live to fix blank frames issues?\r\n remaining.push(video);\r\n }\r\n });\r\n\r\n if (fullcanvas) {\r\n canvas.width = fullcanvas.stream.width;\r\n canvas.height = fullcanvas.stream.height;\r\n } else if (remaining.length) {\r\n canvas.width = videosLength > 1 ? remaining[0].width * 2 : remaining[0].width;\r\n\r\n var height = 1;\r\n if (videosLength === 3 || videosLength === 4) {\r\n height = 2;\r\n }\r\n if (videosLength === 5 || videosLength === 6) {\r\n height = 3;\r\n }\r\n if (videosLength === 7 || videosLength === 8) {\r\n height = 4;\r\n }\r\n if (videosLength === 9 || videosLength === 10) {\r\n height = 5;\r\n }\r\n canvas.height = remaining[0].height * height;\r\n } else {\r\n canvas.width = self.width || 360;\r\n canvas.height = self.height || 240;\r\n }\r\n\r\n if (fullcanvas && fullcanvas instanceof HTMLVideoElement) {\r\n drawImage(fullcanvas);\r\n }\r\n\r\n remaining.forEach(function(video, idx) {\r\n drawImage(video, idx);\r\n });\r\n\r\n setTimeout(drawVideosToCanvas, self.frameInterval);\r\n }\r\n\r\n function drawImage(video, idx) {\r\n if (isStopDrawingFrames) {\r\n return;\r\n }\r\n\r\n var x = 0;\r\n var y = 0;\r\n var width = video.width;\r\n var height = video.height;\r\n\r\n if (idx === 1) {\r\n x = video.width;\r\n }\r\n\r\n if (idx === 2) {\r\n y = video.height;\r\n }\r\n\r\n if (idx === 3) {\r\n x = video.width;\r\n y = video.height;\r\n }\r\n\r\n if (idx === 4) {\r\n y = video.height * 2;\r\n }\r\n\r\n if (idx === 5) {\r\n x = video.width;\r\n y = video.height * 2;\r\n }\r\n\r\n if (idx === 6) {\r\n y = video.height * 3;\r\n }\r\n\r\n if (idx === 7) {\r\n x = video.width;\r\n y = video.height * 3;\r\n }\r\n\r\n if (typeof video.stream.left !== 'undefined') {\r\n x = video.stream.left;\r\n }\r\n\r\n if (typeof video.stream.top !== 'undefined') {\r\n y = video.stream.top;\r\n }\r\n\r\n if (typeof video.stream.width !== 'undefined') {\r\n width = video.stream.width;\r\n }\r\n\r\n if (typeof video.stream.height !== 'undefined') {\r\n height = video.stream.height;\r\n }\r\n\r\n context.drawImage(video, x, y, width, height);\r\n\r\n if (typeof video.stream.onRender === 'function') {\r\n video.stream.onRender(context, x, y, width, height, idx);\r\n }\r\n }\r\n\r\n function getMixedStream() {\r\n isStopDrawingFrames = false;\r\n var mixedVideoStream = getMixedVideoStream();\r\n\r\n var mixedAudioStream = getMixedAudioStream();\r\n if (mixedAudioStream) {\r\n mixedAudioStream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).forEach(function(track) {\r\n mixedVideoStream.addTrack(track);\r\n });\r\n }\r\n\r\n var fullcanvas;\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n if (stream.fullcanvas) {\r\n fullcanvas = true;\r\n }\r\n });\r\n\r\n // mixedVideoStream.prototype.appendStreams = appendStreams;\r\n // mixedVideoStream.prototype.resetVideoStreams = resetVideoStreams;\r\n // mixedVideoStream.prototype.clearRecordedData = clearRecordedData;\r\n\r\n return mixedVideoStream;\r\n }\r\n\r\n function getMixedVideoStream() {\r\n resetVideoStreams();\r\n\r\n var capturedStream;\r\n\r\n if ('captureStream' in canvas) {\r\n capturedStream = canvas.captureStream();\r\n } else if ('mozCaptureStream' in canvas) {\r\n capturedStream = canvas.mozCaptureStream();\r\n } else if (!self.disableLogs) {\r\n console.error('Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features');\r\n }\r\n\r\n var videoStream = new MediaStream();\r\n\r\n capturedStream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).forEach(function(track) {\r\n videoStream.addTrack(track);\r\n });\r\n\r\n canvas.stream = videoStream;\r\n\r\n return videoStream;\r\n }\r\n\r\n function getMixedAudioStream() {\r\n // via: @pehrsons\r\n if (!Storage.AudioContextConstructor) {\r\n Storage.AudioContextConstructor = new Storage.AudioContext();\r\n }\r\n\r\n self.audioContext = Storage.AudioContextConstructor;\r\n\r\n self.audioSources = [];\r\n\r\n if (self.useGainNode === true) {\r\n self.gainNode = self.audioContext.createGain();\r\n self.gainNode.connect(self.audioContext.destination);\r\n self.gainNode.gain.value = 0; // don't hear self\r\n }\r\n\r\n var audioTracksLength = 0;\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n if (!stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).length) {\r\n return;\r\n }\r\n\r\n audioTracksLength++;\r\n\r\n var audioSource = self.audioContext.createMediaStreamSource(stream);\r\n\r\n if (self.useGainNode === true) {\r\n audioSource.connect(self.gainNode);\r\n }\r\n\r\n self.audioSources.push(audioSource);\r\n });\r\n\r\n if (!audioTracksLength) {\r\n // because \"self.audioContext\" is not initialized\r\n // that's why we've to ignore rest of the code\r\n return;\r\n }\r\n\r\n self.audioDestination = self.audioContext.createMediaStreamDestination();\r\n self.audioSources.forEach(function(audioSource) {\r\n audioSource.connect(self.audioDestination);\r\n });\r\n return self.audioDestination.stream;\r\n }\r\n\r\n function getVideo(stream) {\r\n var video = document.createElement('video');\r\n\r\n setSrcObject(stream, video);\r\n\r\n video.className = elementClass;\r\n\r\n video.muted = true;\r\n video.volume = 0;\r\n\r\n video.width = stream.width || self.width || 360;\r\n video.height = stream.height || self.height || 240;\r\n\r\n video.play();\r\n\r\n return video;\r\n }\r\n\r\n this.appendStreams = function(streams) {\r\n if (!streams) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n if (!(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n streams.forEach(function(stream) {\r\n var newStream = new MediaStream();\r\n\r\n if (stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).length) {\r\n var video = getVideo(stream);\r\n video.stream = stream;\r\n videos.push(video);\r\n\r\n newStream.addTrack(stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n })[0]);\r\n }\r\n\r\n if (stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).length) {\r\n var audioSource = self.audioContext.createMediaStreamSource(stream);\r\n self.audioDestination = self.audioContext.createMediaStreamDestination();\r\n audioSource.connect(self.audioDestination);\r\n\r\n newStream.addTrack(self.audioDestination.stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n })[0]);\r\n }\r\n\r\n arrayOfMediaStreams.push(newStream);\r\n });\r\n };\r\n\r\n this.releaseStreams = function() {\r\n videos = [];\r\n isStopDrawingFrames = true;\r\n\r\n if (self.gainNode) {\r\n self.gainNode.disconnect();\r\n self.gainNode = null;\r\n }\r\n\r\n if (self.audioSources.length) {\r\n self.audioSources.forEach(function(source) {\r\n source.disconnect();\r\n });\r\n self.audioSources = [];\r\n }\r\n\r\n if (self.audioDestination) {\r\n self.audioDestination.disconnect();\r\n self.audioDestination = null;\r\n }\r\n\r\n if (self.audioContext) {\r\n self.audioContext.close();\r\n }\r\n\r\n self.audioContext = null;\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (canvas.stream) {\r\n canvas.stream.stop();\r\n canvas.stream = null;\r\n }\r\n };\r\n\r\n this.resetVideoStreams = function(streams) {\r\n if (streams && !(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n resetVideoStreams(streams);\r\n };\r\n\r\n function resetVideoStreams(streams) {\r\n videos = [];\r\n streams = streams || arrayOfMediaStreams;\r\n\r\n // via: @adrian-ber\r\n streams.forEach(function(stream) {\r\n if (!stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).length) {\r\n return;\r\n }\r\n\r\n var video = getVideo(stream);\r\n video.stream = stream;\r\n videos.push(video);\r\n });\r\n }\r\n\r\n // for debugging\r\n this.name = 'MultiStreamsMixer';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n this.getMixedStream = getMixedStream;\r\n\r\n}\r\n\r\nif (typeof RecordRTC === 'undefined') {\r\n if (true /* && !!module.exports*/ ) {\r\n module.exports = MultiStreamsMixer;\r\n }\r\n\r\n if (true) {\r\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\r\n return MultiStreamsMixer;\r\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n }\r\n}\n\r\n// ______________________\r\n// MultiStreamRecorder.js\r\n\r\n/*\r\n * Video conference recording, using captureStream API along with WebAudio and Canvas2D API.\r\n */\r\n\r\n/**\r\n * MultiStreamRecorder can record multiple videos in single container.\r\n * @summary Multi-videos recorder.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef MultiStreamRecorder\r\n * @class\r\n * @example\r\n * var options = {\r\n * mimeType: 'video/webm'\r\n * }\r\n * var recorder = new MultiStreamRecorder(ArrayOfMediaStreams, options);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n *\r\n * // or\r\n * var blob = recorder.blob;\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams.\r\n * @param {object} config - {disableLogs:true, frameInterval: 1, mimeType: \"video/webm\"}\r\n */\r\n\r\nfunction MultiStreamRecorder(arrayOfMediaStreams, options) {\r\n arrayOfMediaStreams = arrayOfMediaStreams || [];\r\n var self = this;\r\n\r\n var mixer;\r\n var mediaRecorder;\r\n\r\n options = options || {\r\n elementClass: 'multi-streams-mixer',\r\n mimeType: 'video/webm',\r\n video: {\r\n width: 360,\r\n height: 240\r\n }\r\n };\r\n\r\n if (!options.frameInterval) {\r\n options.frameInterval = 10;\r\n }\r\n\r\n if (!options.video) {\r\n options.video = {};\r\n }\r\n\r\n if (!options.video.width) {\r\n options.video.width = 360;\r\n }\r\n\r\n if (!options.video.height) {\r\n options.video.height = 240;\r\n }\r\n\r\n /**\r\n * This method records all MediaStreams.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n // github/muaz-khan/MultiStreamsMixer\r\n mixer = new MultiStreamsMixer(arrayOfMediaStreams, options.elementClass || 'multi-streams-mixer');\r\n\r\n if (getAllVideoTracks().length) {\r\n mixer.frameInterval = options.frameInterval || 10;\r\n mixer.width = options.video.width || 360;\r\n mixer.height = options.video.height || 240;\r\n mixer.startDrawingFrames();\r\n }\r\n\r\n if (options.previewStream && typeof options.previewStream === 'function') {\r\n options.previewStream(mixer.getMixedStream());\r\n }\r\n\r\n // record using MediaRecorder API\r\n mediaRecorder = new MediaStreamRecorder(mixer.getMixedStream(), options);\r\n mediaRecorder.record();\r\n };\r\n\r\n function getAllVideoTracks() {\r\n var tracks = [];\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n getTracks(stream, 'video').forEach(function(track) {\r\n tracks.push(track);\r\n });\r\n });\r\n return tracks;\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n mediaRecorder.stop(function(blob) {\r\n self.blob = blob;\r\n\r\n callback(blob);\r\n\r\n self.clearRecordedData();\r\n });\r\n };\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.pause();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.resume();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.clearRecordedData();\r\n mediaRecorder = null;\r\n }\r\n\r\n if (mixer) {\r\n mixer.releaseStreams();\r\n mixer = null;\r\n }\r\n };\r\n\r\n /**\r\n * Add extra media-streams to existing recordings.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams\r\n * @example\r\n * recorder.addStreams([newAudioStream, newVideoStream]);\r\n */\r\n this.addStreams = function(streams) {\r\n if (!streams) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n if (!(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n arrayOfMediaStreams.concat(streams);\r\n\r\n if (!mediaRecorder || !mixer) {\r\n return;\r\n }\r\n\r\n mixer.appendStreams(streams);\r\n\r\n if (options.previewStream && typeof options.previewStream === 'function') {\r\n options.previewStream(mixer.getMixedStream());\r\n }\r\n };\r\n\r\n /**\r\n * Reset videos during live recording. Replace old videos e.g. replace cameras with full-screen.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams\r\n * @example\r\n * recorder.resetVideoStreams([newVideo1, newVideo2]);\r\n */\r\n this.resetVideoStreams = function(streams) {\r\n if (!mixer) {\r\n return;\r\n }\r\n\r\n if (streams && !(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n mixer.resetVideoStreams(streams);\r\n };\r\n\r\n /**\r\n * Returns MultiStreamsMixer\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * let mixer = recorder.getMixer();\r\n * mixer.appendStreams([newStream]);\r\n */\r\n this.getMixer = function() {\r\n return mixer;\r\n };\r\n\r\n // for debugging\r\n this.name = 'MultiStreamRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MultiStreamRecorder = MultiStreamRecorder;\r\n}\n\r\n// _____________________\r\n// RecordRTC.promises.js\r\n\r\n/**\r\n * RecordRTCPromisesHandler adds promises support in {@link RecordRTC}. Try a {@link https://github.com/muaz-khan/RecordRTC/blob/master/simple-demos/RecordRTCPromisesHandler.html|demo here}\r\n * @summary Promises for {@link RecordRTC}\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTCPromisesHandler\r\n * @class\r\n * @example\r\n * var recorder = new RecordRTCPromisesHandler(mediaStream, options);\r\n * recorder.startRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n * // Note: You can access all RecordRTC API using \"recorder.recordRTC\" e.g. \r\n * recorder.recordRTC.onStateChanged = function(state) {};\r\n * recorder.recordRTC.setRecordingDuration(5000);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc.\r\n * @param {object} config - {type:\"video\", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}\r\n * @throws Will throw an error if \"new\" keyword is not used to initiate \"RecordRTCPromisesHandler\". Also throws error if first argument \"MediaStream\" is missing.\r\n * @requires {@link RecordRTC}\r\n */\r\n\r\nfunction RecordRTCPromisesHandler(mediaStream, options) {\r\n if (!this) {\r\n throw 'Use \"new RecordRTCPromisesHandler()\"';\r\n }\r\n\r\n if (typeof mediaStream === 'undefined') {\r\n throw 'First argument \"MediaStream\" is required.';\r\n }\r\n\r\n var self = this;\r\n\r\n /**\r\n * @property {Blob} blob - Access/reach the native {@link RecordRTC} object.\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let internal = recorder.recordRTC.getInternalRecorder();\r\n * alert(internal instanceof MediaStreamRecorder);\r\n * recorder.recordRTC.onStateChanged = function(state) {};\r\n */\r\n self.recordRTC = new RecordRTC(mediaStream, options);\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.startRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.startRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.startRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method stops the recording.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * var blob = recorder.getBlob();\r\n * }).catch(errorCB);\r\n */\r\n this.stopRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.stopRecording(function(url) {\r\n self.blob = self.recordRTC.getBlob();\r\n\r\n if (!self.blob || !self.blob.size) {\r\n reject('Empty blob.', self.blob);\r\n return;\r\n }\r\n\r\n resolve(url);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method pauses the recording. You can resume recording using \"resumeRecording\" method.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.pauseRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.pauseRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.pauseRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method resumes the recording.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.resumeRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.resumeRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.resumeRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns data-url for the recorded blob.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * recorder.getDataURL().then(function(dataURL) {\r\n * window.open(dataURL);\r\n * }).catch(errorCB);;\r\n * }).catch(errorCB);\r\n */\r\n this.getDataURL = function(callback) {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.getDataURL(function(dataURL) {\r\n resolve(dataURL);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns the recorded blob.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * recorder.getBlob().then(function(blob) {})\r\n * }).catch(errorCB);\r\n */\r\n this.getBlob = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getBlob());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns the internal recording object.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let internalRecorder = await recorder.getInternalRecorder();\r\n * if(internalRecorder instanceof MultiStreamRecorder) {\r\n * internalRecorder.addStreams([newAudioStream]);\r\n * internalRecorder.resetVideoStreams([screenStream]);\r\n * }\r\n * @returns {Object} \r\n */\r\n this.getInternalRecorder = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getInternalRecorder());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method resets the recorder. So that you can reuse single recorder instance many times.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * await recorder.reset();\r\n * recorder.startRecording(); // record again\r\n */\r\n this.reset = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.reset());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Destroy RecordRTC instance. Clear all recorders and objects.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.destroy().then(successCB).catch(errorCB);\r\n */\r\n this.destroy = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.destroy());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Get recorder's readonly state.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let state = await recorder.getState();\r\n * // or\r\n * recorder.getState().then(state => { console.log(state); })\r\n * @returns {String} Returns recording state.\r\n */\r\n this.getState = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getState());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * @property {Blob} blob - Recorded data as \"Blob\" object.\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * await recorder.stopRecording();\r\n * let blob = recorder.getBlob(); // or \"recorder.recordRTC.blob\"\r\n * invokeSaveAsDialog(blob);\r\n */\r\n this.blob = null;\r\n\r\n /**\r\n * RecordRTC version number\r\n * @property {String} version - Release version number.\r\n * @memberof RecordRTCPromisesHandler\r\n * @static\r\n * @readonly\r\n * @example\r\n * alert(recorder.version);\r\n */\r\n this.version = '5.5.9';\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.RecordRTCPromisesHandler = RecordRTCPromisesHandler;\r\n}\n\r\n// ______________________\r\n// WebAssemblyRecorder.js\r\n\r\n/**\r\n * WebAssemblyRecorder lets you create webm videos in JavaScript via WebAssembly. The library consumes raw RGBA32 buffers (4 bytes per pixel) and turns them into a webm video with the given framerate and quality. This makes it compatible out-of-the-box with ImageData from a CANVAS. With realtime mode you can also use webm-wasm for streaming webm videos.\r\n * @summary Video recording feature in Chrome, Firefox and maybe Edge.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef WebAssemblyRecorder\r\n * @class\r\n * @example\r\n * var recorder = new WebAssemblyRecorder(mediaStream);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {webAssemblyPath:'webm-wasm.wasm',workerPath: 'webm-worker.js', frameRate: 30, width: 1920, height: 1080, bitrate: 1024}\r\n */\r\nfunction WebAssemblyRecorder(stream, config) {\r\n // based on: github.com/GoogleChromeLabs/webm-wasm\r\n\r\n if (typeof ReadableStream === 'undefined' || typeof WritableStream === 'undefined') {\r\n // because it fixes readable/writable streams issues\r\n console.error('Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js');\r\n }\r\n\r\n config = config || {};\r\n\r\n config.width = config.width || 640;\r\n config.height = config.height || 480;\r\n config.frameRate = config.frameRate || 30;\r\n config.bitrate = config.bitrate || 1200;\r\n\r\n function createBufferURL(buffer, type) {\r\n return URL.createObjectURL(new Blob([buffer], {\r\n type: type || ''\r\n }));\r\n }\r\n\r\n function cameraStream() {\r\n return new ReadableStream({\r\n start: function(controller) {\r\n var cvs = document.createElement('canvas');\r\n var video = document.createElement('video');\r\n video.srcObject = stream;\r\n video.onplaying = function() {\r\n cvs.width = config.width;\r\n cvs.height = config.height;\r\n var ctx = cvs.getContext('2d');\r\n var frameTimeout = 1000 / config.frameRate;\r\n setTimeout(function f() {\r\n ctx.drawImage(video, 0, 0);\r\n controller.enqueue(\r\n ctx.getImageData(0, 0, config.width, config.height)\r\n );\r\n setTimeout(f, frameTimeout);\r\n }, frameTimeout);\r\n };\r\n video.play();\r\n }\r\n });\r\n }\r\n\r\n var worker;\r\n\r\n function startRecording(stream, buffer) {\r\n if (!config.workerPath && !buffer) {\r\n // is it safe to use @latest ?\r\n fetch(\r\n 'https://unpkg.com/webm-wasm@latest/dist/webm-worker.js'\r\n ).then(function(r) {\r\n r.arrayBuffer().then(function(buffer) {\r\n startRecording(stream, buffer);\r\n });\r\n });\r\n return;\r\n }\r\n\r\n if (!config.workerPath && buffer instanceof ArrayBuffer) {\r\n var blob = new Blob([buffer], {\r\n type: 'text/javascript'\r\n });\r\n config.workerPath = URL.createObjectURL(blob);\r\n }\r\n\r\n if (!config.workerPath) {\r\n console.error('workerPath parameter is missing.');\r\n }\r\n\r\n worker = new Worker(config.workerPath);\r\n\r\n worker.postMessage(config.webAssemblyPath || 'https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm');\r\n worker.addEventListener('message', function(event) {\r\n if (event.data === 'READY') {\r\n worker.postMessage({\r\n width: config.width,\r\n height: config.height,\r\n bitrate: config.bitrate || 1200,\r\n timebaseDen: config.frameRate || 30,\r\n realtime: true\r\n });\r\n\r\n cameraStream().pipeTo(new WritableStream({\r\n write: function(image) {\r\n if (!worker) {\r\n return;\r\n }\r\n\r\n worker.postMessage(image.data.buffer, [image.data.buffer]);\r\n }\r\n }));\r\n } else if (!!event.data) {\r\n if (!isPaused) {\r\n arrayOfBuffers.push(event.data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method records video.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n arrayOfBuffers = [];\r\n isPaused = false;\r\n this.blob = null;\r\n startRecording(stream);\r\n\r\n if (typeof config.initCallback === 'function') {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n var isPaused;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPaused = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPaused = false;\r\n };\r\n\r\n function terminate() {\r\n if (!worker) {\r\n return;\r\n }\r\n\r\n worker.postMessage(null);\r\n worker.terminate();\r\n worker = null;\r\n }\r\n\r\n var arrayOfBuffers = [];\r\n\r\n /**\r\n * This method stops recording video.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n terminate();\r\n\r\n this.blob = new Blob(arrayOfBuffers, {\r\n type: 'video/webm'\r\n });\r\n\r\n callback(this.blob);\r\n };\r\n\r\n // for debugging\r\n this.name = 'WebAssemblyRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n arrayOfBuffers = [];\r\n isPaused = false;\r\n this.blob = null;\r\n\r\n // todo: if recording-ON then STOP it first\r\n };\r\n\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = null;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.WebAssemblyRecorder = WebAssemblyRecorder;\r\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18), __webpack_require__(19)))\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction init(Survey, $) {\n $ = $ || window.$;\n\n var widget = {\n name: \"emotionsratings\",\n title: \"Emotions Ratings\",\n iconName: \"icon-emotionsratings\",\n widgetIsLoaded: function () {\n return typeof $ == \"function\" && !!$.fn.emotionsRating;\n },\n defaultJSON: {\n choices: [1, 2, 3, 4, 5],\n },\n isFit: function (question) {\n return question.getType() === \"emotionsratings\";\n },\n isDefaultRender: false,\n htmlTemplate: \"
\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\n \"emotionsratings\",\n [\n {\n name: \"hasOther\",\n visible: false,\n },\n {\n name: \"otherText\",\n visible: false,\n },\n {\n name: \"optionsCaption\",\n visible: false,\n },\n {\n name: \"otherErrorText\",\n visible: false,\n },\n {\n name: \"storeOthersAsComment\",\n visible: false,\n },\n {\n name: \"renderAs\",\n visible: false,\n },\n ],\n null,\n \"dropdown\"\n );\n Survey.JsonObject.metaData.addProperties(\"emotionsratings\", [\n {\n name: \"emotions:itemvalues\",\n category: \"emotions\",\n categoryIndex: 1,\n default: [\"angry\", \"disappointed\", \"meh\", \"happy\", \"inLove\"],\n },\n {\n name: \"emotionSize:number\",\n category: \"emotions\",\n default: 30,\n },\n {\n name: \"emotionsCount:number\",\n category: \"emotions\",\n default: 5,\n },\n {\n name: \"bgEmotion\",\n category: \"emotions\",\n default: \"happy\",\n },\n {\n name: \"emotionColor\",\n category: \"emotions\",\n default: \"#FF0066\",\n },\n ]);\n },\n afterRender: function (question, el) {\n var emotions = (question.emotions || []).map(function (item) {\n return item.value;\n });\n if (emotions.length === 0) {\n emotions = [\"angry\", \"disappointed\", \"meh\", \"happy\", \"inLove\"];\n }\n var options = {\n emotionSize: question.emotionSize,\n bgEmotion: question.bgEmotion,\n emotions: emotions,\n initialRating: question.value,\n color: question.emotionColor,\n count: question.emotionsCount,\n onUpdate: function (value) {\n question.value = value;\n },\n };\n initWidget();\n\n question.valueChangedCallback = initWidget;\n question.readOnlyChangedCallback = initWidget;\n\n function initWidget() {\n el.innerHTML = \"
\";\n $(el).off();\n options.initialRating = question.value || 0;\n options.disabled = question.isReadOnly;\n $(el).find(\"div\").emotionsRating(options);\n }\n },\n willUnmount: function (question, el) {\n el.innerHTML = null;\n $(el).off();\n question.readOnlyChangedCallback = null;\n question.valueChangedCallback = null;\n },\n pdfQuestionType: \"dropdown\",\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (init);\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__icheck_js__ = __webpack_require__(0);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"icheck\", function() { return __WEBPACK_IMPORTED_MODULE_0__icheck_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__select2_js__ = __webpack_require__(1);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"select2\", function() { return __WEBPACK_IMPORTED_MODULE_1__select2_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__inputmask_js__ = __webpack_require__(2);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"inputmask\", function() { return __WEBPACK_IMPORTED_MODULE_2__inputmask_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jquery_bar_rating_js__ = __webpack_require__(4);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"jquerybarrating\", function() { return __WEBPACK_IMPORTED_MODULE_3__jquery_bar_rating_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jquery_ui_datepicker_js__ = __webpack_require__(5);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"jqueryuidatepicker\", function() { return __WEBPACK_IMPORTED_MODULE_4__jquery_ui_datepicker_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__nouislider_js__ = __webpack_require__(6);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"nouislider\", function() { return __WEBPACK_IMPORTED_MODULE_5__nouislider_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__select2_tagbox_js__ = __webpack_require__(8);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"select2tagbox\", function() { return __WEBPACK_IMPORTED_MODULE_6__select2_tagbox_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__sortablejs_js__ = __webpack_require__(9);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"sortablejs\", function() { return __WEBPACK_IMPORTED_MODULE_7__sortablejs_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__ck_editor_js__ = __webpack_require__(11);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"ckeditor\", function() { return __WEBPACK_IMPORTED_MODULE_8__ck_editor_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__easy_autocomplete_js__ = __webpack_require__(12);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"autocomplete\", function() { return __WEBPACK_IMPORTED_MODULE_9__easy_autocomplete_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__pretty_checkbox_js__ = __webpack_require__(13);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"prettycheckbox\", function() { return __WEBPACK_IMPORTED_MODULE_10__pretty_checkbox_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__bootstrap_slider_js__ = __webpack_require__(14);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"bootstrapslider\", function() { return __WEBPACK_IMPORTED_MODULE_11__bootstrap_slider_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__microphone_js__ = __webpack_require__(16);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"microphone\", function() { return __WEBPACK_IMPORTED_MODULE_12__microphone_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__emotionsratings_js__ = __webpack_require__(20);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"emotionsratings\", function() { return __WEBPACK_IMPORTED_MODULE_13__emotionsratings_js__[\"default\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__bootstrapdatepicker_js__ = __webpack_require__(22);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"bootstrapdatepicker\", function() { return __WEBPACK_IMPORTED_MODULE_14__bootstrapdatepicker_js__[\"a\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction init(Survey, $) {\n $ = $ || window.$;\n\n if (\n !!$ &&\n !$.fn.bootstrapDP &&\n !!$.fn.datepicker &&\n !!$.fn.datepicker.noConflict\n ) {\n $.fn.bootstrapDP = $.fn.datepicker.noConflict();\n if (!$.fn.datepicker) {\n $.fn.datepicker = $.fn.bootstrapDP;\n }\n }\n var widget = {\n name: \"bootstrapdatepicker\",\n title: \"Date picker\",\n iconName: \"icon-datepicker\",\n widgetIsLoaded: function () {\n return !!$ && !!$.fn.bootstrapDP;\n },\n isFit: function (question) {\n return question.getType() === \"bootstrapdatepicker\";\n },\n htmlTemplate:\n \"\",\n activatedByChanged: function (activatedBy) {\n Survey.JsonObject.metaData.addClass(\n \"bootstrapdatepicker\",\n [\n { name: \"inputType\", visible: false },\n { name: \"inputFormat\", visible: false },\n { name: \"inputMask\", visible: false },\n ],\n null,\n \"text\"\n );\n Survey.JsonObject.metaData.addProperties(\"bootstrapdatepicker\", [\n {\n // Can take a string or an Object.\n // https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#format\n name: \"dateFormat\",\n category: \"general\",\n default: \"mm/dd/yyyy\",\n },\n {\n // Can take a Date or a string\n // https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#options\n name: \"startDate\",\n category: \"general\",\n default: \"\",\n },\n {\n // Can take a Date or a string\n // https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#options\n name: \"endDate\",\n category: \"general\",\n default: \"\",\n },\n {\n name: \"todayHighlight:boolean\",\n category: \"general\",\n default: true,\n },\n {\n name: \"weekStart:number\",\n category: \"general\",\n default: 0,\n },\n {\n name: \"clearBtn:boolean\",\n category: \"general\",\n default: false,\n },\n {\n name: \"autoClose:boolean\",\n category: \"general\",\n default: true,\n },\n {\n name: \"daysOfWeekHighlighted:string\",\n category: \"general\",\n default: \"\",\n },\n {\n name: \"disableTouchKeyboard:boolean\",\n category: \"general\",\n default: true,\n },\n ]);\n },\n afterRender: function (question, el) {\n var $el = $(el).is(\".widget-datepicker\")\n ? $(el)\n : $(el).find(\".widget-datepicker\");\n\n var pickerWidget = $el\n .bootstrapDP({\n enableOnReadonly: false,\n format: question.dateFormat,\n startDate: !!question.startDate\n ? question.startDate\n : question.renderedMin,\n endDate: !!question.endDate ? question.endDate : question.renderedMax,\n todayHighlight: question.todayHighlight,\n weekStart: question.weekStart,\n clearBtn: question.clearBtn,\n autoclose: question.autoClose,\n daysOfWeekHighlighted: question.daysOfWeekHighlighted,\n disableTouchKeyboard: question.disableTouchKeyboard,\n })\n .on(\"change\", function (e) {\n var newDate = pickerWidget.bootstrapDP(\"getUTCDate\");\n var newValue = newDate && newDate.toUTCString();\n if (question.value != newValue) {\n question.value = newValue;\n }\n });\n\n question.valueChangedCallback = function () {\n pickerWidget.bootstrapDP(\n \"setUTCDate\",\n !!question.value ? new Date(question.value) : \"\"\n );\n };\n question.valueChangedCallback();\n question.readOnlyChangedCallback = function () {\n if (question.isReadOnly) {\n $el.prop(\"readonly\", true);\n } else {\n $el.removeAttr(\"readonly\");\n }\n };\n question.readOnlyChangedCallback();\n },\n willUnmount: function (question, el) {\n var $el = $(el).is(\".widget-datepicker\")\n ? $(el)\n : $(el).find(\".widget-datepicker\");\n $el.bootstrapDP(\"destroy\");\n question.readOnlyChangedCallback = undefined;\n question.valueChangedCallback = undefined;\n },\n pdfQuestionType: \"text\",\n };\n\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\n}\n\nif (typeof Survey !== \"undefined\") {\n init(Survey, window.$);\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (init);\n\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA2YmRkYTcxMWZmZjEwZjU5MTE0NCIsIndlYnBhY2s6Ly8vLi9zcmMvaWNoZWNrLmpzIiwid2VicGFjazovLy8uL3NyYy9zZWxlY3QyLmpzIiwid2VicGFjazovLy8uL3NyYy9pbnB1dG1hc2suanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIklucHV0bWFza1wiLFwiY29tbW9uanMyXCI6XCJpbnB1dG1hc2tcIixcImNvbW1vbmpzXCI6XCJpbnB1dG1hc2tcIixcImFtZFwiOlwiaW5wdXRtYXNrXCJ9Iiwid2VicGFjazovLy8uL3NyYy9qcXVlcnktYmFyLXJhdGluZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanF1ZXJ5LXVpLWRhdGVwaWNrZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL25vdWlzbGlkZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIm5vVWlTbGlkZXJcIixcImNvbW1vbmpzMlwiOlwibm91aXNsaWRlclwiLFwiY29tbW9uanNcIjpcIm5vdWlzbGlkZXJcIixcImFtZFwiOlwibm91aXNsaWRlclwifSIsIndlYnBhY2s6Ly8vLi9zcmMvc2VsZWN0Mi10YWdib3guanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3NvcnRhYmxlanMuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIlNvcnRhYmxlXCIsXCJjb21tb25qczJcIjpcInNvcnRhYmxlanNcIixcImNvbW1vbmpzXCI6XCJzb3J0YWJsZWpzXCIsXCJhbWRcIjpcInNvcnRhYmxlanNcIn0iLCJ3ZWJwYWNrOi8vLy4vc3JjL2NrLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWFzeS1hdXRvY29tcGxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ByZXR0eS1jaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYm9vdHN0cmFwLXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiU2xpZGVyXCIsXCJjb21tb25qczJcIjpcImJvb3RzdHJhcC1zbGlkZXJcIixcImNvbW1vbmpzXCI6XCJib290c3RyYXAtc2xpZGVyXCIsXCJhbWRcIjpcImJvb3RzdHJhcC1zbGlkZXJcIn0iLCJ3ZWJwYWNrOi8vLy4vc3JjL21pY3JvcGhvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlY29yZHJ0Yy9SZWNvcmRSVEMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3NyYy9lbW90aW9uc3JhdGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleWpzLXdpZGdldHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jvb3RzdHJhcGRhdGVwaWNrZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7O1FBRUE7UUFDQTs7Ozs7Ozs7QUM3REE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7QUM1S3BCO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDN0xwQjtBQUFBO0FBQUE7QUFBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQVM7QUFDN0IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFNBQVMsMkNBQTJDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDbEtwQjtBQUFBO0FBQUE7QUFBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrREFBVTtBQUM5QixLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtEQUFrRCxVQUFVLEVBQUU7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtEQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7OztBQ3BMcEIsK0M7Ozs7Ozs7QUNBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQ0FBMkM7QUFDdEQsV0FBVywrQ0FBK0M7QUFDMUQsV0FBVywwQ0FBMEM7QUFDckQsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxtQ0FBbUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztB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Q0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDakdwQjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7QUN4SHBCO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMkNBQTJDO0FBQzdELE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMkNBQTJDO0FBQzdELE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkNBQTJDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxzREFBc0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7QUMxTXBCO0FBQUEsYUFBYSxtQkFBTyxDQUFDLEVBQWtCOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlELGdCQUFnQixpR0FBaUcsYUFBYTtBQUMv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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQix1Q0FBdUM7QUFDdkMsd0NBQXdDO0FBQ3hDLDRDQUE0QztBQUM1QztBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRGQUE0RjtBQUM1RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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QUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLEtBQUs7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUNsaE1BOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7O0FDcEJBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7O0FDdkx0QztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7QUM5SHBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWdEO0FBQ0U7QUFDSTtBQUNjO0FBQ007QUFDbEI7QUFDTztBQUNQO0FBQ0g7QUFDWTtBQUNBO0FBQ0U7QUFDWDtBQUNVO0FBQ1E7Ozs7Ozs7O0FDZDFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esb0ZBQW9GO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyxzQ0FBc0M7QUFDakQsV0FBVyxvQ0FBb0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLDZEQUFJLEVBQUMiLCJmaWxlIjoic3VydmV5anMtd2lkZ2V0cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImlucHV0bWFza1wiKSwgcmVxdWlyZShcIm5vdWlzbGlkZXJcIiksIHJlcXVpcmUoXCJzb3J0YWJsZWpzXCIpLCByZXF1aXJlKFwiYm9vdHN0cmFwLXNsaWRlclwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInN1cnZleWpzLXdpZGdldHNcIiwgW1wiaW5wdXRtYXNrXCIsIFwibm91aXNsaWRlclwiLCBcInNvcnRhYmxlanNcIiwgXCJib290c3RyYXAtc2xpZGVyXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInN1cnZleWpzLXdpZGdldHNcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJpbnB1dG1hc2tcIiksIHJlcXVpcmUoXCJub3Vpc2xpZGVyXCIpLCByZXF1aXJlKFwic29ydGFibGVqc1wiKSwgcmVxdWlyZShcImJvb3RzdHJhcC1zbGlkZXJcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInN1cnZleWpzLXdpZGdldHNcIl0gPSBmYWN0b3J5KHJvb3RbXCJJbnB1dG1hc2tcIl0sIHJvb3RbXCJub1VpU2xpZGVyXCJdLCByb290W1wiU29ydGFibGVcIl0sIHJvb3RbXCJTbGlkZXJcIl0pO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfM19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzdfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xMF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzE1X18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjEpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDZiZGRhNzExZmZmMTBmNTkxMTQ0IiwiZnVuY3Rpb24gZXNjVmFsdWUodmFsKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuICh2YWwgfHwgXCJcIikucmVwbGFjZSgvKFsnXSkvZywgXCJcXFxcJDFcIik7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgY2xhc3NOYW1lOiBcImlyYWRpb19zcXVhcmUtYmx1ZVwiLFxuICAgIGNoZWNrYm94Q2xhc3M6IFwiaXJhZGlvX3NxdWFyZS1ibHVlXCIsXG4gICAgcmFkaW9DbGFzczogXCJpcmFkaW9fc3F1YXJlLWJsdWVcIixcbiAgICBuYW1lOiBcImljaGVja1wiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5pQ2hlY2s7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICB2YXIgdCA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICAgIHJldHVybiB0ID09PSBcInJhZGlvZ3JvdXBcIiB8fCB0ID09PSBcImNoZWNrYm94XCIgfHwgdCA9PT0gXCJtYXRyaXhcIjtcbiAgICB9LFxuICAgIGlzRGVmYXVsdFJlbmRlcjogdHJ1ZSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHJvb3RXaWRnZXQgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAkZWwuZmluZChcIi5zdi1pdGVtX19kZWNvcmF0b3JcIikuaGlkZSgpO1xuXG4gICAgICAkZWwuZmluZChcImlucHV0XCIpLmRhdGEoe1xuICAgICAgICBpQ2hlY2s6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgZnVuY3Rpb24gZ2V0SW5kZXhCeVZhbHVlKGFyciwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHJldHVybiAtMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJyW2ldID09IHZhbHVlKSByZXR1cm4gaTtcbiAgICAgICAgICBpZiAoISFhcnJbaV0gJiYgYXJyW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSB2YWx1ZSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGZyb3plVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIHZhciBtYWtlQ2hvaWNlc0lDaGVjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlucHV0cyA9ICRlbC5maW5kKFwiaW5wdXRcIik7XG4gICAgICAgIGlucHV0cy5pQ2hlY2soe1xuICAgICAgICAgIGNoZWNrYm94Q2xhc3M6XG4gICAgICAgICAgICBxdWVzdGlvbi5jaGVja2JveENsYXNzIHx8XG4gICAgICAgICAgICByb290V2lkZ2V0LmNoZWNrYm94Q2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2xhc3NOYW1lLFxuICAgICAgICAgIHJhZGlvQ2xhc3M6XG4gICAgICAgICAgICBxdWVzdGlvbi5yYWRpb0NsYXNzIHx8XG4gICAgICAgICAgICByb290V2lkZ2V0LnJhZGlvQ2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2xhc3NOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXRzLm9uKFwiaWZDaGVja2VkXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChmcm96ZVVwZGF0aW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJtYXRyaXhcIikge1xuICAgICAgICAgICAgcXVlc3Rpb24uZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93LCBpbmRleCwgcm93cykge1xuICAgICAgICAgICAgICBpZiAocm93LmZ1bGxOYW1lID09PSBldmVudC50YXJnZXQubmFtZSkge1xuICAgICAgICAgICAgICAgIHJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gcXVlc3Rpb24udmFsdWUgfHwgW107XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5VmFsdWUob2xkVmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gb2xkVmFsdWUuY29uY2F0KFtldmVudC50YXJnZXQudmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpbnB1dHMub24oXCJpZlVuY2hlY2tlZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoZnJvemVVcGRhdGluZykgcmV0dXJuO1xuICAgICAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gKHF1ZXN0aW9uLnZhbHVlIHx8IFtdKS5zbGljZSgpO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeVZhbHVlKG9sZFZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgb2xkVmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBvbGRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHVuY2hlY2tJY2hlY2soY0VsKSB7XG4gICAgICAgIGNFbC5pQ2hlY2soXCJ1bmNoZWNrXCIpO1xuICAgICAgICBjRWxbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY2hlY2tlZFwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZyb3plVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpICE9PSBcIm1hdHJpeFwiKSB7XG4gICAgICAgICAgdmFyIHZhbHVlcyA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCIpIHtcbiAgICAgICAgICAgIHZhciBxVmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgdmFyIGluRWwgPSAkZWwuZmluZChcbiAgICAgICAgICAgICAgICBcImlucHV0W3ZhbHVlPSdcIiArIGVzY1ZhbHVlKGl0ZW0udmFsdWUpICsgXCInXVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghaW5FbCkgcmV0dXJuO1xuICAgICAgICAgICAgICB2YXIgaXNDaGVja2VkID0gZ2V0SW5kZXhCeVZhbHVlKHFWYWx1ZSwgaXRlbS52YWx1ZSkgPiAtMTtcbiAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGluRWwuaUNoZWNrKFwiY2hlY2tcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGNFbCA9IGluRWxbMF07XG4gICAgICAgICAgICAgICAgdmFyIHdhc0NoZWNrZWQgPSAhIWNFbFtcImNoZWNrZWRcIl07XG4gICAgICAgICAgICAgICAgaWYgKHdhc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgIGluRWwucmVtb3ZlQXR0cihcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICBpZiAoIWluRWwucGFyZW50KCkuaGFzQ2xhc3MoXCJjaGVja2VkXCIpKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB1bmNoZWNrSWNoZWNrKGluRWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGVsc2UgdW5jaGVja0ljaGVjayhpbkVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgJGVsXG4gICAgICAgICAgICAgICAgLmZpbmQoXCJpbnB1dFt2YWx1ZT0nXCIgKyBlc2NWYWx1ZSh2YWx1ZSkgKyBcIiddXCIpXG4gICAgICAgICAgICAgICAgLmlDaGVjayhcImNoZWNrXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uLmdlbmVyYXRlZFZpc2libGVSb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaW5kZXgsIHJvd3MpIHtcbiAgICAgICAgICAgIGlmIChyb3cudmFsdWUpIHtcbiAgICAgICAgICAgICAgJChlbClcbiAgICAgICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRbbmFtZT0nXCIgK1xuICAgICAgICAgICAgICAgICAgICByb3cuZnVsbE5hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIiddW3ZhbHVlPSdcIiArXG4gICAgICAgICAgICAgICAgICAgIGVzY1ZhbHVlKHJvdy52YWx1ZSkgK1xuICAgICAgICAgICAgICAgICAgICBcIiddXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmlDaGVjayhcImNoZWNrXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZyb3plVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICBtYWtlQ2hvaWNlc0lDaGVjaygpO1xuXG4gICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWFrZUNob2ljZXNJQ2hlY2soKTtcbiAgICAgICAgJGVsLmZpbmQoXCIuc3YtaXRlbV9fZGVjb3JhdG9yXCIpLmhpZGUoKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHNlbGVjdDtcbiAgICAgIHNlbGVjdCgpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgICRlbC5maW5kKFwiaW5wdXRcIikuaUNoZWNrKFwiZGVzdHJveVwiKTtcbiAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwicmFkaW9ncm91cFwiLCB7XG4gICAgbmFtZTogXCJyYWRpb0NsYXNzXCIsXG4gICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICB9KTtcbiAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJjaGVja2JveFwiLCB7XG4gICAgbmFtZTogXCJjaGVja2JveENsYXNzXCIsXG4gICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICB9KTtcbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJ0eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvaWNoZWNrLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxMSIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIGFjdGl2YXRlZEJ5OiBcInByb3BlcnR5XCIsXG4gICAgbmFtZTogXCJzZWxlY3QyXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgJiYgISEkLmZuLnNlbGVjdDI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwicHJvcGVydHlcIilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBxdWVzdGlvbltcInJlbmRlckFzXCJdID09PSBcInNlbGVjdDJcIiAmJlxuICAgICAgICAgIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJkcm9wZG93blwiXG4gICAgICAgICk7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwidHlwZVwiKVxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImRyb3Bkb3duXCI7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwiY3VzdG9tdHlwZVwiKVxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcInNlbGVjdDJcIjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBpZiAoIXRoaXMud2lkZ2V0SXNMb2FkZWQoKSkgcmV0dXJuO1xuICAgICAgd2lkZ2V0LmFjdGl2YXRlZEJ5ID0gYWN0aXZhdGVkQnk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5yZW1vdmVQcm9wZXJ0eShcImRyb3Bkb3duXCIsIFwicmVuZGVyQXNcIik7XG4gICAgICBpZiAoYWN0aXZhdGVkQnkgPT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZHJvcGRvd25cIiwge1xuICAgICAgICAgIG5hbWU6IFwicmVuZGVyQXNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgY2hvaWNlczogW1wic2VsZWN0MlwiLCBcImRlZmF1bHRcIl0sXG4gICAgICAgIH0pO1xuICAgICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImRyb3Bkb3duXCIsIHtcbiAgICAgICAgICBkZXBlbmRzT246IFwicmVuZGVyQXNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgbmFtZTogXCJzZWxlY3QyQ29uZmlnXCIsXG4gICAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnJlbmRlckFzID09IFwic2VsZWN0MlwiO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGl2YXRlZEJ5ID09IFwiY3VzdG9tdHlwZVwiKSB7XG4gICAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2VsZWN0MlwiLCBbXSwgbnVsbCwgXCJkcm9wZG93blwiKTtcbiAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJzZWxlY3QyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInNlbGVjdDJDb25maWdcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjxkaXY+PHNlbGVjdCBzdHlsZT0nd2lkdGg6IDEwMCU7Jz48L3NlbGVjdD48dGV4dGFyZWE+PC90ZXh0YXJlYT48L2Rpdj5cIixcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHNlbGVjdDJDb25maWcgPSBxdWVzdGlvbi5zZWxlY3QyQ29uZmlnO1xuICAgICAgdmFyIHNldHRpbmdzID1cbiAgICAgICAgc2VsZWN0MkNvbmZpZyAmJiB0eXBlb2Ygc2VsZWN0MkNvbmZpZyA9PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBKU09OLnBhcnNlKHNlbGVjdDJDb25maWcpXG4gICAgICAgICAgOiBzZWxlY3QyQ29uZmlnO1xuICAgICAgaWYgKCFzZXR0aW5ncykgc2V0dGluZ3MgPSB7fTtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcInNlbGVjdFwiKSA/ICQoZWwpIDogJChlbCkuZmluZChcInNlbGVjdFwiKTtcbiAgICAgIHZhciAkb3RoZXJFbGVtZW50ID0gJChlbCkuZmluZChcInRleHRhcmVhXCIpO1xuICAgICAgJG90aGVyRWxlbWVudC5hZGRDbGFzcyhxdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyKTtcbiAgICAgICRvdGhlckVsZW1lbnQuYmluZChcImlucHV0IHByb3BlcnR5Y2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XG4gICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSAkb3RoZXJFbGVtZW50LnZhbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciB1cGRhdGVDb21tZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkb3RoZXJFbGVtZW50LnZhbChxdWVzdGlvbi5jb21tZW50KTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCkge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuc2hvdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNTZXR0aW5nVmFsdWUpIHJldHVybjtcbiAgICAgICAgaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoJGVsLmZpbmQoXCJvcHRpb25bdmFsdWU9J1wiICsgKHF1ZXN0aW9uLnZhbHVlIHx8IFwiXCIpICArIFwiJ11cIikubGVuZ3RoKSB7XG4gICAgICAgICAgJGVsLnZhbChxdWVzdGlvbi52YWx1ZSkudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocXVlc3Rpb24udmFsdWUgIT09IG51bGwgJiYgcXVlc3Rpb24udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIG5ld09wdGlvbiA9IG5ldyBPcHRpb24oXG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlLCAvL1RPRE8gaWYgcXVlc3Rpb24gdmFsdWUgaXMgb2JqZWN0IHRoZW4gbmVlZCB0byBpbXByb3ZlXG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJGVsLmFwcGVuZChuZXdPcHRpb24pLnRyaWdnZXIoXCJjaGFuZ2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUNvbW1lbnQoKTtcbiAgICAgICAgaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgdXBkYXRlQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnNlbGVjdDIoKS5lbXB0eSgpO1xuICAgICAgICBpZiAoIXNldHRpbmdzLnBsYWNlaG9sZGVyICYmIHF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbikge1xuICAgICAgICAgIHNldHRpbmdzLnBsYWNlaG9sZGVyID0gcXVlc3Rpb24ub3B0aW9uc0NhcHRpb247XG4gICAgICAgICAgc2V0dGluZ3MuYWxsb3dDbGVhciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZXR0aW5ncy50aGVtZSkge1xuICAgICAgICAgIHNldHRpbmdzLnRoZW1lID0gXCJjbGFzc2ljXCI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0dGluZ3MuZGlzYWJsZWQgPSBxdWVzdGlvbi5pc1JlYWRPbmx5O1xuICAgICAgICBpZiAoc2V0dGluZ3MuYWpheCkge1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgICBxdWVzdGlvbi5rZWVwSW5jb3JyZWN0VmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IFtdO1xuICAgICAgICAgIGlmICghIXNldHRpbmdzLnBsYWNlaG9sZGVyIHx8IHF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbikge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsgaWQ6IFwiXCIsIHRleHQ6IFwiXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdzLmRhdGEgPSBkYXRhLmNvbmNhdChcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGNob2ljZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjaG9pY2UudGV4dCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBxdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaXhlZCB3aWR0aCBhY2Nyb3JkaW5nIHRvIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ1Mjc2Nzc4L3NlbGVjdDItbm90LXJlc3BvbnNpdmUtd2lkdGgtbGFyZ2VyLXRoYW4tY29udGFpbmVyXG4gICAgICAgIGlmICghIWVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0MlwiKSkge1xuICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0MlwiKS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgIGVsLm5leHRFbGVtZW50U2libGluZy5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjFweFwiO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgICAgfTtcblxuICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnByb3AoXCJkaXNhYmxlZFwiLCBxdWVzdGlvbi5pc1JlYWRPbmx5KTtcbiAgICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICB9O1xuXG4gICAgICBxdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgXCJ2aXNpYmxlQ2hvaWNlc1wiLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgJGVsLm9uKFwic2VsZWN0MjpzZWxlY3RcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgdXBkYXRlQ29tbWVudCgpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgJGVsLm9uKCdzZWxlY3QyOm9wZW5pbmcnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgaWYgKCQodGhpcykuZGF0YSgndW5zZWxlY3RpbmcnKSkge1xuICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZURhdGEoJ3Vuc2VsZWN0aW5nJyk7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgICRlbC5vbihcInNlbGVjdDI6dW5zZWxlY3RpbmdcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgJCh0aGlzKS5kYXRhKCd1bnNlbGVjdGluZycsIHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBudWxsO1xuICAgICAgICAgIHVwZGF0ZUNvbW1lbnQoKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9KTtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgICAgdmFyICRzZWxlY3QyID0gJChlbCkuZmluZChcInNlbGVjdFwiKTtcbiAgICAgIGlmICghISRzZWxlY3QyLmRhdGEoXCJzZWxlY3QyXCIpKSB7XG4gICAgICAgICRzZWxlY3QyXG4gICAgICAgICAgLm9mZihcInNlbGVjdDI6c2VsZWN0XCIpXG4gICAgICAgICAgLm9mZihcInNlbGVjdDI6dW5zZWxlY3RpbmdcIilcbiAgICAgICAgICAub2ZmKFwic2VsZWN0MjpvcGVuaW5nXCIpXG4gICAgICAgICAgLnNlbGVjdDIoXCJkZXN0cm95XCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCk7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5LCB3aW5kb3cuJCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9zZWxlY3QyLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCA2IiwiaW1wb3J0IElucHV0bWFzayBmcm9tIFwiaW5wdXRtYXNrXCI7XG5cbmZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJtYXNrZWRpdFwiLFxuICAgIG51bWVyaWNHcm91cFNlcGFyYXRvcjogXCIsXCIsXG4gICAgbnVtZXJpY0F1dG9Hcm91cDogdHJ1ZSxcbiAgICBudW1lcmljRGlnaXRzOiAyLFxuICAgIG51bWVyaWNEaWdpdHNPcHRpb25hbDogZmFsc2UsXG4gICAgbnVtZXJpY1BsYWNlaG9sZGVyOiBcIjBcIixcbiAgICBhdXRvVW5tYXNrOiB0cnVlLFxuICAgIGNsZWFySW5jb21wbGV0ZTogdHJ1ZSxcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBJbnB1dG1hc2sgIT0gXCJ1bmRlZmluZWRcIjtcbiAgICB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT0gXCJtdWx0aXBsZXRleHRcIikgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBxdWVzdGlvbi5nZXRUeXBlKCkgPT0gXCJ0ZXh0XCIgJiZcbiAgICAgICAgKHF1ZXN0aW9uLmlucHV0TWFzayAhPSBcIm5vbmVcIiB8fCBxdWVzdGlvbi5pbnB1dEZvcm1hdClcbiAgICAgICk7XG4gICAgfSxcbiAgICBpc0RlZmF1bHRSZW5kZXI6IHRydWUsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIGlmIChTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5maW5kUHJvcGVydHkoXCJ0ZXh0XCIsIFwiaW5wdXRNYXNrXCIpKSByZXR1cm47XG4gICAgICB2YXIgcHJvcGVydGllcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiYXV0b1VubWFzazpib29sZWFuXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNsZWFySW5jb21wbGV0ZTpib29sZWFuXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHsgbmFtZTogXCJpbnB1dEZvcm1hdFwiLCBjYXRlZ29yeTogXCJnZW5lcmFsXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaW5wdXRNYXNrXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIFwibm9uZVwiLFxuICAgICAgICAgICAgXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgXCJjdXJyZW5jeVwiLFxuICAgICAgICAgICAgXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgICAgICBcInBob25lXCIsXG4gICAgICAgICAgICBcImlwXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibnVtZXJpY0RpZ2l0c1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwib3B0aW9uc1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicHJlZml4XCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzdWZmaXhcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydGllcyhcInRleHRcIiwgcHJvcGVydGllcyk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0aWVzKFxuICAgICAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIsXG4gICAgICAgIHByb3BlcnRpZXNcbiAgICAgICk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0aWVzKFwibXVsdGlwbGV0ZXh0aXRlbVwiLCBwcm9wZXJ0aWVzKTtcbiAgICB9LFxuICAgIGFwcGx5SW5wdXRNYXNrOiBmdW5jdGlvbiAoc3VydmV5RWxlbWVudCwgZWwpIHtcbiAgICAgIHZhciByb290V2lkZ2V0ID0gdGhpcztcbiAgICAgIHZhciBtYXNrID1cbiAgICAgICAgc3VydmV5RWxlbWVudC5pbnB1dE1hc2sgIT09IFwibm9uZVwiXG4gICAgICAgICAgPyBzdXJ2ZXlFbGVtZW50LmlucHV0TWFza1xuICAgICAgICAgIDogc3VydmV5RWxlbWVudC5pbnB1dEZvcm1hdDtcbiAgICAgIHZhciBvcHRpb25zID0ge307XG4gICAgICBpZiAodHlwZW9mIHN1cnZleUVsZW1lbnQub3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBmb3IgKHZhciBvcHRpb24gaW4gc3VydmV5RWxlbWVudC5vcHRpb25zKSB7XG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gc3VydmV5RWxlbWVudC5vcHRpb25zW29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuYXV0b1VubWFzayA9IHR5cGVvZiBzdXJ2ZXlFbGVtZW50LmF1dG9Vbm1hc2sgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBzdXJ2ZXlFbGVtZW50LmF1dG9Vbm1hc2tcbiAgICAgICAgOiByb290V2lkZ2V0LmF1dG9Vbm1hc2s7XG4gICAgICBvcHRpb25zLmNsZWFySW5jb21wbGV0ZSA9IHR5cGVvZiBzdXJ2ZXlFbGVtZW50LmNsZWFySW5jb21wbGV0ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IHN1cnZleUVsZW1lbnQuY2xlYXJJbmNvbXBsZXRlXG4gICAgICAgIDogcm9vdFdpZGdldC5jbGVhckluY29tcGxldGU7XG4gICAgICBpZiAoc3VydmV5RWxlbWVudC5pbnB1dE1hc2sgIT09IFwibm9uZVwiKSB7XG4gICAgICAgIG9wdGlvbnMuaW5wdXRGb3JtYXQgPSBzdXJ2ZXlFbGVtZW50LmlucHV0Rm9ybWF0O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBzdXJ2ZXlFbGVtZW50LmlucHV0TWFzayA9PT0gXCJjdXJyZW5jeVwiIHx8XG4gICAgICAgIHN1cnZleUVsZW1lbnQuaW5wdXRNYXNrID09PSBcImRlY2ltYWxcIlxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbnMuZ3JvdXBTZXBhcmF0b3IgPSByb290V2lkZ2V0Lm51bWVyaWNHcm91cFNlcGFyYXRvcjtcbiAgICAgICAgb3B0aW9ucy5hdXRvR3JvdXAgPSByb290V2lkZ2V0Lm51bWVyaWNBdXRvR3JvdXA7XG4gICAgICB9XG4gICAgICBpZiAoc3VydmV5RWxlbWVudC5pbnB1dE1hc2sgPT09IFwiY3VycmVuY3lcIikge1xuICAgICAgICBvcHRpb25zLmRpZ2l0cyA9IHN1cnZleUVsZW1lbnQubnVtZXJpY0RpZ2l0cyB8fCByb290V2lkZ2V0Lm51bWVyaWNEaWdpdHM7XG4gICAgICAgIG9wdGlvbnMuZGlnaXRzT3B0aW9uYWwgPSByb290V2lkZ2V0Lm51bWVyaWNEaWdpdHNPcHRpb25hbDtcbiAgICAgICAgb3B0aW9ucy5wcmVmaXggPSBzdXJ2ZXlFbGVtZW50LnByZWZpeCB8fCBcIlwiO1xuICAgICAgICBvcHRpb25zLnN1ZmZpeCA9IHN1cnZleUVsZW1lbnQuc3VmZml4IHx8IFwiXCI7XG4gICAgICAgIG9wdGlvbnMucGxhY2Vob2xkZXIgPSByb290V2lkZ2V0Lm51bWVyaWNQbGFjZWhvbGRlcjtcbiAgICAgIH1cbiAgICAgIC8vIGlmIChzdXJ2ZXlFbGVtZW50LmlucHV0TWFzayA9PSBcImRhdGV0aW1lXCIpIHtcbiAgICAgIC8vICAgbWFzayA9IHN1cnZleUVsZW1lbnQuaW5wdXRGb3JtYXQ7XG4gICAgICAvLyB9XG4gICAgICBpZiAoc3VydmV5RWxlbWVudC5pbnB1dE1hc2sgPT09IFwicGhvbmVcIiAmJiAhIXN1cnZleUVsZW1lbnQuaW5wdXRGb3JtYXQpIHtcbiAgICAgICAgbWFzayA9IHN1cnZleUVsZW1lbnQuaW5wdXRGb3JtYXQ7XG4gICAgICB9XG5cbiAgICAgIElucHV0bWFzayhtYXNrLCBvcHRpb25zKS5tYXNrKGVsKTtcblxuICAgICAgZWwub25ibHVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWVsLmlucHV0bWFzaykgcmV0dXJuO1xuICAgICAgICBpZiAoc3VydmV5RWxlbWVudC52YWx1ZSA9PT0gZWwuaW5wdXRtYXNrLmdldGVtcHR5bWFzaygpKSB7XG4gICAgICAgICAgc3VydmV5RWxlbWVudC52YWx1ZSA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBjdXN0b21XaWRnZXREYXRhID1cbiAgICAgICAgc3VydmV5RWxlbWVudC5nZXRUeXBlKCkgPT09IFwibXVsdGlwbGV0ZXh0aXRlbVwiXG4gICAgICAgICAgPyBzdXJ2ZXlFbGVtZW50LmVkaXRvclZhbHVlLmN1c3RvbVdpZGdldERhdGFcbiAgICAgICAgICA6IHN1cnZleUVsZW1lbnQuY3VzdG9tV2lkZ2V0RGF0YTtcbiAgICAgIGVsLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gdHJ1ZTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwdXNoVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWVsLmlucHV0bWFzaykgcmV0dXJuO1xuICAgICAgICBpZiAoZWwuaW5wdXRtYXNrLmlzQ29tcGxldGUoKSkge1xuICAgICAgICAgIHN1cnZleUVsZW1lbnQudmFsdWUgPSBvcHRpb25zLmF1dG9Vbm1hc2tcbiAgICAgICAgICAgID8gZWwuaW5wdXRtYXNrLnVubWFza2VkdmFsdWUoKVxuICAgICAgICAgICAgOiBlbC52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdXJ2ZXlFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsLm9uZm9jdXNvdXQgPSBlbC5vbmNoYW5nZSA9IHB1c2hWYWx1ZUhhbmRsZXI7XG5cbiAgICAgIHZhciB1cGRhdGVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC52YWx1ZSA9XG4gICAgICAgICAgc3VydmV5RWxlbWVudC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHN1cnZleUVsZW1lbnQudmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiBzdXJ2ZXlFbGVtZW50LnZhbHVlO1xuICAgICAgfTtcbiAgICAgIHN1cnZleUVsZW1lbnQudmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVIYW5kbGVyO1xuICAgICAgdXBkYXRlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgIT0gXCJtdWx0aXBsZXRleHRcIikge1xuICAgICAgICB2YXIgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikgfHwgZWw7XG4gICAgICAgIHRoaXMuYXBwbHlJbnB1dE1hc2socXVlc3Rpb24sIGlucHV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb24uaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IHF1ZXN0aW9uLml0ZW1zW2ldO1xuICAgICAgICAgIGlmIChpdGVtLmlucHV0TWFzayAhPSBcIm5vbmVcIiB8fCBpdGVtLmlucHV0Rm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKFwiI1wiICsgaXRlbS5lZGl0b3IuaW5wdXRJZCk7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBseUlucHV0TWFzayhpdGVtLCBpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpIHx8IGVsO1xuICAgICAgaWYgKCEhaW5wdXQgJiYgISFpbnB1dC5pbnB1dG1hc2spIHtcbiAgICAgICAgaW5wdXQuaW5wdXRtYXNrLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCk7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2lucHV0bWFzay5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgNCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8zX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwiSW5wdXRtYXNrXCIsXCJjb21tb25qczJcIjpcImlucHV0bWFza1wiLFwiY29tbW9uanNcIjpcImlucHV0bWFza1wiLFwiYW1kXCI6XCJpbnB1dG1hc2tcIn1cbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDQiLCJmdW5jdGlvbiBpbml0KFN1cnZleSwgJCkge1xuICAkID0gJCB8fCB3aW5kb3cuJDtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImJhcnJhdGluZ1wiLFxuICAgIHRpdGxlOiBcIkJhciByYXRpbmdcIixcbiAgICBpY29uTmFtZTogXCJpY29uLWJhcnJhdGluZ1wiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5iYXJyYXRpbmc7XG4gICAgfSxcbiAgICBkZWZhdWx0SlNPTjogeyBjaG9pY2VzOiBbMSwgMiwgMywgNCwgNV0gfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImJhcnJhdGluZ1wiO1xuICAgIH0sXG4gICAgaXNEZWZhdWx0UmVuZGVyOiB0cnVlLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcbiAgICAgICAgXCJiYXJyYXRpbmdcIixcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJoYXNPdGhlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJvdGhlclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwic2VsZWN0MkNvbmZpZ1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICBdLFxuICAgICAgICBudWxsLFxuICAgICAgICBcImRyb3Bkb3duXCJcbiAgICAgICk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImJhcnJhdGluZ1wiLCB7XG4gICAgICAgIG5hbWU6IFwic2hvd1ZhbHVlczpib29sZWFuXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiYmFycmF0aW5nXCIsIHtcbiAgICAgICAgbmFtZTogXCJyYXRpbmdUaGVtZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiY3NzLXN0YXJzXCIsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICBcImZvbnRhd2Vzb21lLXN0YXJzXCIsXG4gICAgICAgICAgXCJjc3Mtc3RhcnNcIixcbiAgICAgICAgICBcImJhcnMtcGlsbFwiLFxuICAgICAgICAgIFwiYmFycy0xdG8xMFwiLFxuICAgICAgICAgIFwiYmFycy1tb3ZpZVwiLFxuICAgICAgICAgIFwiYmFycy1yZXZlcnNlZFwiLFxuICAgICAgICAgIFwiYmFycy1ob3Jpem9udGFsXCIsXG4gICAgICAgICAgXCJmb250YXdlc29tZS1zdGFycy1vXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGN1c3RvbVNlbGVjdDtcbiAgICAgIHZhciAkcXVlc3Rpb25JbnB1dDtcbiAgICAgIHZhciBjb250ZW50Q29udGFpbmVyID0gJChlbCkuaXMoXCJzZWxlY3RcIilcbiAgICAgICAgPyAkKGVsKS5wYXJlbnQoKS5wYXJlbnQoKVswXVxuICAgICAgICA6ICQoZWwpLnBhcmVudCgpWzBdO1xuICAgICAgdmFyIHJlbmRlckN1c3RvbVNlbGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGN1c3RvbVNlbGVjdCA9ICQoXCI8c2VsZWN0IGNsYXNzPSdzdi13aWRnZXQtc2VsZWN0Jz48L3NlbGVjdD5cIik7XG4gICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICAgICRjdXN0b21TZWxlY3QuYXBwZW5kKFxuICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJ7MH1cIj57MX08L29wdGlvbj4nLmZvcm1hdChjaG9pY2UudmFsdWUsIGNob2ljZS50ZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICAkcXVlc3Rpb25JbnB1dCA9ICQoY29udGVudENvbnRhaW5lcikuZmluZChcbiAgICAgICAgICAnW2lkPVwiezB9XCJdJy5mb3JtYXQocXVlc3Rpb24uaW5wdXRJZClcbiAgICAgICAgKTtcblxuICAgICAgICAkcXVlc3Rpb25JbnB1dC5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgICAgICAgJHF1ZXN0aW9uSW5wdXQuYWZ0ZXIoJGN1c3RvbVNlbGVjdCk7XG4gICAgICAgICRjdXN0b21TZWxlY3RbMF0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgICAgfTtcbiAgICAgIHZhciByZW1vdmVDdXN0b21TZWxlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRxdWVzdGlvbklucHV0LmNzcyhcImRpc3BsYXlcIiwgXCJcIik7XG4gICAgICAgICRjdXN0b21TZWxlY3QuYmFycmF0aW5nKFwiZGVzdHJveVwiKTtcbiAgICAgICAgJGN1c3RvbVNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIH07XG4gICAgICB2YXIgcmVuZGVyQmFycmF0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkY3VzdG9tU2VsZWN0LmJhcnJhdGluZyhcInNob3dcIiwge1xuICAgICAgICAgIHRoZW1lOiBxdWVzdGlvbi5yYXRpbmdUaGVtZSxcbiAgICAgICAgICBpbml0aWFsUmF0aW5nOiBxdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICBzaG93VmFsdWVzOiBxdWVzdGlvbi5zaG93VmFsdWVzLFxuICAgICAgICAgIHNob3dTZWxlY3RlZFJhdGluZzogZmFsc2UsXG4gICAgICAgICAgcmVhZG9ubHk6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uICh2YWx1ZSwgdGV4dCkge1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2luZ0J5V2lkZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZUNoYW5naW5nQnlXaWRnZXQgPSBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZW5kZXJDdXN0b21TZWxlY3QoKTtcbiAgICAgIHJlbmRlckJhcnJhdGluZygpO1xuICAgICAgaWYgKCEhJGN1c3RvbVNlbGVjdC5wYXJlbnRzKClbMF0pXG4gICAgICAgICRjdXN0b21TZWxlY3QucGFyZW50cygpWzBdLnN0eWxlLm1hcmdpbkJvdHRvbSA9IFwiM3B4XCI7XG4gICAgICB2YXIgdmFsdWVDaGFuZ2luZ0J5V2lkZ2V0ID0gZmFsc2U7XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXZhbHVlQ2hhbmdpbmdCeVdpZGdldCAmJlxuICAgICAgICAgICQoY29udGVudENvbnRhaW5lcikuZmluZChcInNlbGVjdC5zdi13aWRnZXQtc2VsZWN0XCIpWzBdLnZhbHVlICE9PVxuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgJChjb250ZW50Q29udGFpbmVyKVxuICAgICAgICAgICAgLmZpbmQoXCJzZWxlY3Quc3Ytd2lkZ2V0LXNlbGVjdFwiKVxuICAgICAgICAgICAgLmJhcnJhdGluZyhcInNldFwiLCBxdWVzdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoXG4gICAgICAgIHNlbmRlcixcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT0gXCJyYXRpbmdUaGVtZVwiKSB7XG4gICAgICAgICAgJGN1c3RvbVNlbGVjdC5iYXJyYXRpbmcoXCJkZXN0cm95XCIpO1xuICAgICAgICAgIHJlbmRlckJhcnJhdGluZygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKFxuICAgICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2tcbiAgICAgICk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlQ3VzdG9tU2VsZWN0KCk7XG4gICAgICAgIHJlbmRlckN1c3RvbVNlbGVjdCgpO1xuICAgICAgICByZW5kZXJCYXJyYXRpbmcoKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVuZGVyQmFycmF0aW5nKCk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkY29udGVudENvbnRhaW5lciA9ICQoZWwpLmlzKFwic2VsZWN0XCIpXG4gICAgICAgID8gJChlbCkucGFyZW50KCkucGFyZW50KClcbiAgICAgICAgOiAkKGVsKS5wYXJlbnQoKTtcbiAgICAgIHZhciAkZWwgPSAkY29udGVudENvbnRhaW5lci5maW5kKFwic2VsZWN0LnN2LXdpZGdldC1zZWxlY3RcIik7XG4gICAgICAkZWwuYmFycmF0aW5nKFwiZGVzdHJveVwiKTtcbiAgICAgICRlbC5yZW1vdmUoKTtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgcXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKFxuICAgICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2tcbiAgICAgICk7XG4gICAgICBxdWVzdGlvbi5fX2JhcnJhdGluZ09uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBwZGZRdWVzdGlvblR5cGU6IFwiZHJvcGRvd25cIixcbiAgfTtcblxuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcImN1c3RvbXR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5LCB3aW5kb3cuJCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9qcXVlcnktYmFyLXJhdGluZy5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMTAiLCJmdW5jdGlvbiBpbml0KFN1cnZleSwgJCkge1xuICAkID0gJCB8fCB3aW5kb3cuJDtcbiAgaWYgKFxuICAgICEhJCAmJlxuICAgICEkLmZuLmJvb3RzdHJhcERQICYmXG4gICAgISEkLmZuLmRhdGVwaWNrZXIgJiZcbiAgICAhISQuZm4uZGF0ZXBpY2tlci5ub0NvbmZsaWN0XG4gICkge1xuICAgICQuZm4uYm9vdHN0cmFwRFAgPSAkLmZuLmRhdGVwaWNrZXIubm9Db25mbGljdCgpO1xuICAgIGlmICghJC5mbi5kYXRlcGlja2VyKSB7XG4gICAgICAkLmZuLmRhdGVwaWNrZXIgPSAkLmZuLmJvb3RzdHJhcERQO1xuICAgIH1cbiAgfVxuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwiZGF0ZXBpY2tlclwiLFxuICAgIHRpdGxlOiBcIkRhdGUgcGlja2VyXCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1kYXRlcGlja2VyXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhISQgJiYgISEkLmZuLmRhdGVwaWNrZXIgJiYgISQuZm4uZGF0ZXBpY2tlci5ub0NvbmZsaWN0O1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJkYXRlcGlja2VyXCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6IFwiPGlucHV0IGNsYXNzPSdmb3JtLWNvbnRyb2wgd2lkZ2V0LWRhdGVwaWNrZXInIHR5cGU9J3RleHQnPlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcbiAgICAgICAgXCJkYXRlcGlja2VyXCIsXG4gICAgICAgIFtcbiAgICAgICAgICB7IG5hbWU6IFwiaW5wdXRUeXBlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcImlucHV0Rm9ybWF0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcImlucHV0TWFza1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICBdLFxuICAgICAgICBudWxsLFxuICAgICAgICBcInRleHRcIlxuICAgICAgKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZGF0ZXBpY2tlclwiLCB7XG4gICAgICAgIG5hbWU6IFwiZGF0ZUZvcm1hdFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZGF0ZXBpY2tlclwiLCB7XG4gICAgICAgIG5hbWU6IFwiY29uZmlnXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9KTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZGF0ZXBpY2tlclwiLCB7XG4gICAgICAgIG5hbWU6IFwibWF4RGF0ZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZGF0ZXBpY2tlclwiLCB7XG4gICAgICAgIG5hbWU6IFwibWluRGF0ZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCkuaXMoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIilcbiAgICAgICAgPyAkKGVsKVxuICAgICAgICA6ICQoZWwpLmZpbmQoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIik7XG4gICAgICAkZWwuYWRkQ2xhc3MocXVlc3Rpb24uY3NzLnRleHQucm9vdCk7XG4gICAgICB2YXIgaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgIHZhciBjb25maWcgPSAkLmV4dGVuZCh0cnVlLCB7fSwgcXVlc3Rpb24uY29uZmlnIHx8IHt9KTtcbiAgICAgIGlmICghIXF1ZXN0aW9uLnBsYWNlSG9sZGVyKSB7XG4gICAgICAgICRlbC5hdHRyKFwicGxhY2Vob2xkZXJcIiwgcXVlc3Rpb24ucGxhY2VIb2xkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5kYXRlRm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLmRhdGVGb3JtYXQgPSAhIXF1ZXN0aW9uLmRhdGVGb3JtYXRcbiAgICAgICAgICA/IHF1ZXN0aW9uLmRhdGVGb3JtYXRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcub3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLm9wdGlvbiA9IHtcbiAgICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAgIG1heERhdGU6IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbi5taW5EYXRlKSB7XG4gICAgICAgIGNvbmZpZy5taW5EYXRlID0gcXVlc3Rpb24ubWluRGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmICghIXF1ZXN0aW9uLm1heERhdGUpIHtcbiAgICAgICAgY29uZmlnLm1heERhdGUgPSBxdWVzdGlvbi5tYXhEYXRlO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24ucmVuZGVyZWRNaW4pIHtcbiAgICAgICAgY29uZmlnLm1pbkRhdGUgPSBxdWVzdGlvbi5yZW5kZXJlZE1pbjtcbiAgICAgIH1cbiAgICAgIGlmICghIXF1ZXN0aW9uLnJlbmRlcmVkTWF4KSB7XG4gICAgICAgIGNvbmZpZy5tYXhEYXRlID0gcXVlc3Rpb24ucmVuZGVyZWRNYXg7XG4gICAgICB9XG4gICAgICBjb25maWcuZGlzYWJsZWQgPSBxdWVzdGlvbi5pc1JlYWRPbmx5O1xuICAgICAgaWYgKGNvbmZpZy5vblNlbGVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZy5vblNlbGVjdCA9IGZ1bmN0aW9uIChkYXRlVGV4dCkge1xuICAgICAgICAgIGlzU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IGRhdGVUZXh0O1xuICAgICAgICAgIGlzU2VsZWN0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5maXhGb2N1c0lFID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbmZpZy5maXhGb2N1c0lFID0gZmFsc2U7XG4gICAgICBjb25maWcub25DbG9zZSA9IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkge1xuICAgICAgICB0aGlzLmZpeEZvY3VzSUUgPSB0cnVlO1xuICAgICAgfTtcbiAgICAgIGNvbmZpZy5iZWZvcmVTaG93ID0gZnVuY3Rpb24gKGlucHV0LCBpbnN0KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAhIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1RyaWRlbnRcXC83XFwuLylcbiAgICAgICAgICA/ICF0aGlzLmZpeEZvY3VzSUVcbiAgICAgICAgICA6IHRydWU7XG4gICAgICAgIHRoaXMuZml4Rm9jdXNJRSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIHZhciBwaWNrZXJXaWRnZXQgPSAkZWwuZGF0ZXBpY2tlcihjb25maWcpO1xuXG4gICAgICAkZWwua2V5dXAoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0Nikge1xuICAgICAgICAgICQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRlbC5kYXRlcGlja2VyKFwib3B0aW9uXCIsIFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0ZSgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgcGlja2VyV2lkZ2V0LmRhdGVwaWNrZXIoXCJzZXREYXRlXCIsIHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwaWNrZXJXaWRnZXQuZGF0ZXBpY2tlcihcInNldERhdGVcIiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICBcImRhdGVGb3JtYXRcIixcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXN0aW9uLmRhdGVGb3JtYXQgJiZcbiAgICAgICAgICAgIHBpY2tlcldpZGdldC5kYXRlcGlja2VyKFxuICAgICAgICAgICAgICBcIm9wdGlvblwiLFxuICAgICAgICAgICAgICBcImRhdGVGb3JtYXRcIixcbiAgICAgICAgICAgICAgcXVlc3Rpb24uZGF0ZUZvcm1hdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB1cGRhdGVEYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGluZykge1xuICAgICAgICAgIHVwZGF0ZURhdGUoKTtcbiAgICAgICAgICAkZWwuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCkuaXMoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIilcbiAgICAgICAgPyAkKGVsKVxuICAgICAgICA6ICQoZWwpLmZpbmQoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIik7XG4gICAgICAkZWwuZGF0ZXBpY2tlcihcImRlc3Ryb3lcIik7XG4gICAgfSxcbiAgICBwZGZRdWVzdGlvblR5cGU6IFwidGV4dFwiLFxuICB9O1xuXG4gIFN1cnZleS5tYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzLmRhdGVwaWNrZXIgPSB7IHByb3BlcnRpZXM6IFtcInBsYWNlSG9sZGVyXCJdIH07XG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXksIHdpbmRvdy4kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2pxdWVyeS11aS1kYXRlcGlja2VyLmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCA5IiwiaW1wb3J0IG5vVWlTbGlkZXIgZnJvbSBcIm5vdWlzbGlkZXJcIjtcblxuZnVuY3Rpb24gaW5pdChTdXJ2ZXkpIHtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcIm5vdWlzbGlkZXJcIixcbiAgICB0aXRsZTogXCJub1VpU2xpZGVyXCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1ub3Vpc2xpZGVyXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygbm9VaVNsaWRlciAhPSBcInVuZGVmaW5lZFwiO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJub3Vpc2xpZGVyXCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjxkaXY+PGRpdj48L2Rpdj48L2Rpdj48c3R5bGU+Lm5vVWktb3JpZ2luIHsgd2lkdGg6IDA7IH08L3N0eWxlPlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm5vdWlzbGlkZXJcIiwgW10sIG51bGwsIFwiZW1wdHlcIik7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0aWVzKFwibm91aXNsaWRlclwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInN0ZXA6bnVtYmVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnlJbmRleDogMSxcbiAgICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyYW5nZU1pbjpudW1iZXJcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyYW5nZU1heDpudW1iZXJcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiAxMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBpcHNNb2RlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJwb3NpdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGlwc1ZhbHVlczppdGVtdmFsdWVzXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogWzAsIDI1LCA1MCwgNzUsIDEwMF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBpcHNUZXh0Oml0ZW12YWx1ZXNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBbMCwgMjUsIDUwLCA3NSwgMTAwXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGlwc0RlbnNpdHk6bnVtYmVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogNSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwib3JpZW50YXRpb25cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uOnN0cmluZ1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcInNsaWRlclwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwibHRyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRvb2x0aXBzOmJvb2xlYW5cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IFwiMTlweFwiO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0xlZnQgPSBcIjIwcHhcIjtcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdSaWdodCA9IFwiMjBweFwiO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ1RvcCA9IFwiNDRweFwiO1xuICAgICAgZWwgPSBlbC5jaGlsZHJlblswXTtcbiAgICAgIGVsLnN0eWxlLm1hcmdpbkJvdHRvbSA9IFwiNjBweFwiO1xuICAgICAgaWYgKHF1ZXN0aW9uLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gXCIyNTBweFwiO1xuICAgICAgfVxuICAgICAgdmFyIHNsaWRlciA9IG5vVWlTbGlkZXIuY3JlYXRlKGVsLCB7XG4gICAgICAgIHN0YXJ0OiBxdWVzdGlvbi52YWx1ZSB8fCAocXVlc3Rpb24ucmFuZ2VNaW4gKyBxdWVzdGlvbi5yYW5nZU1heCkgLyAyLFxuICAgICAgICBjb25uZWN0OiBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBzdGVwOiBxdWVzdGlvbi5zdGVwLFxuICAgICAgICB0b29sdGlwczogcXVlc3Rpb24udG9vbHRpcHMsXG4gICAgICAgIHBpcHM6IHtcbiAgICAgICAgICBtb2RlOiBxdWVzdGlvbi5waXBzTW9kZSB8fCBcInBvc2l0aW9uc1wiLFxuICAgICAgICAgIHZhbHVlczogcXVlc3Rpb24ucGlwc1ZhbHVlcy5tYXAoZnVuY3Rpb24gKHBWYWwpIHtcbiAgICAgICAgICAgIHZhciBwaXBWYWx1ZSA9IHBWYWw7XG4gICAgICAgICAgICBpZiAocFZhbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHBpcFZhbHVlID0gcFZhbC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwaXBWYWx1ZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVuc2l0eTogcXVlc3Rpb24ucGlwc0RlbnNpdHkgfHwgNSxcbiAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgIHRvOiBmdW5jdGlvbiAocFZhbCkge1xuICAgICAgICAgICAgICB2YXIgcGlwVGV4dCA9IHBWYWw7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnBpcHNUZXh0Lm1hcChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwudGV4dCAhPT0gdW5kZWZpbmVkICYmIHBWYWwgPT09IGVsLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBwaXBUZXh0ID0gZWwudGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gcGlwVGV4dDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2U6IHtcbiAgICAgICAgICBtaW46IHF1ZXN0aW9uLnJhbmdlTWluLFxuICAgICAgICAgIG1heDogcXVlc3Rpb24ucmFuZ2VNYXgsXG4gICAgICAgIH0sXG4gICAgICAgIG9yaWVudGF0aW9uOiBxdWVzdGlvbi5vcmllbnRhdGlvbixcbiAgICAgICAgZGlyZWN0aW9uOiBxdWVzdGlvbi5kaXJlY3Rpb24sXG4gICAgICB9KTtcbiAgICAgIHNsaWRlci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gTnVtYmVyKHNsaWRlci5nZXQoKSk7XG4gICAgICB9KTtcbiAgICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNsaWRlci5zZXQocXVlc3Rpb24udmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgfVxuICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgICBxdWVzdGlvbi5ub1VpU2xpZGVyID0gc2xpZGVyO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBpZiAoISFxdWVzdGlvbi5ub1VpU2xpZGVyKSB7XG4gICAgICAgIHF1ZXN0aW9uLm5vVWlTbGlkZXIuZGVzdHJveSgpO1xuICAgICAgICBxdWVzdGlvbi5ub1VpU2xpZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICAgIHBkZlJlbmRlcjogZnVuY3Rpb24gKF8sIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJub3Vpc2xpZGVyXCIpIHtcbiAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9ucy5tb2R1bGUuU3VydmV5SGVscGVyLmNyZWF0ZVBvaW50KFxuICAgICAgICAgIG9wdGlvbnMubW9kdWxlLlN1cnZleUhlbHBlci5tZXJnZVJlY3RzLmFwcGx5KG51bGwsIG9wdGlvbnMuYnJpY2tzKVxuICAgICAgICApO1xuICAgICAgICBwb2ludC54TGVmdCArPSBvcHRpb25zLmNvbnRyb2xsZXIudW5pdFdpZHRoO1xuICAgICAgICBwb2ludC55VG9wICs9XG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyLnVuaXRIZWlnaHQgKlxuICAgICAgICAgIG9wdGlvbnMubW9kdWxlLkZsYXRRdWVzdGlvbi5DT05URU5UX0dBUF9WRVJUX1NDQUxFO1xuICAgICAgICB2YXIgcmVjdCA9IG9wdGlvbnMubW9kdWxlLlN1cnZleUhlbHBlci5jcmVhdGVUZXh0RmllbGRSZWN0KFxuICAgICAgICAgIHBvaW50LFxuICAgICAgICAgIG9wdGlvbnMuY29udHJvbGxlclxuICAgICAgICApO1xuICAgICAgICB2YXIgdGV4dGJveEJyaWNrID0gbmV3IG9wdGlvbnMubW9kdWxlLlRleHRGaWVsZEJyaWNrKFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24sXG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyLFxuICAgICAgICAgIHJlY3QsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24udmFsdWUgfHwgb3B0aW9ucy5xdWVzdGlvbi5kZWZhdWx0VmFsdWUgfHwgXCJcIixcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInRleHRcIlxuICAgICAgICApO1xuICAgICAgICBvcHRpb25zLmJyaWNrcy5wdXNoKHRleHRib3hCcmljayk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcImN1c3RvbXR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL25vdWlzbGlkZXIuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfN19fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIm5vVWlTbGlkZXJcIixcImNvbW1vbmpzMlwiOlwibm91aXNsaWRlclwiLFwiY29tbW9uanNcIjpcIm5vdWlzbGlkZXJcIixcImFtZFwiOlwibm91aXNsaWRlclwifVxuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMyIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwidGFnYm94XCIsXG4gICAgdGl0bGU6IFwiVGFnIGJveFwiLFxuICAgIGljb25OYW1lOiBcImljb24tdGFnYm94XCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgJiYgISEkLmZuLnNlbGVjdDI7XG4gICAgfSxcbiAgICBkZWZhdWx0SlNPTjoge1xuICAgICAgY2hvaWNlczogW1wiSXRlbSAxXCIsIFwiSXRlbSAyXCIsIFwiSXRlbSAzXCJdLFxuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOlxuICAgICAgXCI8ZGl2PjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz48L3NlbGVjdD48dGV4dGFyZWE+PC90ZXh0YXJlYT48L2Rpdj5cIixcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcInRhZ2JveFwiO1xuICAgIH0sXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFxuICAgICAgICBcInRhZ2JveFwiLFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImhhc090aGVyOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzU2VsZWN0QWxsOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzTm9uZTpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwiY2hlY2tib3hcIlxuICAgICAgKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwidGFnYm94XCIsIHtcbiAgICAgICAgbmFtZTogXCJzZWxlY3QyQ29uZmlnXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0YWdib3hcIiwge1xuICAgICAgICBuYW1lOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0YWdib3hcIiwge1xuICAgICAgICBuYW1lOiBcImFsbG93QWRkTmV3VGFnOmJvb2xlYW5cIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMudGFnYm94ID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICAgICAgXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgICAgICBcImNob2ljZXNCeVVybFwiLFxuICAgICAgICAgIFwib3B0aW9uc0NhcHRpb25cIixcbiAgICAgICAgICBcIm90aGVyVGV4dFwiLFxuICAgICAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGZpeFN0eWxlczogZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIpLnN0eWxlLmJvcmRlciA9XG4gICAgICAgIFwibm9uZVwiO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxlY3QyQ29uZmlnID0gcXVlc3Rpb24uc2VsZWN0MkNvbmZpZztcbiAgICAgIHZhciBzZXR0aW5ncyA9XG4gICAgICAgIHNlbGVjdDJDb25maWcgJiYgdHlwZW9mIHNlbGVjdDJDb25maWcgPT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gSlNPTi5wYXJzZShzZWxlY3QyQ29uZmlnKVxuICAgICAgICAgIDogc2VsZWN0MkNvbmZpZztcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcInNlbGVjdFwiKSA/ICQoZWwpIDogJChlbCkuZmluZChcInNlbGVjdFwiKTtcblxuICAgICAgc2VsZi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuXG4gICAgICBpZiAoIXNldHRpbmdzKSBzZXR0aW5ncyA9IHt9O1xuICAgICAgc2V0dGluZ3MucGxhY2Vob2xkZXIgPSBxdWVzdGlvbi5wbGFjZWhvbGRlcjtcbiAgICAgIHNldHRpbmdzLnRhZ3MgPSBxdWVzdGlvbi5hbGxvd0FkZE5ld1RhZztcbiAgICAgIHNldHRpbmdzLmRpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seTtcbiAgICAgIHNldHRpbmdzLnRoZW1lID0gXCJjbGFzc2ljXCI7XG4gICAgICBpZiAoISFxdWVzdGlvbi5tYXhTZWxlY3RlZENob2ljZXMpIHtcbiAgICAgICAgc2V0dGluZ3MubWF4aW11bVNlbGVjdGlvbkxlbmd0aCA9IHF1ZXN0aW9uLm1heFNlbGVjdGVkQ2hvaWNlcztcbiAgICAgIH1cblxuICAgICAgJGVsLnNlbGVjdDIoc2V0dGluZ3MpO1xuXG4gICAgICB2YXIgJG90aGVyRWxlbWVudCA9ICQoZWwpLmZpbmQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgIGlmIChcbiAgICAgICAgISFxdWVzdGlvbi5zdXJ2ZXkgJiZcbiAgICAgICAgISFxdWVzdGlvbi5zdXJ2ZXkuY3NzICYmXG4gICAgICAgICEhcXVlc3Rpb24uc3VydmV5LmNzcy5jaGVja2JveFxuICAgICAgKSB7XG4gICAgICAgICRvdGhlckVsZW1lbnQuYWRkQ2xhc3MocXVlc3Rpb24uc3VydmV5LmNzcy5jaGVja2JveC5vdGhlcik7XG4gICAgICB9XG4gICAgICAkb3RoZXJFbGVtZW50LmJpbmQoXCJpbnB1dCBwcm9wZXJ0eWNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSAkb3RoZXJFbGVtZW50LnZhbCgpO1xuICAgICAgfSk7XG4gICAgICB2YXIgdXBkYXRlQ29tbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJG90aGVyRWxlbWVudC52YWwocXVlc3Rpb24uY29tbWVudCk7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQpIHtcbiAgICAgICAgICAkb3RoZXJFbGVtZW50LnNob3coKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkb3RoZXJFbGVtZW50LmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgc2VsZi5maXhTdHlsZXMoZWwpO1xuICAgICAgdmFyIHF1ZXN0aW9uO1xuICAgICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc1NlbGVjdEFsbCAmJiBxdWVzdGlvbi5pc0FsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgJGVsXG4gICAgICAgICAgICAudmFsKFtxdWVzdGlvbi5zZWxlY3RBbGxJdGVtVmFsdWUudmFsdWVdLmNvbmNhdChxdWVzdGlvbi52YWx1ZSkpXG4gICAgICAgICAgICAudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkZWwudmFsKHF1ZXN0aW9uLnZhbHVlKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZml4U3R5bGVzKGVsKTtcbiAgICAgICAgdXBkYXRlQ29tbWVudCgpO1xuICAgICAgfTtcbiAgICAgIHZhciB1cGRhdGVDaG9pY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkZWwuc2VsZWN0MigpLmVtcHR5KCk7XG4gICAgICAgIGlmIChzZXR0aW5ncy5hamF4KSB7XG4gICAgICAgICAgJGVsLnNlbGVjdDIoc2V0dGluZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldHRpbmdzLmRhdGEgPSBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoZnVuY3Rpb24gKGNob2ljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IGNob2ljZS52YWx1ZSxcbiAgICAgICAgICAgICAgdGV4dDogY2hvaWNlLnRleHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIoKTtcbiAgICAgIH07XG4gICAgICB2YXIgaXNBbGxJdGVtU2VsZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBxdWVzdGlvbi5oYXNTZWxlY3RBbGwgJiYgdmFsdWUgPT09IHF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1WYWx1ZS52YWx1ZVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgfTtcblxuICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnByb3AoXCJkaXNhYmxlZFwiLCBxdWVzdGlvbi5pc1JlYWRPbmx5KTtcbiAgICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24ucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICAgIFwidmlzaWJsZUNob2ljZXNcIixcbiAgICAgICAgcXVlc3Rpb24uX3Byb3BlcnR5VmFsdWVDaGFuZ2VkRm5TZWxlY3QyXG4gICAgICApO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICAkZWwub24oXCJzZWxlY3QyOnNlbGVjdFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoaXNBbGxJdGVtU2VsZWN0ZWQoZS5wYXJhbXMuZGF0YS5pZCkpIHtcbiAgICAgICAgICBxdWVzdGlvbi5zZWxlY3RBbGwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IChxdWVzdGlvbi52YWx1ZSB8fCBbXSkuY29uY2F0KGUucGFyYW1zLmRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUNvbW1lbnQoKTtcbiAgICAgIH0pO1xuICAgICAgJGVsLm9uKFwic2VsZWN0Mjp1bnNlbGVjdFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgaW5kZXggPSAocXVlc3Rpb24udmFsdWUgfHwgW10pLmluZGV4T2YoZS5wYXJhbXMuZGF0YS5pZCk7XG4gICAgICAgIGlmIChpc0FsbEl0ZW1TZWxlY3RlZChlLnBhcmFtcy5kYXRhLmlkKSkge1xuICAgICAgICAgIHF1ZXN0aW9uLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB2YXIgdmFsID0gW10uY29uY2F0KHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgICAgICB2YWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZUNob2ljZXMoKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBpZiAoIXF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MikgcmV0dXJuO1xuXG4gICAgICB2YXIgJHNlbGVjdDIgPSAkKGVsKS5maW5kKFwic2VsZWN0XCIpO1xuICAgICAgaWYgKCEhJHNlbGVjdDIuZGF0YShcInNlbGVjdDJcIikpIHtcbiAgICAgICAgJHNlbGVjdDIub2ZmKFwic2VsZWN0MjpzZWxlY3RcIikuc2VsZWN0MihcImRlc3Ryb3lcIik7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBxdWVzdGlvbi51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICBcInZpc2libGVDaG9pY2VzXCIsXG4gICAgICAgIHF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MlxuICAgICAgKTtcbiAgICAgIHF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJjaGVja2JveFwiLFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXksIHdpbmRvdy4kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3NlbGVjdDItdGFnYm94LmpzXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCA3IiwiaW1wb3J0IFNvcnRhYmxlIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5cbmZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJzb3J0YWJsZWxpc3RcIixcbiAgICB0aXRsZTogXCJTb3J0YWJsZSBsaXN0XCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1zb3J0YWJsZWpzXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgU29ydGFibGUgIT0gXCJ1bmRlZmluZWRcIjtcbiAgICB9LFxuICAgIGRlZmF1bHRKU09OOiB7IGNob2ljZXM6IFtcIkl0ZW0gMVwiLCBcIkl0ZW0gMlwiLCBcIkl0ZW0gM1wiXSB9LFxuICAgIHJvb3RTdHlsZTogXCJ3aWR0aDoxMDAlOlwiLFxuICAgIGFyZWFTdHlsZTpcbiAgICAgIFwiYm9yZGVyOiAxcHggc29saWQgIzFhYjM5NDsgd2lkdGg6MTAwJTsgbWluLWhlaWdodDo1MHB4OyBtYXJnaW4tdG9wOjEwcHg7XCIsXG4gICAgaXRlbVN0eWxlOiBcImJhY2tncm91bmQtY29sb3I6IzFhYjM5NDtjb2xvcjojZmZmO21hcmdpbjo1cHg7cGFkZGluZzoxMHB4O1wiLFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwic29ydGFibGVsaXN0XCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6IFwiPGRpdj48L2Rpdj5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXG4gICAgICAgIFwic29ydGFibGVsaXN0XCIsXG4gICAgICAgIFtcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzT3RoZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzTm9uZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJyZW5kZXJBc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJjaGVja2JveENsYXNzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcImhhc1NlbGVjdEFsbFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJub25lVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwiY2hlY2tib3hcIlxuICAgICAgKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwic29ydGFibGVsaXN0XCIsIHtcbiAgICAgICAgbmFtZTogXCJlbXB0eVRleHRcIixcbiAgICAgICAgZGVmYXVsdDogXCJNb3ZlIGl0ZW1zIGhlcmUuXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJzb3J0YWJsZWxpc3RcIiwge1xuICAgICAgICBuYW1lOiBcInVzZURlZmF1bHRUaGVtZTpzd2l0Y2hcIixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcInNvcnRhYmxlbGlzdFwiLCB7XG4gICAgICAgIG5hbWU6IFwibWF4QW5zd2Vyc0NvdW50Om51bWJlclwiLFxuICAgICAgICBkZWZhdWx0OiAtMSxcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICBpZiAoIXF1ZXN0aW9uLnVzZURlZmF1bHRUaGVtZSkge1xuICAgICAgICBzZWxmLnJvb3RTdHlsZSA9IFwiXCI7XG4gICAgICAgIHNlbGYuaXRlbVN0eWxlID0gXCJcIjtcbiAgICAgICAgc2VsZi5hcmVhU3R5bGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IHNlbGYucm9vdFN0eWxlO1xuICAgICAgZWwuY2xhc3NOYW1lID0gXCJzanMtc29ydGFibGVqcy1yb290XCI7XG4gICAgICB2YXIgc291cmNlLCByZXN1bHQ7XG4gICAgICB2YXIgcmVzdWx0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdmFyIGVtcHR5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHZhciBzb3VyY2VFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIHJlc3VsdEVsLnN0eWxlLmNzc1RleHQgPSBzZWxmLmFyZWFTdHlsZTtcbiAgICAgIHJlc3VsdEVsLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xuICAgICAgcmVzdWx0RWwuY2xhc3NOYW1lID0gXCJzanMtc29ydGFibGVqcy1yZXN1bHRcIjtcblxuICAgICAgZW1wdHlFbC5pbm5lckhUTUwgPSBxdWVzdGlvbi5lbXB0eVRleHQ7XG4gICAgICByZXN1bHRFbC5hcHBlbmRDaGlsZChlbXB0eUVsKTtcblxuICAgICAgc291cmNlRWwuc3R5bGUuY3NzVGV4dCA9IHNlbGYuYXJlYVN0eWxlO1xuICAgICAgc291cmNlRWwuc3R5bGUuYm94U2l6aW5nID0gXCJib3JkZXItYm94XCI7XG4gICAgICBzb3VyY2VFbC5jbGFzc05hbWUgPSBcInNqcy1zb3J0YWJsZWpzLXNvdXJjZVwiO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQocmVzdWx0RWwpO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQoc291cmNlRWwpO1xuICAgICAgdmFyIGhhc1ZhbHVlSW5SZXN1bHRzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YXIgcmVzID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc1tpXSA9PSB2YWwpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgYWRkQ2hvaWNlVG9XaWRnZXQgPSBmdW5jdGlvbiAoY2hvaWNlLCBpblJlc3VsdHMpIHtcbiAgICAgICAgdmFyIHNyY0VsID0gaW5SZXN1bHRzID8gcmVzdWx0RWwgOiBzb3VyY2VFbDtcbiAgICAgICAgdmFyIG5ld0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgbmV3RWwuY2xhc3NOYW1lID0gXCJzanMtc29ydGFibGVqcy1pdGVtXCI7XG4gICAgICAgIG5ld0VsLnN0eWxlLmNzc1RleHQgPSBzZWxmLml0ZW1TdHlsZTtcbiAgICAgICAgbmV3RWwuaW5uZXJUZXh0ID0gY2hvaWNlLnRleHQ7XG4gICAgICAgIG5ld0VsLmRhdGFzZXRbXCJ2YWx1ZVwiXSA9IGNob2ljZS52YWx1ZTtcbiAgICAgICAgc3JjRWwuYXBwZW5kQ2hpbGQobmV3RWwpO1xuICAgICAgICBjaG9pY2Uub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICBuZXdFbC5pbm5lclRleHQgPSBzZW5kZXIudGV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdmFyIGdldENob2ljZXNOb3RJblJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgcXVlc3Rpb24udmlzaWJsZUNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgaWYgKCFoYXNWYWx1ZUluUmVzdWx0cyhjaG9pY2UudmFsdWUpKSB7XG4gICAgICAgICAgICByZXMucHVzaChjaG9pY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9O1xuICAgICAgdmFyIGdldENob2ljZXNJblJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgdmFyIHZhbCA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHJlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IFN1cnZleS5JdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUoXG4gICAgICAgICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyxcbiAgICAgICAgICAgIHZhbFtpXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgcmVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9O1xuICAgICAgdmFyIGlzVXBkYXRpbmdRdWVzdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNVcGRhdGluZ1F1ZXN0aW9uVmFsdWUpIHJldHVybjtcbiAgICAgICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgcmVzdWx0RWwuYXBwZW5kQ2hpbGQoZW1wdHlFbCk7XG4gICAgICAgIHNvdXJjZUVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIHZhciBub3RJblJlc3VsdHMgPSBnZXRDaG9pY2VzTm90SW5SZXN1bHRzKCk7XG4gICAgICAgIHZhciBpblJlc3VsdHMgPSBnZXRDaG9pY2VzSW5SZXN1bHRzKCk7XG4gICAgICAgIGVtcHR5RWwuc3R5bGUuZGlzcGxheSA9IGluUmVzdWx0cy5sZW5ndGggPiAwID8gXCJub25lXCIgOiBcIlwiO1xuICAgICAgICBpblJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgYWRkQ2hvaWNlVG9XaWRnZXQoY2hvaWNlLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vdEluUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgICBhZGRDaG9pY2VUb1dpZGdldChjaG9pY2UsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gcXVlc3Rpb24ucmVzdWx0RWwgPSBTb3J0YWJsZS5jcmVhdGUocmVzdWx0RWwsIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICBncm91cDoge1xuICAgICAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgcHV0OiBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHRvLm9wdGlvbnMuZ3JvdXAgJiYgZnJvbS5vcHRpb25zLmdyb3VwICYmIHRvLm9wdGlvbnMuZ3JvdXAubmFtZSA9PT0gZnJvbS5vcHRpb25zLmdyb3VwLm5hbWUgJiZcbiAgICAgICAgICAgICAgKHF1ZXN0aW9uLm1heEFuc3dlcnNDb3VudCA8IDAgfHxcbiAgICAgICAgICAgICAgdG8uZWwuY2hpbGRyZW4ubGVuZ3RoIDw9IHF1ZXN0aW9uLm1heEFuc3dlcnNDb3VudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgb25Tb3J0OiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgIGlmIChyZXN1bHRFbC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGVtcHR5RWwuc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtcHR5RWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRFbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdEVsLmNoaWxkcmVuW2ldLmRhdGFzZXQudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdEVsLmNoaWxkcmVuW2ldLmRhdGFzZXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1VwZGF0aW5nUXVlc3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgaXNVcGRhdGluZ1F1ZXN0aW9uVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgc291cmNlID0gcXVlc3Rpb24uc291cmNlRWwgPSBTb3J0YWJsZS5jcmVhdGUoc291cmNlRWwsIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICBncm91cDogcXVlc3Rpb24ubmFtZSxcbiAgICAgIH0pO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZC5hZGQoZnVuY3Rpb24gKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5uYW1lID09IFwiZW1wdHlUZXh0XCIpIHtcbiAgICAgICAgICBlbXB0eUVsLmlubmVySFRNTCA9IHF1ZXN0aW9uLmVtcHR5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICByZXN1bHQub3B0aW9ucy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgc291cmNlLm9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5vcHRpb25zLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgc291cmNlLm9wdGlvbnMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICBcInZpc2libGVDaG9pY2VzXCIsXG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlclxuICAgICAgKTtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLnJlc3VsdEVsLmRlc3Ryb3koKTtcbiAgICAgIHF1ZXN0aW9uLnNvdXJjZUVsLmRlc3Ryb3koKTtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJjaGVja2JveFwiLFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvc29ydGFibGVqcy5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlNvcnRhYmxlXCIsXCJjb21tb25qczJcIjpcInNvcnRhYmxlanNcIixcImNvbW1vbmpzXCI6XCJzb3J0YWJsZWpzXCIsXCJhbWRcIjpcInNvcnRhYmxlanNcIn1cbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAyIiwiZnVuY3Rpb24gaW5pdChTdXJ2ZXkpIHtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImVkaXRvclwiLFxuICAgIHRpdGxlOiBcIkVkaXRvclwiLFxuICAgIGljb25OYW1lOiBcImljb24tZWRpdG9yXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgQ0tFRElUT1IgIT0gXCJ1bmRlZmluZWRcIjtcbiAgICB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiZWRpdG9yXCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjx0ZXh0YXJlYSByb3dzPScxMCcgY29scz0nODAnIHN0eWxlOiB7d2lkdGg6JzEwMCUnfT48L3RleHRhcmVhPlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImVkaXRvclwiLCBbXSwgbnVsbCwgXCJlbXB0eVwiKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZWRpdG9yXCIsIHtcbiAgICAgICAgbmFtZTogXCJoZWlnaHRcIixcbiAgICAgICAgZGVmYXVsdDogMzAwLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgbmFtZSA9IHF1ZXN0aW9uLmlucHV0SWQ7XG4gICAgICBDS0VESVRPUi5lZGl0b3JDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5sYW5ndWFnZSA9IFwiZXNcIjtcbiAgICAgICAgY29uZmlnLmhlaWdodCA9IHF1ZXN0aW9uLmhlaWdodDtcbiAgICAgICAgY29uZmlnLnRvb2xiYXJDYW5Db2xsYXBzZSA9IHRydWU7XG4gICAgICB9O1xuICAgICAgZWwubmFtZSA9IG5hbWU7XG5cbiAgICAgIGlmIChDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0pIHtcbiAgICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW25hbWVdLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICBDS0VESVRPUi5yZW1vdmUoQ0tFRElUT1IuaW5zdGFuY2VzW25hbWVdKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVkaXRvciA9IENLRURJVE9SLnJlcGxhY2UoZWwpO1xuICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW25hbWVdLmNvbmZpZy5yZWFkT25seSA9IHF1ZXN0aW9uLmlzUmVhZE9ubHk7XG5cbiAgICAgIHZhciBpc1ZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc1ZhbHVlQ2hhbmdpbmcgfHwgdHlwZW9mIHF1ZXN0aW9uLnZhbHVlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5zZXREYXRhKHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc1ZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IGVkaXRvci5nZXREYXRhKCk7XG4gICAgICAgIGlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgZWRpdG9yLnNldFJlYWRPbmx5KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5zZXRSZWFkT25seShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIoKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBDS0VESVRPUi5pbnN0YW5jZXNbcXVlc3Rpb24uaW5wdXRJZF0uZGVzdHJveShmYWxzZSk7XG4gICAgfSxcbiAgICBwZGZSZW5kZXI6IGZ1bmN0aW9uIChzdXJ2ZXksIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJlZGl0b3JcIikge1xuICAgICAgICBjb25zdCBsb2MgPSBuZXcgU3VydmV5LkxvY2FsaXphYmxlU3RyaW5nKHN1cnZleSwgdHJ1ZSk7XG4gICAgICAgIGxvYy50ZXh0ID0gb3B0aW9ucy5xdWVzdGlvbi52YWx1ZSB8fCBvcHRpb25zLnF1ZXN0aW9uLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbltcImxvY0h0bWxcIl0gPSBsb2M7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnJlbmRlckFzID09PSBcInN0YW5kYXJkXCIgfHxcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnJlbmRlckFzID09PSBcImltYWdlXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbltcInJlbmRlckFzXCJdID0gb3B0aW9ucy5xdWVzdGlvbi5yZW5kZXJBcztcbiAgICAgICAgfSBlbHNlIG9wdGlvbnMucXVlc3Rpb25bXCJyZW5kZXJBc1wiXSA9IFwiYXV0b1wiO1xuICAgICAgICBjb25zdCBmbGF0SHRtbCA9IG9wdGlvbnMucmVwb3NpdG9yeS5jcmVhdGUoXG4gICAgICAgICAgc3VydmV5LFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24sXG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyLFxuICAgICAgICAgIFwiaHRtbFwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGZsYXRIdG1sLmdlbmVyYXRlRmxhdHMob3B0aW9ucy5wb2ludCkudGhlbihmdW5jdGlvbiAoaHRtbEJyaWNrcykge1xuICAgICAgICAgICAgb3B0aW9ucy5icmlja3MgPSBodG1sQnJpY2tzO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY2stZWRpdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMTQiLCJmdW5jdGlvbiBpbml0KFN1cnZleSwgJCkge1xuICAkID0gJCB8fCB3aW5kb3cuJDtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5lYXN5QXV0b2NvbXBsZXRlO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJ0ZXh0XCI7XG4gICAgfSxcbiAgICBpc0RlZmF1bHRSZW5kZXI6IHRydWUsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFwidGV4dFwiLCBcImNob2ljZXNcIikgIT09IG51bGwgfHxcbiAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFwidGV4dFwiLCBcImNob2ljZXNCeVVybFwiKSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwidGV4dFwiLCB7XG4gICAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImNob2ljZXNcIixcbiAgICAgICAgY2F0ZWdvcnlJbmRleDogMSxcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0ZXh0XCIsIHtcbiAgICAgICAgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJjaG9pY2VzQnlVcmxcIixcbiAgICAgICAgY2F0ZWdvcnlJbmRleDogMixcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0ZXh0XCIsIHtcbiAgICAgICAgbmFtZTogXCJjb25maWdcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgICAgU3VydmV5Lm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMudGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICBbXCJjaG9pY2VzXCIsIFwiY2hvaWNlc09yZGVyXCIsIFwiY2hvaWNlc0J5VXJsXCIsIFwib3RoZXJUZXh0XCJdXG4gICAgICApO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcImlucHV0XCIpID8gJChlbCkgOiAkKGVsKS5maW5kKFwiaW5wdXRcIik7XG5cbiAgICAgIHZhciBnZXRDc3NTZWxlY3RvckZyb21DbGFzc2VzU3RyaW5nID0gZnVuY3Rpb24gKGNsYXNzZXNTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFjbGFzc2VzU3RyaW5nKSByZXR1cm4gXCJcIjtcbiAgICAgICAgdmFyIGNzc1NlbGVjdG9yID0gY2xhc3Nlc1N0cmluZy5yZXBsYWNlKC8oXlxccyopfChcXHMrKS9nLCBcIi5cIik7IC8vIHJlcGxhY2Ugd2hpdGVzcGFjZXMgd2l0aCAnLidcbiAgICAgICAgcmV0dXJuIGNzc1NlbGVjdG9yO1xuICAgICAgfTtcblxuICAgICAgdmFyIHF1ZXN0aW9uUm9vdENsYXNzZXMgPSBnZXRDc3NTZWxlY3RvckZyb21DbGFzc2VzU3RyaW5nKFxuICAgICAgICBxdWVzdGlvbi5jc3NSb290XG4gICAgICApO1xuXG4gICAgICB2YXIgcXVlc3Rpb25Sb290ID0gJGVsLnBhcmVudHMocXVlc3Rpb25Sb290Q2xhc3NlcylbMF07XG4gICAgICBpZiAoISFxdWVzdGlvblJvb3RDbGFzc2VzICYmICEhcXVlc3Rpb25Sb290KSB7XG4gICAgICAgIHF1ZXN0aW9uUm9vdC5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gcXVlc3Rpb24uY29uZmlnO1xuICAgICAgdmFyIG9wdGlvbnMgPVxuICAgICAgICBjb25maWcgJiYgdHlwZW9mIGNvbmZpZyA9PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShjb25maWcpIDogY29uZmlnO1xuICAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IChxdWVzdGlvbi5jaG9pY2VzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGV4dDtcbiAgICAgIH0pO1xuICAgICAgaWYgKG9wdGlvbnMuYWRqdXN0V2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmFkanVzdFdpZHRoID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMubGlzdCkge1xuICAgICAgICBvcHRpb25zLmxpc3QgPSB7XG4gICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hdGNoOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25TZWxlY3RJdGVtRXZlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0YSA9ICRlbC5nZXRTZWxlY3RlZEl0ZW1EYXRhKCk7XG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHNlbGVjdGVkRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgb3B0aW9ucy5wbGFjZWhvbGRlciA9IHF1ZXN0aW9uLnBsYWNlaG9sZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoISFxdWVzdGlvbi5jaG9pY2VzQnlVcmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBmdW5jdGlvbiAocGhyYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIHF1ZXN0aW9uLmNob2ljZXNCeVVybC51cmw7XG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMuZ2V0VmFsdWUgPSBxdWVzdGlvbi5jaG9pY2VzQnlVcmwudmFsdWVOYW1lO1xuICAgICAgICAvLyBvcHRpb25zLmFqYXhTZXR0aW5ncyA9IHtcbiAgICAgICAgLy8gICBkYXRhVHlwZTogXCJqc29ucFwiXG4gICAgICAgIC8vIH07XG4gICAgICB9XG4gICAgICAkZWwuZWFzeUF1dG9jb21wbGV0ZShvcHRpb25zKTtcblxuICAgICAgJGVsWzBdLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1ZXN0aW9uLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICB2YXIgdXBkYXRlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsWzBdLnZhbHVlID1cbiAgICAgICAgICB0eXBlb2YgcXVlc3Rpb24udmFsdWUgPT09IFwidW5kZWZpbmVkXCIgPyBcIlwiIDogcXVlc3Rpb24udmFsdWU7XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVIYW5kbGVyO1xuICAgICAgdXBkYXRlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIC8vIHZhciAkZWwgPSAkKGVsKS5maW5kKFwiaW5wdXRcIik7XG4gICAgICAvLyAkZWwuYXV0b2NvbXBsZXRlKFwiZGVzdHJveVwiKTtcbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwidHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXksIHdpbmRvdy4kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Vhc3ktYXV0b2NvbXBsZXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMTMiLCJmdW5jdGlvbiBpbml0KFN1cnZleSkge1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIHNldHRpbmdzOiB7XG4gICAgICBzdXBwb3J0ZWRUeXBlczogW1wicmFkaW9ncm91cFwiLCBcImNoZWNrYm94XCIsIFwiYm9vbGVhblwiXSxcbiAgICAgIHJhZGlvZ3JvdXA6IHtcbiAgICAgICAgcm9vdENsYXNzOiBcInByZXR0eSBwLWRlZmF1bHQgcC1yb3VuZFwiLFxuICAgICAgICBpbnB1dFR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgc3RhdGVzOiBbeyBzdGF0ZUNsYXNzOiBcInN0YXRlIHAtc3VjY2Vzc1wiLCBhZGRPbjogXCJcIiB9XSxcbiAgICAgIH0sXG4gICAgICBjaGVja2JveDoge1xuICAgICAgICByb290Q2xhc3M6IFwicHJldHR5IHAtZGVmYXVsdFwiLFxuICAgICAgICBpbnB1dFR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgc3RhdGVzOiBbeyBzdGF0ZUNsYXNzOiBcInN0YXRlIHAtc3VjY2Vzc1wiLCBhZGRPbjogXCJcIiB9XSxcbiAgICAgIH0sXG4gICAgICBib29sZWFuOiB7XG4gICAgICAgIHJvb3RDbGFzczogXCJwcmV0dHkgcC1pY29uIHAtZGVmYXVsdCBwLWhhcy1pbmRldGVybWluYXRlXCIsXG4gICAgICAgIGlucHV0VHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBzdGF0ZXM6IFtcbiAgICAgICAgICB7IHN0YXRlQ2xhc3M6IFwic3RhdGUgcC1zdWNjZXNzXCIsIGFkZE9uOiBcIlwiIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGVDbGFzczogXCJzdGF0ZSBwLXN1Y2Nlc3MgcC1pcy1pbmRldGVybWluYXRlXCIsXG4gICAgICAgICAgICBpY29uQ2xhc3M6IFwiaWNvbiBtZGkgbWRpLW1pbnVzXCIsXG4gICAgICAgICAgICBhZGRPbjogXCJcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG5hbWU6IFwicHJldHR5LWNoZWNrYm94XCIsXG4gICAgYWN0aXZhdGVkQnk6IFwicHJvcGVydHlcIixcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6IFwiPGZpZWxkc2V0PjwvZmllbGRzZXQ+XCIsXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgdmFyIGlzRml0QnlUeXBlID1cbiAgICAgICAgd2lkZ2V0LnNldHRpbmdzLnN1cHBvcnRlZFR5cGVzLmluZGV4T2YocXVlc3Rpb24uZ2V0VHlwZSgpKSAhPT0gLTE7XG5cbiAgICAgIGlmICh3aWRnZXQuYWN0aXZhdGVkQnkgPT09IFwicHJvcGVydHlcIikge1xuICAgICAgICByZXR1cm4gcXVlc3Rpb25bXCJyZW5kZXJBc1wiXSA9PT0gXCJwcmV0dHljaGVja2JveFwiICYmIGlzRml0QnlUeXBlO1xuICAgICAgfSBlbHNlIGlmICh3aWRnZXQuYWN0aXZhdGVkQnkgPT09IFwidHlwZVwiKSB7XG4gICAgICAgIHJldHVybiBpc0ZpdEJ5VHlwZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLndpZGdldElzTG9hZGVkKCkpIHtcbiAgICAgICAgd2lkZ2V0LmFjdGl2YXRlZEJ5ID0gdmFsdWU7XG4gICAgICAgIHdpZGdldC5zZXR0aW5ncy5zdXBwb3J0ZWRUeXBlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdXBwb3J0ZWRUeXBlKSB7XG4gICAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEucmVtb3ZlUHJvcGVydHkoc3VwcG9ydGVkVHlwZSwgXCJyZW5kZXJBc1wiKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShzdXBwb3J0ZWRUeXBlLCB7XG4gICAgICAgICAgICAgIG5hbWU6IFwicmVuZGVyQXNcIixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInByZXR0eWNoZWNrYm94XCJdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzRGVmYXVsdFJlbmRlcjogZmFsc2UsXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWxlbWVudCkge1xuICAgICAgdmFyIGl0ZW1JbnB1dHMgPSB7fTtcbiAgICAgIHZhciBxdWVzdGlvblR5cGUgPSBxdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuc2V0dGluZ3NbcXVlc3Rpb25UeXBlXTtcbiAgICAgIHZhciBjaGVja2JveFR5cGUgPSBxdWVzdGlvblR5cGUgPT09IFwiY2hlY2tib3hcIjtcbiAgICAgIHZhciByYWRpb2dyb3VwVHlwZSA9IHF1ZXN0aW9uVHlwZSA9PT0gXCJyYWRpb2dyb3VwXCI7XG4gICAgICB2YXIgYm9vbGVhblR5cGUgPSBxdWVzdGlvblR5cGUgPT09IFwiYm9vbGVhblwiO1xuXG4gICAgICB2YXIgaW5DaGFuZ2VIYW5kbGVyID0gZmFsc2U7XG4gICAgICB2YXIgY2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpbkNoYW5nZUhhbmRsZXIgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF0udGFyZ2V0O1xuICAgICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICAgICAgICB2YXIgdGFyZ2V0Q2hlY2tlZCA9IHRhcmdldC5jaGVja2VkO1xuXG4gICAgICAgICAgaWYgKGNoZWNrYm94VHlwZSkge1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uVmFsdWUgPSBxdWVzdGlvbi5jcmVhdGVWYWx1ZUNvcHkoKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gcXVlc3Rpb25WYWx1ZS5pbmRleE9mKHRhcmdldFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRDaGVja2VkKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWUucHVzaCh0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWUuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gcXVlc3Rpb25WYWx1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJhZGlvZ3JvdXBUeXBlKSB7XG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHRhcmdldFZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHRhcmdldENoZWNrZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGluQ2hhbmdlSGFuZGxlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgaXRlbVdpZHRoID1cbiAgICAgICAgcXVlc3Rpb24uY29sQ291bnQgPiAwID8gMTAwIC8gcXVlc3Rpb24uY29sQ291bnQgKyBcIiVcIiA6IFwiXCI7XG5cbiAgICAgIHZhciBjaG9pY2VzID0gYm9vbGVhblR5cGVcbiAgICAgICAgPyBbeyBsb2NUZXh0OiBxdWVzdGlvbi5sb2NUaXRsZSwgdmFsdWU6ICEhcXVlc3Rpb24udmFsdWUgfV1cbiAgICAgICAgOiBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcbiAgICAgIGNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlSXRlbSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICBpbnB1dC50eXBlID0gb3B0aW9ucy5pbnB1dFR5cGU7XG4gICAgICAgIGlucHV0Lm5hbWUgPSBxdWVzdGlvbi5uYW1lICsgKGNoZWNrYm94VHlwZSA/IFwiXCIgKyBpbmRleCA6IFwiXCIpO1xuICAgICAgICBpbnB1dC5vbmNoYW5nZSA9IGNoYW5nZUhhbmRsZXI7XG4gICAgICAgIGlucHV0LnZhbHVlID0gY2hvaWNlSXRlbS52YWx1ZTtcblxuICAgICAgICBpZiAoYm9vbGVhblR5cGUgJiYgcXVlc3Rpb24udmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBpbnB1dC5pbmRldGVybWluYXRlID0gcXVlc3Rpb24uZGVmYXVsdFZhbHVlID09PSBcImluZGV0ZXJtaW5hdGVcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250cm9sUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnRyb2xSb290LmNsYXNzTmFtZSA9IG9wdGlvbnMucm9vdENsYXNzO1xuICAgICAgICBjb250cm9sUm9vdC5hcHBlbmRDaGlsZChpbnB1dCk7XG5cbiAgICAgICAgb3B0aW9ucy5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICB2YXIgc3RhdGVSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICBzdGF0ZVJvb3QuY2xhc3NOYW1lID0gc3RhdGUuc3RhdGVDbGFzcztcbiAgICAgICAgICBpZiAoISFzdGF0ZS5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlcIik7XG4gICAgICAgICAgICBpY29uLmNsYXNzTmFtZSA9IHN0YXRlLmljb25DbGFzcztcbiAgICAgICAgICAgIHN0YXRlUm9vdC5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIik7XG4gICAgICAgICAgaWYgKGNob2ljZUl0ZW0ubG9jVGV4dC5oYXNIdG1sKSB7XG4gICAgICAgICAgICBsYWJlbC5pbm5lckhUTUwgPSBjaG9pY2VJdGVtLmxvY1RleHQuaHRtbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSBjaG9pY2VJdGVtLmxvY1RleHQucmVuZGVyZWRUZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZVJvb3QuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXG4gICAgICAgICAgY29udHJvbFJvb3QuYXBwZW5kQ2hpbGQoc3RhdGVSb290KTtcbiAgICAgICAgICBpZiAoISFzdGF0ZS5hZGRPbikge1xuICAgICAgICAgICAgc3RhdGVSb290Lmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgc3RhdGUuYWRkT24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGl0ZW1Sb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaXRlbVJvb3QuY2xhc3NOYW1lID0gXCJzdl9jd19wcmV0dHlfY2hlY2tib3hfXCIgKyBxdWVzdGlvblR5cGU7XG4gICAgICAgIGl0ZW1Sb290LnN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuICAgICAgICBpdGVtUm9vdC5zdHlsZS53aWR0aCA9IGl0ZW1XaWR0aDtcbiAgICAgICAgaXRlbVJvb3QuYXBwZW5kQ2hpbGQoY29udHJvbFJvb3QpO1xuXG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbVJvb3QpO1xuXG4gICAgICAgIGl0ZW1JbnB1dHNbY2hvaWNlSXRlbS52YWx1ZV0gPSBpbnB1dDtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghaW5DaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgdmFyIGNoZWNrZWRJdGVtcyA9IG5ld1ZhbHVlIHx8IFtdO1xuICAgICAgICAgIGlmIChyYWRpb2dyb3VwVHlwZSB8fCBib29sZWFuVHlwZSkge1xuICAgICAgICAgICAgY2hlY2tlZEl0ZW1zID0gW25ld1ZhbHVlICYmIG5ld1ZhbHVlLnRvU3RyaW5nKCldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbUlucHV0cykuZm9yRWFjaChmdW5jdGlvbiAoaW5wdXRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tlZEl0ZW1zLmluZGV4T2YoaW5wdXRJdGVtLnZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaW5wdXRJdGVtLnNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlucHV0SXRlbS5yZW1vdmVBdHRyaWJ1dGUoXCJjaGVja2VkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIHJlYWRPbmx5SGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtSW5wdXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dEl0ZW0pIHtcbiAgICAgICAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgICAgICAgaW5wdXRJdGVtLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dEl0ZW0ucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSByZWFkT25seUhhbmRsZXI7XG4gICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIocXVlc3Rpb24udmFsdWUpO1xuICAgICAgcmVhZE9ubHlIYW5kbGVyKCk7XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwicHJvcGVydHlcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3ByZXR0eS1jaGVja2JveC5qc1xuLy8gbW9kdWxlIGlkID0gMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDgiLCJ2YXIgU2xpZGVyID0gcmVxdWlyZShcImJvb3RzdHJhcC1zbGlkZXJcIik7XG5cbmZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJib290c3RyYXBzbGlkZXJcIixcbiAgICB0aXRsZTogXCJCb290c3RyYXAgU2xpZGVyXCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1ib290c3RyYXAtc2xpZGVyXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgU2xpZGVyICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJib290c3RyYXBzbGlkZXJcIjtcbiAgICB9LFxuICAgIGh0bWxUZW1wbGF0ZTogXCI8ZGl2PjwvZGl2PlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImJvb3RzdHJhcHNsaWRlclwiLCBbXSwgbnVsbCwgXCJlbXB0eVwiKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnRpZXMoXCJib290c3RyYXBzbGlkZXJcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzdGVwOm51bWJlclwiLFxuICAgICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyYW5nZU1pbjpudW1iZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicmFuZ2VNYXg6bnVtYmVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogMTAwLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwib3JpZW50YXRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl0sXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiYm9vdHN0cmFwc2xpZGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJjb25maWdcIixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgZWwuc3R5bGUucGFkZGluZ1RvcCA9IFwiMjBweFwiO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IFwiMTdweFwiO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0xlZnQgPSBcIjEwcHhcIjtcbiAgICAgIHZhciBpbnB1dEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgaW5wdXRFbC5pZCA9IHF1ZXN0aW9uLmlkO1xuICAgICAgaW5wdXRFbC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICBpbnB1dEVsLnNldEF0dHJpYnV0ZShcImRhdGEtc2xpZGVyLWlkXCIsIHF1ZXN0aW9uLm5hbWUgKyBcIl9cIiArIHF1ZXN0aW9uLmlkKTtcbiAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZXItbWluXCIsIHF1ZXN0aW9uLnJhbmdlTWluKTtcbiAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZXItbWF4XCIsIHF1ZXN0aW9uLnJhbmdlTWF4KTtcbiAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZXItc3RlcFwiLCBxdWVzdGlvbi5zdGVwKTtcbiAgICAgIGlmKHF1ZXN0aW9uLm9yaWVudGF0aW9uID09IFwidmVydGljYWxcIikge1xuICAgICAgICBpbnB1dEVsLnNldEF0dHJpYnV0ZShcImRhdGEtc2xpZGVyLW9yaWVudGF0aW9uXCIsIFwidmVydGljYWxcIik7XG4gICAgICB9XG4gICAgICBpbnB1dEVsLnNldEF0dHJpYnV0ZShcImRhdGEtc2xpZGVyLXN0ZXBcIiwgcXVlc3Rpb24uc3RlcCk7XG4gICAgICBpbnB1dEVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJkYXRhLXNsaWRlci12YWx1ZVwiLFxuICAgICAgICBxdWVzdGlvbi52YWx1ZSB8fCBxdWVzdGlvbi5yYW5nZU1pblxuICAgICAgKTtcbiAgICAgIGVsLmFwcGVuZENoaWxkKGlucHV0RWwpO1xuXG4gICAgICB2YXIgY29uZmlnID0gcXVlc3Rpb24uY29uZmlnIHx8IHt9O1xuXG4gICAgICBpZiAoY29uZmlnLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLmlkID0gcXVlc3Rpb24ubmFtZSArIFwiX1wiICsgcXVlc3Rpb24uaWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcubWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLm1pbiA9IHF1ZXN0aW9uLnJhbmdlTWluO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZy5tYXggPSBxdWVzdGlvbi5yYW5nZU1heDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zdGVwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLnN0ZXAgPSBxdWVzdGlvbi5zdGVwO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcuZW5hYmxlZCA9ICFxdWVzdGlvbi5pc1JlYWRPbmx5O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLnZhbHVlID0gcXVlc3Rpb24udmFsdWUgfHwgcXVlc3Rpb24ucmFuZ2VNaW47XG4gICAgICB9XG5cbiAgICAgIHZhciBzbGlkZXIgPSBuZXcgU2xpZGVyKGlucHV0RWwsIGNvbmZpZyk7XG5cbiAgICAgIHNsaWRlci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAodmFsdWVPYmopIHtcbiAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBzbGlkZXIuZ2V0VmFsdWUoKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2xpZGVyLnNldFZhbHVlKHF1ZXN0aW9uLnZhbHVlIHx8IHF1ZXN0aW9uLnJhbmdlTWluKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICBzbGlkZXIuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNsaWRlci5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLmJvb3RzdHJhcFNsaWRlciA9IHNsaWRlcjtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLmJvb3RzdHJhcFNsaWRlciAmJiBxdWVzdGlvbi5ib290c3RyYXBTbGlkZXIuZGVzdHJveSgpO1xuICAgICAgcXVlc3Rpb24uYm9vdHN0cmFwU2xpZGVyID0gbnVsbDtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICAgIHBkZlJlbmRlcjogZnVuY3Rpb24gKF8sIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJib290c3RyYXBzbGlkZXJcIikge1xuICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25zLm1vZHVsZS5TdXJ2ZXlIZWxwZXIuY3JlYXRlUG9pbnQoXG4gICAgICAgICAgb3B0aW9ucy5tb2R1bGUuU3VydmV5SGVscGVyLm1lcmdlUmVjdHMuYXBwbHkobnVsbCwgb3B0aW9ucy5icmlja3MpXG4gICAgICAgICk7XG4gICAgICAgIHBvaW50LnhMZWZ0ICs9IG9wdGlvbnMuY29udHJvbGxlci51bml0V2lkdGg7XG4gICAgICAgIHBvaW50LnlUb3AgKz1cbiAgICAgICAgICBvcHRpb25zLmNvbnRyb2xsZXIudW5pdEhlaWdodCAqXG4gICAgICAgICAgb3B0aW9ucy5tb2R1bGUuRmxhdFF1ZXN0aW9uLkNPTlRFTlRfR0FQX1ZFUlRfU0NBTEU7XG4gICAgICAgIHZhciByZWN0ID0gb3B0aW9ucy5tb2R1bGUuU3VydmV5SGVscGVyLmNyZWF0ZVRleHRGaWVsZFJlY3QoXG4gICAgICAgICAgcG9pbnQsXG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyXG4gICAgICAgICk7XG4gICAgICAgIHZhciB0ZXh0Ym94QnJpY2sgPSBuZXcgb3B0aW9ucy5tb2R1bGUuVGV4dEZpZWxkQnJpY2soXG4gICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbixcbiAgICAgICAgICBvcHRpb25zLmNvbnRyb2xsZXIsXG4gICAgICAgICAgcmVjdCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24uaWQsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbi52YWx1ZSB8fFxuICAgICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbi5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICApLnRvU3RyaW5nKCksXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJ0ZXh0XCJcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucy5icmlja3MucHVzaCh0ZXh0Ym94QnJpY2spO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9ib290c3RyYXAtc2xpZGVyLmpzXG4vLyBtb2R1bGUgaWQgPSAxNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgNSIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xNV9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlNsaWRlclwiLFwiY29tbW9uanMyXCI6XCJib290c3RyYXAtc2xpZGVyXCIsXCJjb21tb25qc1wiOlwiYm9vdHN0cmFwLXNsaWRlclwiLFwiYW1kXCI6XCJib290c3RyYXAtc2xpZGVyXCJ9XG4vLyBtb2R1bGUgaWQgPSAxNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgNSIsImltcG9ydCBSZWNvcmRSVEMgZnJvbSBcInJlY29yZHJ0Y1wiO1xuXG5mdW5jdGlvbiBpbml0KFN1cnZleSkge1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwibWljcm9waG9uZVwiLFxuICAgIHRpdGxlOiBcIk1pY3JvcGhvbmVcIixcbiAgICBpY29uTmFtZTogXCJpY29uLW1pY3JvcGhvbmVcIixcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIFJlY29yZFJUQyAhPSBcInVuZGVmaW5lZFwiO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcIm1pY3JvcGhvbmVcIjtcbiAgICB9LFxuICAgIGh0bWxUZW1wbGF0ZTpcbiAgICAgIFwiPGRpdiBzdHlsZT0naGVpZ2h0OiAzOXB4Jz5cIiArXG4gICAgICBcIjxidXR0b24gdHlwZT0nYnV0dG9uJyAgdGl0bGU9J1JlY29yZCcgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOiB0b3A7IG1hcmdpbi10b3A6IDNweCcgPjxpIGNsYXNzPSdmYSBmYS1taWNyb3Bob25lJyBhcmlhLWhpZGRlbj0ndHJ1ZSc+PC9pPjwvYnV0dG9uPlwiICtcbiAgICAgIFwiJm5ic3A7PGJ1dHRvbiB0eXBlPSdidXR0b24nIHRpdGxlPSdTYXZlJyBzdHlsZT0ndmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXRvcDogM3B4Jz48aSBjbGFzcz0nZmEgZmEtY2xvdWQnIGFyaWEtaGlkZGVuPSd0cnVlJyA+PC9pPjwvYnV0dG9uPlwiICtcbiAgICAgIFwiJm5ic3A7PGF1ZGlvIHN0eWxlPSdcIiArXG4gICAgICBcInZlcnRpY2FsLWFsaWduOiB0b3A7XCIgK1xuICAgICAgXCJtYXJnaW4tbGVmdDogMTBweDtcIiArXG4gICAgICBcImhlaWdodDozNXB4O1wiICtcbiAgICAgIFwiLW1vei1ib3gtc2hhZG93OiAycHggMnB4IDRweCAwcHggIzAwNjc3MztcIiArXG4gICAgICBcIi13ZWJraXQtYm94LXNoYWRvdzogIDJweCAycHggNHB4IDBweCAjMDA2NzczO1wiICtcbiAgICAgIFwiYm94LXNoYWRvdzogMnB4IDJweCA0cHggMHB4ICMwMDY3NzM7XCIgK1xuICAgICAgXCInIFwiICtcbiAgICAgIFwiY29udHJvbHM9J3RydWUnID5cIiArXG4gICAgICBcIjwvYXVkaW8+XCIgK1xuICAgICAgXCI8L2Rpdj5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm1pY3JvcGhvbmVcIiwgW10sIG51bGwsIFwiZW1wdHlcIik7XG4gICAgfSxcblxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbihxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciByb290V2lkZ2V0ID0gdGhpcztcbiAgICAgIHZhciBidXR0b25TdGFydEVsID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIilbMF07XG4gICAgICB2YXIgYnV0dG9uU3RvcEVsID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIilbMV07XG4gICAgICB2YXIgYXVkaW9FbCA9IGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYXVkaW9cIilbMF07XG5cbiAgICAgIC8vLy8vLy8vLy8gIFJlY29yZFJUQyBsb2dpY1xuXG4gICAgICB2YXIgc3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXVkaW9cIixcbiAgICAgICAgICBtaW1lVHlwZTogXCJhdWRpby93ZWJtXCIsXG4gICAgICAgICAgYXVkaW9CaXRzUGVyU2Vjb25kOiA0NDEwMCxcbiAgICAgICAgICBzYW1wbGVSYXRlOiA0NDEwMCxcbiAgICAgICAgICBidWZmZXJTaXplOiAxNjM4NCxcbiAgICAgICAgICBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IDFcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzQ2FsbGJhY2tcIik7XG4gICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQyA9IFJlY29yZFJUQyhcbiAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkubXlzdHJlYW0sXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwic3RhcnRSZWNvcmRpbmdcIik7XG4gICAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQy5zdGFydFJlY29yZGluZygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgZXJyb3JDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBhbGVydChcIk5vIG1pY3JvcGhvbmVcIik7XG4gICAgICAgIHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwcm9jZXNzQXVkaW8gPSBmdW5jdGlvbihhdWRpb1ZpZGVvV2ViTVVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInByb2Nlc3NBdWRpb1wiKTtcbiAgICAgICAgdmFyIHJlY29yZGVkQmxvYiA9IHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMuZ2V0QmxvYigpO1xuXG4gICAgICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIHZhciBkYXRhVXJpID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImRhdGFVcmk6IFwiICsgZGF0YVVyaSk7XG4gICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBkYXRhVXJpO1xuICAgICAgICAgIGF1ZGlvRWwuc3JjID0gZGF0YVVyaTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2xlYW5pbmdcIik7XG4gICAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkubXlzdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChyZWNvcmRlZEJsb2IpO1xuICAgICAgfTtcblxuICAgICAgdmFyIHN0YXJ0UmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIGVyYXNlIHByZXZpb3VzIGRhdGFcbiAgICAgICAgcXVlc3Rpb24udmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gaWYgcmVjb3JkZXIgb3BlbiBvbiBhbm90aGVyIHF1ZXN0aW9uXHQtIHRyeSB0byBzdG9wIHJlY29yZGluZ1xuICAgICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMuc3RvcFJlY29yZGluZyhkb05vdGhpbmdIYW5kbGVyKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkubXlzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XG4gICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtZWRpYUNvbnN0cmFpbnRzID0ge1xuICAgICAgICAgIHZpZGVvOiBmYWxzZSxcbiAgICAgICAgICBhdWRpbzogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAgICAgICAuZ2V0VXNlck1lZGlhKG1lZGlhQ29uc3RyYWludHMpXG4gICAgICAgICAgLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyksIGVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgc3RvcFJlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInN0b3BSZWNvcmRpbmdcIik7XG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQy5zdG9wUmVjb3JkaW5nKHByb2Nlc3NBdWRpby5iaW5kKHRoaXMpKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkubXlzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XG4gICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8vLy8vLy8vLy8vLy8gIGVuZCBSVEMgbG9naWMgLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgIGlmICghcXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgICBidXR0b25TdGFydEVsLm9uY2xpY2sgPSBzdGFydFJlY29yZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvblN0YXJ0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChidXR0b25TdGFydEVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgIGJ1dHRvblN0b3BFbC5vbmNsaWNrID0gc3RvcFJlY29yZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvblN0b3BFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGJ1dHRvblN0b3BFbCk7XG4gICAgICB9XG5cbiAgICAgIGF1ZGlvRWwuc3JjID0gcXVlc3Rpb24udmFsdWU7XG5cbiAgICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSBmdW5jdGlvbigpIHt9O1xuXG4gICAgICB2YXIgZG9Ob3RoaW5nSGFuZGxlciA9IGZ1bmN0aW9uKCkge307XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24ocXVlc3Rpb24sIGVsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcInVubW91bnQgbWljcm9waG9uZSBubyByZWNvcmQgXCIpO1xuICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQy5zdG9wUmVjb3JkaW5nKGRvTm90aGluZ0hhbmRsZXIpO1xuICAgICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcXVlc3Rpb24uc3VydmV5Lm15c3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbih0cmFjaykge1xuICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDID0gdW5kZWZpbmVkO1xuICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkubXlzdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWljcm9waG9uZS5qc1xuLy8gbW9kdWxlIGlkID0gMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIndXNlIHN0cmljdCc7XHJcblxyXG4vLyBMYXN0IHRpbWUgdXBkYXRlZDogMjAyMC0wMi0yNiAxOjExOjQ3IFBNIFVUQ1xyXG5cclxuLy8gX19fX19fX19fX19fX19fX1xyXG4vLyBSZWNvcmRSVEMgdjUuNS45XHJcblxyXG4vLyBPcGVuLVNvdXJjZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBNdWF6IEtoYW4gICAgIC0gd3d3Lk11YXpLaGFuLmNvbVxyXG4vLyBNSVQgTGljZW5zZSAgIC0gd3d3LldlYlJUQy1FeHBlcmltZW50LmNvbS9saWNlbmNlXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBfX19fX19fX19fX19cclxuLy8gUmVjb3JkUlRDLmpzXHJcblxyXG4vKipcclxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQ30gaXMgYSBXZWJSVEMgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBhdWRpby92aWRlbyBhcyB3ZWxsIGFzIHNjcmVlbiBhY3Rpdml0eSByZWNvcmRpbmcuIEl0IHN1cHBvcnRzIENocm9tZSwgRmlyZWZveCwgT3BlcmEsIEFuZHJvaWQsIGFuZCBNaWNyb3NvZnQgRWRnZS4gUGxhdGZvcm1zOiBMaW51eCwgTWFjIGFuZCBXaW5kb3dzLiBcclxuICogQHN1bW1hcnkgUmVjb3JkIGF1ZGlvLCB2aWRlbyBvciBzY3JlZW4gaW5zaWRlIHRoZSBicm93c2VyLlxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgUmVjb3JkUlRDXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBSZWNvcmRSVEMobWVkaWFTdHJlYW0gb3IgW2FycmF5T2ZNZWRpYVN0cmVhbV0sIHtcclxuICogICAgIHR5cGU6ICd2aWRlbycsIC8vIGF1ZGlvIG9yIHZpZGVvIG9yIGdpZiBvciBjYW52YXNcclxuICogICAgIHJlY29yZGVyVHlwZTogTWVkaWFTdHJlYW1SZWNvcmRlciB8fCBDYW52YXNSZWNvcmRlciB8fCBTdGVyZW9BdWRpb1JlY29yZGVyIHx8IEV0Y1xyXG4gKiB9KTtcclxuICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICogQHNlZSBGb3IgZnVydGhlciBpbmZvcm1hdGlvbjpcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBtZWRpYVN0cmVhbSAtIFNpbmdsZSBtZWRpYS1zdHJlYW0gb2JqZWN0LCBhcnJheSBvZiBtZWRpYS1zdHJlYW1zLCBodG1sLWNhbnZhcy1lbGVtZW50LCBldGMuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7dHlwZTpcInZpZGVvXCIsIHJlY29yZGVyVHlwZTogTWVkaWFTdHJlYW1SZWNvcmRlciwgZGlzYWJsZUxvZ3M6IHRydWUsIG51bWJlck9mQXVkaW9DaGFubmVsczogMSwgYnVmZmVyU2l6ZTogMCwgc2FtcGxlUmF0ZTogMCwgZGVzaXJlZFNhbXBSYXRlOiAxNjAwMCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGV0Yy59XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gUmVjb3JkUlRDKG1lZGlhU3RyZWFtLCBjb25maWcpIHtcclxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcclxuICAgICAgICB0aHJvdyAnRmlyc3QgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLic7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHtcclxuICAgICAgICB0eXBlOiAndmlkZW8nXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbmZpZyA9IG5ldyBSZWNvcmRSVENDb25maWd1cmF0aW9uKG1lZGlhU3RyZWFtLCBjb25maWcpO1xyXG5cclxuICAgIC8vIGEgcmVmZXJlbmNlIHRvIHVzZXIncyByZWNvcmRSVEMgb2JqZWN0XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmcoY29uZmlnMikge1xyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWNvcmRSVEMgdmVyc2lvbjogJywgc2VsZi52ZXJzaW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIWNvbmZpZzIpIHtcclxuICAgICAgICAgICAgLy8gYWxsb3cgdXNlcnMgdG8gc2V0IG9wdGlvbnMgdXNpbmcgc3RhcnRSZWNvcmRpbmcgbWV0aG9kXHJcbiAgICAgICAgICAgIC8vIGNvbmZpZzIgaXMgc2ltaWxhciB0byBtYWluIFwiY29uZmlnXCIgb2JqZWN0IChzZWNvbmQgcGFyYW1ldGVyIG92ZXIgUmVjb3JkUlRDIGNvbnN0cnVjdG9yKVxyXG4gICAgICAgICAgICBjb25maWcgPSBuZXcgUmVjb3JkUlRDQ29uZmlndXJhdGlvbihtZWRpYVN0cmVhbSwgY29uZmlnMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3RhcnRlZCByZWNvcmRpbmcgJyArIGNvbmZpZy50eXBlICsgJyBzdHJlYW0uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucmVjb3JkKCk7XHJcblxyXG4gICAgICAgICAgICBzZXRTdGF0ZSgncmVjb3JkaW5nJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5yZWNvcmRpbmdEdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVjb3JkaW5nRHVyYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluaXRSZWNvcmRlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYucmVjb3JkaW5nRHVyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlY29yZGluZ0R1cmF0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdFJlY29yZGVyKGluaXRDYWxsYmFjaykge1xyXG4gICAgICAgIGlmIChpbml0Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY29uZmlnLmluaXRDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgaW5pdENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICBpbml0Q2FsbGJhY2sgPSBjb25maWcuaW5pdENhbGxiYWNrID0gbnVsbDsgLy8gcmVjb3JkZXIuaW5pdFJlY29yZGVyIHNob3VsZCBiZSBjYWxsLWJhY2tlZCBvbmNlLlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIFJlY29yZGVyID0gbmV3IEdldFJlY29yZGVyVHlwZShtZWRpYVN0cmVhbSwgY29uZmlnKTtcclxuXHJcbiAgICAgICAgbWVkaWFSZWNvcmRlciA9IG5ldyBSZWNvcmRlcihtZWRpYVN0cmVhbSwgY29uZmlnKTtcclxuICAgICAgICBtZWRpYVJlY29yZGVyLnJlY29yZCgpO1xyXG5cclxuICAgICAgICBzZXRTdGF0ZSgncmVjb3JkaW5nJyk7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbml0aWFsaXplZCByZWNvcmRlclR5cGU6JywgbWVkaWFSZWNvcmRlci5jb25zdHJ1Y3Rvci5uYW1lLCAnZm9yIG91dHB1dC10eXBlOicsIGNvbmZpZy50eXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc3RvcFJlY29yZGluZyhjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHdhcm5pbmdMb2coKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUgPT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgICAgIHNlbGYucmVzdW1lUmVjb3JkaW5nKCk7XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgc3RvcFJlY29yZGluZyhjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH0sIDEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gJ3JlY29yZGluZycgJiYgIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlY29yZGluZyBzdGF0ZSBzaG91bGQgYmU6IFwicmVjb3JkaW5nXCIsIGhvd2V2ZXIgY3VycmVudCBzdGF0ZSBpczogJywgc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RvcHBlZCByZWNvcmRpbmcgJyArIGNvbmZpZy50eXBlICsgJyBzdHJlYW0uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLnR5cGUgIT09ICdnaWYnKSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuc3RvcChfY2FsbGJhY2spO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuc3RvcCgpO1xyXG4gICAgICAgICAgICBfY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFN0YXRlKCdzdG9wcGVkJyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9jYWxsYmFjayhfX2Jsb2IpIHtcclxuICAgICAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHNlbGYsICcnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtZWRpYVJlY29yZGVyKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZWRpYVJlY29yZGVyW2tleV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZltrZXldID0gbWVkaWFSZWNvcmRlcltrZXldO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBibG9iID0gbWVkaWFSZWNvcmRlci5ibG9iO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFibG9iKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX19ibG9iKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5ibG9iID0gYmxvYiA9IF9fYmxvYjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ1JlY29yZGluZyBmYWlsZWQuJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGJsb2IgJiYgIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYmxvYi50eXBlLCAnLT4nLCBieXRlc1RvU2l6ZShibG9iLnNpemUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXJsO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjay5jYWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChzZWxmLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5hdXRvV3JpdGVUb0Rpc2spIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2V0RGF0YVVSTChmdW5jdGlvbihkYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVyID0ge307XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJbY29uZmlnLnR5cGUgKyAnQmxvYiddID0gZGF0YVVSTDtcclxuICAgICAgICAgICAgICAgIERpc2tTdG9yYWdlLlN0b3JlKHBhcmFtZXRlcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXVzZVJlY29yZGluZygpIHtcclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gJ3JlY29yZGluZycpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIHBhdXNlIHRoZSByZWNvcmRpbmcuIFJlY29yZGluZyBzdGF0ZTogJywgc2VsZi5zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0U3RhdGUoJ3BhdXNlZCcpO1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLnBhdXNlKCk7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQYXVzZWQgcmVjb3JkaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXN1bWVSZWNvcmRpbmcoKSB7XHJcbiAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHdhcm5pbmdMb2coKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byByZXN1bWUgdGhlIHJlY29yZGluZy4gUmVjb3JkaW5nIHN0YXRlOiAnLCBzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRTdGF0ZSgncmVjb3JkaW5nJyk7XHJcblxyXG4gICAgICAgIC8vIG5vdCBhbGwgbGlicyBoYXZlIHRoaXMgbWV0aG9kIHlldFxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIucmVzdW1lKCk7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZXN1bWVkIHJlY29yZGluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVhZEZpbGUoX2Jsb2IpIHtcclxuICAgICAgICBwb3N0TWVzc2FnZShuZXcgRmlsZVJlYWRlclN5bmMoKS5yZWFkQXNEYXRhVVJMKF9ibG9iKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RGF0YVVSTChjYWxsYmFjaywgX21lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdQYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24gb3ZlciBnZXREYXRhVVJMLic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYmxvYiA9IF9tZWRpYVJlY29yZGVyID8gX21lZGlhUmVjb3JkZXIuYmxvYiA6IChtZWRpYVJlY29yZGVyIHx8IHt9KS5ibG9iO1xyXG5cclxuICAgICAgICBpZiAoIWJsb2IpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQmxvYiBlbmNvZGVyIGRpZCBub3QgZmluaXNoIGl0cyBqb2IgeWV0LicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgZ2V0RGF0YVVSTChjYWxsYmFjaywgX21lZGlhUmVjb3JkZXIpO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnICYmICFuYXZpZ2F0b3IubW96R2V0VXNlck1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciB3ZWJXb3JrZXIgPSBwcm9jZXNzSW5XZWJXb3JrZXIocmVhZEZpbGUpO1xyXG5cclxuICAgICAgICAgICAgd2ViV29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHdlYldvcmtlci5wb3N0TWVzc2FnZShibG9iKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzSW5XZWJXb3JrZXIoX2Z1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYmxvYiA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW19mdW5jdGlvbi50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICd0aGlzLm9ubWVzc2FnZSA9ICBmdW5jdGlvbiAoZWVlKSB7JyArIF9mdW5jdGlvbi5uYW1lICsgJyhlZWUuZGF0YSk7fSdcclxuICAgICAgICAgICAgICAgIF0sIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCdcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iKTtcclxuICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYW5kbGVSZWNvcmRpbmdEdXJhdGlvbihjb3VudGVyKSB7XHJcbiAgICAgICAgY291bnRlciA9IGNvdW50ZXIgfHwgMDtcclxuXHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUgPT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWNvcmRpbmdEdXJhdGlvbihjb3VudGVyKTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlID09PSAnc3RvcHBlZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvdW50ZXIgPj0gc2VsZi5yZWNvcmRpbmdEdXJhdGlvbikge1xyXG4gICAgICAgICAgICBzdG9wUmVjb3JkaW5nKHNlbGYub25SZWNvcmRpbmdTdG9wcGVkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY291bnRlciArPSAxMDAwOyAvLyAxLXNlY29uZFxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBoYW5kbGVSZWNvcmRpbmdEdXJhdGlvbihjb3VudGVyKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIGlmICghc2VsZikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5vblN0YXRlQ2hhbmdlZC5jYWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHNlbGYub25TdGF0ZUNoYW5nZWQuY2FsbChzZWxmLCBzdGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZi5vblN0YXRlQ2hhbmdlZChzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBXQVJOSU5HID0gJ0l0IHNlZW1zIHRoYXQgcmVjb3JkZXIgaXMgZGVzdHJveWVkIG9yIFwic3RhcnRSZWNvcmRpbmdcIiBpcyBub3QgaW52b2tlZCBmb3IgJyArIGNvbmZpZy50eXBlICsgJyByZWNvcmRlci4nO1xyXG5cclxuICAgIGZ1bmN0aW9uIHdhcm5pbmdMb2coKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlTG9ncyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oV0FSTklORyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG1lZGlhUmVjb3JkZXI7XHJcblxyXG4gICAgdmFyIHJldHVybk9iamVjdCA9IHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIHJlY29yZGluZy5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogdmFyIHJlY29yZGVyID0gUmVjb3JkUlRDKG1lZGlhU3RyZWFtLCB7XHJcbiAgICAgICAgICogICAgIHR5cGU6ICd2aWRlbydcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKiByZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN0YXJ0UmVjb3JkaW5nOiBzdGFydFJlY29yZGluZyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIHJlY29yZGluZy4gSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZ2V0IFwiYmxvYlwiIG9yIFwiVVJJXCIgaW5zaWRlIHRoZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYWxsIHJlY29yZGVycyBmaW5pc2hlZCB0aGVpciBqb2IuXHJcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBnZXQgdGhlIHJlY29yZGVkIGJsb2IuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICogICAgIC8vIHVzZSBlaXRoZXIgXCJ0aGlzXCIgb3IgXCJyZWNvcmRlclwiIG9iamVjdDsgYm90aCBhcmUgaWRlbnRpY2FsXHJcbiAgICAgICAgICogICAgIHZpZGVvLnNyYyA9IHRoaXMudG9VUkwoKTtcclxuICAgICAgICAgKiAgICAgdmFyIGJsb2IgPSB0aGlzLmdldEJsb2IoKTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdG9wUmVjb3JkaW5nOiBzdG9wUmVjb3JkaW5nLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgdGhlIHJlY29yZGluZy4gWW91IGNhbiByZXN1bWUgcmVjb3JkaW5nIHVzaW5nIFwicmVzdW1lUmVjb3JkaW5nXCIgbWV0aG9kLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQHRvZG8gRmlyZWZveCBpcyB1bmFibGUgdG8gcGF1c2UgdGhlIHJlY29yZGluZy4gRml4IGl0LlxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIucGF1c2VSZWNvcmRpbmcoKTsgIC8vIHBhdXNlIHRoZSByZWNvcmRpbmdcclxuICAgICAgICAgKiByZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTsgLy8gcmVzdW1lIGFnYWluXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGF1c2VSZWNvcmRpbmc6IHBhdXNlUmVjb3JkaW5nLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXN1bWVzIHRoZSByZWNvcmRpbmcuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnBhdXNlUmVjb3JkaW5nKCk7ICAvLyBmaXJzdCBvZiBhbGwsIHBhdXNlIHRoZSByZWNvcmRpbmdcclxuICAgICAgICAgKiByZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTsgLy8gbm93IHJlc3VtZSBpdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlc3VtZVJlY29yZGluZzogcmVzdW1lUmVjb3JkaW5nLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmVjb3JkaW5nLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQHRvZG8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGRlcHJlY2F0ZWQuXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5pbml0UmVjb3JkZXIoKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbml0UmVjb3JkZXI6IGluaXRSZWNvcmRlcixcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXNrIFJlY29yZFJUQyB0byBhdXRvLXN0b3AgdGhlIHJlY29yZGluZyBhZnRlciA1IG1pbnV0ZXMuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHZhciBmaXZlTWludXRlcyA9IDUgKiAxMDAwICogNjA7XHJcbiAgICAgICAgICogcmVjb3JkZXIuc2V0UmVjb3JkaW5nRHVyYXRpb24oZml2ZU1pbnV0ZXMsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgIHZhciBibG9iID0gdGhpcy5nZXRCbG9iKCk7XHJcbiAgICAgICAgICogICAgdmlkZW8uc3JjID0gdGhpcy50b1VSTCgpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIC8vIG9yIG90aGVyd2lzZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnNldFJlY29yZGluZ0R1cmF0aW9uKGZpdmVNaW51dGVzKS5vblJlY29yZGluZ1N0b3BwZWQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICogICAgdmFyIGJsb2IgPSB0aGlzLmdldEJsb2IoKTtcclxuICAgICAgICAgKiAgICB2aWRlby5zcmMgPSB0aGlzLnRvVVJMKCk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0UmVjb3JkaW5nRHVyYXRpb246IGZ1bmN0aW9uKHJlY29yZGluZ0R1cmF0aW9uLCBjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlY29yZGluZ0R1cmF0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ3JlY29yZGluZ0R1cmF0aW9uIGlzIHJlcXVpcmVkLic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjb3JkaW5nRHVyYXRpb24gIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAncmVjb3JkaW5nRHVyYXRpb24gbXVzdCBiZSBhIG51bWJlci4nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZWxmLnJlY29yZGluZ0R1cmF0aW9uID0gcmVjb3JkaW5nRHVyYXRpb247XHJcbiAgICAgICAgICAgIHNlbGYub25SZWNvcmRpbmdTdG9wcGVkID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvblJlY29yZGluZ1N0b3BwZWQ6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vblJlY29yZGluZ1N0b3BwZWQgPSBjYWxsYmFjaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjbGVhci9yZXNldCBhbGwgdGhlIHJlY29yZGVkIGRhdGEuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAdG9kbyBGaWd1cmUgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gXCJyZXNldFwiIGFuZCBcImNsZWFyUmVjb3JkZWREYXRhXCIgbWV0aG9kcy5cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJSZWNvcmRlZERhdGE6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIHdhcm5pbmdMb2coKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDbGVhcmVkIG9sZCByZWNvcmRlZCBkYXRhLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2V0IHRoZSByZWNvcmRlZCBibG9iLiBVc2UgdGhpcyBtZXRob2QgaW5zaWRlIHRoZSBcInN0b3BSZWNvcmRpbmdcIiBjYWxsYmFjay5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgdmFyIGJsb2IgPSB0aGlzLmdldEJsb2IoKTtcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAgICB2YXIgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ2ZpbGVuYW1lLndlYm0nLCB7XHJcbiAgICAgICAgICogICAgICAgICB0eXBlOiAndmlkZW8vd2VibSdcclxuICAgICAgICAgKiAgICAgfSk7XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICogICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpOyAvLyB1cGxvYWQgXCJGaWxlXCIgb2JqZWN0IHJhdGhlciB0aGFuIGEgXCJCbG9iXCJcclxuICAgICAgICAgKiAgICAgdXBsb2FkVG9TZXJ2ZXIoZm9ybURhdGEpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtCbG9ifSBSZXR1cm5zIHJlY29yZGVkIGRhdGEgYXMgXCJCbG9iXCIgb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldEJsb2I6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIHdhcm5pbmdMb2coKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhUmVjb3JkZXIuYmxvYjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBHZXQgZGF0YS1VUkkgaW5zdGVhZCBvZiBCbG9iLlxyXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gZ2V0IHRoZSBEYXRhLVVSSS5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgcmVjb3JkZXIuZ2V0RGF0YVVSTChmdW5jdGlvbihkYXRhVVJJKSB7XHJcbiAgICAgICAgICogICAgICAgICB2aWRlby5zcmMgPSBkYXRhVVJJO1xyXG4gICAgICAgICAqICAgICB9KTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXREYXRhVVJMOiBnZXREYXRhVVJMLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBHZXQgdmlydHVhbC90ZW1wb3JhcnkgVVJMLiBVc2FnZSBvZiB0aGlzIFVSTCBpcyBsaW1pdGVkIHRvIGN1cnJlbnQgdGFiLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgICB2aWRlby5zcmMgPSB0aGlzLnRvVVJMKCk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gUmV0dXJucyBhIHZpcnR1YWwvdGVtcG9yYXJ5IFVSTCBmb3IgdGhlIHJlY29yZGVkIFwiQmxvYlwiLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvVVJMOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuaW5nTG9nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG1lZGlhUmVjb3JkZXIuYmxvYik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2V0IGludGVybmFsIHJlY29yZGluZyBvYmplY3QgKGkuZS4gaW50ZXJuYWwgbW9kdWxlKSBlLmcuIE11dGxpU3RyZWFtUmVjb3JkZXIsIE1lZGlhU3RyZWFtUmVjb3JkZXIsIFN0ZXJlb0F1ZGlvUmVjb3JkZXIgb3IgV2hhbW15UmVjb3JkZXIgZXRjLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiB2YXIgaW50ZXJuYWxSZWNvcmRlciA9IHJlY29yZGVyLmdldEludGVybmFsUmVjb3JkZXIoKTtcclxuICAgICAgICAgKiBpZihpbnRlcm5hbFJlY29yZGVyIGluc3RhbmNlb2YgTXVsdGlTdHJlYW1SZWNvcmRlcikge1xyXG4gICAgICAgICAqICAgICBpbnRlcm5hbFJlY29yZGVyLmFkZFN0cmVhbXMoW25ld0F1ZGlvU3RyZWFtXSk7XHJcbiAgICAgICAgICogICAgIGludGVybmFsUmVjb3JkZXIucmVzZXRWaWRlb1N0cmVhbXMoW3NjcmVlblN0cmVhbV0pO1xyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGludGVybmFsIHJlY29yZGluZyBvYmplY3QuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0SW50ZXJuYWxSZWNvcmRlcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZWRpYVJlY29yZGVyO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludm9rZSBzYXZlLWFzIGRpYWxvZyB0byBzYXZlIHRoZSByZWNvcmRlZCBibG9iIGludG8geW91ciBkaXNrLlxyXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIFNldCB5b3VyIG93biBmaWxlIG5hbWUuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICogICAgIHRoaXMuc2F2ZSgnZmlsZS1uYW1lJyk7XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiAgICAgLy8gb3IgbWFudWFsbHk6XHJcbiAgICAgICAgICogICAgIGludm9rZVNhdmVBc0RpYWxvZyh0aGlzLmdldEJsb2IoKSwgJ2ZpbGVuYW1lLndlYm0nKTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBzYXZlOiBmdW5jdGlvbihmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIHdhcm5pbmdMb2coKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaW52b2tlU2F2ZUFzRGlhbG9nKG1lZGlhUmVjb3JkZXIuYmxvYiwgZmlsZU5hbWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGdldHMgYSBibG9iIGZyb20gaW5kZXhlZC1EQiBzdG9yYWdlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gZ2V0IHRoZSByZWNvcmRlZCBibG9iLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5nZXRGcm9tRGlzayhmdW5jdGlvbihkYXRhVVJMKSB7XHJcbiAgICAgICAgICogICAgIHZpZGVvLnNyYyA9IGRhdGFVUkw7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0RnJvbURpc2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBSZWNvcmRSVEMuZ2V0RnJvbURpc2soY29uZmlnLnR5cGUsIGNhbGxiYWNrKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFuIGFycmF5IG9mIHdlYnAgaW1hZ2VzIHRvIHRoZSByZWNvcmRlZCB2aWRlby1ibG9iLiBJdCB0YWtlcyBhbiBcImFycmF5XCIgb2JqZWN0LlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48QXJyYXk+fVxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5T2ZXZWJQSW1hZ2VzIC0gQXJyYXkgb2Ygd2VicCBpbWFnZXMuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAdG9kbyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgZGVwcmVjYXRlZC5cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHZhciBhcnJheU9mV2ViUEltYWdlcyA9IFtdO1xyXG4gICAgICAgICAqIGFycmF5T2ZXZWJQSW1hZ2VzLnB1c2goe1xyXG4gICAgICAgICAqICAgICBkdXJhdGlvbjogaW5kZXgsXHJcbiAgICAgICAgICogICAgIGltYWdlOiAnZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCwuLi4nXHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICogcmVjb3JkZXIuc2V0QWR2ZXJ0aXNlbWVudEFycmF5KGFycmF5T2ZXZWJQSW1hZ2VzKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRBZHZlcnRpc2VtZW50QXJyYXk6IGZ1bmN0aW9uKGFycmF5T2ZXZWJQSW1hZ2VzKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5hZHZlcnRpc2VtZW50ID0gW107XHJcblxyXG4gICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXlPZldlYlBJbWFnZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2ZXJ0aXNlbWVudC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogaSxcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogYXJyYXlPZldlYlBJbWFnZXNbaV1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXQgaXMgZXF1aXZhbGVudCB0byA8Y29kZSBjbGFzcz1cInN0clwiPlwicmVjb3JkZXIuZ2V0QmxvYigpXCI8L2NvZGU+IG1ldGhvZC4gVXNhZ2Ugb2YgXCJnZXRCbG9iXCIgaXMgcmVjb21tZW5kZWQsIHRob3VnaC5cclxuICAgICAgICAgKiBAcHJvcGVydHkge0Jsb2J9IGJsb2IgLSBSZWNvcmRlZCBCbG9iIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGlzIHByb3BlcnR5LlxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICogICAgIHZhciBibG9iID0gdGhpcy5ibG9iO1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogICAgIC8vIGJlbG93IG9uZSBpcyByZWNvbW1lbmRlZFxyXG4gICAgICAgICAqICAgICB2YXIgYmxvYiA9IHRoaXMuZ2V0QmxvYigpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJsb2I6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgd29ya3Mgb25seSB3aXRoIHtyZWNvcmRlclR5cGU6U3RlcmVvQXVkaW9SZWNvcmRlcn0uIFVzZSB0aGlzIHByb3BlcnR5IG9uIFwic3RvcFJlY29yZGluZ1wiIHRvIHZlcmlmeSB0aGUgZW5jb2RlcidzIHNhbXBsZS1yYXRlcy5cclxuICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYnVmZmVyU2l6ZSAtIEJ1ZmZlci1zaXplIHVzZWQgdG8gZW5jb2RlIHRoZSBXQVYgY29udGFpbmVyXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgYWxlcnQoJ1JlY29yZGVyIHVzZWQgdGhpcyBidWZmZXItc2l6ZTogJyArIHRoaXMuYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYnVmZmVyU2l6ZTogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyB3b3JrcyBvbmx5IHdpdGgge3JlY29yZGVyVHlwZTpTdGVyZW9BdWRpb1JlY29yZGVyfS4gVXNlIHRoaXMgcHJvcGVydHkgb24gXCJzdG9wUmVjb3JkaW5nXCIgdG8gdmVyaWZ5IHRoZSBlbmNvZGVyJ3Mgc2FtcGxlLXJhdGVzLlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzYW1wbGVSYXRlIC0gU2FtcGxlLXJhdGVzIHVzZWQgdG8gZW5jb2RlIHRoZSBXQVYgY29udGFpbmVyXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgYWxlcnQoJ1JlY29yZGVyIHVzZWQgdGhlc2Ugc2FtcGxlLXJhdGVzOiAnICsgdGhpcy5zYW1wbGVSYXRlKTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBzYW1wbGVSYXRlOiAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB7cmVjb3JkZXJUeXBlOlN0ZXJlb0F1ZGlvUmVjb3JkZXJ9IHJldHVybnMgQXJyYXlCdWZmZXIgb2JqZWN0LlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlciAtIEF1ZGlvIEFycmF5QnVmZmVyLCBzdXBwb3J0ZWQgb25seSBpbiBDaHJvbWUuXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgdmFyIGFycmF5QnVmZmVyID0gdGhpcy5idWZmZXI7XHJcbiAgICAgICAgICogICAgIGFsZXJ0KGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJ1ZmZlcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSByZWNvcmRlci4gU28gdGhhdCB5b3UgY2FuIHJldXNlIHNpbmdsZSByZWNvcmRlciBpbnN0YW5jZSBtYW55IHRpbWVzLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5yZXNldCgpO1xyXG4gICAgICAgICAqIHJlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gJ3JlY29yZGluZycgJiYgIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTdG9wIGFuIGFjdGl2ZSByZWNvcmRlci4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIgJiYgdHlwZW9mIG1lZGlhUmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyID0gbnVsbDtcclxuICAgICAgICAgICAgc2V0U3RhdGUoJ2luYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHNlbGYuYmxvYiA9IG51bGw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIHJlY29yZGVyJ3Mgc3RhdGUgY2hhbmdlcy4gVXNlIHRoaXMgYXMgYW4gXCJldmVudFwiLlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZSAtIEEgcmVjb3JkZXIncyBzdGF0ZSBjYW4gYmU6IHJlY29yZGluZywgcGF1c2VkLCBzdG9wcGVkIG9yIGluYWN0aXZlLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5vblN0YXRlQ2hhbmdlZCA9IGZ1bmN0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgICogICAgIGNvbnNvbGUubG9nKCdSZWNvcmRlciBzdGF0ZTogJywgc3RhdGUpO1xyXG4gICAgICAgICAqIH07XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25TdGF0ZUNoYW5nZWQ6IGZ1bmN0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjb3JkZXIgc3RhdGUgY2hhbmdlZDonLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIHJlY29yZGVyIGNhbiBoYXZlIGluYWN0aXZlLCByZWNvcmRpbmcsIHBhdXNlZCBvciBzdG9wcGVkIHN0YXRlcy5cclxuICAgICAgICAgKiBAcHJvcGVydHkge1N0cmluZ30gc3RhdGUgLSBBIHJlY29yZGVyJ3Mgc3RhdGUgY2FuIGJlOiByZWNvcmRpbmcsIHBhdXNlZCwgc3RvcHBlZCBvciBpbmFjdGl2ZS5cclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQHN0YXRpY1xyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogLy8gdGhpcyBsb29wZXIgZnVuY3Rpb24gd2lsbCBrZWVwIHlvdSB1cGRhdGVkIGFib3V0IHRoZSByZWNvcmRlcidzIHN0YXRlcy5cclxuICAgICAgICAgKiAoZnVuY3Rpb24gbG9vcGVyKCkge1xyXG4gICAgICAgICAqICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMScpLmlubmVySFRNTCA9ICdSZWNvcmRlclxcJ3Mgc3RhdGUgaXM6ICcgKyByZWNvcmRlci5zdGF0ZTtcclxuICAgICAgICAgKiAgICAgaWYocmVjb3JkZXIuc3RhdGUgPT09ICdzdG9wcGVkJykgcmV0dXJuOyAvLyBpZ25vcmUrc3RvcFxyXG4gICAgICAgICAqICAgICBzZXRUaW1lb3V0KGxvb3BlciwgMTAwMCk7IC8vIHVwZGF0ZSBhZnRlciBldmVyeSAzLXNlY29uZHNcclxuICAgICAgICAgKiB9KSgpO1xyXG4gICAgICAgICAqIHJlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhdGU6ICdpbmFjdGl2ZScsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdldCByZWNvcmRlcidzIHJlYWRvbmx5IHN0YXRlLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiB2YXIgc3RhdGUgPSByZWNvcmRlci5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IFJldHVybnMgcmVjb3JkaW5nIHN0YXRlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFN0YXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGVzdHJveSBSZWNvcmRSVEMgaW5zdGFuY2UuIENsZWFyIGFsbCByZWNvcmRlcnMgYW5kIG9iamVjdHMuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLmRlc3Ryb3koKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGRpc2FibGVMb2dzQ2FjaGUgPSBjb25maWcuZGlzYWJsZUxvZ3M7XHJcblxyXG4gICAgICAgICAgICBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlTG9nczogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBzZWxmLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHNldFN0YXRlKCdkZXN0cm95ZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuT2JqZWN0ID0gc2VsZiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICAgICAgU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3Rvci5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3RvciA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlTG9ncyA9IGRpc2FibGVMb2dzQ2FjaGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY29yZFJUQyBpcyBkZXN0cm95ZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWNvcmRSVEMgdmVyc2lvbiBudW1iZXJcclxuICAgICAgICAgKiBAcHJvcGVydHkge1N0cmluZ30gdmVyc2lvbiAtIFJlbGVhc2UgdmVyc2lvbiBudW1iZXIuXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBzdGF0aWNcclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIGFsZXJ0KHJlY29yZGVyLnZlcnNpb24pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlcnNpb246ICc1LjUuOSdcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCF0aGlzKSB7XHJcbiAgICAgICAgc2VsZiA9IHJldHVybk9iamVjdDtcclxuICAgICAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHNvbWVvbmUgd2FudHMgdG8gdXNlIFJlY29yZFJUQyB3aXRoIHRoZSBcIm5ld1wiIGtleXdvcmQuXHJcbiAgICBmb3IgKHZhciBwcm9wIGluIHJldHVybk9iamVjdCkge1xyXG4gICAgICAgIHRoaXNbcHJvcF0gPSByZXR1cm5PYmplY3RbcHJvcF07XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgcmV0dXJuIHJldHVybk9iamVjdDtcclxufVxyXG5cclxuUmVjb3JkUlRDLnZlcnNpb24gPSAnNS41LjknO1xyXG5cclxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnIC8qICYmICEhbW9kdWxlLmV4cG9ydHMqLyApIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gUmVjb3JkUlRDO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICBkZWZpbmUoJ1JlY29yZFJUQycsIFtdLCBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gUmVjb3JkUlRDO1xyXG4gICAgfSk7XHJcbn1cblxyXG5SZWNvcmRSVEMuZ2V0RnJvbURpc2sgPSBmdW5jdGlvbih0eXBlLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgIHRocm93ICdjYWxsYmFjayBpcyBtYW5kYXRvcnkuJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygnR2V0dGluZyByZWNvcmRlZCAnICsgKHR5cGUgPT09ICdhbGwnID8gJ2Jsb2JzJyA6IHR5cGUgKyAnIGJsb2IgJykgKyAnIGZyb20gZGlzayEnKTtcclxuICAgIERpc2tTdG9yYWdlLkZldGNoKGZ1bmN0aW9uKGRhdGFVUkwsIF90eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgIT09ICdhbGwnICYmIF90eXBlID09PSB0eXBlICsgJ0Jsb2InICYmIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGRhdGFVUkwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhbGwnICYmIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGRhdGFVUkwsIF90eXBlLnJlcGxhY2UoJ0Jsb2InLCAnJykpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHN0b3JlIHJlY29yZGVkIGJsb2JzIGludG8gSW5kZXhlZERCIHN0b3JhZ2UuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0ge2F1ZGlvOiBCbG9iLCB2aWRlbzogQmxvYiwgZ2lmOiBCbG9ifVxyXG4gKiBAbWV0aG9kXHJcbiAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICogQGV4YW1wbGVcclxuICogUmVjb3JkUlRDLndyaXRlVG9EaXNrKHtcclxuICogICAgIGF1ZGlvOiBhdWRpb0Jsb2IsXHJcbiAqICAgICB2aWRlbzogdmlkZW9CbG9iLFxyXG4gKiAgICAgZ2lmICA6IGdpZkJsb2JcclxuICogfSk7XHJcbiAqL1xyXG5SZWNvcmRSVEMud3JpdGVUb0Rpc2sgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICBjb25zb2xlLmxvZygnV3JpdGluZyByZWNvcmRlZCBibG9iKHMpIHRvIGRpc2shJyk7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGlmIChvcHRpb25zLmF1ZGlvICYmIG9wdGlvbnMudmlkZW8gJiYgb3B0aW9ucy5naWYpIHtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvLmdldERhdGFVUkwoZnVuY3Rpb24oYXVkaW9EYXRhVVJMKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMudmlkZW8uZ2V0RGF0YVVSTChmdW5jdGlvbih2aWRlb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ2lmLmdldERhdGFVUkwoZnVuY3Rpb24oZ2lmRGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgICAgIERpc2tTdG9yYWdlLlN0b3JlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9CbG9iOiBhdWRpb0RhdGFVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvQmxvYjogdmlkZW9EYXRhVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnaWZCbG9iOiBnaWZEYXRhVVJMXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYXVkaW8gJiYgb3B0aW9ucy52aWRlbykge1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW8uZ2V0RGF0YVVSTChmdW5jdGlvbihhdWRpb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy52aWRlby5nZXREYXRhVVJMKGZ1bmN0aW9uKHZpZGVvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgRGlza1N0b3JhZ2UuU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvQmxvYjogYXVkaW9EYXRhVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvQmxvYjogdmlkZW9EYXRhVVJMXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYXVkaW8gJiYgb3B0aW9ucy5naWYpIHtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvLmdldERhdGFVUkwoZnVuY3Rpb24oYXVkaW9EYXRhVVJMKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZ2lmLmdldERhdGFVUkwoZnVuY3Rpb24oZ2lmRGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgRGlza1N0b3JhZ2UuU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvQmxvYjogYXVkaW9EYXRhVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgIGdpZkJsb2I6IGdpZkRhdGFVUkxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy52aWRlbyAmJiBvcHRpb25zLmdpZikge1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW8uZ2V0RGF0YVVSTChmdW5jdGlvbih2aWRlb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5naWYuZ2V0RGF0YVVSTChmdW5jdGlvbihnaWZEYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICBEaXNrU3RvcmFnZS5TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9CbG9iOiB2aWRlb0RhdGFVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2lmQmxvYjogZ2lmRGF0YVVSTFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmF1ZGlvKSB7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpby5nZXREYXRhVVJMKGZ1bmN0aW9uKGF1ZGlvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICBEaXNrU3RvcmFnZS5TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0Jsb2I6IGF1ZGlvRGF0YVVSTFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy52aWRlbykge1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW8uZ2V0RGF0YVVSTChmdW5jdGlvbih2aWRlb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgRGlza1N0b3JhZ2UuU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgdmlkZW9CbG9iOiB2aWRlb0RhdGFVUkxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZ2lmKSB7XHJcbiAgICAgICAgb3B0aW9ucy5naWYuZ2V0RGF0YVVSTChmdW5jdGlvbihnaWZEYXRhVVJMKSB7XHJcbiAgICAgICAgICAgIERpc2tTdG9yYWdlLlN0b3JlKHtcclxuICAgICAgICAgICAgICAgIGdpZkJsb2I6IGdpZkRhdGFVUkxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XG5cclxuLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19cclxuLy8gUmVjb3JkUlRDLUNvbmZpZ3VyYXRpb24uanNcclxuXHJcbi8qKlxyXG4gKiB7QGxpbmsgUmVjb3JkUlRDQ29uZmlndXJhdGlvbn0gaXMgYW4gaW5uZXIvcHJpdmF0ZSBoZWxwZXIgZm9yIHtAbGluayBSZWNvcmRSVEN9LlxyXG4gKiBAc3VtbWFyeSBJdCBjb25maWd1cmVzIHRoZSAybmQgcGFyYW1ldGVyIHBhc3NlZCBvdmVyIHtAbGluayBSZWNvcmRSVEN9IGFuZCByZXR1cm5zIGEgdmFsaWQgXCJjb25maWdcIiBvYmplY3QuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBSZWNvcmRSVENDb25maWd1cmF0aW9uXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgb3B0aW9ucyA9IFJlY29yZFJUQ0NvbmZpZ3VyYXRpb24obWVkaWFTdHJlYW0sIG9wdGlvbnMpO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gTWVkaWFTdHJlYW0gb2JqZWN0IGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSBvciBnZW5lcmF0ZWQgdXNpbmcgY2FwdHVyZVN0cmVhbVVudGlsRW5kZWQgb3IgV2ViQXVkaW8gQVBJLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge3R5cGU6XCJ2aWRlb1wiLCBkaXNhYmxlTG9nczogdHJ1ZSwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiAxLCBidWZmZXJTaXplOiAwLCBzYW1wbGVSYXRlOiAwLCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgZ2V0TmF0aXZlQmxvYjp0cnVlLCBldGMufVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIFJlY29yZFJUQ0NvbmZpZ3VyYXRpb24obWVkaWFTdHJlYW0sIGNvbmZpZykge1xyXG4gICAgaWYgKCFjb25maWcucmVjb3JkZXJUeXBlICYmICFjb25maWcudHlwZSkge1xyXG4gICAgICAgIGlmICghIWNvbmZpZy5hdWRpbyAmJiAhIWNvbmZpZy52aWRlbykge1xyXG4gICAgICAgICAgICBjb25maWcudHlwZSA9ICd2aWRlbyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICghIWNvbmZpZy5hdWRpbyAmJiAhY29uZmlnLnZpZGVvKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy50eXBlID0gJ2F1ZGlvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZWNvcmRlclR5cGUgJiYgIWNvbmZpZy50eXBlKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5yZWNvcmRlclR5cGUgPT09IFdoYW1teVJlY29yZGVyIHx8IGNvbmZpZy5yZWNvcmRlclR5cGUgPT09IENhbnZhc1JlY29yZGVyIHx8ICh0eXBlb2YgV2ViQXNzZW1ibHlSZWNvcmRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uZmlnLnJlY29yZGVyVHlwZSA9PT0gV2ViQXNzZW1ibHlSZWNvcmRlcikpIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAndmlkZW8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnJlY29yZGVyVHlwZSA9PT0gR2lmUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAnZ2lmJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5yZWNvcmRlclR5cGUgPT09IFN0ZXJlb0F1ZGlvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAnYXVkaW8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnJlY29yZGVyVHlwZSA9PT0gTWVkaWFTdHJlYW1SZWNvcmRlcikge1xyXG4gICAgICAgICAgICBpZiAoZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAnYXVkaW8nKS5sZW5ndGggJiYgZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy50eXBlID0gJ3ZpZGVvJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAnYXVkaW8nKS5sZW5ndGggJiYgZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy50eXBlID0gJ3ZpZGVvJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRUcmFja3MobWVkaWFTdHJlYW0sICdhdWRpbycpLmxlbmd0aCAmJiAhZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy50eXBlID0gJ2F1ZGlvJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbmZpZy50eXBlID0gJ1VuS25vd24nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgTWVkaWFTdHJlYW1SZWNvcmRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lZGlhUmVjb3JkZXIgIT09ICd1bmRlZmluZWQnICYmICdyZXF1ZXN0RGF0YScgaW4gTWVkaWFSZWNvcmRlci5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAoIWNvbmZpZy5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICBjb25maWcubWltZVR5cGUgPSAndmlkZW8vd2VibSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy50eXBlID0gY29uZmlnLm1pbWVUeXBlLnNwbGl0KCcvJylbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5iaXRzUGVyU2Vjb25kKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbmZpZy5iaXRzUGVyU2Vjb25kID0gMTI4MDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25zaWRlciBkZWZhdWx0IHR5cGU9YXVkaW9cclxuICAgIGlmICghY29uZmlnLnR5cGUpIHtcclxuICAgICAgICBpZiAoY29uZmlnLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy50eXBlID0gY29uZmlnLm1pbWVUeXBlLnNwbGl0KCcvJylbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY29uZmlnLnR5cGUpIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAnYXVkaW8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG59XG5cclxuLy8gX19fX19fX19fX19fX19fX19fXHJcbi8vIEdldFJlY29yZGVyVHlwZS5qc1xyXG5cclxuLyoqXHJcbiAqIHtAbGluayBHZXRSZWNvcmRlclR5cGV9IGlzIGFuIGlubmVyL3ByaXZhdGUgaGVscGVyIGZvciB7QGxpbmsgUmVjb3JkUlRDfS5cclxuICogQHN1bW1hcnkgSXQgcmV0dXJucyBiZXN0IHJlY29yZGVyLXR5cGUgYXZhaWxhYmxlIGZvciB5b3VyIGJyb3dzZXIuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBHZXRSZWNvcmRlclR5cGVcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBSZWNvcmRlclR5cGUgPSBHZXRSZWNvcmRlclR5cGUob3B0aW9ucyk7XHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBSZWNvcmRlclR5cGUob3B0aW9ucyk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBNZWRpYVN0cmVhbSBvYmplY3QgZmV0Y2hlZCB1c2luZyBnZXRVc2VyTWVkaWEgQVBJIG9yIGdlbmVyYXRlZCB1c2luZyBjYXB0dXJlU3RyZWFtVW50aWxFbmRlZCBvciBXZWJBdWRpbyBBUEkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7dHlwZTpcInZpZGVvXCIsIGRpc2FibGVMb2dzOiB0cnVlLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IDEsIGJ1ZmZlclNpemU6IDAsIHNhbXBsZVJhdGU6IDAsIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBldGMufVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIEdldFJlY29yZGVyVHlwZShtZWRpYVN0cmVhbSwgY29uZmlnKSB7XHJcbiAgICB2YXIgcmVjb3JkZXI7XHJcblxyXG4gICAgLy8gU3RlcmVvQXVkaW9SZWNvcmRlciBjYW4gd29yayB3aXRoIGFsbCB0aHJlZTogRWRnZSwgRmlyZWZveCBhbmQgQ2hyb21lXHJcbiAgICAvLyB0b2RvOiBkZXRlY3QgaWYgaXQgaXMgRWRnZSwgdGhlbiBhdXRvIHVzZTogU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgaWYgKGlzQ2hyb21lIHx8IGlzRWRnZSB8fCBpc09wZXJhKSB7XHJcbiAgICAgICAgLy8gTWVkaWEgU3RyZWFtIFJlY29yZGluZyBBUEkgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGluIGNocm9tZSB5ZXQ7XHJcbiAgICAgICAgLy8gVGhhdCdzIHdoeSB1c2luZyBXZWJBdWRpbyBBUEkgdG8gcmVjb3JkIHN0ZXJlbyBhdWRpbyBpbiBXQVYgZm9ybWF0XHJcbiAgICAgICAgcmVjb3JkZXIgPSBTdGVyZW9BdWRpb1JlY29yZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgTWVkaWFSZWNvcmRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgJ3JlcXVlc3REYXRhJyBpbiBNZWRpYVJlY29yZGVyLnByb3RvdHlwZSAmJiAhaXNDaHJvbWUpIHtcclxuICAgICAgICByZWNvcmRlciA9IE1lZGlhU3RyZWFtUmVjb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdmlkZW8gcmVjb3JkZXIgKGluIFdlYk0gZm9ybWF0KVxyXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAndmlkZW8nICYmIChpc0Nocm9tZSB8fCBpc09wZXJhKSkge1xyXG4gICAgICAgIHJlY29yZGVyID0gV2hhbW15UmVjb3JkZXI7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgV2ViQXNzZW1ibHlSZWNvcmRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZWNvcmRlciA9IFdlYkFzc2VtYmx5UmVjb3JkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHZpZGVvIHJlY29yZGVyIChpbiBHaWYgZm9ybWF0KVxyXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2lmJykge1xyXG4gICAgICAgIHJlY29yZGVyID0gR2lmUmVjb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaHRtbDJjYW52YXMgcmVjb3JkaW5nIVxyXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnY2FudmFzJykge1xyXG4gICAgICAgIHJlY29yZGVyID0gQ2FudmFzUmVjb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTWVkaWFSZWNvcmRlckNvbXBhdGlibGUoKSAmJiByZWNvcmRlciAhPT0gQ2FudmFzUmVjb3JkZXIgJiYgcmVjb3JkZXIgIT09IEdpZlJlY29yZGVyICYmIHR5cGVvZiBNZWRpYVJlY29yZGVyICE9PSAndW5kZWZpbmVkJyAmJiAncmVxdWVzdERhdGEnIGluIE1lZGlhUmVjb3JkZXIucHJvdG90eXBlKSB7XHJcbiAgICAgICAgaWYgKGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ3ZpZGVvJykubGVuZ3RoIHx8IGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ2F1ZGlvJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGF1ZGlvLW9ubHkgcmVjb3JkaW5nXHJcbiAgICAgICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBNZWRpYVJlY29yZGVyLmlzVHlwZVN1cHBvcnRlZCA9PT0gJ2Z1bmN0aW9uJyAmJiBNZWRpYVJlY29yZGVyLmlzVHlwZVN1cHBvcnRlZCgnYXVkaW8vd2VibScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkZXIgPSBNZWRpYVN0cmVhbVJlY29yZGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gZWxzZSByZWNvcmRlciA9IFN0ZXJlb0F1ZGlvUmVjb3JkZXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2aWRlbyBvciBzY3JlZW4gdHJhY2tzXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkID09PSAnZnVuY3Rpb24nICYmIE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKCd2aWRlby93ZWJtJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRlciA9IE1lZGlhU3RyZWFtUmVjb3JkZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1lZGlhU3RyZWFtIGluc3RhbmNlb2YgQXJyYXkgJiYgbWVkaWFTdHJlYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVjb3JkZXIgPSBNdWx0aVN0cmVhbVJlY29yZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcucmVjb3JkZXJUeXBlKSB7XHJcbiAgICAgICAgcmVjb3JkZXIgPSBjb25maWcucmVjb3JkZXJUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzICYmICEhcmVjb3JkZXIgJiYgISFyZWNvcmRlci5uYW1lKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1VzaW5nIHJlY29yZGVyVHlwZTonLCByZWNvcmRlci5uYW1lIHx8IHJlY29yZGVyLmNvbnN0cnVjdG9yLm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVjb3JkZXIgJiYgaXNTYWZhcmkpIHtcclxuICAgICAgICByZWNvcmRlciA9IE1lZGlhU3RyZWFtUmVjb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlY29yZGVyO1xyXG59XG5cclxuLy8gX19fX19fX19fX19fX1xyXG4vLyBNUmVjb3JkUlRDLmpzXHJcblxyXG4vKipcclxuICogTVJlY29yZFJUQyBydW5zIG9uIHRvcCBvZiB7QGxpbmsgUmVjb3JkUlRDfSB0byBicmluZyBtdWx0aXBsZSByZWNvcmRpbmdzIGluIGEgc2luZ2xlIHBsYWNlLCBieSBwcm92aWRpbmcgc2ltcGxlIEFQSS5cclxuICogQHN1bW1hcnkgTVJlY29yZFJUQyBzdGFuZHMgZm9yIFwiTXVsdGlwbGUtUmVjb3JkUlRDXCIuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBNUmVjb3JkUlRDXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgTVJlY29yZFJUQygpO1xyXG4gKiByZWNvcmRlci5hZGRTdHJlYW0oTWVkaWFTdHJlYW0pO1xyXG4gKiByZWNvcmRlci5tZWRpYVR5cGUgPSB7XHJcbiAqICAgICBhdWRpbzogdHJ1ZSwgLy8gb3IgU3RlcmVvQXVkaW9SZWNvcmRlciBvciBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAqICAgICB2aWRlbzogdHJ1ZSwgLy8gb3IgV2hhbW15UmVjb3JkZXIgb3IgTWVkaWFTdHJlYW1SZWNvcmRlciBvciBXZWJBc3NlbWJseVJlY29yZGVyIG9yIENhbnZhc1JlY29yZGVyXHJcbiAqICAgICBnaWY6IHRydWUgICAgLy8gb3IgR2lmUmVjb3JkZXJcclxuICogfTtcclxuICogLy8gbWltZVR5cGUgaXMgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBzZXQgb25seSBpbiBhZHZhbmNlIGNhc2VzLlxyXG4gKiByZWNvcmRlci5taW1lVHlwZSA9IHtcclxuICogICAgIGF1ZGlvOiAnYXVkaW8vd2F2JyxcclxuICogICAgIHZpZGVvOiAndmlkZW8vd2VibScsXHJcbiAqICAgICBnaWY6ICAgJ2ltYWdlL2dpZidcclxuICogfTtcclxuICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICogQHNlZSBGb3IgZnVydGhlciBpbmZvcm1hdGlvbjpcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvdHJlZS9tYXN0ZXIvTVJlY29yZFJUQ3xNUmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBtZWRpYVN0cmVhbSAtIE1lZGlhU3RyZWFtIG9iamVjdCBmZXRjaGVkIHVzaW5nIGdldFVzZXJNZWRpYSBBUEkgb3IgZ2VuZXJhdGVkIHVzaW5nIGNhcHR1cmVTdHJlYW1VbnRpbEVuZGVkIG9yIFdlYkF1ZGlvIEFQSS5cclxuICogQHJlcXVpcmVzIHtAbGluayBSZWNvcmRSVEN9XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gTVJlY29yZFJUQyhtZWRpYVN0cmVhbSkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgYXR0YWNoZXMgTWVkaWFTdHJlYW0gb2JqZWN0IHRvIHtAbGluayBNUmVjb3JkUlRDfS5cclxuICAgICAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gQSBNZWRpYVN0cmVhbSBvYmplY3QsIGVpdGhlciBmZXRjaGVkIHVzaW5nIGdldFVzZXJNZWRpYSBBUEksIG9yIGdlbmVyYXRlZCB1c2luZyBjYXB0dXJlU3RyZWFtVW50aWxFbmRlZCBvciBXZWJBdWRpbyBBUEkuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTVJlY29yZFJUQ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmFkZFN0cmVhbShNZWRpYVN0cmVhbSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYWRkU3RyZWFtID0gZnVuY3Rpb24oX21lZGlhU3RyZWFtKSB7XHJcbiAgICAgICAgaWYgKF9tZWRpYVN0cmVhbSkge1xyXG4gICAgICAgICAgICBtZWRpYVN0cmVhbSA9IF9tZWRpYVN0cmVhbTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHJlY29yZGluZyB0eXBlIGUuZy4gYXVkaW8sIG9yIHZpZGVvLCBvciBnaWYsIG9yIGNhbnZhcy5cclxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtZWRpYVR5cGUgLSB7YXVkaW86IHRydWUsIHZpZGVvOiB0cnVlLCBnaWY6IHRydWV9XHJcbiAgICAgKiBAbWVtYmVyb2YgTVJlY29yZFJUQ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHZhciByZWNvcmRlciA9IG5ldyBNUmVjb3JkUlRDKCk7XHJcbiAgICAgKiByZWNvcmRlci5tZWRpYVR5cGUgPSB7XHJcbiAgICAgKiAgICAgYXVkaW86IHRydWUsIC8vIFRSVUUgb3IgU3RlcmVvQXVkaW9SZWNvcmRlciBvciBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiAgICAgdmlkZW86IHRydWUsIC8vIFRSVUUgb3IgV2hhbW15UmVjb3JkZXIgb3IgTWVkaWFTdHJlYW1SZWNvcmRlciBvciBXZWJBc3NlbWJseVJlY29yZGVyIG9yIENhbnZhc1JlY29yZGVyXHJcbiAgICAgKiAgICAgZ2lmICA6IHRydWUgIC8vIFRSVUUgb3IgR2lmUmVjb3JkZXJcclxuICAgICAqIH07XHJcbiAgICAgKi9cclxuICAgIHRoaXMubWVkaWFUeXBlID0ge1xyXG4gICAgICAgIGF1ZGlvOiB0cnVlLFxyXG4gICAgICAgIHZpZGVvOiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIHJlY29yZGluZy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdGFydFJlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBtZWRpYVR5cGUgPSB0aGlzLm1lZGlhVHlwZTtcclxuICAgICAgICB2YXIgcmVjb3JkZXJUeXBlO1xyXG4gICAgICAgIHZhciBtaW1lVHlwZSA9IHRoaXMubWltZVR5cGUgfHwge1xyXG4gICAgICAgICAgICBhdWRpbzogbnVsbCxcclxuICAgICAgICAgICAgdmlkZW86IG51bGwsXHJcbiAgICAgICAgICAgIGdpZjogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbWVkaWFUeXBlLmF1ZGlvICE9PSAnZnVuY3Rpb24nICYmIGlzTWVkaWFSZWNvcmRlckNvbXBhdGlibGUoKSAmJiAhZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAnYXVkaW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWVkaWFUeXBlLmF1ZGlvID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1lZGlhVHlwZS52aWRlbyAhPT0gJ2Z1bmN0aW9uJyAmJiBpc01lZGlhUmVjb3JkZXJDb21wYXRpYmxlKCkgJiYgIWdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ3ZpZGVvJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1lZGlhVHlwZS52aWRlbyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUuZ2lmICE9PSAnZnVuY3Rpb24nICYmIGlzTWVkaWFSZWNvcmRlckNvbXBhdGlibGUoKSAmJiAhZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWVkaWFUeXBlLmdpZiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFtZWRpYVR5cGUuYXVkaW8gJiYgIW1lZGlhVHlwZS52aWRlbyAmJiAhbWVkaWFUeXBlLmdpZikge1xyXG4gICAgICAgICAgICB0aHJvdyAnTWVkaWFTdHJlYW0gbXVzdCBoYXZlIGVpdGhlciBhdWRpbyBvciB2aWRlbyB0cmFja3MuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIW1lZGlhVHlwZS5hdWRpbykge1xyXG4gICAgICAgICAgICByZWNvcmRlclR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lZGlhVHlwZS5hdWRpbyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkZXJUeXBlID0gbWVkaWFUeXBlLmF1ZGlvO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvUmVjb3JkZXIgPSBuZXcgUmVjb3JkUlRDKG1lZGlhU3RyZWFtLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXVkaW8nLFxyXG4gICAgICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5idWZmZXJTaXplLFxyXG4gICAgICAgICAgICAgICAgc2FtcGxlUmF0ZTogdGhpcy5zYW1wbGVSYXRlLFxyXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiB0aGlzLm51bWJlck9mQXVkaW9DaGFubmVscyB8fCAyLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUxvZ3M6IHRoaXMuZGlzYWJsZUxvZ3MsXHJcbiAgICAgICAgICAgICAgICByZWNvcmRlclR5cGU6IHJlY29yZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZS5hdWRpbyxcclxuICAgICAgICAgICAgICAgIHRpbWVTbGljZTogdGhpcy50aW1lU2xpY2UsXHJcbiAgICAgICAgICAgICAgICBvblRpbWVTdGFtcDogdGhpcy5vblRpbWVTdGFtcFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVkaWFUeXBlLnZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhbWVkaWFUeXBlLnZpZGVvKSB7XHJcbiAgICAgICAgICAgIHJlY29yZGVyVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWVkaWFUeXBlLnZpZGVvID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRlclR5cGUgPSBtZWRpYVR5cGUudmlkZW87XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBuZXdTdHJlYW0gPSBtZWRpYVN0cmVhbTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc01lZGlhUmVjb3JkZXJDb21wYXRpYmxlKCkgJiYgISFtZWRpYVR5cGUuYXVkaW8gJiYgdHlwZW9mIG1lZGlhVHlwZS5hdWRpbyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZGVvVHJhY2sgPSBnZXRUcmFja3MobWVkaWFTdHJlYW0sICd2aWRlbycpWzBdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpcmVmb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdHJlYW0uYWRkVHJhY2sodmlkZW9UcmFjayk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRlclR5cGUgJiYgcmVjb3JkZXJUeXBlID09PSBXaGFtbXlSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXMgTk9UIHN1cHBvcnRzIHdlYnAtZW5jb2RpbmcgeWV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBGaXJlZm94IGRvIHN1cHBvcnRzIFdlYkFzc2VtYmx5UmVjb3JkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkZXJUeXBlID0gTWVkaWFTdHJlYW1SZWNvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0cmVhbS5hZGRUcmFjayh2aWRlb1RyYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyID0gbmV3IFJlY29yZFJUQyhuZXdTdHJlYW0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd2aWRlbycsXHJcbiAgICAgICAgICAgICAgICB2aWRlbzogdGhpcy52aWRlbyxcclxuICAgICAgICAgICAgICAgIGNhbnZhczogdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgICAgICBmcmFtZUludGVydmFsOiB0aGlzLmZyYW1lSW50ZXJ2YWwgfHwgMTAsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlTG9nczogdGhpcy5kaXNhYmxlTG9ncyxcclxuICAgICAgICAgICAgICAgIHJlY29yZGVyVHlwZTogcmVjb3JkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLnZpZGVvLFxyXG4gICAgICAgICAgICAgICAgdGltZVNsaWNlOiB0aGlzLnRpbWVTbGljZSxcclxuICAgICAgICAgICAgICAgIG9uVGltZVN0YW1wOiB0aGlzLm9uVGltZVN0YW1wLFxyXG4gICAgICAgICAgICAgICAgd29ya2VyUGF0aDogdGhpcy53b3JrZXJQYXRoLFxyXG4gICAgICAgICAgICAgICAgd2ViQXNzZW1ibHlQYXRoOiB0aGlzLndlYkFzc2VtYmx5UGF0aCxcclxuICAgICAgICAgICAgICAgIGZyYW1lUmF0ZTogdGhpcy5mcmFtZVJhdGUsIC8vIHVzZWQgYnkgV2ViQXNzZW1ibHlSZWNvcmRlcjsgdmFsdWVzOiB1c3VhbGx5IDMwOyBhY2NlcHRzIGFueS5cclxuICAgICAgICAgICAgICAgIGJpdHJhdGU6IHRoaXMuYml0cmF0ZSAvLyB1c2VkIGJ5IFdlYkFzc2VtYmx5UmVjb3JkZXI7IHZhbHVlczogMCB0byAxMDAwK1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVkaWFUeXBlLmF1ZGlvKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhbWVkaWFUeXBlLmF1ZGlvICYmICEhbWVkaWFUeXBlLnZpZGVvKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHZhciBpc1NpbmdsZVJlY29yZGVyID0gaXNNZWRpYVJlY29yZGVyQ29tcGF0aWJsZSgpID09PSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1lZGlhVHlwZS5hdWRpbyBpbnN0YW5jZW9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXIgJiYgISFtZWRpYVR5cGUudmlkZW8pIHtcclxuICAgICAgICAgICAgICAgIGlzU2luZ2xlUmVjb3JkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYVR5cGUuYXVkaW8gIT09IHRydWUgJiYgbWVkaWFUeXBlLnZpZGVvICE9PSB0cnVlICYmIG1lZGlhVHlwZS5hdWRpbyAhPT0gbWVkaWFUeXBlLnZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICBpc1NpbmdsZVJlY29yZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1NpbmdsZVJlY29yZGVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmF1ZGlvUmVjb3JkZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgc2VsZi52aWRlb1JlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnZpZGVvUmVjb3JkZXIuaW5pdFJlY29yZGVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYXVkaW9SZWNvcmRlci5pbml0UmVjb3JkZXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggcmVjb3JkZXJzIGFyZSByZWFkeSB0byByZWNvcmQgdGhpbmdzIGFjY3VyYXRlbHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52aWRlb1JlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXVkaW9SZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIW1lZGlhVHlwZS5naWYpIHtcclxuICAgICAgICAgICAgcmVjb3JkZXJUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUuZ2lmID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRlclR5cGUgPSBtZWRpYVR5cGUuZ2lmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2lmUmVjb3JkZXIgPSBuZXcgUmVjb3JkUlRDKG1lZGlhU3RyZWFtLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZ2lmJyxcclxuICAgICAgICAgICAgICAgIGZyYW1lUmF0ZTogdGhpcy5mcmFtZVJhdGUgfHwgMjAwLFxyXG4gICAgICAgICAgICAgICAgcXVhbGl0eTogdGhpcy5xdWFsaXR5IHx8IDEwLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUxvZ3M6IHRoaXMuZGlzYWJsZUxvZ3MsXHJcbiAgICAgICAgICAgICAgICByZWNvcmRlclR5cGU6IHJlY29yZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZS5naWZcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2lmUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcHMgcmVjb3JkaW5nLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW4gYWxsIGVuY29kZXJzIGZpbmlzaGVkIHRoZWlyIGpvYnMuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTVJlY29yZFJUQ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24ocmVjb3JkaW5nKXtcclxuICAgICAqICAgICB2YXIgYXVkaW9CbG9iID0gcmVjb3JkaW5nLmF1ZGlvO1xyXG4gICAgICogICAgIHZhciB2aWRlb0Jsb2IgPSByZWNvcmRpbmcudmlkZW87XHJcbiAgICAgKiAgICAgdmFyIGdpZkJsb2IgICA9IHJlY29yZGluZy5naWY7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdG9wUmVjb3JkaW5nID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1ZGlvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1JlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24oYmxvYlVSTCkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soYmxvYlVSTCwgJ2F1ZGlvJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvUmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbihibG9iVVJMKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhibG9iVVJMLCAndmlkZW8nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5naWZSZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmdpZlJlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24oYmxvYlVSTCkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soYmxvYlVSTCwgJ2dpZicpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF1c2VzIHJlY29yZGluZy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucGF1c2VSZWNvcmRpbmcoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5wYXVzZVJlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1ZGlvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1JlY29yZGVyLnBhdXNlUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlci5wYXVzZVJlY29yZGluZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2lmUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5naWZSZWNvcmRlci5wYXVzZVJlY29yZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN1bWVzIHJlY29yZGluZy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVzdW1lUmVjb3JkaW5nKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzdW1lUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvUmVjb3JkZXIucmVzdW1lUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdpZlJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2lmUmVjb3JkZXIucmVzdW1lUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGdldCBhbGwgcmVjb3JkZWQgYmxvYnMuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEFsbCByZWNvcmRlZCBibG9icyBhcmUgcGFzc2VkIGJhY2sgdG8gdGhlIFwiY2FsbGJhY2tcIiBmdW5jdGlvbi5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuZ2V0QmxvYihmdW5jdGlvbihyZWNvcmRpbmcpe1xyXG4gICAgICogICAgIHZhciBhdWRpb0Jsb2IgPSByZWNvcmRpbmcuYXVkaW87XHJcbiAgICAgKiAgICAgdmFyIHZpZGVvQmxvYiA9IHJlY29yZGluZy52aWRlbztcclxuICAgICAqICAgICB2YXIgZ2lmQmxvYiAgID0gcmVjb3JkaW5nLmdpZjtcclxuICAgICAqIH0pO1xyXG4gICAgICogLy8gb3JcclxuICAgICAqIHZhciBhdWRpb0Jsb2IgPSByZWNvcmRlci5nZXRCbG9iKCkuYXVkaW87XHJcbiAgICAgKiB2YXIgdmlkZW9CbG9iID0gcmVjb3JkZXIuZ2V0QmxvYigpLnZpZGVvO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmdldEJsb2IgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICBvdXRwdXQuYXVkaW8gPSB0aGlzLmF1ZGlvUmVjb3JkZXIuZ2V0QmxvYigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlkZW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICBvdXRwdXQudmlkZW8gPSB0aGlzLnZpZGVvUmVjb3JkZXIuZ2V0QmxvYigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2lmUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgb3V0cHV0LmdpZiA9IHRoaXMuZ2lmUmVjb3JkZXIuZ2V0QmxvYigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG91dHB1dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgYWxsIHJlY29yZGVyIGluc3RhbmNlcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuZGVzdHJveSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdWRpb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9SZWNvcmRlci5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9SZWNvcmRlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlci5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5naWZSZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmdpZlJlY29yZGVyLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5naWZSZWNvcmRlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGdldCBhbGwgcmVjb3JkZWQgYmxvYnMnIERhdGFVUkxzLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBBbGwgcmVjb3JkZWQgYmxvYnMnIERhdGFVUkxzIGFyZSBwYXNzZWQgYmFjayB0byB0aGUgXCJjYWxsYmFja1wiIGZ1bmN0aW9uLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5nZXREYXRhVVJMKGZ1bmN0aW9uKHJlY29yZGluZyl7XHJcbiAgICAgKiAgICAgdmFyIGF1ZGlvRGF0YVVSTCA9IHJlY29yZGluZy5hdWRpbztcclxuICAgICAqICAgICB2YXIgdmlkZW9EYXRhVVJMID0gcmVjb3JkaW5nLnZpZGVvO1xyXG4gICAgICogICAgIHZhciBnaWZEYXRhVVJMICAgPSByZWNvcmRpbmcuZ2lmO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2V0RGF0YVVSTCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5nZXRCbG9iKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAgICAgICAgaWYgKGJsb2IuYXVkaW8gJiYgYmxvYi52aWRlbykge1xyXG4gICAgICAgICAgICAgICAgZ2V0RGF0YVVSTChibG9iLmF1ZGlvLCBmdW5jdGlvbihfYXVkaW9EYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0RGF0YVVSTChibG9iLnZpZGVvLCBmdW5jdGlvbihfdmlkZW9EYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvOiBfYXVkaW9EYXRhVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW86IF92aWRlb0RhdGFVUkxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChibG9iLmF1ZGlvKSB7XHJcbiAgICAgICAgICAgICAgICBnZXREYXRhVVJMKGJsb2IuYXVkaW8sIGZ1bmN0aW9uKF9hdWRpb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvOiBfYXVkaW9EYXRhVVJMXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChibG9iLnZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICBnZXREYXRhVVJMKGJsb2IudmlkZW8sIGZ1bmN0aW9uKF92aWRlb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvOiBfdmlkZW9EYXRhVVJMXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXREYXRhVVJMKGJsb2IsIGNhbGxiYWNrMDApIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd2ViV29ya2VyID0gcHJvY2Vzc0luV2ViV29ya2VyKGZ1bmN0aW9uIHJlYWRGaWxlKF9ibG9iKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UobmV3IEZpbGVSZWFkZXJTeW5jKCkucmVhZEFzRGF0YVVSTChfYmxvYikpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgd2ViV29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2swMChldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgd2ViV29ya2VyLnBvc3RNZXNzYWdlKGJsb2IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrMDAoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzSW5XZWJXb3JrZXIoX2Z1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBibG9iID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbX2Z1bmN0aW9uLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAndGhpcy5vbm1lc3NhZ2UgPSAgZnVuY3Rpb24gKGVlZSkgeycgKyBfZnVuY3Rpb24ubmFtZSArICcoZWVlLmRhdGEpO30nXHJcbiAgICAgICAgICAgIF0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J1xyXG4gICAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iKTtcclxuICAgICAgICAgICAgdmFyIHVybDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBVUkwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBVUkw7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdlYmtpdFVSTCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IHdlYmtpdFVSTDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93ICdOZWl0aGVyIFVSTCBub3Igd2Via2l0VVJMIGRldGVjdGVkLic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdXJsLnJldm9rZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgcmV0dXJuIHdvcmtlcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gYXNrIHtAbGluayBNUmVjb3JkUlRDfSB0byB3cml0ZSBhbGwgcmVjb3JkZWQgYmxvYnMgaW50byBJbmRleGVkREIgc3RvcmFnZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIud3JpdGVUb0Rpc2soKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy53cml0ZVRvRGlzayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIFJlY29yZFJUQy53cml0ZVRvRGlzayh7XHJcbiAgICAgICAgICAgIGF1ZGlvOiB0aGlzLmF1ZGlvUmVjb3JkZXIsXHJcbiAgICAgICAgICAgIHZpZGVvOiB0aGlzLnZpZGVvUmVjb3JkZXIsXHJcbiAgICAgICAgICAgIGdpZjogdGhpcy5naWZSZWNvcmRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGludm9rZSBhIHNhdmUtYXMgZGlhbG9nIGZvciBhbGwgcmVjb3JkZWQgYmxvYnMuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIHthdWRpbzogJ2F1ZGlvLW5hbWUnLCB2aWRlbzogJ3ZpZGVvLW5hbWUnLCBnaWY6ICdnaWYtbmFtZSd9XHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTVJlY29yZFJUQ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnNhdmUoe1xyXG4gICAgICogICAgIGF1ZGlvOiAnYXVkaW8tZmlsZS1uYW1lJyxcclxuICAgICAqICAgICB2aWRlbzogJ3ZpZGVvLWZpbGUtbmFtZScsXHJcbiAgICAgKiAgICAgZ2lmICA6ICdnaWYtZmlsZS1uYW1lJ1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2F2ZSA9IGZ1bmN0aW9uKGFyZ3MpIHtcclxuICAgICAgICBhcmdzID0gYXJncyB8fCB7XHJcbiAgICAgICAgICAgIGF1ZGlvOiB0cnVlLFxyXG4gICAgICAgICAgICB2aWRlbzogdHJ1ZSxcclxuICAgICAgICAgICAgZ2lmOiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKCEhYXJncy5hdWRpbyAmJiB0aGlzLmF1ZGlvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1JlY29yZGVyLnNhdmUodHlwZW9mIGFyZ3MuYXVkaW8gPT09ICdzdHJpbmcnID8gYXJncy5hdWRpbyA6ICcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIWFyZ3MudmlkZW8gJiYgdGhpcy52aWRlb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlci5zYXZlKHR5cGVvZiBhcmdzLnZpZGVvID09PSAnc3RyaW5nJyA/IGFyZ3MudmlkZW8gOiAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWFyZ3MuZ2lmICYmIHRoaXMuZ2lmUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5naWZSZWNvcmRlci5zYXZlKHR5cGVvZiBhcmdzLmdpZiA9PT0gJ3N0cmluZycgPyBhcmdzLmdpZiA6ICcnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZ2V0IGFsbCByZWNvcmRlZCBibG9icyBmcm9tIEluZGV4ZWREQiBzdG9yYWdlLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtICdhbGwnIG9yICdhdWRpbycgb3IgJ3ZpZGVvJyBvciAnZ2lmJ1xyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBhbGwgc3RvcmVkIGJsb2JzLlxyXG4gKiBAbWV0aG9kXHJcbiAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAqIEBleGFtcGxlXHJcbiAqIE1SZWNvcmRSVEMuZ2V0RnJvbURpc2soJ2FsbCcsIGZ1bmN0aW9uKGRhdGFVUkwsIHR5cGUpe1xyXG4gKiAgICAgaWYodHlwZSA9PT0gJ2F1ZGlvJykgeyB9XHJcbiAqICAgICBpZih0eXBlID09PSAndmlkZW8nKSB7IH1cclxuICogICAgIGlmKHR5cGUgPT09ICdnaWYnKSAgIHsgfVxyXG4gKiB9KTtcclxuICovXHJcbk1SZWNvcmRSVEMuZ2V0RnJvbURpc2sgPSBSZWNvcmRSVEMuZ2V0RnJvbURpc2s7XHJcblxyXG4vKipcclxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gc3RvcmUgcmVjb3JkZWQgYmxvYnMgaW50byBJbmRleGVkREIgc3RvcmFnZS5cclxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSB7YXVkaW86IEJsb2IsIHZpZGVvOiBCbG9iLCBnaWY6IEJsb2J9XHJcbiAqIEBtZXRob2RcclxuICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICogQGV4YW1wbGVcclxuICogTVJlY29yZFJUQy53cml0ZVRvRGlzayh7XHJcbiAqICAgICBhdWRpbzogYXVkaW9CbG9iLFxyXG4gKiAgICAgdmlkZW86IHZpZGVvQmxvYixcclxuICogICAgIGdpZiAgOiBnaWZCbG9iXHJcbiAqIH0pO1xyXG4gKi9cclxuTVJlY29yZFJUQy53cml0ZVRvRGlzayA9IFJlY29yZFJUQy53cml0ZVRvRGlzaztcclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLk1SZWNvcmRSVEMgPSBNUmVjb3JkUlRDO1xyXG59XG5cclxudmFyIGJyb3dzZXJGYWtlVXNlckFnZW50ID0gJ0Zha2UvNS4wIChGYWtlT1MpIEFwcGxlV2ViS2l0LzEyMyAoS0hUTUwsIGxpa2UgR2Vja28pIEZha2UvMTIuMy40NTY3Ljg5IEZha2UvMTIzLjQ1JztcclxuXHJcbihmdW5jdGlvbih0aGF0KSB7XHJcbiAgICBpZiAoIXRoYXQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBnbG9iYWwubmF2aWdhdG9yID0ge1xyXG4gICAgICAgIHVzZXJBZ2VudDogYnJvd3NlckZha2VVc2VyQWdlbnQsXHJcbiAgICAgICAgZ2V0VXNlck1lZGlhOiBmdW5jdGlvbigpIHt9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghZ2xvYmFsLmNvbnNvbGUpIHtcclxuICAgICAgICBnbG9iYWwuY29uc29sZSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLmNvbnNvbGUubG9nID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZ2xvYmFsLmNvbnNvbGUuZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgZ2xvYmFsLmNvbnNvbGUuZXJyb3IgPSBnbG9iYWwuY29uc29sZS5sb2cgPSBnbG9iYWwuY29uc29sZS5sb2cgfHwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIGRvY3VtZW50OnRydWUgKi9cclxuICAgICAgICB0aGF0LmRvY3VtZW50ID0ge1xyXG4gICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQ6IHtcclxuICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50ID0gZG9jdW1lbnQuY2FwdHVyZVN0cmVhbSA9IGRvY3VtZW50Lm1vekNhcHR1cmVTdHJlYW0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHtcclxuICAgICAgICAgICAgICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcGxheTogZnVuY3Rpb24oKSB7fSxcclxuICAgICAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbigpIHt9LFxyXG4gICAgICAgICAgICAgICAgZHJhd0ltYWdlOiBmdW5jdGlvbigpIHt9LFxyXG4gICAgICAgICAgICAgICAgdG9EYXRhVVJMOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHt9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhhdC5IVE1MVmlkZW9FbGVtZW50ID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIGxvY2F0aW9uOnRydWUgKi9cclxuICAgICAgICB0aGF0LmxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICBwcm90b2NvbDogJ2ZpbGU6JyxcclxuICAgICAgICAgICAgaHJlZjogJycsXHJcbiAgICAgICAgICAgIGhhc2g6ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHNjcmVlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCBzY3JlZW46dHJ1ZSAqL1xyXG4gICAgICAgIHRoYXQuc2NyZWVuID0ge1xyXG4gICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAwXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCBzY3JlZW46dHJ1ZSAqL1xyXG4gICAgICAgIHRoYXQuVVJMID0ge1xyXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RVUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXZva2VPYmplY3RVUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKmdsb2JhbCB3aW5kb3c6dHJ1ZSAqL1xyXG4gICAgdGhhdC53aW5kb3cgPSBnbG9iYWw7XHJcbn0pKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogbnVsbCk7XG5cclxuLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cclxuLy8gQ3Jvc3MtQnJvd3Nlci1EZWNsYXJhdGlvbnMuanNcclxuXHJcbi8vIGFuaW1hdGlvbi1mcmFtZSB1c2VkIGluIFdlYk0gcmVjb3JkaW5nXHJcblxyXG4vKmpzaGludCAtVzA3OSAqL1xyXG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpZiAodHlwZW9mIHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6dHJ1ZSAqL1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1velJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6dHJ1ZSAqL1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG1velJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIHJlcXVlc3RBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gbXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gdmlhOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvMTU3OTY3MVxyXG4gICAgICAgIHZhciBsYXN0VGltZSA9IDA7XHJcblxyXG4gICAgICAgIC8qZ2xvYmFsIHJlcXVlc3RBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHZhciB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xyXG4gICAgICAgICAgICB2YXIgaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKTtcclxuICAgICAgICAgICAgfSwgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLypqc2hpbnQgLVcwNzkgKi9cclxudmFyIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG5pZiAodHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaWYgKHR5cGVvZiB3ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCBjYW5jZWxBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vekNhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIGNhbmNlbEFuaW1hdGlvbkZyYW1lOnRydWUgKi9cclxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSA9IG1vekNhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbXNDYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCBjYW5jZWxBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBtc0NhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgY2FuY2VsQW5pbWF0aW9uRnJhbWU6dHJ1ZSAqL1xyXG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBXZWJBdWRpbyBBUEkgcmVwcmVzZW50ZXJcclxudmFyIEF1ZGlvQ29udGV4dCA9IHdpbmRvdy5BdWRpb0NvbnRleHQ7XHJcblxyXG5pZiAodHlwZW9mIEF1ZGlvQ29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGlmICh0eXBlb2Ygd2Via2l0QXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIEF1ZGlvQ29udGV4dDp0cnVlICovXHJcbiAgICAgICAgQXVkaW9Db250ZXh0ID0gd2Via2l0QXVkaW9Db250ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgbW96QXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIEF1ZGlvQ29udGV4dDp0cnVlICovXHJcbiAgICAgICAgQXVkaW9Db250ZXh0ID0gbW96QXVkaW9Db250ZXh0O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKmpzaGludCAtVzA3OSAqL1xyXG52YXIgVVJMID0gd2luZG93LlVSTDtcclxuXHJcbmlmICh0eXBlb2YgVVJMID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2Via2l0VVJMICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgLypnbG9iYWwgVVJMOnRydWUgKi9cclxuICAgIFVSTCA9IHdlYmtpdFVSTDtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID09PSAndW5kZWZpbmVkJykgeyAvLyBtYXliZSB3aW5kb3cubmF2aWdhdG9yP1xyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEgPSBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID0gbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYTtcclxuICAgIH1cclxufVxyXG5cclxudmFyIGlzRWRnZSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpICE9PSAtMSAmJiAoISFuYXZpZ2F0b3IubXNTYXZlQmxvYiB8fCAhIW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKTtcclxudmFyIGlzT3BlcmEgPSAhIXdpbmRvdy5vcGVyYSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ09QUi8nKSAhPT0gLTE7XHJcbnZhciBpc0ZpcmVmb3ggPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTEgJiYgKCduZXRzY2FwZScgaW4gd2luZG93KSAmJiAvIHJ2Oi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxudmFyIGlzQ2hyb21lID0gKCFpc09wZXJhICYmICFpc0VkZ2UgJiYgISFuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhKSB8fCBpc0VsZWN0cm9uKCkgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZS8nKSAhPT0gLTE7XHJcblxyXG52YXIgaXNTYWZhcmkgPSAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuaWYgKGlzU2FmYXJpICYmICFpc0Nocm9tZSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0NyaU9TJykgIT09IC0xKSB7XHJcbiAgICBpc1NhZmFyaSA9IGZhbHNlO1xyXG4gICAgaXNDaHJvbWUgPSB0cnVlO1xyXG59XHJcblxyXG52YXIgTWVkaWFTdHJlYW0gPSB3aW5kb3cuTWVkaWFTdHJlYW07XHJcblxyXG5pZiAodHlwZW9mIE1lZGlhU3RyZWFtID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2Via2l0TWVkaWFTdHJlYW0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBNZWRpYVN0cmVhbSA9IHdlYmtpdE1lZGlhU3RyZWFtO1xyXG59XHJcblxyXG4vKmdsb2JhbCBNZWRpYVN0cmVhbTp0cnVlICovXHJcbmlmICh0eXBlb2YgTWVkaWFTdHJlYW0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAvLyBvdmVycmlkZSBcInN0b3BcIiBtZXRob2QgZm9yIGFsbCBicm93c2Vyc1xyXG4gICAgaWYgKHR5cGVvZiBNZWRpYVN0cmVhbS5wcm90b3R5cGUuc3RvcCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBNZWRpYVN0cmVhbS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRyYWNrcygpLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gYmVsb3cgZnVuY3Rpb24gdmlhOiBodHRwOi8vZ29vLmdsL0IzYWU4Y1xyXG4vKipcclxuICogUmV0dXJuIGh1bWFuLXJlYWRhYmxlIGZpbGUgc2l6ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGJ5dGVzIC0gUGFzcyBieXRlcyBhbmQgZ2V0IGZvcm1hdHRlZCBzdHJpbmcuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gZm9ybWF0dGVkIHN0cmluZ1xyXG4gKiBAZXhhbXBsZVxyXG4gKiBieXRlc1RvU2l6ZSgxMDI0KjEwMjQqNSkgPT09ICc1IEdCJ1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqL1xyXG5mdW5jdGlvbiBieXRlc1RvU2l6ZShieXRlcykge1xyXG4gICAgdmFyIGsgPSAxMDAwO1xyXG4gICAgdmFyIHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQiddO1xyXG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuICcwIEJ5dGVzJztcclxuICAgIH1cclxuICAgIHZhciBpID0gcGFyc2VJbnQoTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSksIDEwKTtcclxuICAgIHJldHVybiAoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9QcmVjaXNpb24oMykgKyAnICcgKyBzaXplc1tpXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QmxvYn0gZmlsZSAtIEZpbGUgb3IgQmxvYiBvYmplY3QuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSBPcHRpb25hbCBmaWxlIG5hbWUgZS5nLiBcIlJlY29yZGVkLVZpZGVvLndlYm1cIlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBpbnZva2VTYXZlQXNEaWFsb2coYmxvYiBvciBmaWxlLCBbb3B0aW9uYWxdIGZpbGVOYW1lKTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKi9cclxuZnVuY3Rpb24gaW52b2tlU2F2ZUFzRGlhbG9nKGZpbGUsIGZpbGVOYW1lKSB7XHJcbiAgICBpZiAoIWZpbGUpIHtcclxuICAgICAgICB0aHJvdyAnQmxvYiBvYmplY3QgaXMgcmVxdWlyZWQuJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZpbGUudHlwZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZpbGUudHlwZSA9ICd2aWRlby93ZWJtJztcclxuICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBmaWxlRXh0ZW5zaW9uID0gKGZpbGUudHlwZSB8fCAndmlkZW8vd2VibScpLnNwbGl0KCcvJylbMV07XHJcblxyXG4gICAgaWYgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICB2YXIgc3BsaXR0ZWQgPSBmaWxlTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgIGZpbGVOYW1lID0gc3BsaXR0ZWRbMF07XHJcbiAgICAgICAgZmlsZUV4dGVuc2lvbiA9IHNwbGl0dGVkWzFdO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBmaWxlRnVsbE5hbWUgPSAoZmlsZU5hbWUgfHwgKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDk5OTk5OTk5OTkpICsgODg4ODg4ODg4KSkgKyAnLicgKyBmaWxlRXh0ZW5zaW9uO1xyXG5cclxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGZpbGUsIGZpbGVGdWxsTmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYXZpZ2F0b3IubXNTYXZlQmxvYiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZUJsb2IoZmlsZSwgZmlsZUZ1bGxOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaHlwZXJsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgaHlwZXJsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgaHlwZXJsaW5rLmRvd25sb2FkID0gZmlsZUZ1bGxOYW1lO1xyXG5cclxuICAgIGh5cGVybGluay5zdHlsZSA9ICdkaXNwbGF5Om5vbmU7b3BhY2l0eTowO2NvbG9yOnRyYW5zcGFyZW50Oyc7XHJcbiAgICAoZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGh5cGVybGluayk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBoeXBlcmxpbmsuY2xpY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBoeXBlcmxpbmsuY2xpY2soKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaHlwZXJsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgICAgIGh5cGVybGluay5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHtcclxuICAgICAgICAgICAgdmlldzogd2luZG93LFxyXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxyXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaHlwZXJsaW5rLmhyZWYpO1xyXG59XHJcblxyXG4vKipcclxuICogZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2NoZXRvbi9pcy1lbGVjdHJvbi9ibG9iL21hc3Rlci9pbmRleC5qc1xyXG4gKiovXHJcbmZ1bmN0aW9uIGlzRWxlY3Ryb24oKSB7XHJcbiAgICAvLyBSZW5kZXJlciBwcm9jZXNzXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSAnb2JqZWN0JyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFpbiBwcm9jZXNzXHJcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09PSAnb2JqZWN0JyAmJiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24pIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlY3QgdGhlIHVzZXIgYWdlbnQgd2hlbiB0aGUgYG5vZGVJbnRlZ3JhdGlvbmAgb3B0aW9uIGlzIHNldCB0byB0cnVlXHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09ICdzdHJpbmcnICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWxlY3Ryb24nKSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUcmFja3Moc3RyZWFtLCBraW5kKSB7XHJcbiAgICBpZiAoIXN0cmVhbSB8fCAhc3RyZWFtLmdldFRyYWNrcykge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gKGtpbmQgfHwgJ2F1ZGlvJyk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0U3JjT2JqZWN0KHN0cmVhbSwgZWxlbWVudCkge1xyXG4gICAgaWYgKCdzcmNPYmplY3QnIGluIGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcclxuICAgIH0gZWxzZSBpZiAoJ21velNyY09iamVjdCcgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQubW96U3JjT2JqZWN0ID0gc3RyZWFtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBlbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QmxvYn0gZmlsZSAtIEZpbGUgb3IgQmxvYiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAqIEBleGFtcGxlXHJcbiAqIGdldFNlZWthYmxlQmxvYihibG9iIG9yIGZpbGUsIGNhbGxiYWNrKTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U2Vla2FibGVCbG9iKGlucHV0QmxvYiwgY2FsbGJhY2spIHtcclxuICAgIC8vIEVCTUwuanMgY29weXJpZ2h0cyBnb2VzIHRvOiBodHRwczovL2dpdGh1Yi5jb20vbGVnb2tpY2hpL3RzLWVibWxcclxuICAgIGlmICh0eXBlb2YgRUJNTCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBsaW5rOiBodHRwczovL3d3dy53ZWJydGMtZXhwZXJpbWVudC5jb20vRUJNTC5qcycpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZWFkZXIgPSBuZXcgRUJNTC5SZWFkZXIoKTtcclxuICAgIHZhciBkZWNvZGVyID0gbmV3IEVCTUwuRGVjb2RlcigpO1xyXG4gICAgdmFyIHRvb2xzID0gRUJNTC50b29scztcclxuXHJcbiAgICB2YXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICB2YXIgZWJtbEVsbXMgPSBkZWNvZGVyLmRlY29kZSh0aGlzLnJlc3VsdCk7XHJcbiAgICAgICAgZWJtbEVsbXMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkKGVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlYWRlci5zdG9wKCk7XHJcbiAgICAgICAgdmFyIHJlZmluZWRNZXRhZGF0YUJ1ZiA9IHRvb2xzLm1ha2VNZXRhZGF0YVNlZWthYmxlKHJlYWRlci5tZXRhZGF0YXMsIHJlYWRlci5kdXJhdGlvbiwgcmVhZGVyLmN1ZXMpO1xyXG4gICAgICAgIHZhciBib2R5ID0gdGhpcy5yZXN1bHQuc2xpY2UocmVhZGVyLm1ldGFkYXRhU2l6ZSk7XHJcbiAgICAgICAgdmFyIG5ld0Jsb2IgPSBuZXcgQmxvYihbcmVmaW5lZE1ldGFkYXRhQnVmLCBib2R5XSwge1xyXG4gICAgICAgICAgICB0eXBlOiAndmlkZW8vd2VibSdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2sobmV3QmxvYik7XHJcbiAgICB9O1xyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihpbnB1dEJsb2IpO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5pbnZva2VTYXZlQXNEaWFsb2cgPSBpbnZva2VTYXZlQXNEaWFsb2c7XHJcbiAgICBSZWNvcmRSVEMuZ2V0VHJhY2tzID0gZ2V0VHJhY2tzO1xyXG4gICAgUmVjb3JkUlRDLmdldFNlZWthYmxlQmxvYiA9IGdldFNlZWthYmxlQmxvYjtcclxuICAgIFJlY29yZFJUQy5ieXRlc1RvU2l6ZSA9IGJ5dGVzVG9TaXplO1xyXG4gICAgUmVjb3JkUlRDLmlzRWxlY3Ryb24gPSBpc0VsZWN0cm9uO1xyXG59XG5cclxuLy8gX19fX19fX19fXyAodXNlZCB0byBoYW5kbGUgc3R1ZmYgbGlrZSBodHRwOi8vZ29vLmdsL3htRTVlZykgaXNzdWUgIzEyOVxyXG4vLyBTdG9yYWdlLmpzXHJcblxyXG4vKipcclxuICogU3RvcmFnZSBpcyBhIHN0YW5kYWxvbmUgb2JqZWN0IHVzZWQgYnkge0BsaW5rIFJlY29yZFJUQ30gdG8gc3RvcmUgcmV1c2FibGUgb2JqZWN0cyBlLmcuIFwibmV3IEF1ZGlvQ29udGV4dFwiLlxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQGV4YW1wbGVcclxuICogU3RvcmFnZS5BdWRpb0NvbnRleHQgPT09IHdlYmtpdEF1ZGlvQ29udGV4dFxyXG4gKiBAcHJvcGVydHkge3dlYmtpdEF1ZGlvQ29udGV4dH0gQXVkaW9Db250ZXh0IC0gS2VlcHMgYSByZWZlcmVuY2UgdG8gQXVkaW9Db250ZXh0IG9iamVjdC5cclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKi9cclxuXHJcbnZhciBTdG9yYWdlID0ge307XHJcblxyXG5pZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFN0b3JhZ2UuQXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0O1xyXG59IGVsc2UgaWYgKHR5cGVvZiB3ZWJraXRBdWRpb0NvbnRleHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBTdG9yYWdlLkF1ZGlvQ29udGV4dCA9IHdlYmtpdEF1ZGlvQ29udGV4dDtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuU3RvcmFnZSA9IFN0b3JhZ2U7XHJcbn1cblxyXG5mdW5jdGlvbiBpc01lZGlhUmVjb3JkZXJDb21wYXRpYmxlKCkge1xyXG4gICAgaWYgKGlzRmlyZWZveCB8fCBpc1NhZmFyaSB8fCBpc0VkZ2UpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgblZlciA9IG5hdmlnYXRvci5hcHBWZXJzaW9uO1xyXG4gICAgdmFyIG5BZ3QgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgdmFyIGZ1bGxWZXJzaW9uID0gJycgKyBwYXJzZUZsb2F0KG5hdmlnYXRvci5hcHBWZXJzaW9uKTtcclxuICAgIHZhciBtYWpvclZlcnNpb24gPSBwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgMTApO1xyXG4gICAgdmFyIG5hbWVPZmZzZXQsIHZlck9mZnNldCwgaXg7XHJcblxyXG4gICAgaWYgKGlzQ2hyb21lIHx8IGlzT3BlcmEpIHtcclxuICAgICAgICB2ZXJPZmZzZXQgPSBuQWd0LmluZGV4T2YoJ0Nocm9tZScpO1xyXG4gICAgICAgIGZ1bGxWZXJzaW9uID0gbkFndC5zdWJzdHJpbmcodmVyT2Zmc2V0ICsgNyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHJpbSB0aGUgZnVsbFZlcnNpb24gc3RyaW5nIGF0IHNlbWljb2xvbi9zcGFjZSBpZiBwcmVzZW50XHJcbiAgICBpZiAoKGl4ID0gZnVsbFZlcnNpb24uaW5kZXhPZignOycpKSAhPT0gLTEpIHtcclxuICAgICAgICBmdWxsVmVyc2lvbiA9IGZ1bGxWZXJzaW9uLnN1YnN0cmluZygwLCBpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChpeCA9IGZ1bGxWZXJzaW9uLmluZGV4T2YoJyAnKSkgIT09IC0xKSB7XHJcbiAgICAgICAgZnVsbFZlcnNpb24gPSBmdWxsVmVyc2lvbi5zdWJzdHJpbmcoMCwgaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KCcnICsgZnVsbFZlcnNpb24sIDEwKTtcclxuXHJcbiAgICBpZiAoaXNOYU4obWFqb3JWZXJzaW9uKSkge1xyXG4gICAgICAgIGZ1bGxWZXJzaW9uID0gJycgKyBwYXJzZUZsb2F0KG5hdmlnYXRvci5hcHBWZXJzaW9uKTtcclxuICAgICAgICBtYWpvclZlcnNpb24gPSBwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYWpvclZlcnNpb24gPj0gNDk7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fXHJcbi8vIE1lZGlhU3RyZWFtUmVjb3JkZXIuanNcclxuXHJcbi8qKlxyXG4gKiBNZWRpYVN0cmVhbVJlY29yZGVyIGlzIGFuIGFic3RyYWN0aW9uIGxheWVyIGZvciB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL21lZGlhY2FwdHVyZS1yZWNvcmQvTWVkaWFSZWNvcmRlci5odG1sfE1lZGlhUmVjb3JkZXIgQVBJfS4gSXQgaXMgdXNlZCBieSB7QGxpbmsgUmVjb3JkUlRDfSB0byByZWNvcmQgTWVkaWFTdHJlYW0ocykgaW4gYm90aCBDaHJvbWUgYW5kIEZpcmVmb3guXHJcbiAqIEBzdW1tYXJ5IFJ1bnMgdG9wIG92ZXIge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtcmVjb3JkL01lZGlhUmVjb3JkZXIuaHRtbHxNZWRpYVJlY29yZGVyIEFQSX0uXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbnxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBjb25maWcgPSB7XHJcbiAqICAgICBtaW1lVHlwZTogJ3ZpZGVvL3dlYm0nLCAvLyB2cDgsIHZwOSwgaDI2NCwgbWt2LCBvcHVzL3ZvcmJpc1xyXG4gKiAgICAgYXVkaW9CaXRzUGVyU2Vjb25kIDogMjU2ICogOCAqIDEwMjQsXHJcbiAqICAgICB2aWRlb0JpdHNQZXJTZWNvbmQgOiAyNTYgKiA4ICogMTAyNCxcclxuICogICAgIGJpdHNQZXJTZWNvbmQ6IDI1NiAqIDggKiAxMDI0LCAgLy8gaWYgdGhpcyBpcyBwcm92aWRlZCwgc2tpcCBhYm92ZSB0d29cclxuICogICAgIGNoZWNrRm9ySW5hY3RpdmVUcmFja3M6IHRydWUsXHJcbiAqICAgICB0aW1lU2xpY2U6IDEwMDAsIC8vIGNvbmNhdGVuYXRlIGludGVydmFscyBiYXNlZCBibG9ic1xyXG4gKiAgICAgb25kYXRhYXZhaWxhYmxlOiBmdW5jdGlvbigpIHt9IC8vIGdldCBpbnRlcnZhbHMgYmFzZWQgYmxvYnNcclxuICogfVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgTWVkaWFTdHJlYW1SZWNvcmRlcihtZWRpYVN0cmVhbSwgY29uZmlnKTtcclxuICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICpcclxuICogICAgIC8vIG9yXHJcbiAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAqIH0pO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gTWVkaWFTdHJlYW0gb2JqZWN0IGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSBvciBnZW5lcmF0ZWQgdXNpbmcgY2FwdHVyZVN0cmVhbVVudGlsRW5kZWQgb3IgV2ViQXVkaW8gQVBJLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge2Rpc2FibGVMb2dzOnRydWUsIGluaXRDYWxsYmFjazogZnVuY3Rpb24sIG1pbWVUeXBlOiBcInZpZGVvL3dlYm1cIiwgdGltZVNsaWNlOiAxMDAwfVxyXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgZmlyc3QgYXJndW1lbnQgXCJNZWRpYVN0cmVhbVwiIGlzIG1pc3NpbmcuIEFsc28gdGhyb3dzIGVycm9yIGlmIFwiTWVkaWFSZWNvcmRlciBBUElcIiBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cclxuICovXHJcblxyXG5mdW5jdGlvbiBNZWRpYVN0cmVhbVJlY29yZGVyKG1lZGlhU3RyZWFtLCBjb25maWcpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICBpZiAodHlwZW9mIG1lZGlhU3RyZWFtID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRocm93ICdGaXJzdCBhcmd1bWVudCBcIk1lZGlhU3RyZWFtXCIgaXMgcmVxdWlyZWQuJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIE1lZGlhUmVjb3JkZXIgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhyb3cgJ1lvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBNZWRpYSBSZWNvcmRlciBBUEkuIFBsZWFzZSB0cnkgb3RoZXIgbW9kdWxlcyBlLmcuIFdoYW1teVJlY29yZGVyIG9yIFN0ZXJlb0F1ZGlvUmVjb3JkZXIuJztcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcgPSBjb25maWcgfHwge1xyXG4gICAgICAgIC8vIGJpdHNQZXJTZWNvbmQ6IDI1NiAqIDggKiAxMDI0LFxyXG4gICAgICAgIG1pbWVUeXBlOiAndmlkZW8vd2VibSdcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgaWYgKGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ3ZpZGVvJykubGVuZ3RoICYmIGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ2F1ZGlvJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBzdHJlYW07XHJcbiAgICAgICAgICAgIGlmICghIW5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xyXG4gICAgICAgICAgICAgICAgc3RyZWFtLmFkZFRyYWNrKGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ2F1ZGlvJylbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gd2Via2l0TWVkaWFTdHJlYW1cclxuICAgICAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbShnZXRUcmFja3MobWVkaWFTdHJlYW0sICdhdWRpbycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtZWRpYVN0cmVhbSA9IHN0cmVhbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLm1pbWVUeXBlIHx8IGNvbmZpZy5taW1lVHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignYXVkaW8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uZmlnLm1pbWVUeXBlID0gaXNDaHJvbWUgPyAnYXVkaW8vd2VibScgOiAnYXVkaW8vb2dnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcubWltZVR5cGUgJiYgY29uZmlnLm1pbWVUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gJ2F1ZGlvL29nZycgJiYgISFuYXZpZ2F0b3IubW96R2V0VXNlck1lZGlhKSB7XHJcbiAgICAgICAgICAgIC8vIGZvcmNpbmcgYmV0dGVyIGNvZGVjcyBvbiBGaXJlZm94ICh2aWEgIzE2NilcclxuICAgICAgICAgICAgY29uZmlnLm1pbWVUeXBlID0gJ2F1ZGlvL29nZyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBhcnJheU9mQmxvYnMgPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYXJyYXkgb2YgYmxvYnMuIFVzZSBvbmx5IHdpdGggXCJ0aW1lU2xpY2VcIi4gSXRzIHVzZWZ1bCB0byBwcmV2aWV3IHJlY29yZGluZyBhbnl0aW1lLCB3aXRob3V0IHVzaW5nIHRoZSBcInN0b3BcIiBtZXRob2QuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHZhciBhcnJheU9mQmxvYnMgPSByZWNvcmRlci5nZXRBcnJheU9mQmxvYnMoKTtcclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhcnJheSBvZiByZWNvcmRlZCBibG9icy5cclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRBcnJheU9mQmxvYnMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gYXJyYXlPZkJsb2JzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlY29yZHMgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlY29yZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0c1xyXG4gICAgICAgIHNlbGYuYmxvYiA9IG51bGw7XHJcbiAgICAgICAgc2VsZi5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICAgIHNlbGYudGltZXN0YW1wcyA9IFtdO1xyXG4gICAgICAgIGFsbFN0YXRlcyA9IFtdO1xyXG4gICAgICAgIGFycmF5T2ZCbG9icyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgcmVjb3JkZXJIaW50cyA9IGNvbmZpZztcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Bhc3NpbmcgZm9sbG93aW5nIGNvbmZpZyBvdmVyIE1lZGlhUmVjb3JkZXIgQVBJLicsIHJlY29yZGVySGludHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgLy8gbWFuZGF0b3J5IHRvIG1ha2Ugc3VyZSBGaXJlZm94IGRvZXNuJ3QgZmFpbHMgdG8gcmVjb3JkIHN0cmVhbXMgMy00IHRpbWVzIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBwYWdlLlxyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Nocm9tZSAmJiAhaXNNZWRpYVJlY29yZGVyQ29tcGF0aWJsZSgpKSB7XHJcbiAgICAgICAgICAgIC8vIHRvIHN1cHBvcnQgdmlkZW8tb25seSByZWNvcmRpbmcgb24gc3RhYmxlXHJcbiAgICAgICAgICAgIHJlY29yZGVySGludHMgPSAndmlkZW8vdnA4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQgPT09ICdmdW5jdGlvbicgJiYgcmVjb3JkZXJIaW50cy5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICBpZiAoIU1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKHJlY29yZGVySGludHMubWltZVR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWVkaWFSZWNvcmRlciBBUEkgc2VlbXMgdW5hYmxlIHRvIHJlY29yZCBtaW1lVHlwZTonLCByZWNvcmRlckhpbnRzLm1pbWVUeXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZWNvcmRlckhpbnRzLm1pbWVUeXBlID0gY29uZmlnLnR5cGUgPT09ICdhdWRpbycgPyAnYXVkaW8vd2VibScgOiAndmlkZW8vd2VibSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHVzaW5nIE1lZGlhUmVjb3JkZXIgQVBJIGhlcmVcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIobWVkaWFTdHJlYW0sIHJlY29yZGVySGludHMpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVzZXRcclxuICAgICAgICAgICAgY29uZmlnLm1pbWVUeXBlID0gcmVjb3JkZXJIaW50cy5taW1lVHlwZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZS1iYXNlZCBmYWxsYmFja1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIobWVkaWFTdHJlYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gb2xkIGhhY2s/XHJcbiAgICAgICAgaWYgKHJlY29yZGVySGludHMubWltZVR5cGUgJiYgIU1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkICYmICdjYW5SZWNvcmRNaW1lVHlwZScgaW4gbWVkaWFSZWNvcmRlciAmJiBtZWRpYVJlY29yZGVyLmNhblJlY29yZE1pbWVUeXBlKHJlY29yZGVySGludHMubWltZVR5cGUpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNZWRpYVJlY29yZGVyIEFQSSBzZWVtcyB1bmFibGUgdG8gcmVjb3JkIG1pbWVUeXBlOicsIHJlY29yZGVySGludHMubWltZVR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEaXNwYXRjaGluZyBPbkRhdGFBdmFpbGFibGUgSGFuZGxlclxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxTdGF0ZXMucHVzaCgnb25kYXRhYXZhaWxhYmxlOiAnICsgYnl0ZXNUb1NpemUoZS5kYXRhLnNpemUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudGltZVNsaWNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUuZGF0YSAmJiBlLmRhdGEuc2l6ZSAmJiBlLmRhdGEuc2l6ZSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5T2ZCbG9icy5wdXNoKGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9uZGF0YWF2YWlsYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcnZhbHMgYmFzZWQgYmxvYnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBjb25maWcuZ2V0TmF0aXZlQmxvYiA/IGUuZGF0YSA6IG5ldyBCbG9iKFtlLmRhdGFdLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBnZXRNaW1lVHlwZShyZWNvcmRlckhpbnRzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm9uZGF0YWF2YWlsYWJsZShibG9iKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZS5kYXRhIHx8ICFlLmRhdGEuc2l6ZSB8fCBlLmRhdGEuc2l6ZSA8IDEwMCB8fCBzZWxmLmJsb2IpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHN0b3BSZWNvcmRpbmcgYWx3YXlzIGdldHRpbmcgZmlyZWRcclxuICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgdGhlcmUgaXMgaW52YWxpZCBkYXRhXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5yZWNvcmRpbmdDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkaW5nQ2FsbGJhY2sobmV3IEJsb2IoW10sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZ2V0TWltZVR5cGUocmVjb3JkZXJIaW50cylcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRpbmdDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYuYmxvYiA9IGNvbmZpZy5nZXROYXRpdmVCbG9iID8gZS5kYXRhIDogbmV3IEJsb2IoW2UuZGF0YV0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGdldE1pbWVUeXBlKHJlY29yZGVySGludHMpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGYucmVjb3JkaW5nQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkaW5nQ2FsbGJhY2soc2VsZi5ibG9iKTtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkaW5nQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbWVkaWFSZWNvcmRlci5vbnN0YXJ0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGFsbFN0YXRlcy5wdXNoKCdzdGFydGVkJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbWVkaWFSZWNvcmRlci5vbnBhdXNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGFsbFN0YXRlcy5wdXNoKCdwYXVzZWQnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLm9ucmVzdW1lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGFsbFN0YXRlcy5wdXNoKCdyZXN1bWVkJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbWVkaWFSZWNvcmRlci5vbnN0b3AgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgYWxsU3RhdGVzLnB1c2goJ3N0b3BwZWQnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLm9uZXJyb3IgPSBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZXJyb3IubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubmFtZSA9ICdVbmtub3duRXJyb3InO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhbGxTdGF0ZXMucHVzaCgnZXJyb3I6ICcgKyBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgLy8gdmlhOiBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLXJlY29yZC9NZWRpYVJlY29yZGVyLmh0bWwjZXhjZXB0aW9uLXN1bW1hcnlcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5uYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdpbnZhbGlkc3RhdGUnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgTWVkaWFSZWNvcmRlciBpcyBub3QgaW4gYSBzdGF0ZSBpbiB3aGljaCB0aGUgcHJvcG9zZWQgb3BlcmF0aW9uIGlzIGFsbG93ZWQgdG8gYmUgZXhlY3V0ZWQuJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5uYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdub3RzdXBwb3J0ZWQnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdNSU1FIHR5cGUgKCcsIHJlY29yZGVySGludHMubWltZVR5cGUsICcpIGlzIG5vdCBzdXBwb3J0ZWQuJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5uYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdzZWN1cml0eScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01lZGlhUmVjb3JkZXIgc2VjdXJpdHkgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb2xkZXIgY29kZSBiZWxvd1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ091dE9mTWVtb3J5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBVQSBoYXMgZXhoYXVzZWQgdGhlIGF2YWlsYWJsZSBtZW1vcnkuIFVzZXIgYWdlbnRzIFNIT1VMRCBwcm92aWRlIGFzIG11Y2ggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBpbiB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnSWxsZWdhbFN0cmVhbU1vZGlmaWNhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBIG1vZGlmaWNhdGlvbiB0byB0aGUgc3RyZWFtIGhhcyBvY2N1cnJlZCB0aGF0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gY29udGludWUgcmVjb3JkaW5nLiBBbiBleGFtcGxlIHdvdWxkIGJlIHRoZSBhZGRpdGlvbiBvZiBhIFRyYWNrIHdoaWxlIHJlY29yZGluZyBpcyBvY2N1cnJpbmcuIFVzZXIgYWdlbnRzIFNIT1VMRCBwcm92aWRlIGFzIG11Y2ggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBpbiB0aGUgbWVzc2FnZSBhdHRyaWJ1dGUuJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnT3RoZXJSZWNvcmRpbmdFcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVc2VkIGZvciBhbiBmYXRhbCBlcnJvciBvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBhYm92ZS4gVXNlciBhZ2VudHMgU0hPVUxEIHByb3ZpZGUgYXMgbXVjaCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIGluIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZS4nLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgPT09ICdHZW5lcmljRXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFVBIGNhbm5vdCBwcm92aWRlIHRoZSBjb2RlYyBvciByZWNvcmRpbmcgb3B0aW9uIHRoYXQgaGFzIGJlZW4gcmVxdWVzdGVkLicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTWVkaWFSZWNvcmRlciBFcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgKGZ1bmN0aW9uKGxvb3Blcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLm1hbnVhbGx5U3RvcHBlZCAmJiBtZWRpYVJlY29yZGVyICYmIG1lZGlhUmVjb3JkZXIuc3RhdGUgPT09ICdpbmFjdGl2ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29uZmlnLnRpbWVzbGljZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMTAgbWludXRlcywgZW5vdWdoP1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuc3RhcnQoMTAgKiA2MCAqIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3BlciwgMTAwMCk7XHJcbiAgICAgICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFSZWNvcmRlci5zdGF0ZSAhPT0gJ2luYWN0aXZlJyAmJiBtZWRpYVJlY29yZGVyLnN0YXRlICE9PSAnc3RvcHBlZCcpIHtcclxuICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuc3RvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudGltZVNsaWNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdGFydChjb25maWcudGltZVNsaWNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkZWZhdWx0IGlzIDYwIG1pbnV0ZXM7IGVub3VnaD9cclxuICAgICAgICAgICAgLy8gdXNlIGNvbmZpZyA9PiB7dGltZVNsaWNlOiAxMDAwfSBvdGhlcndpc2VcclxuXHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuc3RhcnQoMy42ZSs2KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5pbml0Q2FsbGJhY2soKTsgLy8gb2xkIGNvZGVcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByb3BlcnR5IHtBcnJheX0gdGltZXN0YW1wcyAtIEFycmF5IG9mIHRpbWUgc3RhbXBzXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGNvbnNvbGUubG9nKHJlY29yZGVyLnRpbWVzdGFtcHMpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnRpbWVzdGFtcHMgPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVUaW1lU3RhbXAoKSB7XHJcbiAgICAgICAgc2VsZi50aW1lc3RhbXBzLnB1c2gobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vblRpbWVTdGFtcCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25maWcub25UaW1lU3RhbXAoc2VsZi50aW1lc3RhbXBzW3NlbGYudGltZXN0YW1wcy5sZW5ndGggLSAxXSwgc2VsZi50aW1lc3RhbXBzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0TWltZVR5cGUoc2Vjb25kT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIgJiYgbWVkaWFSZWNvcmRlci5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVkaWFSZWNvcmRlci5taW1lVHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWNvbmRPYmplY3QubWltZVR5cGUgfHwgJ3ZpZGVvL3dlYm0nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcHMgcmVjb3JkaW5nIE1lZGlhU3RyZWFtLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiwgdGhhdCBpcyB1c2VkIHRvIHBhc3MgcmVjb3JkZWQgYmxvYiBiYWNrIHRvIHRoZSBjYWxsZWUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XHJcblxyXG4gICAgICAgIHNlbGYubWFudWFsbHlTdG9wcGVkID0gdHJ1ZTsgLy8gdXNlZCBpbnNpZGUgdGhlIG1lZGlhUmVjb3JkZXIub25lcnJvclxyXG5cclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdDYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlci5zdGF0ZSA9PT0gJ3JlY29yZGluZycpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy50aW1lU2xpY2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmJsb2IgPSBuZXcgQmxvYihhcnJheU9mQmxvYnMsIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBnZXRNaW1lVHlwZShjb25maWcpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlY29yZGluZ0NhbGxiYWNrKHNlbGYuYmxvYik7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnBhdXNlKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIuc3RhdGUgPT09ICdyZWNvcmRpbmcnKSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlci5zdGF0ZSA9PT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIGN1cnJlbnRseSByZWNvcmRlZCBkYXRhLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmNsZWFyUmVjb3JkZWREYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIgJiYgbWVkaWFSZWNvcmRlci5zdGF0ZSA9PT0gJ3JlY29yZGluZycpIHtcclxuICAgICAgICAgICAgc2VsZi5zdG9wKGNsZWFyUmVjb3JkZWREYXRhQ0IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xlYXJSZWNvcmRlZERhdGFDQigpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBjbGVhclJlY29yZGVkRGF0YUNCKCkge1xyXG4gICAgICAgIGFycmF5T2ZCbG9icyA9IFtdO1xyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIgPSBudWxsO1xyXG4gICAgICAgIHNlbGYudGltZXN0YW1wcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlZmVyZW5jZSB0byBcIk1lZGlhUmVjb3JkZXJcIiBvYmplY3RcclxuICAgIHZhciBtZWRpYVJlY29yZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWNjZXNzIHRvIG5hdGl2ZSBNZWRpYVJlY29yZGVyIEFQSVxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHZhciBpbnRlcm5hbCA9IHJlY29yZGVyLmdldEludGVybmFsUmVjb3JkZXIoKTtcclxuICAgICAqIGludGVybmFsLm9uZGF0YWF2YWlsYWJsZSA9IGZ1bmN0aW9uKCkge307IC8vIG92ZXJyaWRlXHJcbiAgICAgKiBpbnRlcm5hbC5zdHJlYW0sIGludGVybmFsLm9ucGF1c2UsIGludGVybmFsLm9uc3RvcCwgZXRjLlxyXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBpbnRlcm5hbCByZWNvcmRpbmcgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICB0aGlzLmdldEludGVybmFsUmVjb3JkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWVkaWFSZWNvcmRlcjtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gaXNNZWRpYVN0cmVhbUFjdGl2ZSgpIHtcclxuICAgICAgICBpZiAoJ2FjdGl2ZScgaW4gbWVkaWFTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKCFtZWRpYVN0cmVhbS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoJ2VuZGVkJyBpbiBtZWRpYVN0cmVhbSkgeyAvLyBvbGQgaGFja1xyXG4gICAgICAgICAgICBpZiAobWVkaWFTdHJlYW0uZW5kZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcm9wZXJ0eSB7QmxvYn0gYmxvYiAtIFJlY29yZGVkIGRhdGEgYXMgXCJCbG9iXCIgb2JqZWN0LlxyXG4gICAgICogQG1lbWJlcm9mIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKCkge1xyXG4gICAgICogICAgIHZhciBibG9iID0gcmVjb3JkZXIuYmxvYjtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmJsb2IgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBNZWRpYVJlY29yZGVyIHJlYWRvbmx5IHN0YXRlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB2YXIgc3RhdGUgPSByZWNvcmRlci5nZXRTdGF0ZSgpO1xyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gUmV0dXJucyByZWNvcmRpbmcgc3RhdGUuXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdpbmFjdGl2ZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVkaWFSZWNvcmRlci5zdGF0ZSB8fCAnaW5hY3RpdmUnO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBsaXN0IG9mIGFsbCByZWNvcmRpbmcgc3RhdGVzXHJcbiAgICB2YXIgYWxsU3RhdGVzID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgTWVkaWFSZWNvcmRlciBhbGwgcmVjb3JkaW5nIHN0YXRlcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdmFyIHN0YXRlID0gcmVjb3JkZXIuZ2V0QWxsU3RhdGVzKCk7XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYWxsIHJlY29yZGluZyBzdGF0ZXNcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRBbGxTdGF0ZXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gYWxsU3RhdGVzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBpZiBhbnkgVHJhY2sgd2l0aGluIHRoZSBNZWRpYVN0cmVhbSBpcyBtdXRlZCBvciBub3QgZW5hYmxlZCBhdCBhbnkgdGltZSwgXHJcbiAgICAvLyB0aGUgYnJvd3NlciB3aWxsIG9ubHkgcmVjb3JkIGJsYWNrIGZyYW1lcyBcclxuICAgIC8vIG9yIHNpbGVuY2Ugc2luY2UgdGhhdCBpcyB0aGUgY29udGVudCBwcm9kdWNlZCBieSB0aGUgVHJhY2tcclxuICAgIC8vIHNvIHdlIG5lZWQgdG8gc3RvcFJlY29yZGluZyBhcyBzb29uIGFzIGFueSBzaW5nbGUgdHJhY2sgZW5kcy5cclxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNoZWNrRm9ySW5hY3RpdmVUcmFja3MgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY29uZmlnLmNoZWNrRm9ySW5hY3RpdmVUcmFja3MgPSBmYWxzZTsgLy8gZGlzYWJsZSB0byBtaW5pbWl6ZSBDUFUgdXNhZ2VcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgLy8gdGhpcyBtZXRob2QgY2hlY2tzIGlmIG1lZGlhIHN0cmVhbSBpcyBzdG9wcGVkXHJcbiAgICAvLyBvciBpZiBhbnkgdHJhY2sgaXMgZW5kZWQuXHJcbiAgICAoZnVuY3Rpb24gbG9vcGVyKCkge1xyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlciB8fCBjb25maWcuY2hlY2tGb3JJbmFjdGl2ZVRyYWNrcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTWVkaWFTdHJlYW1BY3RpdmUoKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNZWRpYVN0cmVhbSBzZWVtcyBzdG9wcGVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuc3RvcCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KGxvb3BlciwgMTAwMCk7IC8vIGNoZWNrIGV2ZXJ5IHNlY29uZFxyXG4gICAgfSkoKTtcclxuXHJcbiAgICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgICB0aGlzLm5hbWUgPSAnTWVkaWFTdHJlYW1SZWNvcmRlcic7XHJcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH07XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLk1lZGlhU3RyZWFtUmVjb3JkZXIgPSBNZWRpYVN0cmVhbVJlY29yZGVyO1xyXG59XG5cclxuLy8gc291cmNlIGNvZGUgZnJvbTogaHR0cDovL3R5cGVkYXJyYXkub3JnL3dwLWNvbnRlbnQvcHJvamVjdHMvV2ViQXVkaW9SZWNvcmRlci9zY3JpcHQuanNcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkaWFtb25kL1JlY29yZGVyanMjbGljZW5zZS1taXRcclxuLy8gX19fX19fX19fX19fX19fX19fX19fX1xyXG4vLyBTdGVyZW9BdWRpb1JlY29yZGVyLmpzXHJcblxyXG4vKipcclxuICogU3RlcmVvQXVkaW9SZWNvcmRlciBpcyBhIHN0YW5kYWxvbmUgY2xhc3MgdXNlZCBieSB7QGxpbmsgUmVjb3JkUlRDfSB0byBicmluZyBcInN0ZXJlb1wiIGF1ZGlvLXJlY29yZGluZyBpbiBjaHJvbWUuXHJcbiAqIEBzdW1tYXJ5IEphdmFTY3JpcHQgc3RhbmRhbG9uZSBvYmplY3QgZm9yIHN0ZXJlbyBhdWRpbyByZWNvcmRpbmcuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgU3RlcmVvQXVkaW9SZWNvcmRlcihNZWRpYVN0cmVhbSwge1xyXG4gKiAgICAgc2FtcGxlUmF0ZTogNDQxMDAsXHJcbiAqICAgICBidWZmZXJTaXplOiA0MDk2XHJcbiAqIH0pO1xyXG4gKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gKiB9KTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBtZWRpYVN0cmVhbSAtIE1lZGlhU3RyZWFtIG9iamVjdCBmZXRjaGVkIHVzaW5nIGdldFVzZXJNZWRpYSBBUEkgb3IgZ2VuZXJhdGVkIHVzaW5nIGNhcHR1cmVTdHJlYW1VbnRpbEVuZGVkIG9yIFdlYkF1ZGlvIEFQSS5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIHtzYW1wbGVSYXRlOiA0NDEwMCwgYnVmZmVyU2l6ZTogNDA5NiwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiAxLCBldGMufVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIFN0ZXJlb0F1ZGlvUmVjb3JkZXIobWVkaWFTdHJlYW0sIGNvbmZpZykge1xyXG4gICAgaWYgKCFnZXRUcmFja3MobWVkaWFTdHJlYW0sICdhdWRpbycpLmxlbmd0aCkge1xyXG4gICAgICAgIHRocm93ICdZb3VyIHN0cmVhbSBoYXMgbm8gYXVkaW8gdHJhY2tzLic7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyB2YXJpYWJsZXNcclxuICAgIHZhciBsZWZ0Y2hhbm5lbCA9IFtdO1xyXG4gICAgdmFyIHJpZ2h0Y2hhbm5lbCA9IFtdO1xyXG4gICAgdmFyIHJlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgdmFyIHJlY29yZGluZ0xlbmd0aCA9IDA7XHJcbiAgICB2YXIganNBdWRpb05vZGU7XHJcblxyXG4gICAgdmFyIG51bWJlck9mQXVkaW9DaGFubmVscyA9IDI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgc2FtcGxlIHJhdGVzIHN1Y2ggYXMgOEsgb3IgMTZLLiBSZWZlcmVuY2U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4OTc3MTM2LzU1MjE4MlxyXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGRlc2lyZWRTYW1wUmF0ZSAtIERlc2lyZWQgQml0cyBwZXIgc2FtcGxlICogMTAwMFxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHZhciByZWNvcmRlciA9IFN0ZXJlb0F1ZGlvUmVjb3JkZXIobWVkaWFTdHJlYW0sIHtcclxuICAgICAqICAgZGVzaXJlZFNhbXBSYXRlOiAxNiAqIDEwMDAgLy8gYml0cy1wZXItc2FtcGxlICogMTAwMFxyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHZhciBkZXNpcmVkU2FtcFJhdGUgPSBjb25maWcuZGVzaXJlZFNhbXBSYXRlO1xyXG5cclxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuICAgIGlmIChjb25maWcubGVmdENoYW5uZWwgPT09IHRydWUpIHtcclxuICAgICAgICBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcubnVtYmVyT2ZBdWRpb0NoYW5uZWxzID09PSAxKSB7XHJcbiAgICAgICAgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW51bWJlck9mQXVkaW9DaGFubmVscyB8fCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPCAxKSB7XHJcbiAgICAgICAgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzID0gMjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdTdGVyZW9BdWRpb1JlY29yZGVyIGlzIHNldCB0byByZWNvcmQgbnVtYmVyIG9mIGNoYW5uZWxzOiAnICsgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBhbnkgVHJhY2sgd2l0aGluIHRoZSBNZWRpYVN0cmVhbSBpcyBtdXRlZCBvciBub3QgZW5hYmxlZCBhdCBhbnkgdGltZSwgXHJcbiAgICAvLyB0aGUgYnJvd3NlciB3aWxsIG9ubHkgcmVjb3JkIGJsYWNrIGZyYW1lcyBcclxuICAgIC8vIG9yIHNpbGVuY2Ugc2luY2UgdGhhdCBpcyB0aGUgY29udGVudCBwcm9kdWNlZCBieSB0aGUgVHJhY2tcclxuICAgIC8vIHNvIHdlIG5lZWQgdG8gc3RvcFJlY29yZGluZyBhcyBzb29uIGFzIGFueSBzaW5nbGUgdHJhY2sgZW5kcy5cclxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNoZWNrRm9ySW5hY3RpdmVUcmFja3MgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY29uZmlnLmNoZWNrRm9ySW5hY3RpdmVUcmFja3MgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzTWVkaWFTdHJlYW1BY3RpdmUoKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5jaGVja0ZvckluYWN0aXZlVHJhY2tzID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAvLyBhbHdheXMgcmV0dXJuIFwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCdhY3RpdmUnIGluIG1lZGlhU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmICghbWVkaWFTdHJlYW0uYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCdlbmRlZCcgaW4gbWVkaWFTdHJlYW0pIHsgLy8gb2xkIGhhY2tcclxuICAgICAgICAgICAgaWYgKG1lZGlhU3RyZWFtLmVuZGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZWNvcmRzIE1lZGlhU3RyZWFtLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZWNvcmQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoaXNNZWRpYVN0cmVhbUFjdGl2ZSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aHJvdyAnUGxlYXNlIG1ha2Ugc3VyZSBNZWRpYVN0cmVhbSBpcyBhY3RpdmUuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc2V0VmFyaWFibGVzKCk7XHJcblxyXG4gICAgICAgIGlzQXVkaW9Qcm9jZXNzU3RhcnRlZCA9IGlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgcmVjb3JkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudGltZVNsaWNlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBsb29wZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIG1lcmdlTGVmdFJpZ2h0QnVmZmVycyhjb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gbWVyZ2VBdWRpb0J1ZmZlcnMoY29uZmlnLCBjYikge1xyXG4gICAgICAgICAgICB2YXIgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzID0gY29uZmlnLm51bWJlck9mQXVkaW9DaGFubmVscztcclxuXHJcbiAgICAgICAgICAgIC8vIHRvZG86IFwic2xpY2UoMClcIiAtLS0gaXMgaXQgY2F1c2VzIGxvb3A/IFNob3VsZCBiZSByZW1vdmVkP1xyXG4gICAgICAgICAgICB2YXIgbGVmdEJ1ZmZlcnMgPSBjb25maWcubGVmdEJ1ZmZlcnMuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgIHZhciByaWdodEJ1ZmZlcnMgPSBjb25maWcucmlnaHRCdWZmZXJzLnNsaWNlKDApO1xyXG4gICAgICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IGNvbmZpZy5zYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICB2YXIgaW50ZXJuYWxJbnRlcmxlYXZlZExlbmd0aCA9IGNvbmZpZy5pbnRlcm5hbEludGVybGVhdmVkTGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgZGVzaXJlZFNhbXBSYXRlID0gY29uZmlnLmRlc2lyZWRTYW1wUmF0ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGxlZnRCdWZmZXJzID0gbWVyZ2VCdWZmZXJzKGxlZnRCdWZmZXJzLCBpbnRlcm5hbEludGVybGVhdmVkTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0QnVmZmVycyA9IG1lcmdlQnVmZmVycyhyaWdodEJ1ZmZlcnMsIGludGVybmFsSW50ZXJsZWF2ZWRMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZXNpcmVkU2FtcFJhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0QnVmZmVycyA9IGludGVycG9sYXRlQXJyYXkobGVmdEJ1ZmZlcnMsIGRlc2lyZWRTYW1wUmF0ZSwgc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRCdWZmZXJzID0gaW50ZXJwb2xhdGVBcnJheShyaWdodEJ1ZmZlcnMsIGRlc2lyZWRTYW1wUmF0ZSwgc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGxlZnRCdWZmZXJzID0gbWVyZ2VCdWZmZXJzKGxlZnRCdWZmZXJzLCBpbnRlcm5hbEludGVybGVhdmVkTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZFNhbXBSYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEJ1ZmZlcnMgPSBpbnRlcnBvbGF0ZUFycmF5KGxlZnRCdWZmZXJzLCBkZXNpcmVkU2FtcFJhdGUsIHNhbXBsZVJhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgc2FtcGxlIHJhdGUgYXMgZGVzaXJlZCBzYW1wbGUgcmF0ZVxyXG4gICAgICAgICAgICBpZiAoZGVzaXJlZFNhbXBSYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBzYW1wbGVSYXRlID0gZGVzaXJlZFNhbXBSYXRlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBmb3IgY2hhbmdpbmcgdGhlIHNhbXBsaW5nIHJhdGUsIHJlZmVyZW5jZTpcclxuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjg5NzcxMzYvNTUyMTgyXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGludGVycG9sYXRlQXJyYXkoZGF0YSwgbmV3U2FtcGxlUmF0ZSwgb2xkU2FtcGxlUmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpdENvdW50ID0gTWF0aC5yb3VuZChkYXRhLmxlbmd0aCAqIChuZXdTYW1wbGVSYXRlIC8gb2xkU2FtcGxlUmF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld0RhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBzcHJpbmdGYWN0b3IgPSBOdW1iZXIoKGRhdGEubGVuZ3RoIC0gMSkgLyAoZml0Q291bnQgLSAxKSk7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhWzBdID0gZGF0YVswXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZml0Q291bnQgLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gaSAqIHNwcmluZ0ZhY3RvcjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYmVmb3JlID0gTnVtYmVyKE1hdGguZmxvb3IodG1wKSkudG9GaXhlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhZnRlciA9IE51bWJlcihNYXRoLmNlaWwodG1wKSkudG9GaXhlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdFBvaW50ID0gdG1wIC0gYmVmb3JlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGFbaV0gPSBsaW5lYXJJbnRlcnBvbGF0ZShkYXRhW2JlZm9yZV0sIGRhdGFbYWZ0ZXJdLCBhdFBvaW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5ld0RhdGFbZml0Q291bnQgLSAxXSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdEYXRhO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBsaW5lYXJJbnRlcnBvbGF0ZShiZWZvcmUsIGFmdGVyLCBhdFBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlICsgKGFmdGVyIC0gYmVmb3JlKSAqIGF0UG9pbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1lcmdlQnVmZmVycyhjaGFubmVsQnVmZmVyLCByTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2F0NjRBcnJheShyTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxuZyA9IGNoYW5uZWxCdWZmZXIubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG5nOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gY2hhbm5lbEJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGJ1ZmZlciwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnRlcmxlYXZlKGxlZnRDaGFubmVsLCByaWdodENoYW5uZWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBsZWZ0Q2hhbm5lbC5sZW5ndGggKyByaWdodENoYW5uZWwubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvYXQ2NEFycmF5KGxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0SW5kZXggPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZGV4KytdID0gbGVmdENoYW5uZWxbaW5wdXRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZGV4KytdID0gcmlnaHRDaGFubmVsW2lucHV0SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlVVRGQnl0ZXModmlldywgb2Zmc2V0LCBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsbmcgPSBzdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbmc7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0ICsgaSwgc3RyaW5nLmNoYXJDb2RlQXQoaSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpbnRlcmxlYXZlIGJvdGggY2hhbm5lbHMgdG9nZXRoZXJcclxuICAgICAgICAgICAgdmFyIGludGVybGVhdmVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlKGxlZnRCdWZmZXJzLCByaWdodEJ1ZmZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZBdWRpb0NoYW5uZWxzID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRlcmxlYXZlZCA9IGxlZnRCdWZmZXJzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgaW50ZXJsZWF2ZWRMZW5ndGggPSBpbnRlcmxlYXZlZC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAvLyBjcmVhdGUgd2F2IGZpbGVcclxuICAgICAgICAgICAgdmFyIHJlc3VsdGluZ0J1ZmZlckxlbmd0aCA9IDQ0ICsgaW50ZXJsZWF2ZWRMZW5ndGggKiAyO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihyZXN1bHRpbmdCdWZmZXJMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJJRkYgY2h1bmsgZGVzY3JpcHRvci9pZGVudGlmaWVyIFxyXG4gICAgICAgICAgICB3cml0ZVVURkJ5dGVzKHZpZXcsIDAsICdSSUZGJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBSSUZGIGNodW5rIGxlbmd0aFxyXG4gICAgICAgICAgICAvLyBjaGFuZ2VkIFwiNDRcIiB0byBcIjM2XCIgdmlhICM0MDFcclxuICAgICAgICAgICAgdmlldy5zZXRVaW50MzIoNCwgMzYgKyBpbnRlcmxlYXZlZExlbmd0aCAqIDIsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gUklGRiB0eXBlIFxyXG4gICAgICAgICAgICB3cml0ZVVURkJ5dGVzKHZpZXcsIDgsICdXQVZFJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmb3JtYXQgY2h1bmsgaWRlbnRpZmllciBcclxuICAgICAgICAgICAgLy8gRk1UIHN1Yi1jaHVua1xyXG4gICAgICAgICAgICB3cml0ZVVURkJ5dGVzKHZpZXcsIDEyLCAnZm10ICcpO1xyXG5cclxuICAgICAgICAgICAgLy8gZm9ybWF0IGNodW5rIGxlbmd0aCBcclxuICAgICAgICAgICAgdmlldy5zZXRVaW50MzIoMTYsIDE2LCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHNhbXBsZSBmb3JtYXQgKHJhdylcclxuICAgICAgICAgICAgdmlldy5zZXRVaW50MTYoMjAsIDEsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gc3RlcmVvICgyIGNoYW5uZWxzKVxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQxNigyMiwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHNhbXBsZSByYXRlIFxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQzMigyNCwgc2FtcGxlUmF0ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBieXRlIHJhdGUgKHNhbXBsZSByYXRlICogYmxvY2sgYWxpZ24pXHJcbiAgICAgICAgICAgIHZpZXcuc2V0VWludDMyKDI4LCBzYW1wbGVSYXRlICogMiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBibG9jayBhbGlnbiAoY2hhbm5lbCBjb3VudCAqIGJ5dGVzIHBlciBzYW1wbGUpIFxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQxNigzMiwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzICogMiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBiaXRzIHBlciBzYW1wbGUgXHJcbiAgICAgICAgICAgIHZpZXcuc2V0VWludDE2KDM0LCAxNiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBkYXRhIHN1Yi1jaHVua1xyXG4gICAgICAgICAgICAvLyBkYXRhIGNodW5rIGlkZW50aWZpZXIgXHJcbiAgICAgICAgICAgIHdyaXRlVVRGQnl0ZXModmlldywgMzYsICdkYXRhJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBkYXRhIGNodW5rIGxlbmd0aCBcclxuICAgICAgICAgICAgdmlldy5zZXRVaW50MzIoNDAsIGludGVybGVhdmVkTGVuZ3RoICogMiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyB3cml0ZSB0aGUgUENNIHNhbXBsZXNcclxuICAgICAgICAgICAgdmFyIGxuZyA9IGludGVybGVhdmVkTGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSA0NDtcclxuICAgICAgICAgICAgdmFyIHZvbHVtZSA9IDE7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG5nOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZpZXcuc2V0SW50MTYoaW5kZXgsIGludGVybGVhdmVkW2ldICogKDB4N0ZGRiAqIHZvbHVtZSksIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2Ioe1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHZpZXdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcclxuICAgICAgICAgICAgICAgIHZpZXc6IHZpZXdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLm5vV29ya2VyKSB7XHJcbiAgICAgICAgICAgIG1lcmdlQXVkaW9CdWZmZXJzKGNvbmZpZywgZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YS5idWZmZXIsIGRhdGEudmlldyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgdmFyIHdlYldvcmtlciA9IHByb2Nlc3NJbldlYldvcmtlcihtZXJnZUF1ZGlvQnVmZmVycyk7XHJcblxyXG4gICAgICAgIHdlYldvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudC5kYXRhLmJ1ZmZlciwgZXZlbnQuZGF0YS52aWV3KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwod2ViV29ya2VyLndvcmtlclVSTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBraWxsIHdlYndvcmtlciAob3IgQ2hyb21lIHdpbGwga2lsbCB5b3VyIHBhZ2UgYWZ0ZXIgfjI1IGNhbGxzKVxyXG4gICAgICAgICAgICB3ZWJXb3JrZXIudGVybWluYXRlKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgd2ViV29ya2VyLnBvc3RNZXNzYWdlKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0luV2ViV29ya2VyKF9mdW5jdGlvbikge1xyXG4gICAgICAgIHZhciB3b3JrZXJVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtfZnVuY3Rpb24udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgJzt0aGlzLm9ubWVzc2FnZSA9ICBmdW5jdGlvbiAoZWVlKSB7JyArIF9mdW5jdGlvbi5uYW1lICsgJyhlZWUuZGF0YSk7fSdcclxuICAgICAgICBdLCB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVVJMKTtcclxuICAgICAgICB3b3JrZXIud29ya2VyVVJMID0gd29ya2VyVVJMO1xyXG4gICAgICAgIHJldHVybiB3b3JrZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IGlzIHVzZWQgdG8gcGFzcyByZWNvcmRlZCBibG9iIGJhY2sgdG8gdGhlIGNhbGxlZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgLy8gc3RvcCByZWNvcmRpbmdcclxuICAgICAgICByZWNvcmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbWVyZ2VMZWZ0UmlnaHRCdWZmZXJzKHtcclxuICAgICAgICAgICAgZGVzaXJlZFNhbXBSYXRlOiBkZXNpcmVkU2FtcFJhdGUsXHJcbiAgICAgICAgICAgIHNhbXBsZVJhdGU6IHNhbXBsZVJhdGUsXHJcbiAgICAgICAgICAgIG51bWJlck9mQXVkaW9DaGFubmVsczogbnVtYmVyT2ZBdWRpb0NoYW5uZWxzLFxyXG4gICAgICAgICAgICBpbnRlcm5hbEludGVybGVhdmVkTGVuZ3RoOiByZWNvcmRpbmdMZW5ndGgsXHJcbiAgICAgICAgICAgIGxlZnRCdWZmZXJzOiBsZWZ0Y2hhbm5lbCxcclxuICAgICAgICAgICAgcmlnaHRCdWZmZXJzOiBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDEgPyBbXSA6IHJpZ2h0Y2hhbm5lbCxcclxuICAgICAgICAgICAgbm9Xb3JrZXI6IGNvbmZpZy5ub1dvcmtlclxyXG4gICAgICAgIH0sIGZ1bmN0aW9uKGJ1ZmZlciwgdmlldykge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gVGhlIHJlY29yZGVkIGJsb2Igb2JqZWN0LlxyXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAgICAgICAgICAgICAqIH0pO1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgc2VsZi5ibG9iID0gbmV3IEJsb2IoW3ZpZXddLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXVkaW8vd2F2J1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5QnVmZmVyfSBidWZmZXIgLSBUaGUgcmVjb3JkZWQgYnVmZmVyIG9iamVjdC5cclxuICAgICAgICAgICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgKiAgICAgdmFyIGJ1ZmZlciA9IHJlY29yZGVyLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICogfSk7XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih2aWV3LmJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAcHJvcGVydHkge0RhdGFWaWV3fSB2aWV3IC0gVGhlIHJlY29yZGVkIGRhdGEtdmlldyBvYmplY3QuXHJcbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAgICAgICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICogICAgIHZhciB2aWV3ID0gcmVjb3JkZXIudmlldztcclxuICAgICAgICAgICAgICogfSk7XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBzZWxmLnZpZXcgPSB2aWV3O1xyXG5cclxuICAgICAgICAgICAgc2VsZi5zYW1wbGVSYXRlID0gZGVzaXJlZFNhbXBSYXRlIHx8IHNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgIHNlbGYuYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgICAgICAvLyByZWNvcmRlZCBhdWRpbyBsZW5ndGhcclxuICAgICAgICAgICAgc2VsZi5sZW5ndGggPSByZWNvcmRpbmdMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpc0F1ZGlvUHJvY2Vzc1N0YXJ0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5ibG9iKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIFJlY29yZFJUQy5TdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIFJlY29yZFJUQy5TdG9yYWdlID0ge1xyXG4gICAgICAgICAgICBBdWRpb0NvbnRleHRDb25zdHJ1Y3RvcjogbnVsbCxcclxuICAgICAgICAgICAgQXVkaW9Db250ZXh0OiB3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghUmVjb3JkUlRDLlN0b3JhZ2UuQXVkaW9Db250ZXh0Q29uc3RydWN0b3IgfHwgUmVjb3JkUlRDLlN0b3JhZ2UuQXVkaW9Db250ZXh0Q29uc3RydWN0b3Iuc3RhdGUgPT09ICdjbG9zZWQnKSB7XHJcbiAgICAgICAgUmVjb3JkUlRDLlN0b3JhZ2UuQXVkaW9Db250ZXh0Q29uc3RydWN0b3IgPSBuZXcgUmVjb3JkUlRDLlN0b3JhZ2UuQXVkaW9Db250ZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNvbnRleHQgPSBSZWNvcmRSVEMuU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3RvcjtcclxuXHJcbiAgICAvLyBjcmVhdGVzIGFuIGF1ZGlvIG5vZGUgZnJvbSB0aGUgbWljcm9waG9uZSBpbmNvbWluZyBzdHJlYW1cclxuICAgIHZhciBhdWRpb0lucHV0ID0gY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShtZWRpYVN0cmVhbSk7XHJcblxyXG4gICAgdmFyIGxlZ2FsQnVmZmVyVmFsdWVzID0gWzAsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxNjM4NF07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGcm9tIHRoZSBzcGVjOiBUaGlzIHZhbHVlIGNvbnRyb2xzIGhvdyBmcmVxdWVudGx5IHRoZSBhdWRpb3Byb2Nlc3MgZXZlbnQgaXNcclxuICAgICAqIGRpc3BhdGNoZWQgYW5kIGhvdyBtYW55IHNhbXBsZS1mcmFtZXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZWFjaCBjYWxsLlxyXG4gICAgICogTG93ZXIgdmFsdWVzIGZvciBidWZmZXIgc2l6ZSB3aWxsIHJlc3VsdCBpbiBhIGxvd2VyIChiZXR0ZXIpIGxhdGVuY3kuXHJcbiAgICAgKiBIaWdoZXIgdmFsdWVzIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGF2b2lkIGF1ZGlvIGJyZWFrdXAgYW5kIGdsaXRjaGVzXHJcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBzYW1wbGUtZnJhbWVzKSB3aGljaCBuZWVkcyB0b1xyXG4gICAgICogYmUgcHJvY2Vzc2VkIGVhY2ggdGltZSBvbnByb2Nlc3NhdWRpbyBpcyBjYWxsZWQuXHJcbiAgICAgKiBMZWdhbCB2YWx1ZXMgYXJlICgyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYzODQpLlxyXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJ1ZmZlclNpemUgLSBCdWZmZXItc2l6ZSBmb3IgaG93IGZyZXF1ZW50bHkgdGhlIGF1ZGlvcHJvY2VzcyBldmVudCBpcyBkaXNwYXRjaGVkLlxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlciA9IG5ldyBTdGVyZW9BdWRpb1JlY29yZGVyKG1lZGlhU3RyZWFtLCB7XHJcbiAgICAgKiAgICAgYnVmZmVyU2l6ZTogNDA5NlxyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuXHJcbiAgICAvLyBcIjBcIiBtZWFucywgbGV0IGNocm9tZSBkZWNpZGUgdGhlIG1vc3QgYWNjdXJhdGUgYnVmZmVyLXNpemUgZm9yIGN1cnJlbnQgcGxhdGZvcm0uXHJcbiAgICB2YXIgYnVmZmVyU2l6ZSA9IHR5cGVvZiBjb25maWcuYnVmZmVyU2l6ZSA9PT0gJ3VuZGVmaW5lZCcgPyA0MDk2IDogY29uZmlnLmJ1ZmZlclNpemU7XHJcblxyXG4gICAgaWYgKGxlZ2FsQnVmZmVyVmFsdWVzLmluZGV4T2YoYnVmZmVyU2l6ZSkgPT09IC0xKSB7XHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0xlZ2FsIHZhbHVlcyBmb3IgYnVmZmVyLXNpemUgYXJlICcgKyBKU09OLnN0cmluZ2lmeShsZWdhbEJ1ZmZlclZhbHVlcywgbnVsbCwgJ1xcdCcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQuY3JlYXRlSmF2YVNjcmlwdE5vZGUpIHtcclxuICAgICAgICBqc0F1ZGlvTm9kZSA9IGNvbnRleHQuY3JlYXRlSmF2YVNjcmlwdE5vZGUoYnVmZmVyU2l6ZSwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMpO1xyXG4gICAgfSBlbHNlIGlmIChjb250ZXh0LmNyZWF0ZVNjcmlwdFByb2Nlc3Nvcikge1xyXG4gICAgICAgIGpzQXVkaW9Ob2RlID0gY29udGV4dC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoYnVmZmVyU2l6ZSwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyAnV2ViQXVkaW8gQVBJIGhhcyBubyBzdXBwb3J0IG9uIHRoaXMgYnJvd3Nlci4nO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbm5lY3QgdGhlIHN0cmVhbSB0byB0aGUgc2NyaXB0IHByb2Nlc3NvclxyXG4gICAgYXVkaW9JbnB1dC5jb25uZWN0KGpzQXVkaW9Ob2RlKTtcclxuXHJcbiAgICBpZiAoIWNvbmZpZy5idWZmZXJTaXplKSB7XHJcbiAgICAgICAgYnVmZmVyU2l6ZSA9IGpzQXVkaW9Ob2RlLmJ1ZmZlclNpemU7IC8vIGRldmljZSBidWZmZXItc2l6ZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNhbXBsZSByYXRlIChpbiBzYW1wbGUtZnJhbWVzIHBlciBzZWNvbmQpIGF0IHdoaWNoIHRoZVxyXG4gICAgICogQXVkaW9Db250ZXh0IGhhbmRsZXMgYXVkaW8uIEl0IGlzIGFzc3VtZWQgdGhhdCBhbGwgQXVkaW9Ob2Rlc1xyXG4gICAgICogaW4gdGhlIGNvbnRleHQgcnVuIGF0IHRoaXMgcmF0ZS4gSW4gbWFraW5nIHRoaXMgYXNzdW1wdGlvbixcclxuICAgICAqIHNhbXBsZS1yYXRlIGNvbnZlcnRlcnMgb3IgXCJ2YXJpc3BlZWRcIiBwcm9jZXNzb3JzIGFyZSBub3Qgc3VwcG9ydGVkXHJcbiAgICAgKiBpbiByZWFsLXRpbWUgcHJvY2Vzc2luZy5cclxuICAgICAqIFRoZSBzYW1wbGVSYXRlIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHNhbXBsZS1yYXRlIG9mIHRoZVxyXG4gICAgICogbGluZWFyIFBDTSBhdWRpbyBkYXRhIGluIHRoZSBidWZmZXIgaW4gc2FtcGxlLWZyYW1lcyBwZXIgc2Vjb25kLlxyXG4gICAgICogQW4gaW1wbGVtZW50YXRpb24gbXVzdCBzdXBwb3J0IHNhbXBsZS1yYXRlcyBpbiBhdCBsZWFzdFxyXG4gICAgICogdGhlIHJhbmdlIDIyMDUwIHRvIDk2MDAwLlxyXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNhbXBsZVJhdGUgLSBCdWZmZXItc2l6ZSBmb3IgaG93IGZyZXF1ZW50bHkgdGhlIGF1ZGlvcHJvY2VzcyBldmVudCBpcyBkaXNwYXRjaGVkLlxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlciA9IG5ldyBTdGVyZW9BdWRpb1JlY29yZGVyKG1lZGlhU3RyZWFtLCB7XHJcbiAgICAgKiAgICAgc2FtcGxlUmF0ZTogNDQxMDBcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB2YXIgc2FtcGxlUmF0ZSA9IHR5cGVvZiBjb25maWcuc2FtcGxlUmF0ZSAhPT0gJ3VuZGVmaW5lZCcgPyBjb25maWcuc2FtcGxlUmF0ZSA6IGNvbnRleHQuc2FtcGxlUmF0ZSB8fCA0NDEwMDtcclxuXHJcbiAgICBpZiAoc2FtcGxlUmF0ZSA8IDIyMDUwIHx8IHNhbXBsZVJhdGUgPiA5NjAwMCkge1xyXG4gICAgICAgIC8vIFJlZjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjYzMDM5MTgvNTUyMTgyXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3NhbXBsZS1yYXRlIG11c3QgYmUgdW5kZXIgcmFuZ2UgMjIwNTAgYW5kIDk2MDAwLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgIGlmIChjb25maWcuZGVzaXJlZFNhbXBSYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZXNpcmVkIHNhbXBsZS1yYXRlOiAnICsgY29uZmlnLmRlc2lyZWRTYW1wUmF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBpc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaXNQYXVzZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXN1bWUoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXN1bWUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoaXNNZWRpYVN0cmVhbUFjdGl2ZSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aHJvdyAnUGxlYXNlIG1ha2Ugc3VyZSBNZWRpYVN0cmVhbSBpcyBhY3RpdmUuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2VlbXMgcmVjb3JkaW5nIGhhcyBiZWVuIHJlc3RhcnRlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyBjdXJyZW50bHkgcmVjb3JkZWQgZGF0YS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5jbGVhclJlY29yZGVkRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbmZpZy5jaGVja0ZvckluYWN0aXZlVHJhY2tzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChyZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKGNsZWFyUmVjb3JkZWREYXRhQ0IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xlYXJSZWNvcmRlZERhdGFDQigpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiByZXNldFZhcmlhYmxlcygpIHtcclxuICAgICAgICBsZWZ0Y2hhbm5lbCA9IFtdO1xyXG4gICAgICAgIHJpZ2h0Y2hhbm5lbCA9IFtdO1xyXG4gICAgICAgIHJlY29yZGluZ0xlbmd0aCA9IDA7XHJcbiAgICAgICAgaXNBdWRpb1Byb2Nlc3NTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgICAgcmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgc2VsZi5sZWZ0Y2hhbm5lbCA9IGxlZnRjaGFubmVsO1xyXG4gICAgICAgIHNlbGYucmlnaHRjaGFubmVsID0gcmlnaHRjaGFubmVsO1xyXG4gICAgICAgIHNlbGYubnVtYmVyT2ZBdWRpb0NoYW5uZWxzID0gbnVtYmVyT2ZBdWRpb0NoYW5uZWxzO1xyXG4gICAgICAgIHNlbGYuZGVzaXJlZFNhbXBSYXRlID0gZGVzaXJlZFNhbXBSYXRlO1xyXG4gICAgICAgIHNlbGYuc2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7XHJcbiAgICAgICAgc2VsZi5yZWNvcmRpbmdMZW5ndGggPSByZWNvcmRpbmdMZW5ndGg7XHJcblxyXG4gICAgICAgIGludGVydmFsc0Jhc2VkQnVmZmVycyA9IHtcclxuICAgICAgICAgICAgbGVmdDogW10sXHJcbiAgICAgICAgICAgIHJpZ2h0OiBbXSxcclxuICAgICAgICAgICAgcmVjb3JkaW5nTGVuZ3RoOiAwXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbGVhclJlY29yZGVkRGF0YUNCKCkge1xyXG4gICAgICAgIGlmIChqc0F1ZGlvTm9kZSkge1xyXG4gICAgICAgICAgICBqc0F1ZGlvTm9kZS5vbmF1ZGlvcHJvY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgIGpzQXVkaW9Ob2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAganNBdWRpb05vZGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF1ZGlvSW5wdXQpIHtcclxuICAgICAgICAgICAgYXVkaW9JbnB1dC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIGF1ZGlvSW5wdXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzZXRWYXJpYWJsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgICB0aGlzLm5hbWUgPSAnU3RlcmVvQXVkaW9SZWNvcmRlcic7XHJcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGlzQXVkaW9Qcm9jZXNzU3RhcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgIGZ1bmN0aW9uIG9uQXVkaW9Qcm9jZXNzRGF0YUF2YWlsYWJsZShlKSB7XHJcbiAgICAgICAgaWYgKGlzUGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc01lZGlhU3RyZWFtQWN0aXZlKCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTWVkaWFTdHJlYW0gc2VlbXMgc3RvcHBlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBqc0F1ZGlvTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHJlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGF1ZGlvSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvSW5wdXQuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgYXVkaW9JbnB1dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIFwib25hdWRpb3Byb2Nlc3NcIiBldmVudCdzIGZpcnN0IGludm9jYXRpb24uXHJcbiAgICAgICAgICogQG1ldGhvZCB7ZnVuY3Rpb259IG9uQXVkaW9Qcm9jZXNzU3RhcnRlZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5vbkF1ZGlvUHJvY2Vzc1N0YXJ0ZWQ6IGZ1bmN0aW9uKCkgeyB9O1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICghaXNBdWRpb1Byb2Nlc3NTdGFydGVkKSB7XHJcbiAgICAgICAgICAgIGlzQXVkaW9Qcm9jZXNzU3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb25maWcub25BdWRpb1Byb2Nlc3NTdGFydGVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcub25BdWRpb1Byb2Nlc3NTdGFydGVkKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25maWcuaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcuaW5pdENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBsZWZ0ID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcclxuXHJcbiAgICAgICAgLy8gd2UgY2xvbmUgdGhlIHNhbXBsZXNcclxuICAgICAgICB2YXIgY2hMZWZ0ID0gbmV3IEZsb2F0MzJBcnJheShsZWZ0KTtcclxuICAgICAgICBsZWZ0Y2hhbm5lbC5wdXNoKGNoTGVmdCk7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDIpIHtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcclxuICAgICAgICAgICAgdmFyIGNoUmlnaHQgPSBuZXcgRmxvYXQzMkFycmF5KHJpZ2h0KTtcclxuICAgICAgICAgICAgcmlnaHRjaGFubmVsLnB1c2goY2hSaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWNvcmRpbmdMZW5ndGggKz0gYnVmZmVyU2l6ZTtcclxuXHJcbiAgICAgICAgLy8gZXhwb3J0IHJhdyBQQ01cclxuICAgICAgICBzZWxmLnJlY29yZGluZ0xlbmd0aCA9IHJlY29yZGluZ0xlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudGltZVNsaWNlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBpbnRlcnZhbHNCYXNlZEJ1ZmZlcnMucmVjb3JkaW5nTGVuZ3RoICs9IGJ1ZmZlclNpemU7XHJcbiAgICAgICAgICAgIGludGVydmFsc0Jhc2VkQnVmZmVycy5sZWZ0LnB1c2goY2hMZWZ0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGludGVydmFsc0Jhc2VkQnVmZmVycy5yaWdodC5wdXNoKGNoUmlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGpzQXVkaW9Ob2RlLm9uYXVkaW9wcm9jZXNzID0gb25BdWRpb1Byb2Nlc3NEYXRhQXZhaWxhYmxlO1xyXG5cclxuICAgIC8vIHRvIHByZXZlbnQgc2VsZiBhdWRpbyB0byBiZSBjb25uZWN0ZWQgd2l0aCBzcGVha2Vyc1xyXG4gICAgaWYgKGNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbikge1xyXG4gICAgICAgIGpzQXVkaW9Ob2RlLmNvbm5lY3QoY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBqc0F1ZGlvTm9kZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4cG9ydCByYXcgUENNXHJcbiAgICB0aGlzLmxlZnRjaGFubmVsID0gbGVmdGNoYW5uZWw7XHJcbiAgICB0aGlzLnJpZ2h0Y2hhbm5lbCA9IHJpZ2h0Y2hhbm5lbDtcclxuICAgIHRoaXMubnVtYmVyT2ZBdWRpb0NoYW5uZWxzID0gbnVtYmVyT2ZBdWRpb0NoYW5uZWxzO1xyXG4gICAgdGhpcy5kZXNpcmVkU2FtcFJhdGUgPSBkZXNpcmVkU2FtcFJhdGU7XHJcbiAgICB0aGlzLnNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlO1xyXG4gICAgc2VsZi5yZWNvcmRpbmdMZW5ndGggPSByZWNvcmRpbmdMZW5ndGg7XHJcblxyXG4gICAgLy8gaGVscGVyIGZvciBpbnRlcnZhbHMgYmFzZWQgYmxvYnNcclxuICAgIHZhciBpbnRlcnZhbHNCYXNlZEJ1ZmZlcnMgPSB7XHJcbiAgICAgICAgbGVmdDogW10sXHJcbiAgICAgICAgcmlnaHQ6IFtdLFxyXG4gICAgICAgIHJlY29yZGluZ0xlbmd0aDogMFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyB0aGlzIGxvb3BlciBpcyB1c2VkIHRvIHN1cHBvcnQgaW50ZXJ2YWxzIGJhc2VkIGJsb2JzICh2aWEgdGltZVNsaWNlK29uZGF0YWF2YWlsYWJsZSlcclxuICAgIGZ1bmN0aW9uIGxvb3BlcigpIHtcclxuICAgICAgICBpZiAoIXJlY29yZGluZyB8fCB0eXBlb2YgY29uZmlnLm9uZGF0YWF2YWlsYWJsZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgY29uZmlnLnRpbWVTbGljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGludGVydmFsc0Jhc2VkQnVmZmVycy5sZWZ0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBtZXJnZUxlZnRSaWdodEJ1ZmZlcnMoe1xyXG4gICAgICAgICAgICAgICAgZGVzaXJlZFNhbXBSYXRlOiBkZXNpcmVkU2FtcFJhdGUsXHJcbiAgICAgICAgICAgICAgICBzYW1wbGVSYXRlOiBzYW1wbGVSYXRlLFxyXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMsXHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEludGVybGVhdmVkTGVuZ3RoOiBpbnRlcnZhbHNCYXNlZEJ1ZmZlcnMucmVjb3JkaW5nTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgbGVmdEJ1ZmZlcnM6IGludGVydmFsc0Jhc2VkQnVmZmVycy5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgcmlnaHRCdWZmZXJzOiBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDEgPyBbXSA6IGludGVydmFsc0Jhc2VkQnVmZmVycy5yaWdodFxyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbihidWZmZXIsIHZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3ZpZXddLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F1ZGlvL3dhdidcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLm9uZGF0YWF2YWlsYWJsZShibG9iKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3BlciwgY29uZmlnLnRpbWVTbGljZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW50ZXJ2YWxzQmFzZWRCdWZmZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgbGVmdDogW10sXHJcbiAgICAgICAgICAgICAgICByaWdodDogW10sXHJcbiAgICAgICAgICAgICAgICByZWNvcmRpbmdMZW5ndGg6IDBcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3BlciwgY29uZmlnLnRpbWVTbGljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5TdGVyZW9BdWRpb1JlY29yZGVyID0gU3RlcmVvQXVkaW9SZWNvcmRlcjtcclxufVxyXG5cclxuLy8gX19fX19fX19fX19fX19fX19cclxuLy8gQ2FudmFzUmVjb3JkZXIuanNcclxuXHJcbi8qKlxyXG4gKiBDYW52YXNSZWNvcmRlciBpcyBhIHN0YW5kYWxvbmUgY2xhc3MgdXNlZCBieSB7QGxpbmsgUmVjb3JkUlRDfSB0byBicmluZyBIVE1MNS1DYW52YXMgcmVjb3JkaW5nIGludG8gdmlkZW8gV2ViTS4gSXQgdXNlcyBIVE1MMkNhbnZhcyBsaWJyYXJ5IGFuZCBydW5zIHRvcCBvdmVyIHtAbGluayBXaGFtbXl9LlxyXG4gKiBAc3VtbWFyeSBIVE1MMkNhbnZhcyByZWNvcmRpbmcgaW50byB2aWRlbyBXZWJNLlxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgQ2FudmFzUmVjb3JkZXJcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBDYW52YXNSZWNvcmRlcihodG1sRWxlbWVudCwgeyBkaXNhYmxlTG9nczogdHJ1ZSwgdXNlV2hhbW15UmVjb3JkZXI6IHRydWUgfSk7XHJcbiAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAqIH0pO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGh0bWxFbGVtZW50IC0gcXVlcnlTZWxlY3Rvci9nZXRFbGVtZW50QnlJZC9nZXRFbGVtZW50c0J5VGFnTmFtZVswXS9ldGMuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7ZGlzYWJsZUxvZ3M6dHJ1ZSwgaW5pdENhbGxiYWNrOiBmdW5jdGlvbn1cclxuICovXHJcblxyXG5mdW5jdGlvbiBDYW52YXNSZWNvcmRlcihodG1sRWxlbWVudCwgY29uZmlnKSB7XHJcbiAgICBpZiAodHlwZW9mIGh0bWwyY2FudmFzID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRocm93ICdQbGVhc2UgbGluazogaHR0cHM6Ly93d3cud2VicnRjLWV4cGVyaW1lbnQuY29tL3NjcmVlbnNob3QuanMnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcclxuICAgIGlmICghY29uZmlnLmZyYW1lSW50ZXJ2YWwpIHtcclxuICAgICAgICBjb25maWcuZnJhbWVJbnRlcnZhbCA9IDEwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHZpYSBEZXRlY3RSVEMuanNcclxuICAgIHZhciBpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nID0gZmFsc2U7XHJcbiAgICBbJ2NhcHR1cmVTdHJlYW0nLCAnbW96Q2FwdHVyZVN0cmVhbScsICd3ZWJraXRDYXB0dXJlU3RyZWFtJ10uZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0gaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykpIHtcclxuICAgICAgICAgICAgaXNDYW52YXNTdXBwb3J0c1N0cmVhbUNhcHR1cmluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIF9pc0Nocm9tZSA9ICghIXdpbmRvdy53ZWJraXRSVENQZWVyQ29ubmVjdGlvbiB8fCAhIXdpbmRvdy53ZWJraXRHZXRVc2VyTWVkaWEpICYmICEhd2luZG93LmNocm9tZTtcclxuXHJcbiAgICB2YXIgY2hyb21lVmVyc2lvbiA9IDUwO1xyXG4gICAgdmFyIG1hdGNoQXJyYXkgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbShlfGl1bSlcXC8oWzAtOV0rKVxcLi8pO1xyXG4gICAgaWYgKF9pc0Nocm9tZSAmJiBtYXRjaEFycmF5ICYmIG1hdGNoQXJyYXlbMl0pIHtcclxuICAgICAgICBjaHJvbWVWZXJzaW9uID0gcGFyc2VJbnQobWF0Y2hBcnJheVsyXSwgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChfaXNDaHJvbWUgJiYgY2hyb21lVmVyc2lvbiA8IDUyKSB7XHJcbiAgICAgICAgaXNDYW52YXNTdXBwb3J0c1N0cmVhbUNhcHR1cmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcudXNlV2hhbW15UmVjb3JkZXIpIHtcclxuICAgICAgICBpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGdsb2JhbENhbnZhcywgbWVkaWFTdHJlYW1SZWNvcmRlcjtcclxuXHJcbiAgICBpZiAoaXNDYW52YXNTdXBwb3J0c1N0cmVhbUNhcHR1cmluZykge1xyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdZb3VyIGJyb3dzZXIgc3VwcG9ydHMgYm90aCBNZWRpUmVjb3JkZXIgQVBJIGFuZCBjYW52YXMuY2FwdHVyZVN0cmVhbSEnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChodG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbENhbnZhcyA9IGh0bWxFbGVtZW50O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpIHtcclxuICAgICAgICAgICAgZ2xvYmFsQ2FudmFzID0gaHRtbEVsZW1lbnQuY2FudmFzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93ICdQbGVhc2UgcGFzcyBlaXRoZXIgSFRNTENhbnZhc0VsZW1lbnQgb3IgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELic7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghIW5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEpIHtcclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW52YXMgcmVjb3JkaW5nIGlzIE5PVCBzdXBwb3J0ZWQgaW4gRmlyZWZveC4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlzUmVjb3JkaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVjb3JkcyBDYW52YXMuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZWNvcmQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1JlY29yZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nICYmICFjb25maWcudXNlV2hhbW15UmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgLy8gQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtXHJcbiAgICAgICAgICAgIHZhciBjYW52YXNNZWRpYVN0cmVhbTtcclxuICAgICAgICAgICAgaWYgKCdjYXB0dXJlU3RyZWFtJyBpbiBnbG9iYWxDYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIGNhbnZhc01lZGlhU3RyZWFtID0gZ2xvYmFsQ2FudmFzLmNhcHR1cmVTdHJlYW0oMjUpOyAvLyAyNSBGUFNcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgnbW96Q2FwdHVyZVN0cmVhbScgaW4gZ2xvYmFsQ2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXNNZWRpYVN0cmVhbSA9IGdsb2JhbENhbnZhcy5tb3pDYXB0dXJlU3RyZWFtKDI1KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgnd2Via2l0Q2FwdHVyZVN0cmVhbScgaW4gZ2xvYmFsQ2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXNNZWRpYVN0cmVhbSA9IGdsb2JhbENhbnZhcy53ZWJraXRDYXB0dXJlU3RyZWFtKDI1KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBtZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xyXG4gICAgICAgICAgICAgICAgbWRTdHJlYW0uYWRkVHJhY2soZ2V0VHJhY2tzKGNhbnZhc01lZGlhU3RyZWFtLCAndmlkZW8nKVswXSk7XHJcbiAgICAgICAgICAgICAgICBjYW52YXNNZWRpYVN0cmVhbSA9IG1kU3RyZWFtO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjYW52YXNNZWRpYVN0cmVhbSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ2NhcHR1cmVTdHJlYW0gQVBJIGFyZSBOT1QgYXZhaWxhYmxlLic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE5vdGU6IEphbiAxOCwgMjAxNiBzdGF0dXMgaXMgdGhhdCwgXHJcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggTWVkaWFSZWNvcmRlciBBUEkgY2FuJ3QgcmVjb3JkIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbSBvYmplY3QuXHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtUmVjb3JkZXIgPSBuZXcgTWVkaWFTdHJlYW1SZWNvcmRlcihjYW52YXNNZWRpYVN0cmVhbSwge1xyXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IGNvbmZpZy5taW1lVHlwZSB8fCAndmlkZW8vd2VibSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtUmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2hhbW15LmZyYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICBsYXN0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBkcmF3Q2FudmFzRnJhbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5pbml0Q2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0V2ViUEltYWdlcyA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKGh0bWxFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdjYW52YXMnKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZXNMZW5ndGggPSB3aGFtbXkuZnJhbWVzLmxlbmd0aDtcclxuICAgICAgICB3aGFtbXkuZnJhbWVzLmZvckVhY2goZnVuY3Rpb24oZnJhbWUsIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgZnJhbWVzUmVtYWluaW5nID0gZnJhbWVzTGVuZ3RoIC0gaWR4O1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZnJhbWVzUmVtYWluaW5nICsgJy8nICsgZnJhbWVzTGVuZ3RoICsgJyBmcmFtZXMgcmVtYWluaW5nJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25maWcub25FbmNvZGluZ0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcub25FbmNvZGluZ0NhbGxiYWNrKGZyYW1lc1JlbWFpbmluZywgZnJhbWVzTGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHdlYnAgPSBmcmFtZS5pbWFnZS50b0RhdGFVUkwoJ2ltYWdlL3dlYnAnLCAxKTtcclxuICAgICAgICAgICAgd2hhbW15LmZyYW1lc1tpZHhdLmltYWdlID0gd2VicDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0dlbmVyYXRpbmcgV2ViTScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FsbGJhY2soKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcgQ2FudmFzLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiwgdGhhdCBpcyB1c2VkIHRvIHBhc3MgcmVjb3JkZWQgYmxvYiBiYWNrIHRvIHRoZSBjYWxsZWUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoaXNDYW52YXNTdXBwb3J0c1N0cmVhbUNhcHR1cmluZyAmJiBtZWRpYVN0cmVhbVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtUmVjb3JkZXIuc3RvcChjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0V2ViUEltYWdlcyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QmxvYn0gYmxvYiAtIFJlY29yZGVkIGZyYW1lcyBpbiB2aWRlby93ZWJtIGJsb2IuXHJcbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBDYW52YXNSZWNvcmRlclxyXG4gICAgICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgKiAgICAgdmFyIGJsb2IgPSByZWNvcmRlci5ibG9iO1xyXG4gICAgICAgICAgICAgKiB9KTtcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHdoYW1teS5jb21waWxlKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY29yZGluZyBmaW5pc2hlZCEnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGF0LmJsb2IgPSBibG9iO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGF0LmJsb2IuZm9yRWFjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuYmxvYiA9IG5ldyBCbG9iKFtdLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd2aWRlby93ZWJtJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoYXQuYmxvYik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgd2hhbW15LmZyYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGlzUGF1c2VkUmVjb3JkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1JlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5wYXVzZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlzUGF1c2VkUmVjb3JkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKG1lZGlhU3RyZWFtUmVjb3JkZXIgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtUmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN1bWVzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlzUGF1c2VkUmVjb3JkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChtZWRpYVN0cmVhbVJlY29yZGVyIGluc3RhbmNlb2YgTWVkaWFTdHJlYW1SZWNvcmRlcikge1xyXG4gICAgICAgICAgICBtZWRpYVN0cmVhbVJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyBjdXJyZW50bHkgcmVjb3JkZWQgZGF0YS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuY2xlYXJSZWNvcmRlZERhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKGNsZWFyUmVjb3JkZWREYXRhQ0IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhclJlY29yZGVkRGF0YUNCKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNsZWFyUmVjb3JkZWREYXRhQ0IoKSB7XHJcbiAgICAgICAgd2hhbW15LmZyYW1lcyA9IFtdO1xyXG4gICAgICAgIGlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaXNQYXVzZWRSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgICB0aGlzLm5hbWUgPSAnQ2FudmFzUmVjb3JkZXInO1xyXG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNsb25lQ2FudmFzKCkge1xyXG4gICAgICAgIC8vY3JlYXRlIGEgbmV3IGNhbnZhc1xyXG4gICAgICAgIHZhciBuZXdDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICB2YXIgY29udGV4dCA9IG5ld0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAvL3NldCBkaW1lbnNpb25zXHJcbiAgICAgICAgbmV3Q2FudmFzLndpZHRoID0gaHRtbEVsZW1lbnQud2lkdGg7XHJcbiAgICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGh0bWxFbGVtZW50LmhlaWdodDtcclxuXHJcbiAgICAgICAgLy9hcHBseSB0aGUgb2xkIGNhbnZhcyB0byB0aGUgbmV3IG9uZVxyXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGh0bWxFbGVtZW50LCAwLCAwKTtcclxuXHJcbiAgICAgICAgLy9yZXR1cm4gdGhlIG5ldyBjYW52YXNcclxuICAgICAgICByZXR1cm4gbmV3Q2FudmFzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGRyYXdDYW52YXNGcmFtZSgpIHtcclxuICAgICAgICBpZiAoaXNQYXVzZWRSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgbGFzdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZHJhd0NhbnZhc0ZyYW1lLCA1MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGh0bWxFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdjYW52YXMnKSB7XHJcbiAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGFzdFRpbWU7XHJcbiAgICAgICAgICAgIC8vIHZpYSAjMjA2LCBieSBKYWNrIGkuZS4gQFNleW1vdXJyXHJcbiAgICAgICAgICAgIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgICAgICAgICB3aGFtbXkuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2U6IGNsb25lQ2FudmFzKCksXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZHJhd0NhbnZhc0ZyYW1lLCBjb25maWcuZnJhbWVJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaHRtbDJjYW52YXMoaHRtbEVsZW1lbnQsIHtcclxuICAgICAgICAgICAgZ3JhYk1vdXNlOiB0eXBlb2YgY29uZmlnLnNob3dNb3VzZVBvaW50ZXIgPT09ICd1bmRlZmluZWQnIHx8IGNvbmZpZy5zaG93TW91c2VQb2ludGVyLFxyXG4gICAgICAgICAgICBvbnJlbmRlcmVkOiBmdW5jdGlvbihjYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGFzdFRpbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZHJhd0NhbnZhc0ZyYW1lLCBjb25maWcuZnJhbWVJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdmlhICMyMDYsIGJ5IEphY2sgaS5lLiBAU2V5bW91cnJcclxuICAgICAgICAgICAgICAgIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgd2hhbW15LmZyYW1lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2Uvd2VicCcsIDEpLFxyXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChkcmF3Q2FudmFzRnJhbWUsIGNvbmZpZy5mcmFtZUludGVydmFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsYXN0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIHZhciB3aGFtbXkgPSBuZXcgV2hhbW15LlZpZGVvKDEwMCk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLkNhbnZhc1JlY29yZGVyID0gQ2FudmFzUmVjb3JkZXI7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fX19fX1xyXG4vLyBXaGFtbXlSZWNvcmRlci5qc1xyXG5cclxuLyoqXHJcbiAqIFdoYW1teVJlY29yZGVyIGlzIGEgc3RhbmRhbG9uZSBjbGFzcyB1c2VkIGJ5IHtAbGluayBSZWNvcmRSVEN9IHRvIGJyaW5nIHZpZGVvIHJlY29yZGluZyBpbiBDaHJvbWUuIEl0IHJ1bnMgdG9wIG92ZXIge0BsaW5rIFdoYW1teX0uXHJcbiAqIEBzdW1tYXJ5IFZpZGVvIHJlY29yZGluZyBmZWF0dXJlIGluIENocm9tZS5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIFdoYW1teVJlY29yZGVyXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgV2hhbW15UmVjb3JkZXIobWVkaWFTdHJlYW0pO1xyXG4gKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gKiB9KTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBtZWRpYVN0cmVhbSAtIE1lZGlhU3RyZWFtIG9iamVjdCBmZXRjaGVkIHVzaW5nIGdldFVzZXJNZWRpYSBBUEkgb3IgZ2VuZXJhdGVkIHVzaW5nIGNhcHR1cmVTdHJlYW1VbnRpbEVuZGVkIG9yIFdlYkF1ZGlvIEFQSS5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIHtkaXNhYmxlTG9nczogdHJ1ZSwgaW5pdENhbGxiYWNrOiBmdW5jdGlvbiwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGV0Yy59XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gV2hhbW15UmVjb3JkZXIobWVkaWFTdHJlYW0sIGNvbmZpZykge1xyXG5cclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcclxuXHJcbiAgICBpZiAoIWNvbmZpZy5mcmFtZUludGVydmFsKSB7XHJcbiAgICAgICAgY29uZmlnLmZyYW1lSW50ZXJ2YWwgPSAxMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBmcmFtZXMtaW50ZXJ2YWw6JywgY29uZmlnLmZyYW1lSW50ZXJ2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVjb3JkcyB2aWRlby5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXaGFtbXlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlY29yZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghY29uZmlnLndpZHRoKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy53aWR0aCA9IDMyMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmhlaWdodCkge1xyXG4gICAgICAgICAgICBjb25maWcuaGVpZ2h0ID0gMjQwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcudmlkZW8pIHtcclxuICAgICAgICAgICAgY29uZmlnLnZpZGVvID0ge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbmZpZy53aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogY29uZmlnLmhlaWdodFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuY2FudmFzKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5jYW52YXMgPSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogY29uZmlnLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb25maWcuaGVpZ2h0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYW52YXMud2lkdGggPSBjb25maWcuY2FudmFzLndpZHRoIHx8IDMyMDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gY29uZmlnLmNhbnZhcy5oZWlnaHQgfHwgMjQwO1xyXG5cclxuICAgICAgICBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIC8vIHNldHRpbmcgZGVmYXVsdHNcclxuICAgICAgICBpZiAoY29uZmlnLnZpZGVvICYmIGNvbmZpZy52aWRlbyBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgdmlkZW8gPSBjb25maWcudmlkZW8uY2xvbmVOb2RlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZmlnLmluaXRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLmluaXRDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG5cclxuICAgICAgICAgICAgc2V0U3JjT2JqZWN0KG1lZGlhU3RyZWFtLCB2aWRlbyk7XHJcblxyXG4gICAgICAgICAgICB2aWRlby5vbmxvYWRlZG1ldGFkYXRhID0gZnVuY3Rpb24oKSB7IC8vIFwib25sb2FkZWRtZXRhZGF0YVwiIG1heSBOT1Qgd29yayBpbiBGRj9cclxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmluaXRDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdmlkZW8ud2lkdGggPSBjb25maWcudmlkZW8ud2lkdGg7XHJcbiAgICAgICAgICAgIHZpZGVvLmhlaWdodCA9IGNvbmZpZy52aWRlby5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2aWRlby5tdXRlZCA9IHRydWU7XHJcbiAgICAgICAgdmlkZW8ucGxheSgpO1xyXG5cclxuICAgICAgICBsYXN0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHdoYW1teSA9IG5ldyBXaGFtbXkuVmlkZW8oKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NhbnZhcyByZXNvbHV0aW9ucycsIGNhbnZhcy53aWR0aCwgJyonLCBjYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZpZGVvIHdpZHRoL2hlaWdodCcsIHZpZGVvLndpZHRoIHx8IGNhbnZhcy53aWR0aCwgJyonLCB2aWRlby5oZWlnaHQgfHwgY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkcmF3RnJhbWVzKGNvbmZpZy5mcmFtZUludGVydmFsKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3IGFuZCBwdXNoIGZyYW1lcyB0byBXaGFtbXlcclxuICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gZnJhbWVJbnRlcnZhbCAtIHNldCBtaW5pbXVtIGludGVydmFsIChpbiBtaWxsaXNlY29uZHMpIGJldHdlZW4gZWFjaCB0aW1lIHdlIHB1c2ggYSBmcmFtZSB0byBXaGFtbXlcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZHJhd0ZyYW1lcyhmcmFtZUludGVydmFsKSB7XHJcbiAgICAgICAgZnJhbWVJbnRlcnZhbCA9IHR5cGVvZiBmcmFtZUludGVydmFsICE9PSAndW5kZWZpbmVkJyA/IGZyYW1lSW50ZXJ2YWwgOiAxMDtcclxuXHJcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsYXN0VGltZTtcclxuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGRyYXdGcmFtZXMsIGZyYW1lSW50ZXJ2YWwsIGZyYW1lSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUGF1c2VkUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGRyYXdGcmFtZXMsIDEwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2aWEgIzIwNiwgYnkgSmFjayBpLmUuIEBTZXltb3VyclxyXG4gICAgICAgIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgICAgIGlmICh2aWRlby5wYXVzZWQpIHtcclxuICAgICAgICAgICAgLy8gdmlhOiBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1dlYlJUQy1FeHBlcmltZW50L3B1bGwvMzE2XHJcbiAgICAgICAgICAgIC8vIFR3ZWFrIGZvciBBbmRyb2lkIENocm9tZVxyXG4gICAgICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh2aWRlbywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICB3aGFtbXkuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS93ZWJwJylcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFpc1N0b3BEcmF3aW5nKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZHJhd0ZyYW1lcywgZnJhbWVJbnRlcnZhbCwgZnJhbWVJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFzeW5jTG9vcChvKSB7XHJcbiAgICAgICAgdmFyIGkgPSAtMSxcclxuICAgICAgICAgICAgbGVuZ3RoID0gby5sZW5ndGg7XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiBsb29wKCkge1xyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIGlmIChpID09PSBsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG8uY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gXCJzZXRUaW1lb3V0XCIgYWRkZWQgYnkgSmltIE1jTGVvZFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgby5mdW5jdGlvblRvTG9vcChsb29wLCBpKTtcclxuICAgICAgICAgICAgfSwgMSk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZW1vdmUgYmxhY2sgZnJhbWVzIGZyb20gdGhlIGJlZ2lubmluZyB0byB0aGUgc3BlY2lmaWVkIGZyYW1lXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBfZnJhbWVzIC0gYXJyYXkgb2YgZnJhbWVzIHRvIGJlIGNoZWNrZWRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBfZnJhbWVzVG9DaGVjayAtIG51bWJlciBvZiBmcmFtZSB1bnRpbCBjaGVjayB3aWxsIGJlIGV4ZWN1dGVkICgtMSAtIHdpbGwgZHJvcCBhbGwgZnJhbWVzIHVudGlsIGZyYW1lIG5vdCBtYXRjaGVkIHdpbGwgYmUgZm91bmQpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gX3BpeFRvbGVyYW5jZSAtIDAgLSB2ZXJ5IHN0cmljdCAob25seSBibGFjayBwaXhlbCBjb2xvcikgOyAxIC0gYWxsXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gX2ZyYW1lVG9sZXJhbmNlIC0gMCAtIHZlcnkgc3RyaWN0IChvbmx5IGJsYWNrIGZyYW1lIGNvbG9yKSA7IDEgLSBhbGxcclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gLSBhcnJheSBvZiBmcmFtZXNcclxuICAgICAqL1xyXG4gICAgLy8gcHVsbCMyOTMgYnkgQHZvbG9kYWxleGV5XHJcbiAgICBmdW5jdGlvbiBkcm9wQmxhY2tGcmFtZXMoX2ZyYW1lcywgX2ZyYW1lc1RvQ2hlY2ssIF9waXhUb2xlcmFuY2UsIF9mcmFtZVRvbGVyYW5jZSwgY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgbG9jYWxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBsb2NhbENhbnZhcy53aWR0aCA9IGNhbnZhcy53aWR0aDtcclxuICAgICAgICBsb2NhbENhbnZhcy5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgIHZhciBjb250ZXh0MmQgPSBsb2NhbENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIHZhciByZXN1bHRGcmFtZXMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGNoZWNrVW50aWxOb3RCbGFjayA9IF9mcmFtZXNUb0NoZWNrID09PSAtMTtcclxuICAgICAgICB2YXIgZW5kQ2hlY2tGcmFtZSA9IChfZnJhbWVzVG9DaGVjayAmJiBfZnJhbWVzVG9DaGVjayA+IDAgJiYgX2ZyYW1lc1RvQ2hlY2sgPD0gX2ZyYW1lcy5sZW5ndGgpID9cclxuICAgICAgICAgICAgX2ZyYW1lc1RvQ2hlY2sgOiBfZnJhbWVzLmxlbmd0aDtcclxuICAgICAgICB2YXIgc2FtcGxlQ29sb3IgPSB7XHJcbiAgICAgICAgICAgIHI6IDAsXHJcbiAgICAgICAgICAgIGc6IDAsXHJcbiAgICAgICAgICAgIGI6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBtYXhDb2xvckRpZmZlcmVuY2UgPSBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgIE1hdGgucG93KDI1NSwgMikgK1xyXG4gICAgICAgICAgICBNYXRoLnBvdygyNTUsIDIpICtcclxuICAgICAgICAgICAgTWF0aC5wb3coMjU1LCAyKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmFyIHBpeFRvbGVyYW5jZSA9IF9waXhUb2xlcmFuY2UgJiYgX3BpeFRvbGVyYW5jZSA+PSAwICYmIF9waXhUb2xlcmFuY2UgPD0gMSA/IF9waXhUb2xlcmFuY2UgOiAwO1xyXG4gICAgICAgIHZhciBmcmFtZVRvbGVyYW5jZSA9IF9mcmFtZVRvbGVyYW5jZSAmJiBfZnJhbWVUb2xlcmFuY2UgPj0gMCAmJiBfZnJhbWVUb2xlcmFuY2UgPD0gMSA/IF9mcmFtZVRvbGVyYW5jZSA6IDA7XHJcbiAgICAgICAgdmFyIGRvTm90Q2hlY2tOZXh0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGFzeW5jTG9vcCh7XHJcbiAgICAgICAgICAgIGxlbmd0aDogZW5kQ2hlY2tGcmFtZSxcclxuICAgICAgICAgICAgZnVuY3Rpb25Ub0xvb3A6IGZ1bmN0aW9uKGxvb3AsIGYpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRjaFBpeENvdW50LCBlbmRQaXhDaGVjaywgbWF4UGl4Q291bnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmlzaEltYWdlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb05vdENoZWNrTmV4dCAmJiBtYXhQaXhDb3VudCAtIG1hdGNoUGl4Q291bnQgPD0gbWF4UGl4Q291bnQgKiBmcmFtZVRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygncmVtb3ZlZCBibGFjayBmcmFtZSA6ICcgKyBmICsgJyA7IGZyYW1lIGR1cmF0aW9uICcgKyBfZnJhbWVzW2ZdLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZnJhbWUgaXMgcGFzc2VkIDogJyArIGYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tVbnRpbE5vdEJsYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb05vdENoZWNrTmV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RnJhbWVzLnB1c2goX2ZyYW1lc1tmXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvb3AoKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFkb05vdENoZWNrTmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0MmQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VEYXRhID0gY29udGV4dDJkLmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFBpeENvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUGl4Q2hlY2sgPSBpbWFnZURhdGEuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFBpeENvdW50ID0gaW1hZ2VEYXRhLmRhdGEubGVuZ3RoIC8gNDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBpeCA9IDA7IHBpeCA8IGVuZFBpeENoZWNrOyBwaXggKz0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRDb2xvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByOiBpbWFnZURhdGEuZGF0YVtwaXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGltYWdlRGF0YS5kYXRhW3BpeCArIDFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IGltYWdlRGF0YS5kYXRhW3BpeCArIDJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yRGlmZmVyZW5jZSA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnBvdyhjdXJyZW50Q29sb3IuciAtIHNhbXBsZUNvbG9yLnIsIDIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnBvdyhjdXJyZW50Q29sb3IuZyAtIHNhbXBsZUNvbG9yLmcsIDIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnBvdyhjdXJyZW50Q29sb3IuYiAtIHNhbXBsZUNvbG9yLmIsIDIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBjb2xvciBpdCBpcyBkaWZmZXJlbmNlIGluIGNvbG9yIHZlY3RvcnMgKHIxLGcxLGIxKSA8PT4gKHIyLGcyLGIyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yRGlmZmVyZW5jZSA8PSBtYXhDb2xvckRpZmZlcmVuY2UgKiBwaXhUb2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFBpeENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoSW1hZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IF9mcmFtZXNbZl0uaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdEZyYW1lcyA9IHJlc3VsdEZyYW1lcy5jb25jYXQoX2ZyYW1lcy5zbGljZShlbmRDaGVja0ZyYW1lKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdEZyYW1lcy5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBsYXN0IGZyYW1lIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIG5leHQgbWFuaXB1bGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdG90YWwgZHVyYXRpb24gb2YgYWxsIGZyYW1lcyB3aWxsIGJlIDwgMTAwMCB0aGFuIGZmbXBlZyBkb2Vzbid0IHdvcmsgd2VsbC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEZyYW1lcy5wdXNoKF9mcmFtZXNbX2ZyYW1lcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHRGcmFtZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlzU3RvcERyYXdpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHJlY29yZGluZyB2aWRlby5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24sIHRoYXQgaXMgdXNlZCB0byBwYXNzIHJlY29yZGVkIGJsb2IgYmFjayB0byB0aGUgY2FsbGVlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdoYW1teVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgaXNTdG9wRHJhd2luZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgLy8gYW5hbHlzZSBvZiBhbGwgZnJhbWVzIHRha2VzIHNvbWUgdGltZSFcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvLyBlLmcuIGRyb3BCbGFja0ZyYW1lcyhmcmFtZXMsIDEwLCAxLCAxKSAtIHdpbGwgY3V0IGFsbCAxMCBmcmFtZXNcclxuICAgICAgICAgICAgLy8gZS5nLiBkcm9wQmxhY2tGcmFtZXMoZnJhbWVzLCAxMCwgMC41LCAwLjUpIC0gd2lsbCBhbmFseXNlIDEwIGZyYW1lc1xyXG4gICAgICAgICAgICAvLyBlLmcuIGRyb3BCbGFja0ZyYW1lcyhmcmFtZXMsIDEwKSA9PT0gZHJvcEJsYWNrRnJhbWVzKGZyYW1lcywgMTAsIDAsIDApIC0gd2lsbCBhbmFseXNlIDEwIGZyYW1lcyB3aXRoIHN0cmljdCBibGFjayBjb2xvclxyXG4gICAgICAgICAgICBkcm9wQmxhY2tGcmFtZXMod2hhbW15LmZyYW1lcywgLTEsIG51bGwsIG51bGwsIGZ1bmN0aW9uKGZyYW1lcykge1xyXG4gICAgICAgICAgICAgICAgd2hhbW15LmZyYW1lcyA9IGZyYW1lcztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0byBkaXNwbGF5IGFkdmVydGlzZW1lbnQgaW1hZ2VzIVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hZHZlcnRpc2VtZW50ICYmIGNvbmZpZy5hZHZlcnRpc2VtZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoYW1teS5mcmFtZXMgPSBjb25maWcuYWR2ZXJ0aXNlbWVudC5jb25jYXQod2hhbW15LmZyYW1lcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0Jsb2J9IGJsb2IgLSBSZWNvcmRlZCBmcmFtZXMgaW4gdmlkZW8vd2VibSBibG9iLlxyXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIFdoYW1teVJlY29yZGVyXHJcbiAgICAgICAgICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAgICAgICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAgICAgICAgICAgICAgICAgKiB9KTtcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgd2hhbW15LmNvbXBpbGUoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmJsb2IgPSBibG9iO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuYmxvYi5mb3JFYWNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmJsb2IgPSBuZXcgQmxvYihbXSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3ZpZGVvL3dlYm0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKF90aGlzLmJsb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpc1BhdXNlZFJlY29yZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF1c2VzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXaGFtbXlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnBhdXNlKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZFJlY29yZGluZyA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2hhbW15UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXN1bWUoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXN1bWUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZFJlY29yZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoaXNTdG9wRHJhd2luZykge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgY3VycmVudGx5IHJlY29yZGVkIGRhdGEuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2hhbW15UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmNsZWFyUmVjb3JkZWREYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCFpc1N0b3BEcmF3aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcChjbGVhclJlY29yZGVkRGF0YUNCKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJSZWNvcmRlZERhdGFDQigpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBjbGVhclJlY29yZGVkRGF0YUNCKCkge1xyXG4gICAgICAgIHdoYW1teS5mcmFtZXMgPSBbXTtcclxuICAgICAgICBpc1N0b3BEcmF3aW5nID0gdHJ1ZTtcclxuICAgICAgICBpc1BhdXNlZFJlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdXaGFtbXlSZWNvcmRlcic7XHJcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICB2YXIgdmlkZW87XHJcbiAgICB2YXIgbGFzdFRpbWU7XHJcbiAgICB2YXIgd2hhbW15O1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5XaGFtbXlSZWNvcmRlciA9IFdoYW1teVJlY29yZGVyO1xyXG59XG5cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudGltYXR0ZXIxNS93aGFtbXkvYmxvYi9tYXN0ZXIvTElDRU5TRVxyXG4vLyBfX19fX19fX19cclxuLy8gV2hhbW15LmpzXHJcblxyXG4vLyB0b2RvOiBGaXJlZm94IG5vdyBzdXBwb3J0cyB3ZWJwIGZvciB3ZWJtIGNvbnRhaW5lcnMhXHJcbi8vIHRoZWlyIE1lZGlhUmVjb3JkZXIgaW1wbGVtZW50YXRpb24gd29ya3Mgd2VsbCFcclxuLy8gc2hvdWxkIHdlIHByb3ZpZGUgYW4gb3B0aW9uIHRvIHJlY29yZCB2aWEgV2hhbW15LmpzIG9yIE1lZGlhUmVjb3JkZXIgQVBJIGlzIGEgYmV0dGVyIHNvbHV0aW9uP1xyXG5cclxuLyoqXHJcbiAqIFdoYW1teSBpcyBhIHN0YW5kYWxvbmUgY2xhc3MgdXNlZCBieSB7QGxpbmsgUmVjb3JkUlRDfSB0byBicmluZyB2aWRlbyByZWNvcmRpbmcgaW4gQ2hyb21lLiBJdCBpcyB3cml0dGVuIGJ5IHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYW50aW1hdHRlcjE1fGFudGltYXR0ZXIxNX1cclxuICogQHN1bW1hcnkgQSByZWFsIHRpbWUgamF2YXNjcmlwdCB3ZWJtIGVuY29kZXIgYmFzZWQgb24gYSBjYW52YXMgaGFjay5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIFdoYW1teVxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIHJlY29yZGVyID0gbmV3IFdoYW1teSgpLlZpZGVvKDE1KTtcclxuICogcmVjb3JkZXIuYWRkKGNvbnRleHQgfHwgY2FudmFzIHx8IGRhdGFVUkwpO1xyXG4gKiB2YXIgb3V0cHV0ID0gcmVjb3JkZXIuY29tcGlsZSgpO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqL1xyXG5cclxudmFyIFdoYW1teSA9IChmdW5jdGlvbigpIHtcclxuICAgIC8vIGEgbW9yZSBhYnN0cmFjdC1pc2ggQVBJXHJcblxyXG4gICAgZnVuY3Rpb24gV2hhbW15VmlkZW8oZHVyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmZyYW1lcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbiB8fCAxO1xyXG4gICAgICAgIHRoaXMucXVhbGl0eSA9IDAuODtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhc3MgQ2FudmFzIG9yIENvbnRleHQgb3IgaW1hZ2Uvd2VicChzdHJpbmcpIHRvIHtAbGluayBXaGFtbXl9IGVuY29kZXIuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2hhbW15XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIgPSBuZXcgV2hhbW15KCkuVmlkZW8oMC44LCAxMDApO1xyXG4gICAgICogcmVjb3JkZXIuYWRkKGNhbnZhcyB8fCBjb250ZXh0IHx8ICdpbWFnZS93ZWJwJyk7XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnJhbWUgLSBDYW52YXMgfHwgQ29udGV4dCB8fCBpbWFnZS93ZWJwXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gLSBTdGljayBhIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpXHJcbiAgICAgKi9cclxuICAgIFdoYW1teVZpZGVvLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihmcmFtZSwgZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoJ2NhbnZhcycgaW4gZnJhbWUpIHsgLy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcclxuICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5jYW52YXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJ3RvRGF0YVVSTCcgaW4gZnJhbWUpIHtcclxuICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS50b0RhdGFVUkwoJ2ltYWdlL3dlYnAnLCB0aGlzLnF1YWxpdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEoL15kYXRhOmltYWdlXFwvd2VicDtiYXNlNjQsL2lnKS50ZXN0KGZyYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyAnSW5wdXQgbXVzdCBiZSBmb3JtYXR0ZWQgcHJvcGVybHkgYXMgYSBiYXNlNjQgZW5jb2RlZCBEYXRhVVJJIG9mIHR5cGUgaW1hZ2Uvd2VicCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICBpbWFnZTogZnJhbWUsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiB8fCB0aGlzLmR1cmF0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHByb2Nlc3NJbldlYldvcmtlcihfZnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgYmxvYiA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW19mdW5jdGlvbi50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAndGhpcy5vbm1lc3NhZ2UgPSAgZnVuY3Rpb24gKGVlZSkgeycgKyBfZnVuY3Rpb24ubmFtZSArICcoZWVlLmRhdGEpO30nXHJcbiAgICAgICAgXSwge1xyXG4gICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCdcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2IpO1xyXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgcmV0dXJuIHdvcmtlcjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB3aGFtbXlJbldlYldvcmtlcihmcmFtZXMpIHtcclxuICAgICAgICBmdW5jdGlvbiBBcnJheVRvV2ViTShmcmFtZXMpIHtcclxuICAgICAgICAgICAgdmFyIGluZm8gPSBjaGVja0ZyYW1lcyhmcmFtZXMpO1xyXG4gICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNsdXN0ZXJNYXhEdXJhdGlvbiA9IDMwMDAwO1xyXG5cclxuICAgICAgICAgICAgdmFyIEVCTUwgPSBbe1xyXG4gICAgICAgICAgICAgICAgJ2lkJzogMHgxYTQ1ZGZhMywgLy8gRUJNTFxyXG4gICAgICAgICAgICAgICAgJ2RhdGEnOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogMSxcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDQyODYgLy8gRUJNTFZlcnNpb25cclxuICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg0MmY3IC8vIEVCTUxSZWFkVmVyc2lvblxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogNCxcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDQyZjIgLy8gRUJNTE1heElETGVuZ3RoXHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiA4LFxyXG4gICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDJmMyAvLyBFQk1MTWF4U2l6ZUxlbmd0aFxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogJ3dlYm0nLFxyXG4gICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDI4MiAvLyBEb2NUeXBlXHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDI4NyAvLyBEb2NUeXBlVmVyc2lvblxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogMixcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDQyODUgLy8gRG9jVHlwZVJlYWRWZXJzaW9uXHJcbiAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAnaWQnOiAweDE4NTM4MDY3LCAvLyBTZWdtZW50XHJcbiAgICAgICAgICAgICAgICAnZGF0YSc6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHgxNTQ5YTk2NiwgLy8gSW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAxZTYsIC8vZG8gdGhpbmdzIGluIG1pbGxpc2VjcyAobnVtIG9mIG5hbm9zZWNzIGZvciBkdXJhdGlvbiBzY2FsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHgyYWQ3YjEgLy8gVGltZWNvZGVTY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAnd2hhbW15JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg0ZDgwIC8vIE11eGluZ0FwcFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAnd2hhbW15JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg1NzQxIC8vIFdyaXRpbmdBcHBcclxuICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogZG91YmxlVG9TdHJpbmcoaW5mby5kdXJhdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDQ4OSAvLyBEdXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHgxNjU0YWU2YiwgLy8gVHJhY2tzXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweGFlLCAvLyBUcmFja0VudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IDB4ZDcgLy8gVHJhY2tOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg3M2M1IC8vIFRyYWNrVUlEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IDB4OWMgLy8gRmxhZ0xhY2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6ICd1bmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHgyMmI1OWMgLy8gTGFuZ3VhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAnVl9WUDgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg4NiAvLyBDb2RlY0lEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogJ1ZQOCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDI1ODY4OCAvLyBDb2RlY05hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg4MyAvLyBUcmFja1R5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHhlMCwgLy8gVmlkZW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IGluZm8ud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHhiMCAvLyBQaXhlbFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBpbmZvLmhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweGJhIC8vIFBpeGVsSGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICB9XTtcclxuXHJcbiAgICAgICAgICAgIC8vR2VuZXJhdGUgY2x1c3RlcnMgKG1heCBkdXJhdGlvbilcclxuICAgICAgICAgICAgdmFyIGZyYW1lTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgdmFyIGNsdXN0ZXJUaW1lY29kZSA9IDA7XHJcbiAgICAgICAgICAgIHdoaWxlIChmcmFtZU51bWJlciA8IGZyYW1lcy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY2x1c3RlckZyYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNsdXN0ZXJEdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlckZyYW1lcy5wdXNoKGZyYW1lc1tmcmFtZU51bWJlcl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJEdXJhdGlvbiArPSBmcmFtZXNbZnJhbWVOdW1iZXJdLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lTnVtYmVyKys7XHJcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChmcmFtZU51bWJlciA8IGZyYW1lcy5sZW5ndGggJiYgY2x1c3RlckR1cmF0aW9uIDwgY2x1c3Rlck1heER1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY2x1c3RlckNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNsdXN0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHgxZjQzYjY3NSwgLy8gQ2x1c3RlclxyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogZ2V0Q2x1c3RlckRhdGEoY2x1c3RlclRpbWVjb2RlLCBjbHVzdGVyQ291bnRlciwgY2x1c3RlckZyYW1lcylcclxuICAgICAgICAgICAgICAgIH07IC8vQWRkIGNsdXN0ZXIgdG8gc2VnbWVudFxyXG4gICAgICAgICAgICAgICAgRUJNTFsxXS5kYXRhLnB1c2goY2x1c3Rlcik7XHJcbiAgICAgICAgICAgICAgICBjbHVzdGVyVGltZWNvZGUgKz0gY2x1c3RlckR1cmF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVFQk1MKEVCTUwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2x1c3RlckRhdGEoY2x1c3RlclRpbWVjb2RlLCBjbHVzdGVyQ291bnRlciwgY2x1c3RlckZyYW1lcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgICAgICAgICdkYXRhJzogY2x1c3RlclRpbWVjb2RlLFxyXG4gICAgICAgICAgICAgICAgJ2lkJzogMHhlNyAvLyBUaW1lY29kZVxyXG4gICAgICAgICAgICB9XS5jb25jYXQoY2x1c3RlckZyYW1lcy5tYXAoZnVuY3Rpb24od2VicCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbWFrZVNpbXBsZUJsb2NrKHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNjYXJkYWJsZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBmcmFtZTogd2VicC5kYXRhLnNsaWNlKDQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGludmlzaWJsZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZTogMSxcclxuICAgICAgICAgICAgICAgICAgICBsYWNpbmc6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tOdW06IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZWNvZGU6IE1hdGgucm91bmQoY2x1c3RlckNvdW50ZXIpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNsdXN0ZXJDb3VudGVyICs9IHdlYnAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGJsb2NrLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiAweGEzXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdW1zIHRoZSBsZW5ndGhzIG9mIGFsbCB0aGUgZnJhbWVzIGFuZCBnZXRzIHRoZSBkdXJhdGlvblxyXG5cclxuICAgICAgICBmdW5jdGlvbiBjaGVja0ZyYW1lcyhmcmFtZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFmcmFtZXNbMF0pIHtcclxuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBNYXliZSBXZWJQIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGJyb3dzZXIuJ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IGZyYW1lc1swXS53aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGZyYW1lc1swXS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGZyYW1lc1swXS5kdXJhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiArPSBmcmFtZXNbaV0uZHVyYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBudW1Ub0J1ZmZlcihudW0pIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gW107XHJcbiAgICAgICAgICAgIHdoaWxlIChudW0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKG51bSAmIDB4ZmYpO1xyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtID4+IDg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBhcnRzLnJldmVyc2UoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBzdHJUb0J1ZmZlcihzdHIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHN0ci5zcGxpdCgnJykubWFwKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGJpdHNUb0J1ZmZlcihiaXRzKSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gW107XHJcbiAgICAgICAgICAgIHZhciBwYWQgPSAoYml0cy5sZW5ndGggJSA4KSA/IChuZXcgQXJyYXkoMSArIDggLSAoYml0cy5sZW5ndGggJSA4KSkpLmpvaW4oJzAnKSA6ICcnO1xyXG4gICAgICAgICAgICBiaXRzID0gcGFkICsgYml0cztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaXRzLmxlbmd0aDsgaSArPSA4KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2gocGFyc2VJbnQoYml0cy5zdWJzdHIoaSwgOCksIDIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZUVCTUwoanNvbikge1xyXG4gICAgICAgICAgICB2YXIgZWJtbCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0ganNvbltpXS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZ2VuZXJhdGVFQk1MKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gYml0c1RvQnVmZmVyKGRhdGEudG9TdHJpbmcoMikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gc3RyVG9CdWZmZXIoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGRhdGEuc2l6ZSB8fCBkYXRhLmJ5dGVMZW5ndGggfHwgZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgemVyb2VzID0gTWF0aC5jZWlsKE1hdGguY2VpbChNYXRoLmxvZyhsZW4pIC8gTWF0aC5sb2coMikpIC8gOCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZVRvU3RyaW5nID0gbGVuLnRvU3RyaW5nKDIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IChuZXcgQXJyYXkoKHplcm9lcyAqIDcgKyA3ICsgMSkgLSBzaXplVG9TdHJpbmcubGVuZ3RoKSkuam9pbignMCcpICsgc2l6ZVRvU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSAobmV3IEFycmF5KHplcm9lcykpLmpvaW4oJzAnKSArICcxJyArIHBhZGRlZDtcclxuXHJcbiAgICAgICAgICAgICAgICBlYm1sLnB1c2gobnVtVG9CdWZmZXIoanNvbltpXS5pZCkpO1xyXG4gICAgICAgICAgICAgICAgZWJtbC5wdXNoKGJpdHNUb0J1ZmZlcihzaXplKSk7XHJcbiAgICAgICAgICAgICAgICBlYm1sLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYihlYm1sLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndmlkZW8vd2VibSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB0b0JpblN0ck9sZChiaXRzKSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBwYWQgPSAoYml0cy5sZW5ndGggJSA4KSA/IChuZXcgQXJyYXkoMSArIDggLSAoYml0cy5sZW5ndGggJSA4KSkpLmpvaW4oJzAnKSA6ICcnO1xyXG4gICAgICAgICAgICBiaXRzID0gcGFkICsgYml0cztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaXRzLmxlbmd0aDsgaSArPSA4KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYml0cy5zdWJzdHIoaSwgOCksIDIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VTaW1wbGVCbG9jayhkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBmbGFncyA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS5rZXlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gMTI4O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIGZsYWdzIHw9IDg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmxhY2luZykge1xyXG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gKGRhdGEubGFjaW5nIDw8IDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS5kaXNjYXJkYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEudHJhY2tOdW0gPiAxMjcpIHtcclxuICAgICAgICAgICAgICAgIHRocm93ICdUcmFja051bWJlciA+IDEyNyBub3Qgc3VwcG9ydGVkJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG91dCA9IFtkYXRhLnRyYWNrTnVtIHwgMHg4MCwgZGF0YS50aW1lY29kZSA+PiA4LCBkYXRhLnRpbWVjb2RlICYgMHhmZiwgZmxhZ3NdLm1hcChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtcclxuICAgICAgICAgICAgfSkuam9pbignJykgKyBkYXRhLmZyYW1lO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlV2ViUChyaWZmKSB7XHJcbiAgICAgICAgICAgIHZhciBWUDggPSByaWZmLlJJRkZbMF0uV0VCUFswXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZVN0YXJ0ID0gVlA4LmluZGV4T2YoJ1xceDlkXFx4MDFcXHgyYScpOyAvLyBBIFZQOCBrZXlmcmFtZSBzdGFydHMgd2l0aCB0aGUgMHg5ZDAxMmEgaGVhZGVyXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBjID0gW107IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNbaV0gPSBWUDguY2hhckNvZGVBdChmcmFtZVN0YXJ0ICsgMyArIGkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgd2lkdGgsIGhlaWdodCwgdG1wO1xyXG5cclxuICAgICAgICAgICAgLy90aGUgY29kZSBiZWxvdyBpcyBsaXRlcmFsbHkgY29waWVkIHZlcmJhdGltIGZyb20gdGhlIGJpdHN0cmVhbSBzcGVjXHJcbiAgICAgICAgICAgIHRtcCA9IChjWzFdIDw8IDgpIHwgY1swXTtcclxuICAgICAgICAgICAgd2lkdGggPSB0bXAgJiAweDNGRkY7XHJcbiAgICAgICAgICAgIHRtcCA9IChjWzNdIDw8IDgpIHwgY1syXTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdG1wICYgMHgzRkZGO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBWUDgsXHJcbiAgICAgICAgICAgICAgICByaWZmOiByaWZmXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRTdHJMZW5ndGgoc3RyaW5nLCBvZmZzZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHN0cmluZy5zdWJzdHIob2Zmc2V0ICsgNCwgNCkuc3BsaXQoJycpLm1hcChmdW5jdGlvbihpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5wYWRkZWQgPSBpLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheSg4IC0gdW5wYWRkZWQubGVuZ3RoICsgMSkpLmpvaW4oJzAnKSArIHVucGFkZGVkO1xyXG4gICAgICAgICAgICB9KS5qb2luKCcnKSwgMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBwYXJzZVJJRkYoc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtzID0ge307XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgc3RyaW5nLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gc3RyaW5nLnN1YnN0cihvZmZzZXQsIDQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGdldFN0ckxlbmd0aChzdHJpbmcsIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHN0cmluZy5zdWJzdHIob2Zmc2V0ICsgNCArIDQsIGxlbik7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNCArIDQgKyBsZW47XHJcbiAgICAgICAgICAgICAgICBjaHVua3NbaWRdID0gY2h1bmtzW2lkXSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09ICdSSUZGJyB8fCBpZCA9PT0gJ0xJU1QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzW2lkXS5wdXNoKHBhcnNlUklGRihkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNodW5rc1tpZF0ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2h1bmtzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZG91YmxlVG9TdHJpbmcobnVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXS5zbGljZS5jYWxsKFxyXG4gICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoKG5ldyBGbG9hdDY0QXJyYXkoW251bV0pKS5idWZmZXIpLCAwKS5tYXAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSk7XHJcbiAgICAgICAgICAgIH0pLnJldmVyc2UoKS5qb2luKCcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3ZWJtID0gbmV3IEFycmF5VG9XZWJNKGZyYW1lcy5tYXAoZnVuY3Rpb24oZnJhbWUpIHtcclxuICAgICAgICAgICAgdmFyIHdlYnAgPSBwYXJzZVdlYlAocGFyc2VSSUZGKGF0b2IoZnJhbWUuaW1hZ2Uuc2xpY2UoMjMpKSkpO1xyXG4gICAgICAgICAgICB3ZWJwLmR1cmF0aW9uID0gZnJhbWUuZHVyYXRpb247XHJcbiAgICAgICAgICAgIHJldHVybiB3ZWJwO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uod2VibSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmNvZGVzIGZyYW1lcyBpbiBXZWJNIGNvbnRhaW5lci4gSXQgdXNlcyBXZWJXb3JraW52b2tlIHRvIGludm9rZSAnQXJyYXlUb1dlYk0nIG1ldGhvZC5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24sIHRoYXQgaXMgdXNlZCB0byBwYXNzIHJlY29yZGVkIGJsb2IgYmFjayB0byB0aGUgY2FsbGVlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdoYW1teVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyID0gbmV3IFdoYW1teSgpLlZpZGVvKDAuOCwgMTAwKTtcclxuICAgICAqIHJlY29yZGVyLmNvbXBpbGUoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICogICAgLy8gYmxvYi5zaXplIC0gYmxvYi50eXBlXHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgV2hhbW15VmlkZW8ucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciB3ZWJXb3JrZXIgPSBwcm9jZXNzSW5XZWJXb3JrZXIod2hhbW15SW5XZWJXb3JrZXIpO1xyXG5cclxuICAgICAgICB3ZWJXb3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXZlbnQuZGF0YS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgd2ViV29ya2VyLnBvc3RNZXNzYWdlKHRoaXMuZnJhbWVzKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBIG1vcmUgYWJzdHJhY3QtaXNoIEFQSS5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFdoYW1teVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIgPSBuZXcgV2hhbW15KCkuVmlkZW8oMC44LCAxMDApO1xyXG4gICAgICAgICAqIEBwYXJhbSB7P251bWJlcn0gc3BlZWQgLSAwLjhcclxuICAgICAgICAgKiBAcGFyYW0gez9udW1iZXJ9IHF1YWxpdHkgLSAxMDBcclxuICAgICAgICAgKi9cclxuICAgICAgICBWaWRlbzogV2hhbW15VmlkZW9cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5XaGFtbXkgPSBXaGFtbXk7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fXyAoaW5kZXhlZC1kYilcclxuLy8gRGlza1N0b3JhZ2UuanNcclxuXHJcbi8qKlxyXG4gKiBEaXNrU3RvcmFnZSBpcyBhIHN0YW5kYWxvbmUgb2JqZWN0IHVzZWQgYnkge0BsaW5rIFJlY29yZFJUQ30gdG8gc3RvcmUgcmVjb3JkZWQgYmxvYnMgaW4gSW5kZXhlZERCIHN0b3JhZ2UuXHJcbiAqIEBzdW1tYXJ5IFdyaXRpbmcgYmxvYnMgaW50byBJbmRleGVkREIuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBEaXNrU3RvcmFnZS5TdG9yZSh7XHJcbiAqICAgICBhdWRpb0Jsb2I6IHlvdXJBdWRpb0Jsb2IsXHJcbiAqICAgICB2aWRlb0Jsb2I6IHlvdXJWaWRlb0Jsb2IsXHJcbiAqICAgICBnaWZCbG9iICA6IHlvdXJHaWZCbG9iXHJcbiAqIH0pO1xyXG4gKiBEaXNrU3RvcmFnZS5GZXRjaChmdW5jdGlvbihkYXRhVVJMLCB0eXBlKSB7XHJcbiAqICAgICBpZih0eXBlID09PSAnYXVkaW9CbG9iJykgeyB9XHJcbiAqICAgICBpZih0eXBlID09PSAndmlkZW9CbG9iJykgeyB9XHJcbiAqICAgICBpZih0eXBlID09PSAnZ2lmQmxvYicpICAgeyB9XHJcbiAqIH0pO1xyXG4gKiAvLyBEaXNrU3RvcmFnZS5kYXRhU3RvcmVOYW1lID0gJ3JlY29yZFJUQyc7XHJcbiAqIC8vIERpc2tTdG9yYWdlLm9uRXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeyB9O1xyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBpbml0IC0gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgb25jZSB0byBpbml0aWFsaXplIEluZGV4ZWREQiBPYmplY3RTdG9yZS4gVGhvdWdoLCBpdCBpcyBhdXRvLXVzZWQgaW50ZXJuYWxseS5cclxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gRmV0Y2ggLSBUaGlzIG1ldGhvZCBmZXRjaGVzIHN0b3JlZCBibG9icyBmcm9tIEluZGV4ZWREQi5cclxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gU3RvcmUgLSBUaGlzIG1ldGhvZCBzdG9yZXMgYmxvYnMgaW4gSW5kZXhlZERCLlxyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvbkVycm9yIC0gVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZvciBhbnkga25vd24vdW5rbm93biBlcnJvci5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFTdG9yZU5hbWUgLSBOYW1lIG9mIHRoZSBPYmplY3RTdG9yZSBjcmVhdGVkIGluIEluZGV4ZWREQiBzdG9yYWdlLlxyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqL1xyXG5cclxuXHJcbnZhciBEaXNrU3RvcmFnZSA9IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgb25jZSB0byBpbml0aWFsaXplIEluZGV4ZWREQiBPYmplY3RTdG9yZS4gVGhvdWdoLCBpdCBpcyBhdXRvLXVzZWQgaW50ZXJuYWxseS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBEaXNrU3RvcmFnZVxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogRGlza1N0b3JhZ2UuaW5pdCgpO1xyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgaW5kZXhlZERCLm9wZW4gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0luZGV4ZWREQiBBUEkgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBicm93c2VyLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGJWZXJzaW9uID0gMTtcclxuICAgICAgICB2YXIgZGJOYW1lID0gdGhpcy5kYk5hbWUgfHwgbG9jYXRpb24uaHJlZi5yZXBsYWNlKC9cXC98OnwjfCV8XFwufFxcW3xcXF0vZywgJycpLFxyXG4gICAgICAgICAgICBkYjtcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSwgZGJWZXJzaW9uKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0U3RvcmUoZGF0YUJhc2UpIHtcclxuICAgICAgICAgICAgZGF0YUJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoc2VsZi5kYXRhU3RvcmVOYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHB1dEluREIoKSB7XHJcbiAgICAgICAgICAgIHZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFtzZWxmLmRhdGFTdG9yZU5hbWVdLCAncmVhZHdyaXRlJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi52aWRlb0Jsb2IpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuZGF0YVN0b3JlTmFtZSkucHV0KHNlbGYudmlkZW9CbG9iLCAndmlkZW9CbG9iJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmdpZkJsb2IpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuZGF0YVN0b3JlTmFtZSkucHV0KHNlbGYuZ2lmQmxvYiwgJ2dpZkJsb2InKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGYuYXVkaW9CbG9iKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLmRhdGFTdG9yZU5hbWUpLnB1dChzZWxmLmF1ZGlvQmxvYiwgJ2F1ZGlvQmxvYicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRGcm9tU3RvcmUocG9ydGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuZGF0YVN0b3JlTmFtZSkuZ2V0KHBvcnRpb25OYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbGJhY2soZXZlbnQudGFyZ2V0LnJlc3VsdCwgcG9ydGlvbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdldEZyb21TdG9yZSgnYXVkaW9CbG9iJyk7XHJcbiAgICAgICAgICAgIGdldEZyb21TdG9yZSgndmlkZW9CbG9iJyk7XHJcbiAgICAgICAgICAgIGdldEZyb21TdG9yZSgnZ2lmQmxvYicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gc2VsZi5vbkVycm9yO1xyXG5cclxuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBkYiA9IHJlcXVlc3QucmVzdWx0O1xyXG4gICAgICAgICAgICBkYi5vbmVycm9yID0gc2VsZi5vbkVycm9yO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRiLnNldFZlcnNpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYi52ZXJzaW9uICE9PSBkYlZlcnNpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2V0VmVyc2lvbiA9IGRiLnNldFZlcnNpb24oZGJWZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRWZXJzaW9uLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVPYmplY3RTdG9yZShkYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dEluREIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwdXRJbkRCKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwdXRJbkRCKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0U3RvcmUoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGZldGNoZXMgc3RvcmVkIGJsb2JzIGZyb20gSW5kZXhlZERCLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIERpc2tTdG9yYWdlXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBEaXNrU3RvcmFnZS5GZXRjaChmdW5jdGlvbihkYXRhVVJMLCB0eXBlKSB7XHJcbiAgICAgKiAgICAgaWYodHlwZSA9PT0gJ2F1ZGlvQmxvYicpIHsgfVxyXG4gICAgICogICAgIGlmKHR5cGUgPT09ICd2aWRlb0Jsb2InKSB7IH1cclxuICAgICAqICAgICBpZih0eXBlID09PSAnZ2lmQmxvYicpICAgeyB9XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgRmV0Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3JlcyBibG9icyBpbiBJbmRleGVkREIuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgRGlza1N0b3JhZ2VcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIERpc2tTdG9yYWdlLlN0b3JlKHtcclxuICAgICAqICAgICBhdWRpb0Jsb2I6IHlvdXJBdWRpb0Jsb2IsXHJcbiAgICAgKiAgICAgdmlkZW9CbG9iOiB5b3VyVmlkZW9CbG9iLFxyXG4gICAgICogICAgIGdpZkJsb2IgIDogeW91ckdpZkJsb2JcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICBTdG9yZTogZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb0Jsb2IgPSBjb25maWcuYXVkaW9CbG9iO1xyXG4gICAgICAgIHRoaXMudmlkZW9CbG9iID0gY29uZmlnLnZpZGVvQmxvYjtcclxuICAgICAgICB0aGlzLmdpZkJsb2IgPSBjb25maWcuZ2lmQmxvYjtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZvciBhbnkga25vd24vdW5rbm93biBlcnJvci5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBEaXNrU3RvcmFnZVxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogRGlza1N0b3JhZ2Uub25FcnJvciA9IGZ1bmN0aW9uKGVycm9yKXtcclxuICAgICAqICAgICBhbGVyb3QoIEpTT04uc3RyaW5naWZ5KGVycm9yKSApO1xyXG4gICAgICogfTtcclxuICAgICAqL1xyXG4gICAgb25FcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCAnXFx0JykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRhU3RvcmVOYW1lIC0gTmFtZSBvZiB0aGUgT2JqZWN0U3RvcmUgY3JlYXRlZCBpbiBJbmRleGVkREIgc3RvcmFnZS5cclxuICAgICAqIEBtZW1iZXJvZiBEaXNrU3RvcmFnZVxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogRGlza1N0b3JhZ2UuZGF0YVN0b3JlTmFtZSA9ICdyZWNvcmRSVEMnO1xyXG4gICAgICovXHJcbiAgICBkYXRhU3RvcmVOYW1lOiAncmVjb3JkUlRDJyxcclxuICAgIGRiTmFtZTogbnVsbFxyXG59O1xyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuRGlza1N0b3JhZ2UgPSBEaXNrU3RvcmFnZTtcclxufVxuXHJcbi8vIF9fX19fX19fX19fX19fXHJcbi8vIEdpZlJlY29yZGVyLmpzXHJcblxyXG4vKipcclxuICogR2lmUmVjb3JkZXIgaXMgc3RhbmRhbG9uZSBjYWxzcyB1c2VkIGJ5IHtAbGluayBSZWNvcmRSVEN9IHRvIHJlY29yZCB2aWRlbyBvciBjYW52YXMgaW50byBhbmltYXRlZCBnaWYuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBHaWZSZWNvcmRlclxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIHJlY29yZGVyID0gbmV3IEdpZlJlY29yZGVyKG1lZGlhU3RyZWFtIHx8IGNhbnZhcyB8fCBjb250ZXh0LCB7IG9uR2lmUHJldmlldzogZnVuY3Rpb24sIG9uR2lmUmVjb3JkaW5nU3RhcnRlZDogZnVuY3Rpb24sIHdpZHRoOiAxMjgwLCBoZWlnaHQ6IDcyMCwgZnJhbWVSYXRlOiAyMDAsIHF1YWxpdHk6IDEwIH0pO1xyXG4gKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAqICAgICBpbWcuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICogfSk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBNZWRpYVN0cmVhbSBvYmplY3Qgb3IgSFRNTENhbnZhc0VsZW1lbnQgb3IgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge2Rpc2FibGVMb2dzOnRydWUsIGluaXRDYWxsYmFjazogZnVuY3Rpb24sIHdpZHRoOiAzMjAsIGhlaWdodDogMjQwLCBmcmFtZVJhdGU6IDIwMCwgcXVhbGl0eTogMTB9XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gR2lmUmVjb3JkZXIobWVkaWFTdHJlYW0sIGNvbmZpZykge1xyXG4gICAgaWYgKHR5cGVvZiBHSUZFbmNvZGVyID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vd3d3LndlYnJ0Yy1leHBlcmltZW50LmNvbS9naWYtcmVjb3JkZXIuanMnO1xyXG4gICAgICAgIChkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XHJcblxyXG4gICAgdmFyIGlzSFRNTE9iamVjdCA9IG1lZGlhU3RyZWFtIGluc3RhbmNlb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHx8IG1lZGlhU3RyZWFtIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZWNvcmRzIE1lZGlhU3RyZWFtLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIEdpZlJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVjb3JkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBHSUZFbmNvZGVyID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHNlbGYucmVjb3JkLCAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0xvYWRlZE1ldGFEYXRhKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5yZWNvcmQsIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzSFRNTE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy53aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLndpZHRoID0gdmlkZW8ub2Zmc2V0V2lkdGggfHwgMzIwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5oZWlnaHQgPSB2aWRlby5vZmZzZXRIZWlnaHQgfHwgMjQwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy52aWRlbykge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLnZpZGVvID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb25maWcud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjb25maWcuaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5jYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5jYW52YXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbmZpZy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNvbmZpZy5oZWlnaHRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGNvbmZpZy5jYW52YXMud2lkdGggfHwgMzIwO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gY29uZmlnLmNhbnZhcy5oZWlnaHQgfHwgMjQwO1xyXG5cclxuICAgICAgICAgICAgdmlkZW8ud2lkdGggPSBjb25maWcudmlkZW8ud2lkdGggfHwgMzIwO1xyXG4gICAgICAgICAgICB2aWRlby5oZWlnaHQgPSBjb25maWcudmlkZW8uaGVpZ2h0IHx8IDI0MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGV4dGVybmFsIGxpYnJhcnkgdG8gcmVjb3JkIGFzIEdJRiBpbWFnZXNcclxuICAgICAgICBnaWZFbmNvZGVyID0gbmV3IEdJRkVuY29kZXIoKTtcclxuXHJcbiAgICAgICAgLy8gdm9pZCBzZXRSZXBlYXQoaW50IGl0ZXIpIFxyXG4gICAgICAgIC8vIFNldHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgc2V0IG9mIEdJRiBmcmFtZXMgc2hvdWxkIGJlIHBsYXllZC4gXHJcbiAgICAgICAgLy8gRGVmYXVsdCBpcyAxOyAwIG1lYW5zIHBsYXkgaW5kZWZpbml0ZWx5LlxyXG4gICAgICAgIGdpZkVuY29kZXIuc2V0UmVwZWF0KDApO1xyXG5cclxuICAgICAgICAvLyB2b2lkIHNldEZyYW1lUmF0ZShOdW1iZXIgZnBzKSBcclxuICAgICAgICAvLyBTZXRzIGZyYW1lIHJhdGUgaW4gZnJhbWVzIHBlciBzZWNvbmQuIFxyXG4gICAgICAgIC8vIEVxdWl2YWxlbnQgdG8gc2V0RGVsYXkoMTAwMC9mcHMpLlxyXG4gICAgICAgIC8vIFVzaW5nIFwic2V0RGVsYXlcIiBpbnN0ZWFkIG9mIFwic2V0RnJhbWVSYXRlXCJcclxuICAgICAgICBnaWZFbmNvZGVyLnNldERlbGF5KGNvbmZpZy5mcmFtZVJhdGUgfHwgMjAwKTtcclxuXHJcbiAgICAgICAgLy8gdm9pZCBzZXRRdWFsaXR5KGludCBxdWFsaXR5KSBcclxuICAgICAgICAvLyBTZXRzIHF1YWxpdHkgb2YgY29sb3IgcXVhbnRpemF0aW9uIChjb252ZXJzaW9uIG9mIGltYWdlcyB0byB0aGUgXHJcbiAgICAgICAgLy8gbWF4aW11bSAyNTYgY29sb3JzIGFsbG93ZWQgYnkgdGhlIEdJRiBzcGVjaWZpY2F0aW9uKS4gXHJcbiAgICAgICAgLy8gTG93ZXIgdmFsdWVzIChtaW5pbXVtID0gMSkgcHJvZHVjZSBiZXR0ZXIgY29sb3JzLCBcclxuICAgICAgICAvLyBidXQgc2xvdyBwcm9jZXNzaW5nIHNpZ25pZmljYW50bHkuIDEwIGlzIHRoZSBkZWZhdWx0LCBcclxuICAgICAgICAvLyBhbmQgcHJvZHVjZXMgZ29vZCBjb2xvciBtYXBwaW5nIGF0IHJlYXNvbmFibGUgc3BlZWRzLiBcclxuICAgICAgICAvLyBWYWx1ZXMgZ3JlYXRlciB0aGFuIDIwIGRvIG5vdCB5aWVsZCBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMgaW4gc3BlZWQuXHJcbiAgICAgICAgZ2lmRW5jb2Rlci5zZXRRdWFsaXR5KGNvbmZpZy5xdWFsaXR5IHx8IDEwKTtcclxuXHJcbiAgICAgICAgLy8gQm9vbGVhbiBzdGFydCgpIFxyXG4gICAgICAgIC8vIFRoaXMgd3JpdGVzIHRoZSBHSUYgSGVhZGVyIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLlxyXG4gICAgICAgIGdpZkVuY29kZXIuc3RhcnQoKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub25HaWZSZWNvcmRpbmdTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5vbkdpZlJlY29yZGluZ1N0YXJ0ZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGRyYXdWaWRlb0ZyYW1lKHRpbWUpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2xlYXJlZFJlY29yZGVkRGF0YSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNQYXVzZWRSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRyYXdWaWRlb0ZyYW1lKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGFzdEFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRyYXdWaWRlb0ZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZyYW1lVGltZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0RnJhbWVUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfjEwIGZwc1xyXG4gICAgICAgICAgICBpZiAodGltZSAtIGxhc3RGcmFtZVRpbWUgPCA5MCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzSFRNTE9iamVjdCAmJiB2aWRlby5wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHZpYTogaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9XZWJSVEMtRXhwZXJpbWVudC9wdWxsLzMxNlxyXG4gICAgICAgICAgICAgICAgLy8gVHdlYWsgZm9yIEFuZHJvaWQgQ2hyb21lXHJcbiAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNIVE1MT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh2aWRlbywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkdpZlByZXZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5vbkdpZlByZXZpZXcoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBnaWZFbmNvZGVyLmFkZEZyYW1lKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsYXN0RnJhbWVUaW1lID0gdGltZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxhc3RBbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkcmF3VmlkZW9GcmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5pbml0Q2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcHMgcmVjb3JkaW5nIE1lZGlhU3RyZWFtLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiwgdGhhdCBpcyB1c2VkIHRvIHBhc3MgcmVjb3JkZWQgYmxvYiBiYWNrIHRvIHRoZSBjYWxsZWUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgR2lmUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAqICAgICBpbWcuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RBbmltYXRpb25GcmFtZSkge1xyXG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShsYXN0QW5pbWF0aW9uRnJhbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW5kVGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7QmxvYn0gYmxvYiAtIFRoZSByZWNvcmRlZCBibG9iIG9iamVjdC5cclxuICAgICAgICAgKiBAbWVtYmVyb2YgR2lmUmVjb3JkZXJcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oKXtcclxuICAgICAgICAgKiAgICAgdmFyIGJsb2IgPSByZWNvcmRlci5ibG9iO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYmxvYiA9IG5ldyBCbG9iKFtuZXcgVWludDhBcnJheShnaWZFbmNvZGVyLnN0cmVhbSgpLmJpbildLCB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZS9naWYnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNhbGxiYWNrKHRoaXMuYmxvYik7XHJcblxyXG4gICAgICAgIC8vIGJ1ZzogZmluZCBhIHdheSB0byBjbGVhciBvbGQgcmVjb3JkZWQgYmxvYnNcclxuICAgICAgICBnaWZFbmNvZGVyLnN0cmVhbSgpLmJpbiA9IFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaXNQYXVzZWRSZWNvcmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgR2lmUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaXNQYXVzZWRSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIEdpZlJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVzdW1lKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzdW1lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaXNQYXVzZWRSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgY3VycmVudGx5IHJlY29yZGVkIGRhdGEuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgR2lmUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmNsZWFyUmVjb3JkZWREYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2VsZi5jbGVhcmVkUmVjb3JkZWREYXRhID0gdHJ1ZTtcclxuICAgICAgICBjbGVhclJlY29yZGVkRGF0YUNCKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNsZWFyUmVjb3JkZWREYXRhQ0IoKSB7XHJcbiAgICAgICAgaWYgKGdpZkVuY29kZXIpIHtcclxuICAgICAgICAgICAgZ2lmRW5jb2Rlci5zdHJlYW0oKS5iaW4gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9yIGRlYnVnZ2luZ1xyXG4gICAgdGhpcy5uYW1lID0gJ0dpZlJlY29yZGVyJztcclxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIGlmIChpc0hUTUxPYmplY3QpIHtcclxuICAgICAgICBpZiAobWVkaWFTdHJlYW0gaW5zdGFuY2VvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpIHtcclxuICAgICAgICAgICAgY29udGV4dCA9IG1lZGlhU3RyZWFtO1xyXG4gICAgICAgICAgICBjYW52YXMgPSBjb250ZXh0LmNhbnZhcztcclxuICAgICAgICB9IGVsc2UgaWYgKG1lZGlhU3RyZWFtIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29udGV4dCA9IG1lZGlhU3RyZWFtLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgIGNhbnZhcyA9IG1lZGlhU3RyZWFtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNMb2FkZWRNZXRhRGF0YSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFpc0hUTUxPYmplY3QpIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG4gICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICB2aWRlby5hdXRvcGxheSA9IHRydWU7XHJcbiAgICAgICAgdmlkZW8ucGxheXNJbmxpbmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpc0xvYWRlZE1ldGFEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgdmlkZW8ub25sb2FkZWRtZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpc0xvYWRlZE1ldGFEYXRhID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzZXRTcmNPYmplY3QobWVkaWFTdHJlYW0sIHZpZGVvKTtcclxuXHJcbiAgICAgICAgdmlkZW8ucGxheSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsYXN0QW5pbWF0aW9uRnJhbWUgPSBudWxsO1xyXG4gICAgdmFyIHN0YXJ0VGltZSwgZW5kVGltZSwgbGFzdEZyYW1lVGltZTtcclxuXHJcbiAgICB2YXIgZ2lmRW5jb2RlcjtcclxuXHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLkdpZlJlY29yZGVyID0gR2lmUmVjb3JkZXI7XHJcbn1cblxyXG4vLyBMYXN0IHRpbWUgdXBkYXRlZDogMjAxOS0wNi0yMSA0OjA5OjQyIEFNIFVUQ1xyXG5cclxuLy8gX19fX19fX19fX19fX19fX19fX19fX19fXHJcbi8vIE11bHRpU3RyZWFtc01peGVyIHYxLjIuMlxyXG5cclxuLy8gT3Blbi1Tb3VyY2VkOiBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL011bHRpU3RyZWFtc01peGVyXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBNdWF6IEtoYW4gICAgIC0gd3d3Lk11YXpLaGFuLmNvbVxyXG4vLyBNSVQgTGljZW5zZSAgIC0gd3d3LldlYlJUQy1FeHBlcmltZW50LmNvbS9saWNlbmNlXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5mdW5jdGlvbiBNdWx0aVN0cmVhbXNNaXhlcihhcnJheU9mTWVkaWFTdHJlYW1zLCBlbGVtZW50Q2xhc3MpIHtcclxuXHJcbiAgICB2YXIgYnJvd3NlckZha2VVc2VyQWdlbnQgPSAnRmFrZS81LjAgKEZha2VPUykgQXBwbGVXZWJLaXQvMTIzIChLSFRNTCwgbGlrZSBHZWNrbykgRmFrZS8xMi4zLjQ1NjcuODkgRmFrZS8xMjMuNDUnO1xyXG5cclxuICAgIChmdW5jdGlvbih0aGF0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhhdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdsb2JhbC5uYXZpZ2F0b3IgPSB7XHJcbiAgICAgICAgICAgIHVzZXJBZ2VudDogYnJvd3NlckZha2VVc2VyQWdlbnQsXHJcbiAgICAgICAgICAgIGdldFVzZXJNZWRpYTogZnVuY3Rpb24oKSB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICghZ2xvYmFsLmNvbnNvbGUpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLmNvbnNvbGUgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsLmNvbnNvbGUubG9nID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZ2xvYmFsLmNvbnNvbGUuZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5jb25zb2xlLmVycm9yID0gZ2xvYmFsLmNvbnNvbGUubG9nID0gZ2xvYmFsLmNvbnNvbGUubG9nIHx8IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8qZ2xvYmFsIGRvY3VtZW50OnRydWUgKi9cclxuICAgICAgICAgICAgdGhhdC5kb2N1bWVudCA9IHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgPSBkb2N1bWVudC5jYXB0dXJlU3RyZWFtID0gZG9jdW1lbnQubW96Q2FwdHVyZVN0cmVhbSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRDb250ZXh0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHBsYXk6IGZ1bmN0aW9uKCkge30sXHJcbiAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uKCkge30sXHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd0ltYWdlOiBmdW5jdGlvbigpIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvRGF0YVVSTDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7fVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGF0LkhUTUxWaWRlb0VsZW1lbnQgPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLypnbG9iYWwgbG9jYXRpb246dHJ1ZSAqL1xyXG4gICAgICAgICAgICB0aGF0LmxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvdG9jb2w6ICdmaWxlOicsXHJcbiAgICAgICAgICAgICAgICBocmVmOiAnJyxcclxuICAgICAgICAgICAgICAgIGhhc2g6ICcnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHNjcmVlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLypnbG9iYWwgc2NyZWVuOnRydWUgKi9cclxuICAgICAgICAgICAgdGhhdC5zY3JlZW4gPSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBVUkwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8qZ2xvYmFsIHNjcmVlbjp0cnVlICovXHJcbiAgICAgICAgICAgIHRoYXQuVVJMID0ge1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlT2JqZWN0VVJMOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmV2b2tlT2JqZWN0VVJMOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmdsb2JhbCB3aW5kb3c6dHJ1ZSAqL1xyXG4gICAgICAgIHRoYXQud2luZG93ID0gZ2xvYmFsO1xyXG4gICAgfSkodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiBudWxsKTtcclxuXHJcbiAgICAvLyByZXF1aXJlczogY2hyb21lOi8vZmxhZ3MvI2VuYWJsZS1leHBlcmltZW50YWwtd2ViLXBsYXRmb3JtLWZlYXR1cmVzXHJcblxyXG4gICAgZWxlbWVudENsYXNzID0gZWxlbWVudENsYXNzIHx8ICdtdWx0aS1zdHJlYW1zLW1peGVyJztcclxuXHJcbiAgICB2YXIgdmlkZW9zID0gW107XHJcbiAgICB2YXIgaXNTdG9wRHJhd2luZ0ZyYW1lcyA9IGZhbHNlO1xyXG5cclxuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjYW52YXMuc3R5bGUub3BhY2l0eSA9IDA7XHJcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgY2FudmFzLnN0eWxlLnpJbmRleCA9IC0xO1xyXG4gICAgY2FudmFzLnN0eWxlLnRvcCA9ICctMTAwMGVtJztcclxuICAgIGNhbnZhcy5zdHlsZS5sZWZ0ID0gJy0xMDAwZW0nO1xyXG4gICAgY2FudmFzLmNsYXNzTmFtZSA9IGVsZW1lbnRDbGFzcztcclxuICAgIChkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcclxuXHJcbiAgICB0aGlzLmRpc2FibGVMb2dzID0gZmFsc2U7XHJcbiAgICB0aGlzLmZyYW1lSW50ZXJ2YWwgPSAxMDtcclxuXHJcbiAgICB0aGlzLndpZHRoID0gMzYwO1xyXG4gICAgdGhpcy5oZWlnaHQgPSAyNDA7XHJcblxyXG4gICAgLy8gdXNlIGdhaW4gbm9kZSB0byBwcmV2ZW50IGVjaG9cclxuICAgIHRoaXMudXNlR2Fpbk5vZGUgPSB0cnVlO1xyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xyXG4gICAgLy8gQ3Jvc3MtQnJvd3Nlci1EZWNsYXJhdGlvbnMuanNcclxuXHJcbiAgICAvLyBXZWJBdWRpbyBBUEkgcmVwcmVzZW50ZXJcclxuICAgIHZhciBBdWRpb0NvbnRleHQgPSB3aW5kb3cuQXVkaW9Db250ZXh0O1xyXG5cclxuICAgIGlmICh0eXBlb2YgQXVkaW9Db250ZXh0ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2Via2l0QXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAvKmdsb2JhbCBBdWRpb0NvbnRleHQ6dHJ1ZSAqL1xyXG4gICAgICAgICAgICBBdWRpb0NvbnRleHQgPSB3ZWJraXRBdWRpb0NvbnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vekF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLypnbG9iYWwgQXVkaW9Db250ZXh0OnRydWUgKi9cclxuICAgICAgICAgICAgQXVkaW9Db250ZXh0ID0gbW96QXVkaW9Db250ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKmpzaGludCAtVzA3OSAqL1xyXG4gICAgdmFyIFVSTCA9IHdpbmRvdy5VUkw7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBVUkwgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3ZWJraXRVUkwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgVVJMOnRydWUgKi9cclxuICAgICAgICBVUkwgPSB3ZWJraXRVUkw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID09PSAndW5kZWZpbmVkJykgeyAvLyBtYXliZSB3aW5kb3cubmF2aWdhdG9yP1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgbmF2aWdhdG9yLmdldFVzZXJNZWRpYSA9IG5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEgPSBuYXZpZ2F0b3IubW96R2V0VXNlck1lZGlhO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgTWVkaWFTdHJlYW0gPSB3aW5kb3cuTWVkaWFTdHJlYW07XHJcblxyXG4gICAgaWYgKHR5cGVvZiBNZWRpYVN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdlYmtpdE1lZGlhU3RyZWFtICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIE1lZGlhU3RyZWFtID0gd2Via2l0TWVkaWFTdHJlYW07XHJcbiAgICB9XHJcblxyXG4gICAgLypnbG9iYWwgTWVkaWFTdHJlYW06dHJ1ZSAqL1xyXG4gICAgaWYgKHR5cGVvZiBNZWRpYVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBvdmVycmlkZSBcInN0b3BcIiBtZXRob2QgZm9yIGFsbCBicm93c2Vyc1xyXG4gICAgICAgIGlmICh0eXBlb2YgTWVkaWFTdHJlYW0ucHJvdG90eXBlLnN0b3AgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIE1lZGlhU3RyZWFtLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRyYWNrcygpLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIFN0b3JhZ2UgPSB7fTtcclxuXHJcbiAgICBpZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBTdG9yYWdlLkF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4dDtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHdlYmtpdEF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBTdG9yYWdlLkF1ZGlvQ29udGV4dCA9IHdlYmtpdEF1ZGlvQ29udGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZXRTcmNPYmplY3Qoc3RyZWFtLCBlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCdzcmNPYmplY3QnIGluIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XHJcbiAgICAgICAgfSBlbHNlIGlmICgnbW96U3JjT2JqZWN0JyBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubW96U3JjT2JqZWN0ID0gc3RyZWFtO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXJ0RHJhd2luZ0ZyYW1lcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGRyYXdWaWRlb3NUb0NhbnZhcygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBkcmF3VmlkZW9zVG9DYW52YXMoKSB7XHJcbiAgICAgICAgaWYgKGlzU3RvcERyYXdpbmdGcmFtZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZpZGVvc0xlbmd0aCA9IHZpZGVvcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBmdWxsY2FudmFzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IFtdO1xyXG4gICAgICAgIHZpZGVvcy5mb3JFYWNoKGZ1bmN0aW9uKHZpZGVvKSB7XHJcbiAgICAgICAgICAgIGlmICghdmlkZW8uc3RyZWFtKSB7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5zdHJlYW0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZpZGVvLnN0cmVhbS5mdWxsY2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgICBmdWxsY2FudmFzID0gdmlkZW87XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0b2RvOiB2aWRlby5zdHJlYW0uYWN0aXZlIG9yIHZpZGVvLnN0cmVhbS5saXZlIHRvIGZpeCBibGFuayBmcmFtZXMgaXNzdWVzP1xyXG4gICAgICAgICAgICAgICAgcmVtYWluaW5nLnB1c2godmlkZW8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChmdWxsY2FudmFzKSB7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGZ1bGxjYW52YXMuc3RyZWFtLndpZHRoO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gZnVsbGNhbnZhcy5zdHJlYW0uaGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVtYWluaW5nLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWRlb3NMZW5ndGggPiAxID8gcmVtYWluaW5nWzBdLndpZHRoICogMiA6IHJlbWFpbmluZ1swXS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSAxO1xyXG4gICAgICAgICAgICBpZiAodmlkZW9zTGVuZ3RoID09PSAzIHx8IHZpZGVvc0xlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmlkZW9zTGVuZ3RoID09PSA1IHx8IHZpZGVvc0xlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmlkZW9zTGVuZ3RoID09PSA3IHx8IHZpZGVvc0xlbmd0aCA9PT0gOCkge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmlkZW9zTGVuZ3RoID09PSA5IHx8IHZpZGVvc0xlbmd0aCA9PT0gMTApIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IDU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHJlbWFpbmluZ1swXS5oZWlnaHQgKiBoZWlnaHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gc2VsZi53aWR0aCB8fCAzNjA7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzZWxmLmhlaWdodCB8fCAyNDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZnVsbGNhbnZhcyAmJiBmdWxsY2FudmFzIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xyXG4gICAgICAgICAgICBkcmF3SW1hZ2UoZnVsbGNhbnZhcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW1haW5pbmcuZm9yRWFjaChmdW5jdGlvbih2aWRlbywgaWR4KSB7XHJcbiAgICAgICAgICAgIGRyYXdJbWFnZSh2aWRlbywgaWR4KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dChkcmF3VmlkZW9zVG9DYW52YXMsIHNlbGYuZnJhbWVJbnRlcnZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZHJhd0ltYWdlKHZpZGVvLCBpZHgpIHtcclxuICAgICAgICBpZiAoaXNTdG9wRHJhd2luZ0ZyYW1lcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeCA9IDA7XHJcbiAgICAgICAgdmFyIHkgPSAwO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHZpZGVvLndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB2aWRlby5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChpZHggPT09IDEpIHtcclxuICAgICAgICAgICAgeCA9IHZpZGVvLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gMikge1xyXG4gICAgICAgICAgICB5ID0gdmlkZW8uaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gMykge1xyXG4gICAgICAgICAgICB4ID0gdmlkZW8ud2lkdGg7XHJcbiAgICAgICAgICAgIHkgPSB2aWRlby5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWR4ID09PSA0KSB7XHJcbiAgICAgICAgICAgIHkgPSB2aWRlby5oZWlnaHQgKiAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gNSkge1xyXG4gICAgICAgICAgICB4ID0gdmlkZW8ud2lkdGg7XHJcbiAgICAgICAgICAgIHkgPSB2aWRlby5oZWlnaHQgKiAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gNikge1xyXG4gICAgICAgICAgICB5ID0gdmlkZW8uaGVpZ2h0ICogMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZHggPT09IDcpIHtcclxuICAgICAgICAgICAgeCA9IHZpZGVvLndpZHRoO1xyXG4gICAgICAgICAgICB5ID0gdmlkZW8uaGVpZ2h0ICogMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW8uc3RyZWFtLmxlZnQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHggPSB2aWRlby5zdHJlYW0ubGVmdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW8uc3RyZWFtLnRvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgeSA9IHZpZGVvLnN0cmVhbS50b3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHZpZGVvLnN0cmVhbS53aWR0aCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgd2lkdGggPSB2aWRlby5zdHJlYW0ud2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHZpZGVvLnN0cmVhbS5oZWlnaHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHZpZGVvLnN0cmVhbS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh2aWRlbywgeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW8uc3RyZWFtLm9uUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZpZGVvLnN0cmVhbS5vblJlbmRlcihjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpZHgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNaXhlZFN0cmVhbSgpIHtcclxuICAgICAgICBpc1N0b3BEcmF3aW5nRnJhbWVzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIG1peGVkVmlkZW9TdHJlYW0gPSBnZXRNaXhlZFZpZGVvU3RyZWFtKCk7XHJcblxyXG4gICAgICAgIHZhciBtaXhlZEF1ZGlvU3RyZWFtID0gZ2V0TWl4ZWRBdWRpb1N0cmVhbSgpO1xyXG4gICAgICAgIGlmIChtaXhlZEF1ZGlvU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIG1peGVkQXVkaW9TdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0LmtpbmQgPT09ICdhdWRpbyc7XHJcbiAgICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcclxuICAgICAgICAgICAgICAgIG1peGVkVmlkZW9TdHJlYW0uYWRkVHJhY2sodHJhY2spO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmdWxsY2FudmFzO1xyXG4gICAgICAgIGFycmF5T2ZNZWRpYVN0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKHN0cmVhbS5mdWxsY2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgICBmdWxsY2FudmFzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBtaXhlZFZpZGVvU3RyZWFtLnByb3RvdHlwZS5hcHBlbmRTdHJlYW1zID0gYXBwZW5kU3RyZWFtcztcclxuICAgICAgICAvLyBtaXhlZFZpZGVvU3RyZWFtLnByb3RvdHlwZS5yZXNldFZpZGVvU3RyZWFtcyA9IHJlc2V0VmlkZW9TdHJlYW1zO1xyXG4gICAgICAgIC8vIG1peGVkVmlkZW9TdHJlYW0ucHJvdG90eXBlLmNsZWFyUmVjb3JkZWREYXRhID0gY2xlYXJSZWNvcmRlZERhdGE7XHJcblxyXG4gICAgICAgIHJldHVybiBtaXhlZFZpZGVvU3RyZWFtO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldE1peGVkVmlkZW9TdHJlYW0oKSB7XHJcbiAgICAgICAgcmVzZXRWaWRlb1N0cmVhbXMoKTtcclxuXHJcbiAgICAgICAgdmFyIGNhcHR1cmVkU3RyZWFtO1xyXG5cclxuICAgICAgICBpZiAoJ2NhcHR1cmVTdHJlYW0nIGluIGNhbnZhcykge1xyXG4gICAgICAgICAgICBjYXB0dXJlZFN0cmVhbSA9IGNhbnZhcy5jYXB0dXJlU3RyZWFtKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgnbW96Q2FwdHVyZVN0cmVhbScgaW4gY2FudmFzKSB7XHJcbiAgICAgICAgICAgIGNhcHR1cmVkU3RyZWFtID0gY2FudmFzLm1vekNhcHR1cmVTdHJlYW0oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFzZWxmLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VwZ3JhZGUgdG8gbGF0ZXN0IENocm9tZSBvciBvdGhlcndpc2UgZW5hYmxlIHRoaXMgZmxhZzogY2hyb21lOi8vZmxhZ3MvI2VuYWJsZS1leHBlcmltZW50YWwtd2ViLXBsYXRmb3JtLWZlYXR1cmVzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmlkZW9TdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgY2FwdHVyZWRTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gJ3ZpZGVvJztcclxuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XHJcbiAgICAgICAgICAgIHZpZGVvU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2FudmFzLnN0cmVhbSA9IHZpZGVvU3RyZWFtO1xyXG5cclxuICAgICAgICByZXR1cm4gdmlkZW9TdHJlYW07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0TWl4ZWRBdWRpb1N0cmVhbSgpIHtcclxuICAgICAgICAvLyB2aWE6IEBwZWhyc29uc1xyXG4gICAgICAgIGlmICghU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICBTdG9yYWdlLkF1ZGlvQ29udGV4dENvbnN0cnVjdG9yID0gbmV3IFN0b3JhZ2UuQXVkaW9Db250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLmF1ZGlvQ29udGV4dCA9IFN0b3JhZ2UuQXVkaW9Db250ZXh0Q29uc3RydWN0b3I7XHJcblxyXG4gICAgICAgIHNlbGYuYXVkaW9Tb3VyY2VzID0gW107XHJcblxyXG4gICAgICAgIGlmIChzZWxmLnVzZUdhaW5Ob2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZ2Fpbk5vZGUgPSBzZWxmLmF1ZGlvQ29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgICAgIHNlbGYuZ2Fpbk5vZGUuY29ubmVjdChzZWxmLmF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7XHJcbiAgICAgICAgICAgIHNlbGYuZ2Fpbk5vZGUuZ2Fpbi52YWx1ZSA9IDA7IC8vIGRvbid0IGhlYXIgc2VsZlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF1ZGlvVHJhY2tzTGVuZ3RoID0gMDtcclxuICAgICAgICBhcnJheU9mTWVkaWFTdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gJ2F1ZGlvJztcclxuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhdWRpb1RyYWNrc0xlbmd0aCsrO1xyXG5cclxuICAgICAgICAgICAgdmFyIGF1ZGlvU291cmNlID0gc2VsZi5hdWRpb0NvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLnVzZUdhaW5Ob2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBhdWRpb1NvdXJjZS5jb25uZWN0KHNlbGYuZ2Fpbk5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZWxmLmF1ZGlvU291cmNlcy5wdXNoKGF1ZGlvU291cmNlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFhdWRpb1RyYWNrc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBiZWNhdXNlIFwic2VsZi5hdWRpb0NvbnRleHRcIiBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICAgICAgLy8gdGhhdCdzIHdoeSB3ZSd2ZSB0byBpZ25vcmUgcmVzdCBvZiB0aGUgY29kZVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLmF1ZGlvRGVzdGluYXRpb24gPSBzZWxmLmF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7XHJcbiAgICAgICAgc2VsZi5hdWRpb1NvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihhdWRpb1NvdXJjZSkge1xyXG4gICAgICAgICAgICBhdWRpb1NvdXJjZS5jb25uZWN0KHNlbGYuYXVkaW9EZXN0aW5hdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuYXVkaW9EZXN0aW5hdGlvbi5zdHJlYW07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VmlkZW8oc3RyZWFtKSB7XHJcbiAgICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuXHJcbiAgICAgICAgc2V0U3JjT2JqZWN0KHN0cmVhbSwgdmlkZW8pO1xyXG5cclxuICAgICAgICB2aWRlby5jbGFzc05hbWUgPSBlbGVtZW50Q2xhc3M7XHJcblxyXG4gICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICB2aWRlby52b2x1bWUgPSAwO1xyXG5cclxuICAgICAgICB2aWRlby53aWR0aCA9IHN0cmVhbS53aWR0aCB8fCBzZWxmLndpZHRoIHx8IDM2MDtcclxuICAgICAgICB2aWRlby5oZWlnaHQgPSBzdHJlYW0uaGVpZ2h0IHx8IHNlbGYuaGVpZ2h0IHx8IDI0MDtcclxuXHJcbiAgICAgICAgdmlkZW8ucGxheSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdmlkZW87XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdHJlYW1zID0gZnVuY3Rpb24oc3RyZWFtcykge1xyXG4gICAgICAgIGlmICghc3RyZWFtcykge1xyXG4gICAgICAgICAgICB0aHJvdyAnRmlyc3QgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIShzdHJlYW1zIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHN0cmVhbXMgPSBbc3RyZWFtc107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5raW5kID09PSAndmlkZW8nO1xyXG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmlkZW8gPSBnZXRWaWRlbyhzdHJlYW0pO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8uc3RyZWFtID0gc3RyZWFtO1xyXG4gICAgICAgICAgICAgICAgdmlkZW9zLnB1c2godmlkZW8pO1xyXG5cclxuICAgICAgICAgICAgICAgIG5ld1N0cmVhbS5hZGRUcmFjayhzdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5raW5kID09PSAndmlkZW8nO1xyXG4gICAgICAgICAgICAgICAgfSlbMF0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gJ2F1ZGlvJztcclxuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF1ZGlvU291cmNlID0gc2VsZi5hdWRpb0NvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuYXVkaW9EZXN0aW5hdGlvbiA9IHNlbGYuYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGF1ZGlvU291cmNlLmNvbm5lY3Qoc2VsZi5hdWRpb0Rlc3RpbmF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICBuZXdTdHJlYW0uYWRkVHJhY2soc2VsZi5hdWRpb0Rlc3RpbmF0aW9uLnN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIoZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0LmtpbmQgPT09ICdhdWRpbyc7XHJcbiAgICAgICAgICAgICAgICB9KVswXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFycmF5T2ZNZWRpYVN0cmVhbXMucHVzaChuZXdTdHJlYW0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJlbGVhc2VTdHJlYW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmlkZW9zID0gW107XHJcbiAgICAgICAgaXNTdG9wRHJhd2luZ0ZyYW1lcyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChzZWxmLmdhaW5Ob2RlKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZ2Fpbk5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICBzZWxmLmdhaW5Ob2RlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxmLmF1ZGlvU291cmNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc2VsZi5hdWRpb1NvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzZWxmLmF1ZGlvU291cmNlcyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuYXVkaW9EZXN0aW5hdGlvbikge1xyXG4gICAgICAgICAgICBzZWxmLmF1ZGlvRGVzdGluYXRpb24uZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICBzZWxmLmF1ZGlvRGVzdGluYXRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgICAgICAgIHNlbGYuYXVkaW9Db250ZXh0LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxmLmF1ZGlvQ29udGV4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmIChjYW52YXMuc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGNhbnZhcy5zdHJlYW0uc3RvcCgpO1xyXG4gICAgICAgICAgICBjYW52YXMuc3RyZWFtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVzZXRWaWRlb1N0cmVhbXMgPSBmdW5jdGlvbihzdHJlYW1zKSB7XHJcbiAgICAgICAgaWYgKHN0cmVhbXMgJiYgIShzdHJlYW1zIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHN0cmVhbXMgPSBbc3RyZWFtc107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXNldFZpZGVvU3RyZWFtcyhzdHJlYW1zKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gcmVzZXRWaWRlb1N0cmVhbXMoc3RyZWFtcykge1xyXG4gICAgICAgIHZpZGVvcyA9IFtdO1xyXG4gICAgICAgIHN0cmVhbXMgPSBzdHJlYW1zIHx8IGFycmF5T2ZNZWRpYVN0cmVhbXM7XHJcblxyXG4gICAgICAgIC8vIHZpYTogQGFkcmlhbi1iZXJcclxuICAgICAgICBzdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gJ3ZpZGVvJztcclxuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdmlkZW8gPSBnZXRWaWRlbyhzdHJlYW0pO1xyXG4gICAgICAgICAgICB2aWRlby5zdHJlYW0gPSBzdHJlYW07XHJcbiAgICAgICAgICAgIHZpZGVvcy5wdXNoKHZpZGVvKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgICB0aGlzLm5hbWUgPSAnTXVsdGlTdHJlYW1zTWl4ZXInO1xyXG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0TWl4ZWRTdHJlYW0gPSBnZXRNaXhlZFN0cmVhbTtcclxuXHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnIC8qICYmICEhbW9kdWxlLmV4cG9ydHMqLyApIHtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE11bHRpU3RyZWFtc01peGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICBkZWZpbmUoJ011bHRpU3RyZWFtc01peGVyJywgW10sIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTXVsdGlTdHJlYW1zTWl4ZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fXHJcbi8vIE11bHRpU3RyZWFtUmVjb3JkZXIuanNcclxuXHJcbi8qXHJcbiAqIFZpZGVvIGNvbmZlcmVuY2UgcmVjb3JkaW5nLCB1c2luZyBjYXB0dXJlU3RyZWFtIEFQSSBhbG9uZyB3aXRoIFdlYkF1ZGlvIGFuZCBDYW52YXMyRCBBUEkuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE11bHRpU3RyZWFtUmVjb3JkZXIgY2FuIHJlY29yZCBtdWx0aXBsZSB2aWRlb3MgaW4gc2luZ2xlIGNvbnRhaW5lci5cclxuICogQHN1bW1hcnkgTXVsdGktdmlkZW9zIHJlY29yZGVyLlxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgTXVsdGlTdHJlYW1SZWNvcmRlclxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIG9wdGlvbnMgPSB7XHJcbiAqICAgICBtaW1lVHlwZTogJ3ZpZGVvL3dlYm0nXHJcbiAqIH1cclxuICogdmFyIHJlY29yZGVyID0gbmV3IE11bHRpU3RyZWFtUmVjb3JkZXIoQXJyYXlPZk1lZGlhU3RyZWFtcywgb3B0aW9ucyk7XHJcbiAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAqXHJcbiAqICAgICAvLyBvclxyXG4gKiAgICAgdmFyIGJsb2IgPSByZWNvcmRlci5ibG9iO1xyXG4gKiB9KTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtc30gbWVkaWFTdHJlYW1zIC0gQXJyYXkgb2YgTWVkaWFTdHJlYW1zLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge2Rpc2FibGVMb2dzOnRydWUsIGZyYW1lSW50ZXJ2YWw6IDEsIG1pbWVUeXBlOiBcInZpZGVvL3dlYm1cIn1cclxuICovXHJcblxyXG5mdW5jdGlvbiBNdWx0aVN0cmVhbVJlY29yZGVyKGFycmF5T2ZNZWRpYVN0cmVhbXMsIG9wdGlvbnMpIHtcclxuICAgIGFycmF5T2ZNZWRpYVN0cmVhbXMgPSBhcnJheU9mTWVkaWFTdHJlYW1zIHx8IFtdO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHZhciBtaXhlcjtcclxuICAgIHZhciBtZWRpYVJlY29yZGVyO1xyXG5cclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHtcclxuICAgICAgICBlbGVtZW50Q2xhc3M6ICdtdWx0aS1zdHJlYW1zLW1peGVyJyxcclxuICAgICAgICBtaW1lVHlwZTogJ3ZpZGVvL3dlYm0nLFxyXG4gICAgICAgIHZpZGVvOiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAzNjAsXHJcbiAgICAgICAgICAgIGhlaWdodDogMjQwXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuZnJhbWVJbnRlcnZhbCkge1xyXG4gICAgICAgIG9wdGlvbnMuZnJhbWVJbnRlcnZhbCA9IDEwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3B0aW9ucy52aWRlbykge1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW8gPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW9wdGlvbnMudmlkZW8ud2lkdGgpIHtcclxuICAgICAgICBvcHRpb25zLnZpZGVvLndpZHRoID0gMzYwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3B0aW9ucy52aWRlby5oZWlnaHQpIHtcclxuICAgICAgICBvcHRpb25zLnZpZGVvLmhlaWdodCA9IDI0MDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlY29yZHMgYWxsIE1lZGlhU3RyZWFtcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVjb3JkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gZ2l0aHViL211YXota2hhbi9NdWx0aVN0cmVhbXNNaXhlclxyXG4gICAgICAgIG1peGVyID0gbmV3IE11bHRpU3RyZWFtc01peGVyKGFycmF5T2ZNZWRpYVN0cmVhbXMsIG9wdGlvbnMuZWxlbWVudENsYXNzIHx8ICdtdWx0aS1zdHJlYW1zLW1peGVyJyk7XHJcblxyXG4gICAgICAgIGlmIChnZXRBbGxWaWRlb1RyYWNrcygpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBtaXhlci5mcmFtZUludGVydmFsID0gb3B0aW9ucy5mcmFtZUludGVydmFsIHx8IDEwO1xyXG4gICAgICAgICAgICBtaXhlci53aWR0aCA9IG9wdGlvbnMudmlkZW8ud2lkdGggfHwgMzYwO1xyXG4gICAgICAgICAgICBtaXhlci5oZWlnaHQgPSBvcHRpb25zLnZpZGVvLmhlaWdodCB8fCAyNDA7XHJcbiAgICAgICAgICAgIG1peGVyLnN0YXJ0RHJhd2luZ0ZyYW1lcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMucHJldmlld1N0cmVhbSAmJiB0eXBlb2Ygb3B0aW9ucy5wcmV2aWV3U3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMucHJldmlld1N0cmVhbShtaXhlci5nZXRNaXhlZFN0cmVhbSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlY29yZCB1c2luZyBNZWRpYVJlY29yZGVyIEFQSVxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIgPSBuZXcgTWVkaWFTdHJlYW1SZWNvcmRlcihtaXhlci5nZXRNaXhlZFN0cmVhbSgpLCBvcHRpb25zKTtcclxuICAgICAgICBtZWRpYVJlY29yZGVyLnJlY29yZCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRBbGxWaWRlb1RyYWNrcygpIHtcclxuICAgICAgICB2YXIgdHJhY2tzID0gW107XHJcbiAgICAgICAgYXJyYXlPZk1lZGlhU3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xyXG4gICAgICAgICAgICBnZXRUcmFja3Moc3RyZWFtLCAndmlkZW8nKS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICB0cmFja3MucHVzaCh0cmFjayk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cmFja3M7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IGlzIHVzZWQgdG8gcGFzcyByZWNvcmRlZCBibG9iIGJhY2sgdG8gdGhlIGNhbGxlZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICAgICAgICBzZWxmLmJsb2IgPSBibG9iO1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2soYmxvYik7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF1c2VzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5wYXVzZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTXVsdGlTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyBjdXJyZW50bHkgcmVjb3JkZWQgZGF0YS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5jbGVhclJlY29yZGVkRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWl4ZXIpIHtcclxuICAgICAgICAgICAgbWl4ZXIucmVsZWFzZVN0cmVhbXMoKTtcclxuICAgICAgICAgICAgbWl4ZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZXh0cmEgbWVkaWEtc3RyZWFtcyB0byBleGlzdGluZyByZWNvcmRpbmdzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBwYXJhbSB7TWVkaWFTdHJlYW1zfSBtZWRpYVN0cmVhbXMgLSBBcnJheSBvZiBNZWRpYVN0cmVhbXNcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5hZGRTdHJlYW1zKFtuZXdBdWRpb1N0cmVhbSwgbmV3VmlkZW9TdHJlYW1dKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5hZGRTdHJlYW1zID0gZnVuY3Rpb24oc3RyZWFtcykge1xyXG4gICAgICAgIGlmICghc3RyZWFtcykge1xyXG4gICAgICAgICAgICB0aHJvdyAnRmlyc3QgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIShzdHJlYW1zIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHN0cmVhbXMgPSBbc3RyZWFtc107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcnJheU9mTWVkaWFTdHJlYW1zLmNvbmNhdChzdHJlYW1zKTtcclxuXHJcbiAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyIHx8ICFtaXhlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaXhlci5hcHBlbmRTdHJlYW1zKHN0cmVhbXMpO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5wcmV2aWV3U3RyZWFtICYmIHR5cGVvZiBvcHRpb25zLnByZXZpZXdTdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5wcmV2aWV3U3RyZWFtKG1peGVyLmdldE1peGVkU3RyZWFtKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldCB2aWRlb3MgZHVyaW5nIGxpdmUgcmVjb3JkaW5nLiBSZXBsYWNlIG9sZCB2aWRlb3MgZS5nLiByZXBsYWNlIGNhbWVyYXMgd2l0aCBmdWxsLXNjcmVlbi5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAcGFyYW0ge01lZGlhU3RyZWFtc30gbWVkaWFTdHJlYW1zIC0gQXJyYXkgb2YgTWVkaWFTdHJlYW1zXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVzZXRWaWRlb1N0cmVhbXMoW25ld1ZpZGVvMSwgbmV3VmlkZW8yXSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzZXRWaWRlb1N0cmVhbXMgPSBmdW5jdGlvbihzdHJlYW1zKSB7XHJcbiAgICAgICAgaWYgKCFtaXhlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RyZWFtcyAmJiAhKHN0cmVhbXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgc3RyZWFtcyA9IFtzdHJlYW1zXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1peGVyLnJlc2V0VmlkZW9TdHJlYW1zKHN0cmVhbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgTXVsdGlTdHJlYW1zTWl4ZXJcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogbGV0IG1peGVyID0gcmVjb3JkZXIuZ2V0TWl4ZXIoKTtcclxuICAgICAqIG1peGVyLmFwcGVuZFN0cmVhbXMoW25ld1N0cmVhbV0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmdldE1peGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1peGVyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgICB0aGlzLm5hbWUgPSAnTXVsdGlTdHJlYW1SZWNvcmRlcic7XHJcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH07XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLk11bHRpU3RyZWFtUmVjb3JkZXIgPSBNdWx0aVN0cmVhbVJlY29yZGVyO1xyXG59XG5cclxuLy8gX19fX19fX19fX19fX19fX19fX19fXHJcbi8vIFJlY29yZFJUQy5wcm9taXNlcy5qc1xyXG5cclxuLyoqXHJcbiAqIFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlciBhZGRzIHByb21pc2VzIHN1cHBvcnQgaW4ge0BsaW5rIFJlY29yZFJUQ30uIFRyeSBhIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9zaW1wbGUtZGVtb3MvUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyLmh0bWx8ZGVtbyBoZXJlfVxyXG4gKiBAc3VtbWFyeSBQcm9taXNlcyBmb3Ige0BsaW5rIFJlY29yZFJUQ31cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlclxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIHJlY29yZGVyID0gbmV3IFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlcihtZWRpYVN0cmVhbSwgb3B0aW9ucyk7XHJcbiAqIHJlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKClcclxuICogICAgICAgICAudGhlbihzdWNjZXNzQ0IpXHJcbiAqICAgICAgICAgLmNhdGNoKGVycm9yQ0IpO1xyXG4gKiAvLyBOb3RlOiBZb3UgY2FuIGFjY2VzcyBhbGwgUmVjb3JkUlRDIEFQSSB1c2luZyBcInJlY29yZGVyLnJlY29yZFJUQ1wiIGUuZy4gXHJcbiAqIHJlY29yZGVyLnJlY29yZFJUQy5vblN0YXRlQ2hhbmdlZCA9IGZ1bmN0aW9uKHN0YXRlKSB7fTtcclxuICogcmVjb3JkZXIucmVjb3JkUlRDLnNldFJlY29yZGluZ0R1cmF0aW9uKDUwMDApO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gU2luZ2xlIG1lZGlhLXN0cmVhbSBvYmplY3QsIGFycmF5IG9mIG1lZGlhLXN0cmVhbXMsIGh0bWwtY2FudmFzLWVsZW1lbnQsIGV0Yy5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIHt0eXBlOlwidmlkZW9cIiwgcmVjb3JkZXJUeXBlOiBNZWRpYVN0cmVhbVJlY29yZGVyLCBkaXNhYmxlTG9nczogdHJ1ZSwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiAxLCBidWZmZXJTaXplOiAwLCBzYW1wbGVSYXRlOiAwLCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgZXRjLn1cclxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIFwibmV3XCIga2V5d29yZCBpcyBub3QgdXNlZCB0byBpbml0aWF0ZSBcIlJlY29yZFJUQ1Byb21pc2VzSGFuZGxlclwiLiBBbHNvIHRocm93cyBlcnJvciBpZiBmaXJzdCBhcmd1bWVudCBcIk1lZGlhU3RyZWFtXCIgaXMgbWlzc2luZy5cclxuICogQHJlcXVpcmVzIHtAbGluayBSZWNvcmRSVEN9XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyKG1lZGlhU3RyZWFtLCBvcHRpb25zKSB7XHJcbiAgICBpZiAoIXRoaXMpIHtcclxuICAgICAgICB0aHJvdyAnVXNlIFwibmV3IFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlcigpXCInO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgbWVkaWFTdHJlYW0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhyb3cgJ0ZpcnN0IGFyZ3VtZW50IFwiTWVkaWFTdHJlYW1cIiBpcyByZXF1aXJlZC4nO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcm9wZXJ0eSB7QmxvYn0gYmxvYiAtIEFjY2Vzcy9yZWFjaCB0aGUgbmF0aXZlIHtAbGluayBSZWNvcmRSVEN9IG9iamVjdC5cclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBsZXQgaW50ZXJuYWwgPSByZWNvcmRlci5yZWNvcmRSVEMuZ2V0SW50ZXJuYWxSZWNvcmRlcigpO1xyXG4gICAgICogYWxlcnQoaW50ZXJuYWwgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbVJlY29yZGVyKTtcclxuICAgICAqIHJlY29yZGVyLnJlY29yZFJUQy5vblN0YXRlQ2hhbmdlZCA9IGZ1bmN0aW9uKHN0YXRlKSB7fTtcclxuICAgICAqL1xyXG4gICAgc2VsZi5yZWNvcmRSVEMgPSBuZXcgUmVjb3JkUlRDKG1lZGlhU3RyZWFtLCBvcHRpb25zKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlY29yZHMgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKVxyXG4gICAgICogICAgICAgICAudGhlbihzdWNjZXNzQ0IpXHJcbiAgICAgKiAgICAgICAgIC5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdGFydFJlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkUlRDLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSByZWNvcmRpbmcuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZygpLnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgKiAgICAgdmFyIGJsb2IgPSByZWNvcmRlci5nZXRCbG9iKCk7XHJcbiAgICAgKiB9KS5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdG9wUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRSVEMuc3RvcFJlY29yZGluZyhmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmJsb2IgPSBzZWxmLnJlY29yZFJUQy5nZXRCbG9iKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5ibG9iIHx8ICFzZWxmLmJsb2Iuc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0VtcHR5IGJsb2IuJywgc2VsZi5ibG9iKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nLiBZb3UgY2FuIHJlc3VtZSByZWNvcmRpbmcgdXNpbmcgXCJyZXN1bWVSZWNvcmRpbmdcIiBtZXRob2QuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucGF1c2VSZWNvcmRpbmcoKVxyXG4gICAgICogICAgICAgICAudGhlbihzdWNjZXNzQ0IpXHJcbiAgICAgKiAgICAgICAgIC5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5wYXVzZVJlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkUlRDLnBhdXNlUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgdGhlIHJlY29yZGluZy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKVxyXG4gICAgICogICAgICAgICAudGhlbihzdWNjZXNzQ0IpXHJcbiAgICAgKiAgICAgICAgIC5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXN1bWVSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlY29yZFJUQy5yZXN1bWVSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBkYXRhLXVybCBmb3IgdGhlIHJlY29yZGVkIGJsb2IuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZygpLnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgKiAgICAgcmVjb3JkZXIuZ2V0RGF0YVVSTCgpLnRoZW4oZnVuY3Rpb24oZGF0YVVSTCkge1xyXG4gICAgICogICAgICAgICB3aW5kb3cub3BlbihkYXRhVVJMKTtcclxuICAgICAqICAgICB9KS5jYXRjaChlcnJvckNCKTs7XHJcbiAgICAgKiB9KS5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXREYXRhVVJMID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlY29yZFJUQy5nZXREYXRhVVJMKGZ1bmN0aW9uKGRhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGFVUkwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlY29yZGVkIGJsb2IuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZygpLnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgKiAgICAgcmVjb3JkZXIuZ2V0QmxvYigpLnRoZW4oZnVuY3Rpb24oYmxvYikge30pXHJcbiAgICAgKiB9KS5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRCbG9iID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxmLnJlY29yZFJUQy5nZXRCbG9iKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpbnRlcm5hbCByZWNvcmRpbmcgb2JqZWN0LlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGxldCBpbnRlcm5hbFJlY29yZGVyID0gYXdhaXQgcmVjb3JkZXIuZ2V0SW50ZXJuYWxSZWNvcmRlcigpO1xyXG4gICAgICogaWYoaW50ZXJuYWxSZWNvcmRlciBpbnN0YW5jZW9mIE11bHRpU3RyZWFtUmVjb3JkZXIpIHtcclxuICAgICAqICAgICBpbnRlcm5hbFJlY29yZGVyLmFkZFN0cmVhbXMoW25ld0F1ZGlvU3RyZWFtXSk7XHJcbiAgICAgKiAgICAgaW50ZXJuYWxSZWNvcmRlci5yZXNldFZpZGVvU3RyZWFtcyhbc2NyZWVuU3RyZWFtXSk7XHJcbiAgICAgKiB9XHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRJbnRlcm5hbFJlY29yZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxmLnJlY29yZFJUQy5nZXRJbnRlcm5hbFJlY29yZGVyKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIHJlY29yZGVyLiBTbyB0aGF0IHlvdSBjYW4gcmV1c2Ugc2luZ2xlIHJlY29yZGVyIGluc3RhbmNlIG1hbnkgdGltZXMuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYXdhaXQgcmVjb3JkZXIucmVzZXQoKTtcclxuICAgICAqIHJlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7IC8vIHJlY29yZCBhZ2FpblxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxmLnJlY29yZFJUQy5yZXNldCgpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveSBSZWNvcmRSVEMgaW5zdGFuY2UuIENsZWFyIGFsbCByZWNvcmRlcnMgYW5kIG9iamVjdHMuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuZGVzdHJveSgpLnRoZW4oc3VjY2Vzc0NCKS5jYXRjaChlcnJvckNCKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxmLnJlY29yZFJUQy5kZXN0cm95KCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVjb3JkZXIncyByZWFkb25seSBzdGF0ZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBsZXQgc3RhdGUgPSBhd2FpdCByZWNvcmRlci5nZXRTdGF0ZSgpO1xyXG4gICAgICogLy8gb3JcclxuICAgICAqIHJlY29yZGVyLmdldFN0YXRlKCkudGhlbihzdGF0ZSA9PiB7IGNvbnNvbGUubG9nKHN0YXRlKTsgfSlcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IFJldHVybnMgcmVjb3JkaW5nIHN0YXRlLlxyXG4gICAgICovXHJcbiAgICB0aGlzLmdldFN0YXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxmLnJlY29yZFJUQy5nZXRTdGF0ZSgpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gUmVjb3JkZWQgZGF0YSBhcyBcIkJsb2JcIiBvYmplY3QuXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYXdhaXQgcmVjb3JkZXIuc3RvcFJlY29yZGluZygpO1xyXG4gICAgICogbGV0IGJsb2IgPSByZWNvcmRlci5nZXRCbG9iKCk7IC8vIG9yIFwicmVjb3JkZXIucmVjb3JkUlRDLmJsb2JcIlxyXG4gICAgICogaW52b2tlU2F2ZUFzRGlhbG9nKGJsb2IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmJsb2IgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVjb3JkUlRDIHZlcnNpb24gbnVtYmVyXHJcbiAgICAgKiBAcHJvcGVydHkge1N0cmluZ30gdmVyc2lvbiAtIFJlbGVhc2UgdmVyc2lvbiBudW1iZXIuXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAc3RhdGljXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBhbGVydChyZWNvcmRlci52ZXJzaW9uKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy52ZXJzaW9uID0gJzUuNS45JztcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyID0gUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyO1xyXG59XG5cclxuLy8gX19fX19fX19fX19fX19fX19fX19fX1xyXG4vLyBXZWJBc3NlbWJseVJlY29yZGVyLmpzXHJcblxyXG4vKipcclxuICogV2ViQXNzZW1ibHlSZWNvcmRlciBsZXRzIHlvdSBjcmVhdGUgd2VibSB2aWRlb3MgaW4gSmF2YVNjcmlwdCB2aWEgV2ViQXNzZW1ibHkuIFRoZSBsaWJyYXJ5IGNvbnN1bWVzIHJhdyBSR0JBMzIgYnVmZmVycyAoNCBieXRlcyBwZXIgcGl4ZWwpIGFuZCB0dXJucyB0aGVtIGludG8gYSB3ZWJtIHZpZGVvIHdpdGggdGhlIGdpdmVuIGZyYW1lcmF0ZSBhbmQgcXVhbGl0eS4gVGhpcyBtYWtlcyBpdCBjb21wYXRpYmxlIG91dC1vZi10aGUtYm94IHdpdGggSW1hZ2VEYXRhIGZyb20gYSBDQU5WQVMuIFdpdGggcmVhbHRpbWUgbW9kZSB5b3UgY2FuIGFsc28gdXNlIHdlYm0td2FzbSBmb3Igc3RyZWFtaW5nIHdlYm0gdmlkZW9zLlxyXG4gKiBAc3VtbWFyeSBWaWRlbyByZWNvcmRpbmcgZmVhdHVyZSBpbiBDaHJvbWUsIEZpcmVmb3ggYW5kIG1heWJlIEVkZ2UuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBXZWJBc3NlbWJseVJlY29yZGVyXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgV2ViQXNzZW1ibHlSZWNvcmRlcihtZWRpYVN0cmVhbSk7XHJcbiAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAqIH0pO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gTWVkaWFTdHJlYW0gb2JqZWN0IGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSBvciBnZW5lcmF0ZWQgdXNpbmcgY2FwdHVyZVN0cmVhbVVudGlsRW5kZWQgb3IgV2ViQXVkaW8gQVBJLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge3dlYkFzc2VtYmx5UGF0aDond2VibS13YXNtLndhc20nLHdvcmtlclBhdGg6ICd3ZWJtLXdvcmtlci5qcycsIGZyYW1lUmF0ZTogMzAsIHdpZHRoOiAxOTIwLCBoZWlnaHQ6IDEwODAsIGJpdHJhdGU6IDEwMjR9XHJcbiAqL1xyXG5mdW5jdGlvbiBXZWJBc3NlbWJseVJlY29yZGVyKHN0cmVhbSwgY29uZmlnKSB7XHJcbiAgICAvLyBiYXNlZCBvbjogZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3dlYm0td2FzbVxyXG5cclxuICAgIGlmICh0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBXcml0YWJsZVN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBiZWNhdXNlIGl0IGZpeGVzIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbXMgaXNzdWVzXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9sbG93aW5nIHBvbHlmaWxsIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkOiBodHRwczovL3VucGtnLmNvbS9AbWF0dGlhc2J1ZWxlbnMvd2ViLXN0cmVhbXMtcG9seWZpbGwvZGlzdC9wb2x5ZmlsbC5taW4uanMnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XHJcblxyXG4gICAgY29uZmlnLndpZHRoID0gY29uZmlnLndpZHRoIHx8IDY0MDtcclxuICAgIGNvbmZpZy5oZWlnaHQgPSBjb25maWcuaGVpZ2h0IHx8IDQ4MDtcclxuICAgIGNvbmZpZy5mcmFtZVJhdGUgPSBjb25maWcuZnJhbWVSYXRlIHx8IDMwO1xyXG4gICAgY29uZmlnLmJpdHJhdGUgPSBjb25maWcuYml0cmF0ZSB8fCAxMjAwO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlclVSTChidWZmZXIsIHR5cGUpIHtcclxuICAgICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgICAgICB0eXBlOiB0eXBlIHx8ICcnXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNhbWVyYVN0cmVhbSgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcclxuICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07XHJcbiAgICAgICAgICAgICAgICB2aWRlby5vbnBsYXlpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdnMud2lkdGggPSBjb25maWcud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgY3ZzLmhlaWdodCA9IGNvbmZpZy5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IGN2cy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZVRpbWVvdXQgPSAxMDAwIC8gY29uZmlnLmZyYW1lUmF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIGYoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UodmlkZW8sIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIGNvbmZpZy53aWR0aCwgY29uZmlnLmhlaWdodClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmLCBmcmFtZVRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGZyYW1lVGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdmlkZW8ucGxheSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHdvcmtlcjtcclxuXHJcbiAgICBmdW5jdGlvbiBzdGFydFJlY29yZGluZyhzdHJlYW0sIGJ1ZmZlcikge1xyXG4gICAgICAgIGlmICghY29uZmlnLndvcmtlclBhdGggJiYgIWJ1ZmZlcikge1xyXG4gICAgICAgICAgICAvLyBpcyBpdCBzYWZlIHRvIHVzZSBAbGF0ZXN0ID9cclxuICAgICAgICAgICAgZmV0Y2goXHJcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly91bnBrZy5jb20vd2VibS13YXNtQGxhdGVzdC9kaXN0L3dlYm0td29ya2VyLmpzJ1xyXG4gICAgICAgICAgICApLnRoZW4oZnVuY3Rpb24ocikge1xyXG4gICAgICAgICAgICAgICAgci5hcnJheUJ1ZmZlcigpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRSZWNvcmRpbmcoc3RyZWFtLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy53b3JrZXJQYXRoICYmIGJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25maWcud29ya2VyUGF0aCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy53b3JrZXJQYXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3dvcmtlclBhdGggcGFyYW1ldGVyIGlzIG1pc3NpbmcuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3b3JrZXIgPSBuZXcgV29ya2VyKGNvbmZpZy53b3JrZXJQYXRoKTtcclxuXHJcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGNvbmZpZy53ZWJBc3NlbWJseVBhdGggfHwgJ2h0dHBzOi8vdW5wa2cuY29tL3dlYm0td2FzbUBsYXRlc3QvZGlzdC93ZWJtLXdhc20ud2FzbScpO1xyXG4gICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09ICdSRUFEWScpIHtcclxuICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbmZpZy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNvbmZpZy5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgYml0cmF0ZTogY29uZmlnLmJpdHJhdGUgfHwgMTIwMCxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lYmFzZURlbjogY29uZmlnLmZyYW1lUmF0ZSB8fCAzMCxcclxuICAgICAgICAgICAgICAgICAgICByZWFsdGltZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FtZXJhU3RyZWFtKCkucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKGltYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShpbWFnZS5kYXRhLmJ1ZmZlciwgW2ltYWdlLmRhdGEuYnVmZmVyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEhZXZlbnQuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1BhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5T2ZCdWZmZXJzLnB1c2goZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlY29yZHMgdmlkZW8uXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2ViQXNzZW1ibHlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlY29yZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGFycmF5T2ZCdWZmZXJzID0gW107XHJcbiAgICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJsb2IgPSBudWxsO1xyXG4gICAgICAgIHN0YXJ0UmVjb3JkaW5nKHN0cmVhbSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmluaXRDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25maWcuaW5pdENhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaXNQYXVzZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdlYkFzc2VtYmx5UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaXNQYXVzZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdlYkFzc2VtYmx5UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXN1bWUoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXN1bWUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiB0ZXJtaW5hdGUoKSB7XHJcbiAgICAgICAgaWYgKCF3b3JrZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKG51bGwpO1xyXG4gICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcclxuICAgICAgICB3b3JrZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhcnJheU9mQnVmZmVycyA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcHMgcmVjb3JkaW5nIHZpZGVvLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiwgdGhhdCBpcyB1c2VkIHRvIHBhc3MgcmVjb3JkZWQgYmxvYiBiYWNrIHRvIHRoZSBjYWxsZWUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2ViQXNzZW1ibHlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICB0ZXJtaW5hdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ibG9iID0gbmV3IEJsb2IoYXJyYXlPZkJ1ZmZlcnMsIHtcclxuICAgICAgICAgICAgdHlwZTogJ3ZpZGVvL3dlYm0nXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNhbGxiYWNrKHRoaXMuYmxvYik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdXZWJBc3NlbWJseVJlY29yZGVyJztcclxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyBjdXJyZW50bHkgcmVjb3JkZWQgZGF0YS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXZWJBc3NlbWJseVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5jbGVhclJlY29yZGVkRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGFycmF5T2ZCdWZmZXJzID0gW107XHJcbiAgICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJsb2IgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyB0b2RvOiBpZiByZWNvcmRpbmctT04gdGhlbiBTVE9QIGl0IGZpcnN0XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gVGhlIHJlY29yZGVkIGJsb2Igb2JqZWN0LlxyXG4gICAgICogQG1lbWJlcm9mIFdlYkFzc2VtYmx5UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKCl7XHJcbiAgICAgKiAgICAgdmFyIGJsb2IgPSByZWNvcmRlci5ibG9iO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYmxvYiA9IG51bGw7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLldlYkFzc2VtYmx5UmVjb3JkZXIgPSBXZWJBc3NlbWJseVJlY29yZGVyO1xyXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9yZWNvcmRydGMvUmVjb3JkUlRDLmpzXG4vLyBtb2R1bGUgaWQgPSAxN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuXG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJlbW90aW9uc3JhdGluZ3NcIixcbiAgICB0aXRsZTogXCJFbW90aW9ucyBSYXRpbmdzXCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1lbW90aW9uc3JhdGluZ3NcIixcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiAkID09IFwiZnVuY3Rpb25cIiAmJiAhISQuZm4uZW1vdGlvbnNSYXRpbmc7XG4gICAgfSxcbiAgICBkZWZhdWx0SlNPTjoge1xuICAgICAgY2hvaWNlczogWzEsIDIsIDMsIDQsIDVdLFxuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJlbW90aW9uc3JhdGluZ3NcIjtcbiAgICB9LFxuICAgIGlzRGVmYXVsdFJlbmRlcjogZmFsc2UsXG4gICAgaHRtbFRlbXBsYXRlOiBcIjxkaXYgc3R5bGU9J2hlaWdodDogMzNweCc+PC9kaXY+XCIsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFxuICAgICAgICBcImVtb3Rpb25zcmF0aW5nc1wiLFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJoYXNPdGhlclwiLFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIm90aGVyVGV4dFwiLFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInJlbmRlckFzXCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBudWxsLFxuICAgICAgICBcImRyb3Bkb3duXCJcbiAgICAgICk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0aWVzKFwiZW1vdGlvbnNyYXRpbmdzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZW1vdGlvbnM6aXRlbXZhbHVlc1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImVtb3Rpb25zXCIsXG4gICAgICAgICAgY2F0ZWdvcnlJbmRleDogMSxcbiAgICAgICAgICBkZWZhdWx0OiBbXCJhbmdyeVwiLCBcImRpc2FwcG9pbnRlZFwiLCBcIm1laFwiLCBcImhhcHB5XCIsIFwiaW5Mb3ZlXCJdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJlbW90aW9uU2l6ZTpudW1iZXJcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJlbW90aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IDMwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJlbW90aW9uc0NvdW50Om51bWJlclwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImVtb3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogNSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiYmdFbW90aW9uXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZW1vdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcImhhcHB5XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtb3Rpb25Db2xvclwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImVtb3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCIjRkYwMDY2XCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgZW1vdGlvbnMgPSAocXVlc3Rpb24uZW1vdGlvbnMgfHwgW10pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGVtb3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlbW90aW9ucyA9IFtcImFuZ3J5XCIsIFwiZGlzYXBwb2ludGVkXCIsIFwibWVoXCIsIFwiaGFwcHlcIiwgXCJpbkxvdmVcIl07XG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgZW1vdGlvblNpemU6IHF1ZXN0aW9uLmVtb3Rpb25TaXplLFxuICAgICAgICBiZ0Vtb3Rpb246IHF1ZXN0aW9uLmJnRW1vdGlvbixcbiAgICAgICAgZW1vdGlvbnM6IGVtb3Rpb25zLFxuICAgICAgICBpbml0aWFsUmF0aW5nOiBxdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgY29sb3I6IHF1ZXN0aW9uLmVtb3Rpb25Db2xvcixcbiAgICAgICAgY291bnQ6IHF1ZXN0aW9uLmVtb3Rpb25zQ291bnQsXG4gICAgICAgIG9uVXBkYXRlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGluaXRXaWRnZXQoKTtcblxuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSBpbml0V2lkZ2V0O1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBpbml0V2lkZ2V0O1xuXG4gICAgICBmdW5jdGlvbiBpbml0V2lkZ2V0KCkge1xuICAgICAgICBlbC5pbm5lckhUTUwgPSBcIjxkaXY+PC9kaXY+XCI7XG4gICAgICAgICQoZWwpLm9mZigpO1xuICAgICAgICBvcHRpb25zLmluaXRpYWxSYXRpbmcgPSBxdWVzdGlvbi52YWx1ZSB8fCAwO1xuICAgICAgICBvcHRpb25zLmRpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seTtcbiAgICAgICAgJChlbCkuZmluZChcImRpdlwiKS5lbW90aW9uc1JhdGluZyhvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBlbC5pbm5lckhUTUwgPSBudWxsO1xuICAgICAgJChlbCkub2ZmKCk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgfSxcbiAgICBwZGZRdWVzdGlvblR5cGU6IFwiZHJvcGRvd25cIixcbiAgfTtcblxuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcImN1c3RvbXR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5LCB3aW5kb3cuJCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9lbW90aW9uc3JhdGluZ3MuanNcbi8vIG1vZHVsZSBpZCA9IDIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxMiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgaWNoZWNrIH0gZnJvbSBcIi4vaWNoZWNrLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNlbGVjdDIgfSBmcm9tIFwiLi9zZWxlY3QyLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlucHV0bWFzayB9IGZyb20gXCIuL2lucHV0bWFzay5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBqcXVlcnliYXJyYXRpbmcgfSBmcm9tIFwiLi9qcXVlcnktYmFyLXJhdGluZy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBqcXVlcnl1aWRhdGVwaWNrZXIgfSBmcm9tIFwiLi9qcXVlcnktdWktZGF0ZXBpY2tlci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub3Vpc2xpZGVyIH0gZnJvbSBcIi4vbm91aXNsaWRlci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzZWxlY3QydGFnYm94IH0gZnJvbSBcIi4vc2VsZWN0Mi10YWdib3guanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGFibGVqcyB9IGZyb20gXCIuL3NvcnRhYmxlanMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2tlZGl0b3IgfSBmcm9tIFwiLi9jay1lZGl0b3IuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXV0b2NvbXBsZXRlIH0gZnJvbSBcIi4vZWFzeS1hdXRvY29tcGxldGUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJldHR5Y2hlY2tib3ggfSBmcm9tIFwiLi9wcmV0dHktY2hlY2tib3guanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYm9vdHN0cmFwc2xpZGVyIH0gZnJvbSBcIi4vYm9vdHN0cmFwLXNsaWRlci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtaWNyb3Bob25lIH0gZnJvbSBcIi4vbWljcm9waG9uZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbW90aW9uc3JhdGluZ3MgfSBmcm9tIFwiLi9lbW90aW9uc3JhdGluZ3MuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYm9vdHN0cmFwZGF0ZXBpY2tlciB9IGZyb20gXCIuL2Jvb3RzdHJhcGRhdGVwaWNrZXIuanNcIjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3N1cnZleWpzLXdpZGdldHMuanNcbi8vIG1vZHVsZSBpZCA9IDIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuXG4gIGlmIChcbiAgICAhISQgJiZcbiAgICAhJC5mbi5ib290c3RyYXBEUCAmJlxuICAgICEhJC5mbi5kYXRlcGlja2VyICYmXG4gICAgISEkLmZuLmRhdGVwaWNrZXIubm9Db25mbGljdFxuICApIHtcbiAgICAkLmZuLmJvb3RzdHJhcERQID0gJC5mbi5kYXRlcGlja2VyLm5vQ29uZmxpY3QoKTtcbiAgICBpZiAoISQuZm4uZGF0ZXBpY2tlcikge1xuICAgICAgJC5mbi5kYXRlcGlja2VyID0gJC5mbi5ib290c3RyYXBEUDtcbiAgICB9XG4gIH1cbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImJvb3RzdHJhcGRhdGVwaWNrZXJcIixcbiAgICB0aXRsZTogXCJEYXRlIHBpY2tlclwiLFxuICAgIGljb25OYW1lOiBcImljb24tZGF0ZXBpY2tlclwiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEkICYmICEhJC5mbi5ib290c3RyYXBEUDtcbiAgICB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiYm9vdHN0cmFwZGF0ZXBpY2tlclwiO1xuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOlxuICAgICAgXCI8aW5wdXQgY2xhc3M9J2Zvcm0tY29udHJvbCB3aWRnZXQtZGF0ZXBpY2tlcicgdHlwZT0ndGV4dCcgc3R5bGU9J3dpZHRoOiAxMDAlOyc+XCIsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFxuICAgICAgICBcImJvb3RzdHJhcGRhdGVwaWNrZXJcIixcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJpbnB1dFR5cGVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaW5wdXRGb3JtYXRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaW5wdXRNYXNrXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwidGV4dFwiXG4gICAgICApO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydGllcyhcImJvb3RzdHJhcGRhdGVwaWNrZXJcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgLy8gQ2FuIHRha2UgYSBzdHJpbmcgb3IgYW4gT2JqZWN0LlxuICAgICAgICAgIC8vIGh0dHBzOi8vYm9vdHN0cmFwLWRhdGVwaWNrZXIucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29wdGlvbnMuaHRtbCNmb3JtYXRcbiAgICAgICAgICBuYW1lOiBcImRhdGVGb3JtYXRcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJtbS9kZC95eXl5XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBDYW4gdGFrZSBhIERhdGUgb3IgYSBzdHJpbmdcbiAgICAgICAgICAvLyBodHRwczovL2Jvb3RzdHJhcC1kYXRlcGlja2VyLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vcHRpb25zLmh0bWwjb3B0aW9uc1xuICAgICAgICAgIG5hbWU6IFwic3RhcnREYXRlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBDYW4gdGFrZSBhIERhdGUgb3IgYSBzdHJpbmdcbiAgICAgICAgICAvLyBodHRwczovL2Jvb3RzdHJhcC1kYXRlcGlja2VyLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9vcHRpb25zLmh0bWwjb3B0aW9uc1xuICAgICAgICAgIG5hbWU6IFwiZW5kRGF0ZVwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0b2RheUhpZ2hsaWdodDpib29sZWFuXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIndlZWtTdGFydDpudW1iZXJcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2xlYXJCdG46Ym9vbGVhblwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiYXV0b0Nsb3NlOmJvb2xlYW5cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGF5c09mV2Vla0hpZ2hsaWdodGVkOnN0cmluZ1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkaXNhYmxlVG91Y2hLZXlib2FyZDpib29sZWFuXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCkuaXMoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIilcbiAgICAgICAgPyAkKGVsKVxuICAgICAgICA6ICQoZWwpLmZpbmQoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIik7XG5cbiAgICAgIHZhciBwaWNrZXJXaWRnZXQgPSAkZWxcbiAgICAgICAgLmJvb3RzdHJhcERQKHtcbiAgICAgICAgICBlbmFibGVPblJlYWRvbmx5OiBmYWxzZSxcbiAgICAgICAgICBmb3JtYXQ6IHF1ZXN0aW9uLmRhdGVGb3JtYXQsXG4gICAgICAgICAgc3RhcnREYXRlOiAhIXF1ZXN0aW9uLnN0YXJ0RGF0ZVxuICAgICAgICAgICAgPyBxdWVzdGlvbi5zdGFydERhdGVcbiAgICAgICAgICAgIDogcXVlc3Rpb24ucmVuZGVyZWRNaW4sXG4gICAgICAgICAgZW5kRGF0ZTogISFxdWVzdGlvbi5lbmREYXRlID8gcXVlc3Rpb24uZW5kRGF0ZSA6IHF1ZXN0aW9uLnJlbmRlcmVkTWF4LFxuICAgICAgICAgIHRvZGF5SGlnaGxpZ2h0OiBxdWVzdGlvbi50b2RheUhpZ2hsaWdodCxcbiAgICAgICAgICB3ZWVrU3RhcnQ6IHF1ZXN0aW9uLndlZWtTdGFydCxcbiAgICAgICAgICBjbGVhckJ0bjogcXVlc3Rpb24uY2xlYXJCdG4sXG4gICAgICAgICAgYXV0b2Nsb3NlOiBxdWVzdGlvbi5hdXRvQ2xvc2UsXG4gICAgICAgICAgZGF5c09mV2Vla0hpZ2hsaWdodGVkOiBxdWVzdGlvbi5kYXlzT2ZXZWVrSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgZGlzYWJsZVRvdWNoS2V5Ym9hcmQ6IHF1ZXN0aW9uLmRpc2FibGVUb3VjaEtleWJvYXJkLFxuICAgICAgICB9KVxuICAgICAgICAub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgbmV3RGF0ZSA9IHBpY2tlcldpZGdldC5ib290c3RyYXBEUChcImdldFVUQ0RhdGVcIik7XG4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gbmV3RGF0ZSAmJiBuZXdEYXRlLnRvVVRDU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLnZhbHVlICE9IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwaWNrZXJXaWRnZXQuYm9vdHN0cmFwRFAoXG4gICAgICAgICAgXCJzZXRVVENEYXRlXCIsXG4gICAgICAgICAgISFxdWVzdGlvbi52YWx1ZSA/IG5ldyBEYXRlKHF1ZXN0aW9uLnZhbHVlKSA6IFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjaygpO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgJGVsLnByb3AoXCJyZWFkb25seVwiLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkZWwucmVtb3ZlQXR0cihcInJlYWRvbmx5XCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCkuaXMoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIilcbiAgICAgICAgPyAkKGVsKVxuICAgICAgICA6ICQoZWwpLmZpbmQoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIik7XG4gICAgICAkZWwuYm9vdHN0cmFwRFAoXCJkZXN0cm95XCIpO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJ0ZXh0XCIsXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYm9vdHN0cmFwZGF0ZXBpY2tlci5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==","/*!\n * surveyjs - Survey JavaScript library v1.8.51\n * Copyright (c) 2015-2021 Devsoft Baltic OÜ - http://surveyjs.io/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"survey-vue\", [\"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"survey-vue\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"Survey\"] = factory(root[\"Vue\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_vue__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/entries/vue.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/signature_pad/dist/signature_pad.mjs\":\n/*!***********************************************************!*\\\n !*** ./node_modules/signature_pad/dist/signature_pad.mjs ***!\n \\***********************************************************/\n/*! exports provided: default */\n/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/*!\n * Signature Pad v2.3.2\n * https://github.com/szimek/signature_pad\n *\n * Copyright 2017 Szymon Nowak\n * Released under the MIT license\n *\n * The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:\n * http://corner.squareup.com/2012/07/smoother-signatures.html\n *\n * Implementation of interpolation using cubic Bézier curves is taken from:\n * http://benknowscode.wordpress.com/2012/09/14/path-interpolation-using-cubic-bezier-and-control-point-estimation-in-javascript\n *\n * Algorithm for approximated length of a Bézier curve is taken from:\n * http://www.lemoda.net/maths/bezier-length/index.html\n *\n */\n\nfunction Point(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time || new Date().getTime();\n}\n\nPoint.prototype.velocityFrom = function (start) {\n return this.time !== start.time ? this.distanceTo(start) / (this.time - start.time) : 1;\n};\n\nPoint.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));\n};\n\nPoint.prototype.equals = function (other) {\n return this.x === other.x && this.y === other.y && this.time === other.time;\n};\n\nfunction Bezier(startPoint, control1, control2, endPoint) {\n this.startPoint = startPoint;\n this.control1 = control1;\n this.control2 = control2;\n this.endPoint = endPoint;\n}\n\n// Returns approximated length.\nBezier.prototype.length = function () {\n var steps = 10;\n var length = 0;\n var px = void 0;\n var py = void 0;\n\n for (var i = 0; i <= steps; i += 1) {\n var t = i / steps;\n var cx = this._point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);\n var cy = this._point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);\n if (i > 0) {\n var xdiff = cx - px;\n var ydiff = cy - py;\n length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n }\n px = cx;\n py = cy;\n }\n\n return length;\n};\n\n/* eslint-disable no-multi-spaces, space-in-parens */\nBezier.prototype._point = function (t, start, c1, c2, end) {\n return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + 3.0 * c2 * (1.0 - t) * t * t + end * t * t * t;\n};\n\n/* eslint-disable */\n\n// http://stackoverflow.com/a/27078401/815507\nfunction throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function later() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n\nfunction SignaturePad(canvas, options) {\n var self = this;\n var opts = options || {};\n\n this.velocityFilterWeight = opts.velocityFilterWeight || 0.7;\n this.minWidth = opts.minWidth || 0.5;\n this.maxWidth = opts.maxWidth || 2.5;\n this.throttle = 'throttle' in opts ? opts.throttle : 16; // in miliseconds\n this.minDistance = 'minDistance' in opts ? opts.minDistance : 5;\n\n if (this.throttle) {\n this._strokeMoveUpdate = throttle(SignaturePad.prototype._strokeUpdate, this.throttle);\n } else {\n this._strokeMoveUpdate = SignaturePad.prototype._strokeUpdate;\n }\n\n this.dotSize = opts.dotSize || function () {\n return (this.minWidth + this.maxWidth) / 2;\n };\n this.penColor = opts.penColor || 'black';\n this.backgroundColor = opts.backgroundColor || 'rgba(0,0,0,0)';\n this.onBegin = opts.onBegin;\n this.onEnd = opts.onEnd;\n\n this._canvas = canvas;\n this._ctx = canvas.getContext('2d');\n this.clear();\n\n // We need add these inline so they are available to unbind while still having\n // access to 'self' we could use _.bind but it's not worth adding a dependency.\n this._handleMouseDown = function (event) {\n if (event.which === 1) {\n self._mouseButtonDown = true;\n self._strokeBegin(event);\n }\n };\n\n this._handleMouseMove = function (event) {\n if (self._mouseButtonDown) {\n self._strokeMoveUpdate(event);\n }\n };\n\n this._handleMouseUp = function (event) {\n if (event.which === 1 && self._mouseButtonDown) {\n self._mouseButtonDown = false;\n self._strokeEnd(event);\n }\n };\n\n this._handleTouchStart = function (event) {\n if (event.targetTouches.length === 1) {\n var touch = event.changedTouches[0];\n self._strokeBegin(touch);\n }\n };\n\n this._handleTouchMove = function (event) {\n // Prevent scrolling.\n event.preventDefault();\n\n var touch = event.targetTouches[0];\n self._strokeMoveUpdate(touch);\n };\n\n this._handleTouchEnd = function (event) {\n var wasCanvasTouched = event.target === self._canvas;\n if (wasCanvasTouched) {\n event.preventDefault();\n self._strokeEnd(event);\n }\n };\n\n // Enable mouse and touch event handlers\n this.on();\n}\n\n// Public methods\nSignaturePad.prototype.clear = function () {\n var ctx = this._ctx;\n var canvas = this._canvas;\n\n ctx.fillStyle = this.backgroundColor;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n this._data = [];\n this._reset();\n this._isEmpty = true;\n};\n\nSignaturePad.prototype.fromDataURL = function (dataUrl) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var image = new Image();\n var ratio = options.ratio || window.devicePixelRatio || 1;\n var width = options.width || this._canvas.width / ratio;\n var height = options.height || this._canvas.height / ratio;\n\n this._reset();\n image.src = dataUrl;\n image.onload = function () {\n _this._ctx.drawImage(image, 0, 0, width, height);\n };\n this._isEmpty = false;\n};\n\nSignaturePad.prototype.toDataURL = function (type) {\n var _canvas;\n\n switch (type) {\n case 'image/svg+xml':\n return this._toSVG();\n default:\n for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n return (_canvas = this._canvas).toDataURL.apply(_canvas, [type].concat(options));\n }\n};\n\nSignaturePad.prototype.on = function () {\n this._handleMouseEvents();\n this._handleTouchEvents();\n};\n\nSignaturePad.prototype.off = function () {\n this._canvas.removeEventListener('mousedown', this._handleMouseDown);\n this._canvas.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n\n this._canvas.removeEventListener('touchstart', this._handleTouchStart);\n this._canvas.removeEventListener('touchmove', this._handleTouchMove);\n this._canvas.removeEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype.isEmpty = function () {\n return this._isEmpty;\n};\n\n// Private methods\nSignaturePad.prototype._strokeBegin = function (event) {\n this._data.push([]);\n this._reset();\n this._strokeUpdate(event);\n\n if (typeof this.onBegin === 'function') {\n this.onBegin(event);\n }\n};\n\nSignaturePad.prototype._strokeUpdate = function (event) {\n var x = event.clientX;\n var y = event.clientY;\n\n var point = this._createPoint(x, y);\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup && lastPointGroup[lastPointGroup.length - 1];\n var isLastPointTooClose = lastPoint && point.distanceTo(lastPoint) < this.minDistance;\n\n // Skip this point if it's too close to the previous one\n if (!(lastPoint && isLastPointTooClose)) {\n var _addPoint = this._addPoint(point),\n curve = _addPoint.curve,\n widths = _addPoint.widths;\n\n if (curve && widths) {\n this._drawCurve(curve, widths.start, widths.end);\n }\n\n this._data[this._data.length - 1].push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n};\n\nSignaturePad.prototype._strokeEnd = function (event) {\n var canDrawCurve = this.points.length > 2;\n var point = this.points[0]; // Point instance\n\n if (!canDrawCurve && point) {\n this._drawDot(point);\n }\n\n if (point) {\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup[lastPointGroup.length - 1]; // plain object\n\n // When drawing a dot, there's only one point in a group, so without this check\n // such group would end up with exactly the same 2 points.\n if (!point.equals(lastPoint)) {\n lastPointGroup.push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n }\n\n if (typeof this.onEnd === 'function') {\n this.onEnd(event);\n }\n};\n\nSignaturePad.prototype._handleMouseEvents = function () {\n this._mouseButtonDown = false;\n\n this._canvas.addEventListener('mousedown', this._handleMouseDown);\n this._canvas.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n};\n\nSignaturePad.prototype._handleTouchEvents = function () {\n // Pass touch events to canvas element on mobile IE11 and Edge.\n this._canvas.style.msTouchAction = 'none';\n this._canvas.style.touchAction = 'none';\n\n this._canvas.addEventListener('touchstart', this._handleTouchStart);\n this._canvas.addEventListener('touchmove', this._handleTouchMove);\n this._canvas.addEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype._reset = function () {\n this.points = [];\n this._lastVelocity = 0;\n this._lastWidth = (this.minWidth + this.maxWidth) / 2;\n this._ctx.fillStyle = this.penColor;\n};\n\nSignaturePad.prototype._createPoint = function (x, y, time) {\n var rect = this._canvas.getBoundingClientRect();\n\n return new Point(x - rect.left, y - rect.top, time || new Date().getTime());\n};\n\nSignaturePad.prototype._addPoint = function (point) {\n var points = this.points;\n var tmp = void 0;\n\n points.push(point);\n\n if (points.length > 2) {\n // To reduce the initial lag make it work with 3 points\n // by copying the first point to the beginning.\n if (points.length === 3) points.unshift(points[0]);\n\n tmp = this._calculateCurveControlPoints(points[0], points[1], points[2]);\n var c2 = tmp.c2;\n tmp = this._calculateCurveControlPoints(points[1], points[2], points[3]);\n var c3 = tmp.c1;\n var curve = new Bezier(points[1], c2, c3, points[2]);\n var widths = this._calculateCurveWidths(curve);\n\n // Remove the first element from the list,\n // so that we always have no more than 4 points in points array.\n points.shift();\n\n return { curve: curve, widths: widths };\n }\n\n return {};\n};\n\nSignaturePad.prototype._calculateCurveControlPoints = function (s1, s2, s3) {\n var dx1 = s1.x - s2.x;\n var dy1 = s1.y - s2.y;\n var dx2 = s2.x - s3.x;\n var dy2 = s2.y - s3.y;\n\n var m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };\n var m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };\n\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n\n var dxm = m1.x - m2.x;\n var dym = m1.y - m2.y;\n\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n\n var tx = s2.x - cm.x;\n var ty = s2.y - cm.y;\n\n return {\n c1: new Point(m1.x + tx, m1.y + ty),\n c2: new Point(m2.x + tx, m2.y + ty)\n };\n};\n\nSignaturePad.prototype._calculateCurveWidths = function (curve) {\n var startPoint = curve.startPoint;\n var endPoint = curve.endPoint;\n var widths = { start: null, end: null };\n\n var velocity = this.velocityFilterWeight * endPoint.velocityFrom(startPoint) + (1 - this.velocityFilterWeight) * this._lastVelocity;\n\n var newWidth = this._strokeWidth(velocity);\n\n widths.start = this._lastWidth;\n widths.end = newWidth;\n\n this._lastVelocity = velocity;\n this._lastWidth = newWidth;\n\n return widths;\n};\n\nSignaturePad.prototype._strokeWidth = function (velocity) {\n return Math.max(this.maxWidth / (velocity + 1), this.minWidth);\n};\n\nSignaturePad.prototype._drawPoint = function (x, y, size) {\n var ctx = this._ctx;\n\n ctx.moveTo(x, y);\n ctx.arc(x, y, size, 0, 2 * Math.PI, false);\n this._isEmpty = false;\n};\n\nSignaturePad.prototype._drawCurve = function (curve, startWidth, endWidth) {\n var ctx = this._ctx;\n var widthDelta = endWidth - startWidth;\n var drawSteps = Math.floor(curve.length());\n\n ctx.beginPath();\n\n for (var i = 0; i < drawSteps; i += 1) {\n // Calculate the Bezier (x, y) coordinate for this step.\n var t = i / drawSteps;\n var tt = t * t;\n var ttt = tt * t;\n var u = 1 - t;\n var uu = u * u;\n var uuu = uu * u;\n\n var x = uuu * curve.startPoint.x;\n x += 3 * uu * t * curve.control1.x;\n x += 3 * u * tt * curve.control2.x;\n x += ttt * curve.endPoint.x;\n\n var y = uuu * curve.startPoint.y;\n y += 3 * uu * t * curve.control1.y;\n y += 3 * u * tt * curve.control2.y;\n y += ttt * curve.endPoint.y;\n\n var width = startWidth + ttt * widthDelta;\n this._drawPoint(x, y, width);\n }\n\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._drawDot = function (point) {\n var ctx = this._ctx;\n var width = typeof this.dotSize === 'function' ? this.dotSize() : this.dotSize;\n\n ctx.beginPath();\n this._drawPoint(point.x, point.y, width);\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._fromData = function (pointGroups, drawCurve, drawDot) {\n for (var i = 0; i < pointGroups.length; i += 1) {\n var group = pointGroups[i];\n\n if (group.length > 1) {\n for (var j = 0; j < group.length; j += 1) {\n var rawPoint = group[j];\n var point = new Point(rawPoint.x, rawPoint.y, rawPoint.time);\n var color = rawPoint.color;\n\n if (j === 0) {\n // First point in a group. Nothing to draw yet.\n\n // All points in the group have the same color, so it's enough to set\n // penColor just at the beginning.\n this.penColor = color;\n this._reset();\n\n this._addPoint(point);\n } else if (j !== group.length - 1) {\n // Middle point in a group.\n var _addPoint2 = this._addPoint(point),\n curve = _addPoint2.curve,\n widths = _addPoint2.widths;\n\n if (curve && widths) {\n drawCurve(curve, widths, color);\n }\n } else {\n // Last point in a group. Do nothing.\n }\n }\n } else {\n this._reset();\n var _rawPoint = group[0];\n drawDot(_rawPoint);\n }\n }\n};\n\nSignaturePad.prototype._toSVG = function () {\n var _this2 = this;\n\n var pointGroups = this._data;\n var canvas = this._canvas;\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\n var minX = 0;\n var minY = 0;\n var maxX = canvas.width / ratio;\n var maxY = canvas.height / ratio;\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'width', canvas.width);\n svg.setAttributeNS(null, 'height', canvas.height);\n\n this._fromData(pointGroups, function (curve, widths, color) {\n var path = document.createElement('path');\n\n // Need to check curve for NaN values, these pop up when drawing\n // lines on the canvas that are not continuous. E.g. Sharp corners\n // or stopping mid-stroke and than continuing without lifting mouse.\n if (!isNaN(curve.control1.x) && !isNaN(curve.control1.y) && !isNaN(curve.control2.x) && !isNaN(curve.control2.y)) {\n var attr = 'M ' + curve.startPoint.x.toFixed(3) + ',' + curve.startPoint.y.toFixed(3) + ' ' + ('C ' + curve.control1.x.toFixed(3) + ',' + curve.control1.y.toFixed(3) + ' ') + (curve.control2.x.toFixed(3) + ',' + curve.control2.y.toFixed(3) + ' ') + (curve.endPoint.x.toFixed(3) + ',' + curve.endPoint.y.toFixed(3));\n\n path.setAttribute('d', attr);\n path.setAttribute('stroke-width', (widths.end * 2.25).toFixed(3));\n path.setAttribute('stroke', color);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke-linecap', 'round');\n\n svg.appendChild(path);\n }\n }, function (rawPoint) {\n var circle = document.createElement('circle');\n var dotSize = typeof _this2.dotSize === 'function' ? _this2.dotSize() : _this2.dotSize;\n circle.setAttribute('r', dotSize);\n circle.setAttribute('cx', rawPoint.x);\n circle.setAttribute('cy', rawPoint.y);\n circle.setAttribute('fill', rawPoint.color);\n\n svg.appendChild(circle);\n });\n\n var prefix = 'data:image/svg+xml;base64,';\n var header = '';\n var body = svg.innerHTML;\n\n // IE hack for missing innerHTML property on SVGElement\n if (body === undefined) {\n var dummy = document.createElement('dummy');\n var nodes = svg.childNodes;\n dummy.innerHTML = '';\n\n for (var i = 0; i < nodes.length; i += 1) {\n dummy.appendChild(nodes[i].cloneNode(true));\n }\n\n body = dummy.innerHTML;\n }\n\n var footer = '';\n var data = header + body + footer;\n\n return prefix + btoa(data);\n};\n\nSignaturePad.prototype.fromData = function (pointGroups) {\n var _this3 = this;\n\n this.clear();\n\n this._fromData(pointGroups, function (curve, widths) {\n return _this3._drawCurve(curve, widths.start, widths.end);\n }, function (rawPoint) {\n return _this3._drawDot(rawPoint);\n });\n\n this._data = pointGroups;\n};\n\nSignaturePad.prototype.toData = function () {\n return this._data;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/sortablejs/modular/sortable.esm.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/sortablejs/modular/sortable.esm.js ***!\n \\*********************************************************/\n/*! exports provided: default, MultiDrag, Sortable, Swap */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultiDrag\", function() { return MultiDragPlugin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Sortable\", function() { return Sortable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Swap\", function() { return SwapPlugin; });\n/**!\n * Sortable 1.13.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.13.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Sortable);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return BooleanCheckbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boolean */ \"./src/vue/boolean.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar BooleanCheckbox = /** @class */ (function (_super) {\n __extends(BooleanCheckbox, _super);\n function BooleanCheckbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BooleanCheckbox = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BooleanCheckbox);\n return BooleanCheckbox;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-boolean-checkbox\", BooleanCheckbox);\nsurvey_core__WEBPACK_IMPORTED_MODULE_3__[\"RendererFactory\"].Instance.registerRenderer(\"boolean\", \"checkbox\", \"sv-boolean-checkbox\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (BooleanCheckbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return BooleanSwitch; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _boolean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boolean */ \"./src/vue/boolean.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar BooleanSwitch = /** @class */ (function (_super) {\n __extends(BooleanSwitch, _super);\n function BooleanSwitch() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BooleanSwitch = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BooleanSwitch);\n return BooleanSwitch;\n}(_boolean__WEBPACK_IMPORTED_MODULE_2__[\"Boolean\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-boolean\", BooleanSwitch);\n/* harmony default export */ __webpack_exports__[\"default\"] = (BooleanSwitch);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return ButtonGroup; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ButtonGroup = /** @class */ (function (_super) {\n __extends(ButtonGroup, _super);\n function ButtonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ButtonGroup.prototype.getModel = function () {\n return this.question;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroup.prototype, \"question\", void 0);\n ButtonGroup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ButtonGroup);\n return ButtonGroup;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"QuestionVue\"]));\n\n// Vue.component(\"survey-buttongroup\", ButtonGroup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ButtonGroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return ButtonGroupItem; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar ButtonGroupItem = /** @class */ (function (_super) {\n __extends(ButtonGroupItem, _super);\n function ButtonGroupItem(props) {\n var _this = _super.call(this, props) || this;\n _this.model = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"ButtonGroupItemModel\"](_this.question, _this.item, _this.index);\n return _this;\n }\n ButtonGroupItem.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ButtonGroupItem.prototype, \"index\", void 0);\n ButtonGroupItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ButtonGroupItem);\n return ButtonGroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-button-group-item\", ButtonGroupItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ButtonGroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return Checkbox; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Checkbox = /** @class */ (function (_super) {\n __extends(Checkbox, _super);\n function Checkbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Checkbox.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n Checkbox = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Checkbox);\n return Checkbox;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox\", Checkbox);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Checkbox);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return CheckboxItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar CheckboxItem = /** @class */ (function (_super) {\n __extends(CheckboxItem, _super);\n function CheckboxItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CheckboxItem.prototype.getModel = function () {\n return this.item;\n };\n Object.defineProperty(CheckboxItem.prototype, \"isAllSelected\", {\n get: function () {\n return this.question.isAllSelected;\n },\n set: function (val) {\n this.question.isAllSelected = val;\n },\n enumerable: false,\n configurable: true\n });\n CheckboxItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CheckboxItem.prototype, \"hideLabel\", void 0);\n CheckboxItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], CheckboxItem);\n return CheckboxItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-checkbox-item\", CheckboxItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CheckboxItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return Comment; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Comment = /** @class */ (function (_super) {\n __extends(Comment, _super);\n function Comment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Comment.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n Comment.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Comment = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Comment);\n return Comment;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-comment\", Comment);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Comment);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return ActionBarItemDropdownViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionBarItemDropdownViewModel = /** @class */ (function (_super) {\n __extends(ActionBarItemDropdownViewModel, _super);\n function ActionBarItemDropdownViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionBarItemDropdownViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarItemDropdownViewModel);\n return ActionBarItemDropdownViewModel;\n}(_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar-item-dropdown\", ActionBarItemDropdownViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarItemDropdownViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return ActionBarItemViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ActionBarItemViewModel = /** @class */ (function (_super) {\n __extends(ActionBarItemViewModel, _super);\n function ActionBarItemViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionBarItemViewModel.prototype.getModel = function () {\n return this.item.stateItem;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionBarItemViewModel.prototype, \"item\", void 0);\n ActionBarItemViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionBarItemViewModel);\n return ActionBarItemViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-item\", ActionBarItemViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarItemViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return ActionBarSeparatorViewModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ActionBarSeparatorViewModel = /** @class */ (function (_super) {\n __extends(ActionBarSeparatorViewModel, _super);\n function ActionBarSeparatorViewModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ActionBarSeparatorViewModel.prototype, \"innerCss\", {\n get: function () {\n return this.item && this.item.innerCss;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionBarSeparatorViewModel.prototype, \"item\", void 0);\n ActionBarSeparatorViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionBarSeparatorViewModel);\n return ActionBarSeparatorViewModel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action-bar-separator\", ActionBarSeparatorViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarSeparatorViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************************/\n/*! exports provided: ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return ActionBarViewModel; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./action-bar-item.vue */ \"./src/vue/components/action-bar/action-bar-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_3__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_4__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./action-bar-separator.vue */ \"./src/vue/components/action-bar/action-bar-separator.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_5__[\"ActionBarSeparatorViewModel\"]; });\n\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar ActionBarViewModel = /** @class */ (function (_super) {\n __extends(ActionBarViewModel, _super);\n function ActionBarViewModel() {\n var _this = _super.call(this) || this;\n _this.model = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"ActionBar\"]();\n _this.model.setItems(_this.items);\n return _this;\n }\n Object.defineProperty(ActionBarViewModel.prototype, \"wrappedItems\", {\n get: function () {\n return this.model.items;\n },\n enumerable: false,\n configurable: true\n });\n ActionBarViewModel.prototype.getComponentName = function (item) {\n return item.component || \"sv-action-bar-item\";\n };\n Object.defineProperty(ActionBarViewModel.prototype, \"hasItems\", {\n get: function () {\n return (this.model.items || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"items\", void 0);\n ActionBarViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarViewModel);\n return ActionBarViewModel;\n}(vue__WEBPACK_IMPORTED_MODULE_1___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"sv-action-bar\", ActionBarViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionBarViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************************************/\n/*! exports provided: DefaultTitle, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return DefaultTitle; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar DefaultTitle = /** @class */ (function (_super) {\n __extends(DefaultTitle, _super);\n function DefaultTitle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsed = false;\n return _this;\n }\n Object.defineProperty(DefaultTitle.prototype, \"showIcon\", {\n get: function () {\n return this.element.isExpanded || this.element.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n DefaultTitle.prototype.changeExpanded = function () {\n this.element.toggleState();\n };\n DefaultTitle.prototype.getIconCss = function (isCollapsed) {\n var result = this.css.question.icon;\n if (!isCollapsed)\n result += \" \" + this.css.question.iconExpanded;\n return result;\n };\n DefaultTitle.prototype.mounted = function () {\n var _this = this;\n this.isCollapsed = this.element.isCollapsed;\n this.element.stateChangedCallback = function () {\n _this.isCollapsed = _this.element.isCollapsed;\n };\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n ], DefaultTitle.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__[\"Prop\"])()\n ], DefaultTitle.prototype, \"css\", void 0);\n DefaultTitle = __decorate([\n vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ], DefaultTitle);\n return DefaultTitle;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-default-title\", DefaultTitle);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DefaultTitle);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: List, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return List; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar List = /** @class */ (function (_super) {\n __extends(List, _super);\n function List() {\n return _super.call(this) || this;\n }\n List.prototype.getModel = function () {\n return this.model;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], List.prototype, \"model\", void 0);\n List = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], List);\n return List;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-list\", List);\n/* harmony default export */ __webpack_exports__[\"default\"] = (List);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return SurveyQuestionMatrixDetailButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDetailButton = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDetailButton, _super);\n function SurveyQuestionMatrixDetailButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyQuestionMatrixDetailButton.prototype, \"row\", {\n get: function () {\n return this.item.data.row;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDetailButton.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDetailButton.prototype, \"item\", void 0);\n SurveyQuestionMatrixDetailButton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDetailButton);\n return SurveyQuestionMatrixDetailButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-detail-button\", SurveyQuestionMatrixDetailButton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDetailButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return SurveyQuestionMatrixDynamicRemoveButton; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyQuestionMatrixDynamicRemoveButton = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDynamicRemoveButton, _super);\n function SurveyQuestionMatrixDynamicRemoveButton() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyQuestionMatrixDynamicRemoveButton.prototype, \"row\", {\n get: function () {\n return this.item.data.row;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDynamicRemoveButton.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDynamicRemoveButton.prototype, \"item\", void 0);\n SurveyQuestionMatrixDynamicRemoveButton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDynamicRemoveButton);\n return SurveyQuestionMatrixDynamicRemoveButton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-remove-button\", SurveyQuestionMatrixDynamicRemoveButton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicRemoveButton);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************************/\n/*! exports provided: PopupContainer, showModal, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return PopupContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return showModal; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar PopupContainer = /** @class */ (function (_super) {\n __extends(PopupContainer, _super);\n function PopupContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PopupContainer.prototype.getModel = function () {\n return this.model;\n };\n PopupContainer.prototype.clickInside = function (event) {\n event.stopPropagation();\n };\n PopupContainer.prototype.onUpdated = function () {\n if (!this.prevIsVisible && this.model.isVisible && !this.model.isModal) {\n this.model.updatePosition();\n }\n this.prevIsVisible = this.model.isVisible;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PopupContainer.prototype, \"model\", void 0);\n PopupContainer = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PopupContainer);\n return PopupContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nfunction showModal(componentName, data, onApply, onCancel) {\n var popupModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupModel\"](componentName, data, \"top\", \"left\", false, true, onCancel, onApply);\n var popupViewModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"](popupModel, undefined);\n popupViewModel.initializePopupContainer();\n var popup = new PopupContainer({\n el: popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: popupViewModel },\n });\n popupModel.onHide = function () {\n popup.$destroy();\n popupViewModel.destroyPopupContainer();\n };\n popupViewModel.model.isVisible = true;\n}\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].showModal = showModal;\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup-container\", PopupContainer);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PopupContainer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return Popup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _popup_container_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./popup-container.vue */ \"./src/vue/components/popup/popup-container.vue\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Popup.prototype.getModel = function () {\n return this.model;\n };\n Popup.prototype.onMounted = function () {\n this.popupViewModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"PopupBaseViewModel\"](this.model, this.$el.parentElement);\n this.popupViewModel.initializePopupContainer();\n this.popupContainer = new _popup_container_vue__WEBPACK_IMPORTED_MODULE_3__[\"PopupContainer\"]({\n el: this.popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: this.popupViewModel },\n });\n };\n Popup.prototype.destroyed = function () {\n this.popupContainer.$destroy();\n this.popupViewModel.destroyPopupContainer();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Popup.prototype, \"model\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Popup.prototype, \"targetElement\", void 0);\n Popup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Popup);\n return Popup;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-popup\", Popup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Popup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return SvgIcon; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar SvgIcon = /** @class */ (function (_super) {\n __extends(SvgIcon, _super);\n function SvgIcon() {\n return _super.call(this) || this;\n }\n SvgIcon.prototype.onSizePropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onWidthPropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onHeightPropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onIconNamePropertyChanged = function () {\n this.onUpdated();\n };\n SvgIcon.prototype.onUpdated = function () {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createSvg\"])(this.size, this.width, this.height, this.iconName, this.svgIconElement);\n };\n SvgIcon.prototype.onMounted = function () {\n this.svgIconElement = this.$refs[\"svgIcon\"];\n this.onUpdated();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"size\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"width\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"height\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SvgIcon.prototype, \"iconName\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"size\")\n ], SvgIcon.prototype, \"onSizePropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"width\")\n ], SvgIcon.prototype, \"onWidthPropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"height\")\n ], SvgIcon.prototype, \"onHeightPropertyChanged\", null);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"iconName\")\n ], SvgIcon.prototype, \"onIconNamePropertyChanged\", null);\n SvgIcon = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SvgIcon);\n return SvgIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-svg-icon\", SvgIcon);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SvgIcon);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return TitleActions; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar TitleActions = /** @class */ (function (_super) {\n __extends(TitleActions, _super);\n function TitleActions() {\n return _super.call(this) || this;\n }\n Object.defineProperty(TitleActions.prototype, \"items\", {\n get: function () {\n return this.element.getTitleActions();\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleActions.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleActions.prototype, \"css\", void 0);\n TitleActions = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TitleActions);\n return TitleActions;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_2__[\"RendererFactory\"].Instance.registerRenderer(\"element\", \"title-actions\", \"sv-title-actions\");\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-title-actions\", TitleActions);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleActions);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************************************************************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return Composite; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Composite = /** @class */ (function (_super) {\n __extends(Composite, _super);\n function Composite() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Composite.prototype, \"contentPanel\", {\n get: function () {\n return this.question.contentPanel;\n },\n enumerable: false,\n configurable: true\n });\n Composite = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Composite);\n return Composite;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-composite\", Composite);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Composite);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return Custom; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Custom.prototype, \"contentQuestion\", {\n get: function () {\n return this.question.contentQuestion;\n },\n enumerable: false,\n configurable: true\n });\n Custom.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n Custom = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Custom);\n return Custom;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-custom\", Custom);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Custom);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return CustomWidget; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar CustomWidget = /** @class */ (function (_super) {\n __extends(CustomWidget, _super);\n function CustomWidget() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(CustomWidget.prototype, \"hasDefaultRender\", {\n get: function () {\n return this.question.customWidget.isDefaultRender || this.hasVueComponent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate ? true : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"customHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasVueComponent\", {\n get: function () {\n var options = vue__WEBPACK_IMPORTED_MODULE_0___default.a[\"options\"];\n if (!options)\n return false;\n return (options.components && options.components[this.question.customWidget.name]);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"componentName\", {\n get: function () {\n if (this.hasVueComponent)\n return this.question.customWidget.name;\n return \"survey-\" + this.question.getTemplate();\n },\n enumerable: false,\n configurable: true\n });\n CustomWidget.prototype.mounted = function () {\n this.question.customWidget.afterRender(this.question, this.$el);\n };\n CustomWidget.prototype.updated = function () {\n //this.question.customWidget.afterRender(this.question, this.$el);\n };\n CustomWidget.prototype.beforeDestroy = function () {\n this.question.customWidget.willUnmount(this.question, this.$el);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CustomWidget.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], CustomWidget.prototype, \"question\", void 0);\n CustomWidget = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], CustomWidget);\n return CustomWidget;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-customwidget\", CustomWidget);\n/* harmony default export */ __webpack_exports__[\"default\"] = (CustomWidget);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/drag-drop-td.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/drag-drop-td.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: DragDropTD, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropTD\", function() { return DragDropTD; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar DragDropTD = /** @class */ (function (_super) {\n __extends(DragDropTD, _super);\n function DragDropTD() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], DragDropTD.prototype, \"question\", void 0);\n DragDropTD = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], DragDropTD);\n return DragDropTD;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"drag-drop-td\", DragDropTD);\n/* harmony default export */ __webpack_exports__[\"default\"] = (DragDropTD);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Dropdown = /** @class */ (function (_super) {\n __extends(Dropdown, _super);\n function Dropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Dropdown.prototype, \"isOtherSelected\", {\n get: function () {\n var question = this.question;\n return question.hasOther && question.isOtherSelected;\n },\n enumerable: false,\n configurable: true\n });\n Dropdown = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Dropdown);\n return Dropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-dropdown\", Dropdown);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Dropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return SurveyElementVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyElementVue = /** @class */ (function (_super) {\n __extends(SurveyElementVue, _super);\n function SurveyElementVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyElementVue.prototype.getComponentName = function (element) {\n if (element.customWidget)\n return \"survey-customwidget\";\n if (element.getType() === \"panel\" || element.isDefaultRendering()) {\n return \"survey-\" + element.getTemplate();\n }\n return element.getComponentName();\n };\n SurveyElementVue.prototype.getRootClass = function (element) {\n var cssRoot = element.cssRoot;\n if (element.isReadOnly) {\n cssRoot += \" \" + this.element.cssClasses.disabled;\n }\n return cssRoot;\n };\n SurveyElementVue.prototype.getContentClass = function (element) {\n return element.cssContent;\n };\n Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return !this.element.isPanel && this.survey.questionErrorLocation === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return (!this.element.isPanel && this.survey.questionErrorLocation === \"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyElementVue.prototype.mounted = function () {\n if (!this.element.isPanel) {\n this.element.afterRender(this.$el);\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyElementVue.prototype, \"element\", void 0);\n SurveyElementVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyElementVue);\n return SurveyElementVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element\", SurveyElementVue);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyElementVue);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return ElementHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar ElementHeader = /** @class */ (function (_super) {\n __extends(ElementHeader, _super);\n function ElementHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ElementHeader.prototype.beforeDestroy = function () {\n this.element.stateChangedCallback = null;\n };\n ElementHeader.prototype.getTitleClass = function (element) {\n return element.cssTitle;\n };\n ElementHeader.prototype.getHeaderClass = function (element) {\n return element.cssHeader;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ElementHeader.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ElementHeader.prototype, \"css\", void 0);\n ElementHeader = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ElementHeader);\n return ElementHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element-header\", ElementHeader);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ElementHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return Empty; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Empty = /** @class */ (function (_super) {\n __extends(Empty, _super);\n function Empty() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Empty = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Empty);\n return Empty;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-empty\", Empty);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Empty);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return Errors; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Errors = /** @class */ (function (_super) {\n __extends(Errors, _super);\n function Errors() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Errors.prototype, \"classes\", {\n get: function () {\n var question = this.question;\n var classes = question.cssClasses\n ? question.cssClasses.error.root\n : \"panel-error-root\";\n var additionalClasses = \"\";\n if (this.location === \"top\") {\n additionalClasses = question.cssClasses.error.locationTop;\n }\n else if (this.location === \"bottom\") {\n additionalClasses = question.cssClasses.error.locationBottom;\n }\n if (additionalClasses)\n classes += \" \" + additionalClasses;\n return classes;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"location\", void 0);\n Errors = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Errors);\n return Errors;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-errors\", Errors);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Errors);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return Expression; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Expression = /** @class */ (function (_super) {\n __extends(Expression, _super);\n function Expression() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Expression = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Expression);\n return Expression;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-expression\", Expression);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Expression);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: File, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return File; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar File = /** @class */ (function (_super) {\n __extends(File, _super);\n function File() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onDragOver = function (event) {\n if (_this.question.isReadOnly) {\n event.returnValue = false;\n return false;\n }\n event.dataTransfer.dropEffect = \"copy\";\n event.preventDefault();\n };\n _this.onDrop = function (event) {\n event.preventDefault();\n var src = event.dataTransfer;\n _this.onChange(src);\n };\n return _this;\n }\n File.prototype.doChange = function (event) {\n var src = event.target || event.srcElement;\n this.onChange(src);\n };\n File.prototype.doClean = function (event) {\n var question = this.question;\n var src = event.target || event.srcElement;\n if (question.needConfirmRemoveFile) {\n var isConfirmed = Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"confirmAction\"])(question.confirmRemoveAllMessage);\n if (!isConfirmed)\n return;\n }\n question.clear();\n src.parentElement.querySelectorAll(\"input\")[0].value = \"\";\n };\n File.prototype.doRemoveFile = function (data) {\n var question = this.question;\n if (question.needConfirmRemoveFile) {\n var isConfirmed = Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"confirmAction\"])(question.getConfirmRemoveMessage(data.name));\n if (!isConfirmed)\n return;\n }\n question.removeFile(data);\n };\n File.prototype.doDownloadFile = function (event, data) {\n if (Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"detectIEOrEdge\"])()) {\n event.preventDefault();\n Object(survey_core__WEBPACK_IMPORTED_MODULE_3__[\"loadFileFromBase64\"])(data.content, data.name);\n }\n };\n File.prototype.getPlaceholderClass = function () {\n return \"form-control \" + this.question.cssClasses.placeholderInput;\n };\n File.prototype.onChange = function (src) {\n if (!window[\"FileReader\"])\n return;\n if (!src || !src.files || src.files.length < 1)\n return;\n var files = [];\n var allowCount = this.question.allowMultiple ? src.files.length : 1;\n for (var i = 0; i < allowCount; i++) {\n files.push(src.files[i]);\n }\n src.value = \"\";\n this.question.loadFiles(files);\n };\n File = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], File);\n return File;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-file\", File);\n/* harmony default export */ __webpack_exports__[\"default\"] = (File);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************************************************************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return FlowPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FlowPanel = /** @class */ (function (_super) {\n __extends(FlowPanel, _super);\n function FlowPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n Object.defineProperty(FlowPanel.prototype, \"rootNode\", {\n get: function () {\n return this.rootNodeValue;\n },\n enumerable: false,\n configurable: true\n });\n FlowPanel.prototype.beforeMount = function () {\n if (!this.question)\n return;\n var self = this;\n this.question.onCustomHtmlProducing = function () {\n return \"\";\n };\n this.question.onGetHtmlForQuestion = self.renderQuestion;\n this.setRootNode();\n };\n FlowPanel.prototype.setRootNode = function () {\n var html = \"\" + this.question.produceHtml() + \"\";\n var doc = new DOMParser().parseFromString(html, \"text/xml\");\n this.rootNodeValue =\n !!doc && doc.childNodes.length > 0 ? doc.childNodes[0] : null;\n };\n FlowPanel.prototype.renderQuestion = function (question) {\n return \"\" + question.name + \"\";\n };\n FlowPanel.prototype.mounted = function () {\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n var self = this;\n this.question.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.question.isCollapsed;\n });\n };\n Object.defineProperty(FlowPanel.prototype, \"rootStyle\", {\n get: function () {\n var result = {};\n if (this.question.renderWidth) {\n result[\"flexBasis\"] = this.question.renderWidth;\n result[\"flexGrow\"] = 1;\n result[\"flexShrink\"] = 1;\n result[\"width\"] = this.question.renderWidth;\n result[\"minWidth\"] = this.question.minWidth;\n result[\"maxWidth\"] = this.question.maxWidth;\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"showIcon\", {\n get: function () {\n return (this.question && (this.question.isExpanded || this.question.isCollapsed));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"iconCss\", {\n get: function () {\n var result = \"sv_panel_icon\";\n if (!this.isCollapsed)\n result += \" sv_expanded\";\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: false,\n configurable: true\n });\n FlowPanel.prototype.changeExpanded = function () {\n if (this.question.isCollapsed || this.question.isExpanded) {\n if (this.question.isCollapsed) {\n this.question.expand();\n }\n else {\n this.question.collapse();\n }\n }\n };\n FlowPanel.prototype.getTitleStyle = function () {\n var result = this.css.panel.title;\n if (this.question.isCollapsed || this.question.isExpanded) {\n result += \" \" + this.css.panel.titleExpandable;\n }\n return result;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"isEditMode\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanel.prototype, \"css\", void 0);\n FlowPanel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], FlowPanel);\n return FlowPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanel\", FlowPanel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return FlowPanelElement; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar FlowPanelElement = /** @class */ (function (_super) {\n __extends(FlowPanelElement, _super);\n function FlowPanelElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.question = null;\n _this.tagName = \"span\";\n _this.nodes = [];\n _this.text = \"\";\n _this.style = {};\n return _this;\n }\n FlowPanelElement_1 = FlowPanelElement;\n FlowPanelElement.prototype.getStyle = function (nodeType) {\n var style = {};\n if (nodeType.toLowerCase() === \"b\") {\n style.fontWeight = \"bold\";\n }\n if (nodeType.toLowerCase() === \"i\") {\n style.fontStyle = \"italic\";\n }\n if (nodeType.toLowerCase() === \"u\") {\n style.textDecoration = \"underline\";\n }\n return style;\n };\n Object.defineProperty(FlowPanelElement.prototype, \"elementId\", {\n get: function () {\n if (!this.elementIdValue) {\n if (!FlowPanelElement_1.idValue) {\n FlowPanelElement_1.idValue = 0;\n }\n FlowPanelElement_1.idValue++;\n this.elementIdValue = \"fp_el\" + FlowPanelElement_1.idValue;\n }\n return this.elementIdValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelElement.prototype, \"survey\", {\n get: function () {\n return this.panel.survey;\n },\n enumerable: false,\n configurable: true\n });\n FlowPanelElement.prototype.beforeMount = function () {\n if (!this.panel || !this.node)\n return;\n var nodeType = this.node.nodeName.toLowerCase();\n if (!this.hasTextChildNodesOnly(this.node)) {\n this.nodes = this.getChildDomNodes(this.node);\n }\n else {\n if (nodeType == \"question\") {\n this.question = this.panel.getQuestionByName(this.node.textContent);\n }\n else {\n this.text = this.node.textContent;\n }\n }\n if (nodeType == \"div\" && !this.question) {\n this.tagName = \"div\";\n }\n this.style = this.getStyle(nodeType);\n };\n //duplicated code from element.vue\n FlowPanelElement.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n // duplicated code from reactpages.tsx\n FlowPanelElement.prototype.hasTextChildNodesOnly = function (node) {\n var nodes = node.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeName.toLowerCase() !== \"#text\")\n return false;\n }\n return true;\n };\n FlowPanelElement.prototype.getChildDomNodes = function (node) {\n var domNodes = [];\n for (var i = 0; i < node.childNodes.length; i++) {\n domNodes.push(node.childNodes[i]);\n }\n return domNodes;\n };\n var FlowPanelElement_1;\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"node\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"panel\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], FlowPanelElement.prototype, \"css\", void 0);\n FlowPanelElement = FlowPanelElement_1 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], FlowPanelElement);\n return FlowPanelElement;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-flowpanelelement\", FlowPanelElement);\n/* harmony default export */ __webpack_exports__[\"default\"] = (FlowPanelElement);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return SurveyHeader; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyHeader = /** @class */ (function (_super) {\n __extends(SurveyHeader, _super);\n function SurveyHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyHeader.prototype.mounted = function () {\n var el = this.$el;\n if (el && this.survey)\n this.survey.doAfterRenderHeader(el);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyHeader.prototype, \"survey\", void 0);\n SurveyHeader = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyHeader);\n return SurveyHeader;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-header\", SurveyHeader);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyHeader);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return Html; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Html = /** @class */ (function (_super) {\n __extends(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Html.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Html.prototype, \"css\", void 0);\n Html = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Html);\n return Html;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-html\", Html);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Html);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return QuestionImage; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar QuestionImage = /** @class */ (function (_super) {\n __extends(QuestionImage, _super);\n function QuestionImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], QuestionImage.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], QuestionImage.prototype, \"css\", void 0);\n QuestionImage = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], QuestionImage);\n return QuestionImage;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-image\", QuestionImage);\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionImage);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return ImagePicker; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ImagePicker = /** @class */ (function (_super) {\n __extends(ImagePicker, _super);\n function ImagePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ImagePicker.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n ImagePicker = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ImagePicker);\n return ImagePicker;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-imagepicker\", ImagePicker);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ImagePicker);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return Matrix; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Matrix = /** @class */ (function (_super) {\n __extends(Matrix, _super);\n function Matrix() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Matrix.prototype.cellClick = function (row, column) {\n if (this.question.isInputReadOnly)\n return;\n row.value = column.value;\n };\n Matrix = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Matrix);\n return Matrix;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrix\", Matrix);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Matrix);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return MatrixCell; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar MatrixCell = /** @class */ (function (_super) {\n __extends(MatrixCell, _super);\n function MatrixCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isVisible = false;\n return _this;\n }\n MatrixCell.prototype.getComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getType();\n };\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return this.cell.showErrorOnTop;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.cell.showErrorOnBottom;\n },\n enumerable: false,\n configurable: true\n });\n MatrixCell.prototype.getHeaders = function () {\n return this.cell.headers;\n };\n MatrixCell.prototype.getCellStyle = function () {\n if (!!this.cell.width || !!this.cell.minWidth)\n return { width: this.cell.width, minWidth: this.cell.minWidth };\n return null;\n };\n MatrixCell.prototype.getItemClass = function (item) {\n var cssClasses = this.cell.question.cssClasses;\n var isDisabled = this.cell.question.isReadOnly || !item.isEnabled;\n var isChecked = item.value === this.cell.question.renderedValue;\n var allowHover = !isDisabled && !isChecked;\n var itemClass = this.cell.question.cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n if (allowHover)\n itemClass += \" \" + cssClasses.itemHover;\n return itemClass;\n };\n MatrixCell.prototype.mounted = function () {\n if (!this.cell.hasQuestion || !this.question || !this.question.survey)\n return;\n this.onVisibilityChanged();\n var self = this;\n this.cell.question.registerFunctionOnPropertyValueChanged(\"isVisible\", function () {\n self.onVisibilityChanged();\n });\n var options = {\n cell: this.cell.cell,\n cellQuestion: this.cell.question,\n htmlElement: this.$el,\n row: this.cell.row,\n column: this.cell.cell.column,\n };\n this.question.survey.matrixAfterCellRender(this.question, options);\n };\n MatrixCell.prototype.onVisibilityChanged = function () {\n this.isVisible = this.cell.question.isVisible;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixCell.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixCell.prototype, \"cell\", void 0);\n MatrixCell = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixCell);\n return MatrixCell;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixcell\", MatrixCell);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixCell);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return MatrixDropdown; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixDropdown = /** @class */ (function (_super) {\n __extends(MatrixDropdown, _super);\n function MatrixDropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDropdown = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixDropdown);\n return MatrixDropdown;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdropdown\", MatrixDropdown);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixDropdown);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return MatrixDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixDynamic = /** @class */ (function (_super) {\n __extends(MatrixDynamic, _super);\n function MatrixDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDynamic.prototype.addRowClick = function () {\n this.question.addRow();\n };\n MatrixDynamic = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixDynamic);\n return MatrixDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixdynamic\", MatrixDynamic);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return MatrixTable; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MatrixTable = /** @class */ (function (_super) {\n __extends(MatrixTable, _super);\n function MatrixTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(MatrixTable.prototype, \"table\", {\n get: function () {\n return this.question.renderedTable;\n },\n enumerable: false,\n configurable: true\n });\n MatrixTable.prototype.getModel = function () {\n return this.question.renderedTable;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], MatrixTable.prototype, \"question\", void 0);\n MatrixTable = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MatrixTable);\n return MatrixTable;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-matrixtable\", MatrixTable);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MatrixTable);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return MultipleText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar MultipleText = /** @class */ (function (_super) {\n __extends(MultipleText, _super);\n function MultipleText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MultipleText.prototype.getComponentName = function (question) {\n if (question.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-text\";\n };\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n MultipleText = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], MultipleText);\n return MultipleText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-multipletext\", MultipleText);\n/* harmony default export */ __webpack_exports__[\"default\"] = (MultipleText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/navigation.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Navigation, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return Navigation; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Navigation = /** @class */ (function (_super) {\n __extends(Navigation, _super);\n function Navigation() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.showPrevBtn = true;\n _this.showNextBtn = true;\n _this.showCompleteBtn = true;\n return _this;\n }\n Navigation.prototype.getModel = function () {\n return this.survey;\n };\n Navigation.prototype.onPropertyChanged = function (value, oldValue) {\n this.onCreated();\n this.updateShowButtons();\n };\n Navigation.prototype.onMounted = function () {\n var _this = this;\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.updateShowButtons();\n });\n this.updateShowButtons();\n };\n Navigation.prototype.updateShowButtons = function () {\n this.showPrevBtn = !this.survey.isFirstPage && this.survey.isShowPrevButton;\n this.showNextBtn = !this.survey.isLastPage;\n this.showCompleteBtn = this.survey.isLastPage;\n };\n Navigation.prototype.nextButtonMouseDown = function () {\n this.mouseDownPage = this.survey.currentPage;\n return this.survey.navigationMouseDown();\n };\n Navigation.prototype.buttonMouseDown = function () {\n return this.survey.navigationMouseDown();\n };\n Navigation.prototype.prevPage = function () {\n this.survey.prevPage();\n };\n Navigation.prototype.nextPage = function () {\n if (!!this.mouseDownPage && this.mouseDownPage !== this.survey.currentPage)\n return;\n this.mouseDownPage = null;\n this.survey.nextPage();\n };\n Navigation.prototype.completeLastPage = function () {\n this.survey.completeLastPage();\n };\n Navigation.prototype.showPreview = function () {\n this.survey.showPreview();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Navigation.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Navigation.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n ], Navigation.prototype, \"onPropertyChanged\", null);\n Navigation = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Navigation);\n return Navigation;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-navigation\", Navigation);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Navigation);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/otherChoice.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************************************************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return OtherChoice; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar OtherChoice = /** @class */ (function (_super) {\n __extends(OtherChoice, _super);\n function OtherChoice() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OtherChoice.prototype.change = function (event) {\n this.question.comment = event.target.value;\n };\n OtherChoice.prototype.keyup = function (event) {\n if (!this.question.isSurveyInputTextUpdate)\n return;\n this.question.comment = event.target.value;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], OtherChoice.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], OtherChoice.prototype, \"commentClass\", void 0);\n OtherChoice = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], OtherChoice);\n return OtherChoice;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-other-choice\", OtherChoice);\n/* harmony default export */ __webpack_exports__[\"default\"] = (OtherChoice);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return Page; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Page = /** @class */ (function (_super) {\n __extends(Page, _super);\n function Page() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCurrentPageChanged = false;\n return _this;\n }\n Page.prototype.onPagePropertyChanged = function (value, oldValue) {\n this.isCurrentPageChanged = true;\n };\n Page.prototype.getModel = function () {\n return this.page;\n };\n Page.prototype.onMounted = function () {\n if (this.survey) {\n this.survey.afterRenderPage(this.$el);\n }\n };\n Page.prototype.onUpdated = function () {\n var self = this;\n self.survey.afterRenderPage(this.$el);\n this.$nextTick(function () {\n if (this.isCurrentPageChanged) {\n this.isCurrentPageChanged = false;\n self.survey.scrollToTopOnPageChange();\n }\n });\n };\n Object.defineProperty(Page.prototype, \"showHeader\", {\n get: function () {\n return this.page._showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"showDescription\", {\n get: function () {\n return this.page._showDescription;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"num\", {\n get: function () {\n return this.page.num > 0 ? this.page.num + \". \" : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"rows\", {\n get: function () {\n return this.page.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"renderTitleActions\", {\n get: function () {\n return this.survey.renderTitleActions(this.page);\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"page\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Page.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"page\")\n ], Page.prototype, \"onPagePropertyChanged\", null);\n Page = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Page);\n return Page;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-page\", Page);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Page);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************************************************************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return Panel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Panel = /** @class */ (function (_super) {\n __extends(Panel, _super);\n function Panel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsed = false;\n return _this;\n }\n Panel.prototype.getModel = function () {\n return this.question;\n };\n Panel.prototype.onMounted = function () {\n var _this = this;\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n this.question.stateChangedCallback = function () {\n _this.isCollapsed = _this.question.isCollapsed;\n };\n };\n Panel.prototype.beforeDestroy = function () {\n this.question.stateChangedCallback = null;\n };\n Object.defineProperty(Panel.prototype, \"rootStyle\", {\n get: function () {\n var result = {};\n if (this.question.renderWidth) {\n result[\"flexBasis\"] = this.question.renderWidth;\n result[\"flexGrow\"] = 1;\n result[\"flexShrink\"] = 1;\n result[\"width\"] = this.question.renderWidth;\n result[\"minWidth\"] = this.question.minWidth;\n result[\"maxWidth\"] = this.question.maxWidth;\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"showIcon\", {\n get: function () {\n return this.question.isExpanded || this.question.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"iconCss\", {\n get: function () {\n var result = this.css.panel.icon;\n if (!this.isCollapsed)\n result += \" \" + this.css.panel.iconExpanded;\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Panel.prototype.changeExpanded = function () {\n this.question.toggleState();\n };\n Panel.prototype.cancelPreview = function () {\n this.question.cancelPreview();\n };\n Panel.prototype.getTitleStyle = function () {\n var result = this.css.panel.title;\n if (this.question.isCollapsed || this.question.isExpanded) {\n result += \" \" + this.css.panel.titleExpandable;\n }\n if (this.question.containsErrors) {\n result += \" \" + this.question.cssClasses.panel.titleOnError;\n }\n return result;\n };\n Object.defineProperty(Panel.prototype, \"requiredTextCss\", {\n get: function () {\n return (this.question.cssClasses.requiredText ||\n this.question.cssClasses.panel.requiredText);\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"isEditMode\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Panel.prototype, \"css\", void 0);\n Panel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Panel);\n return Panel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-panel\", Panel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Panel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return PanelDynamic; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar PanelDynamic = /** @class */ (function (_super) {\n __extends(PanelDynamic, _super);\n function PanelDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamic.prototype, \"renderedPanels\", {\n get: function () {\n if (this.question.isRenderModeList)\n return this.question.panels;\n var panels = [];\n if (this.question.currentPanel) {\n panels.push(this.question.currentPanel);\n }\n return panels;\n },\n enumerable: false,\n configurable: true\n });\n PanelDynamic.prototype.addPanelClick = function () {\n this.question.addPanel();\n };\n PanelDynamic.prototype.getButtonAddCss = function (question) {\n var btnClasses = question.cssClasses.button + \" \" + question.cssClasses.buttonAdd;\n if (this.question.renderMode === \"list\") {\n btnClasses += \" \" + question.cssClasses.buttonAdd + \"--list-mode\";\n }\n return btnClasses;\n };\n PanelDynamic = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamic);\n return PanelDynamic;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamic\", PanelDynamic);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamic);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return PanelDynamicProgress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PanelDynamicProgress = /** @class */ (function (_super) {\n __extends(PanelDynamicProgress, _super);\n function PanelDynamicProgress() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamicProgress.prototype, \"cssClass\", {\n get: function () {\n return this.question.isProgressTopShowing\n ? this.question.cssClasses.progressTop\n : this.question.cssClasses.progressBottom;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelDynamicProgress.prototype, \"rangeMax\", {\n get: function () {\n return this.question.panelCount - 1;\n },\n enumerable: false,\n configurable: true\n });\n PanelDynamicProgress.prototype.addPanelClick = function () {\n this.question.addPanelUI();\n };\n PanelDynamicProgress.prototype.prevPanelClick = function () {\n this.question.goToPrevPanel();\n };\n PanelDynamicProgress.prototype.nextPanelClick = function () {\n this.question.goToNextPanel();\n };\n PanelDynamicProgress.prototype.changeRange = function (event) {\n this.question.currentIndex = event.target.value;\n };\n PanelDynamicProgress.prototype.getButtonAddCss = function (question) { };\n PanelDynamicProgress.prototype.getButtonPrevCss = function (question) {\n var btnClasses = question.cssClasses.buttonPrev;\n if (!question.isPrevButtonShowing) {\n btnClasses += \" \" + question.cssClasses.buttonPrev + \"--disabled\";\n }\n return btnClasses;\n };\n PanelDynamicProgress.prototype.getButtonNextCss = function (question) {\n var btnClasses = question.cssClasses.buttonNext;\n if (!question.isNextButtonShowing) {\n btnClasses += \" \" + question.cssClasses.buttonNext + \"--disabled\";\n }\n return btnClasses;\n };\n Object.defineProperty(PanelDynamicProgress.prototype, \"progress\", {\n get: function () {\n return (this.question.currentIndex / this.rangeMax) * 100 + \"%\";\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicProgress.prototype, \"question\", void 0);\n PanelDynamicProgress = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicProgress);\n return PanelDynamicProgress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicprogress\", PanelDynamicProgress);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicProgress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicRemove, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return PanelDynamicRemove; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PanelDynamicRemove = /** @class */ (function (_super) {\n __extends(PanelDynamicRemove, _super);\n function PanelDynamicRemove() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n PanelDynamicRemove.prototype.mounted = function () {\n this.isCollapsed = this.panel.isCollapsed;\n var self = this;\n this.panel.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.panel.isCollapsed;\n }, \"button\");\n };\n PanelDynamicRemove.prototype.beforeDestroy = function () {\n this.panel.unRegisterFunctionOnPropertyValueChanged(\"state\", \"button\");\n };\n PanelDynamicRemove.prototype.removePanelClick = function (panel) {\n if (!this.question.isInputReadOnly) {\n this.question.removePanelUI(panel);\n }\n };\n Object.defineProperty(PanelDynamicRemove.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicRemove.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], PanelDynamicRemove.prototype, \"panel\", void 0);\n PanelDynamicRemove = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicRemove);\n return PanelDynamicRemove;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicremove\", PanelDynamicRemove);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicRemove);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return Progress; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Progress = /** @class */ (function (_super) {\n __extends(Progress, _super);\n function Progress() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Progress.prototype, \"progress\", {\n get: function () {\n return this.survey.progressValue + \"%\";\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Progress.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Progress.prototype, \"css\", void 0);\n Progress = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Progress);\n return Progress;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-pages\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-questions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-correctQuestions\", Progress);\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-requiredQuestions\", Progress);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Progress);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return ProgressButtons; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ProgressButtons = /** @class */ (function (_super) {\n __extends(ProgressButtons, _super);\n function ProgressButtons() {\n var _this = _super.call(this) || this;\n _this.hasScroller = false;\n _this.updateScroller = undefined;\n _this.progressButtonsModel = new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressButtonsModel\"](_this.survey);\n return _this;\n }\n ProgressButtons.prototype.mounted = function () {\n var _this = this;\n var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n this.updateScroller = setInterval(function () {\n _this.hasScroller =\n listContainerElement.scrollWidth > listContainerElement.offsetWidth;\n }, 100);\n };\n ProgressButtons.prototype.isListElementClickable = function (index) {\n return this.progressButtonsModel.isListElementClickable(index);\n };\n ProgressButtons.prototype.getListElementCss = function (index) {\n return this.progressButtonsModel.getListElementCss(index);\n };\n ProgressButtons.prototype.clickListElement = function (index) {\n this.progressButtonsModel.clickListElement(index);\n };\n ProgressButtons.prototype.getScrollButtonCss = function (hasScroller, isLeftScroll) {\n var scrollCss = isLeftScroll\n ? this.css.progressButtonsImageButtonLeft\n : this.css.progressButtonsImageButtonRight;\n if (!hasScroller)\n scrollCss += \" \" + this.css.progressButtonsImageButtonHidden;\n return scrollCss;\n };\n ProgressButtons.prototype.clickScrollButton = function (isLeftScroll) {\n var listContainerElement = this.$refs[\"progressButtonsListContainer\"];\n listContainerElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70;\n };\n ProgressButtons.prototype.beforeDestroy = function () {\n if (typeof this.updateScroller !== \"undefined\") {\n clearInterval(this.updateScroller);\n this.updateScroller = undefined;\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ProgressButtons.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ProgressButtons.prototype, \"css\", void 0);\n ProgressButtons = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ProgressButtons);\n return ProgressButtons;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-progress-buttons\", ProgressButtons);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProgressButtons);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return Radiogroup; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Radiogroup = /** @class */ (function (_super) {\n __extends(Radiogroup, _super);\n function Radiogroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Radiogroup.prototype, \"choicesCount\", {\n get: function () {\n return this.question.visibleChoices.length - 1;\n },\n enumerable: false,\n configurable: true\n });\n Radiogroup.prototype.getItemClass = function (item) {\n return this.question.getItemClass(item);\n };\n Radiogroup = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Radiogroup);\n return Radiogroup;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup\", Radiogroup);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Radiogroup);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************************************************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return RadiogroupItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar RadiogroupItem = /** @class */ (function (_super) {\n __extends(RadiogroupItem, _super);\n function RadiogroupItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RadiogroupItem.prototype.getModel = function () {\n return this.item;\n };\n RadiogroupItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item);\n };\n RadiogroupItem.prototype.getControlLabelClass = function (item) {\n return this.question.getControlLabelClass(item);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RadiogroupItem.prototype, \"hideLabel\", void 0);\n RadiogroupItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], RadiogroupItem);\n return RadiogroupItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-radiogroup-item\", RadiogroupItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RadiogroupItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************************************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return RankingItem; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar RankingItem = /** @class */ (function (_super) {\n __extends(RankingItem, _super);\n function RankingItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"index\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"text\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"handleKeydown\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"cssClasses\", void 0);\n RankingItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], RankingItem);\n return RankingItem;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking-item\", RankingItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (RankingItem);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return Ranking; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Ranking = /** @class */ (function (_super) {\n __extends(Ranking, _super);\n function Ranking() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Ranking = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Ranking);\n return Ranking;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-ranking\", Ranking);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ranking);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return Rating; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Rating = /** @class */ (function (_super) {\n __extends(Rating, _super);\n function Rating() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Rating.prototype.getCss = function (question, item) {\n var css = question.cssClasses.item;\n var disabled = this.question.cssClasses.itemDisabled;\n if (question.value == item.value) {\n css = css + \" \" + question.cssClasses.selected;\n }\n if (this.question.isReadOnly) {\n css = css + \" \" + disabled;\n }\n return css;\n };\n Rating.prototype.getRootClass = function (question) {\n var classes = question.cssClasses;\n if (question.isReadOnly)\n return classes.root + \" \" + classes.disabled;\n return classes.root;\n };\n Rating = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Rating);\n return Rating;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-rating\", Rating);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rating);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************************************************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return Row; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Row.prototype.getModel = function () {\n return this.row;\n };\n Row.prototype.onMounted = function () {\n var _this = this;\n if (!!this.row) {\n if (!this.row.isNeedRender) {\n var rowContainerDiv = this.$el;\n setTimeout(function () {\n _this.row.startLazyRendering(rowContainerDiv);\n }, 10);\n }\n }\n };\n Row.prototype.beforeDestroy = function () {\n if (!!this.row) {\n this.row.isNeedRender = !this.row.isLazyRendering;\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"row\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Row.prototype, \"survey\", void 0);\n Row = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Row);\n return Row;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-row\", Row);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Row);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return SignaturePad; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SignaturePad = /** @class */ (function (_super) {\n __extends(SignaturePad, _super);\n function SignaturePad() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SignaturePad = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SignaturePad);\n return SignaturePad;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-signaturepad\", SignaturePad);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SignaturePad);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return SurveyStringEditor; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyStringEditor = /** @class */ (function (_super) {\n __extends(SurveyStringEditor, _super);\n function SurveyStringEditor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onInput = function (event) {\n _this.locString.text = event.target.innerText;\n };\n _this.onClick = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n return _this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyStringEditor.prototype, \"locString\", void 0);\n SurveyStringEditor = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyStringEditor);\n return SurveyStringEditor;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].editableRenderer, SurveyStringEditor);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyStringEditor);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return SurveyStringViewer; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar SurveyStringViewer = /** @class */ (function (_super) {\n __extends(SurveyStringViewer, _super);\n function SurveyStringViewer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyStringViewer.prototype, \"locString\", void 0);\n SurveyStringViewer = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyStringViewer);\n return SurveyStringViewer;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableString\"].defaultRenderer, SurveyStringViewer);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyStringViewer);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return SurveyString; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar SurveyString = /** @class */ (function (_super) {\n __extends(SurveyString, _super);\n function SurveyString() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyString.prototype, \"locString\", void 0);\n SurveyString = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyString);\n return SurveyString;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-string\", SurveyString);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyString);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return Survey; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar Survey = /** @class */ (function (_super) {\n __extends(Survey, _super);\n function Survey() {\n var _this = _super.call(this) || this;\n _this.currentPageId = 1;\n return _this;\n }\n Object.defineProperty(Survey.prototype, \"pageId\", {\n get: function () {\n return \"page\" + this.currentPageId.toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"navId\", {\n get: function () {\n return \"nav\" + this.currentPageId.toString();\n },\n enumerable: false,\n configurable: true\n });\n Survey.prototype.forceUpdate = function () {\n this.$forceUpdate();\n this.currentPageId++;\n };\n Survey.prototype.getModel = function () {\n return this.survey;\n };\n Survey.prototype.onPropertyChanged = function (value, oldValue) {\n this.onCreated();\n this.surveyOnMounted();\n };\n Survey.prototype.onMounted = function () {\n this.surveyOnMounted();\n };\n Survey.prototype.surveyOnMounted = function () {\n var _this = this;\n if (!this.survey)\n return;\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(this.survey, \"currentPage\", this.survey.currentPage);\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.currentPageId++;\n });\n this.survey.onPageVisibleChanged.add(function (sender, options) {\n _this.currentPageId++;\n });\n var el = this.$el;\n if (el)\n this.survey.doAfterRenderSurvey(el);\n this.survey.renderCallback = this.forceUpdate;\n this.survey.startTimerFromUI();\n };\n Survey.prototype.beforeDestroy = function () {\n this.survey.stopTimer();\n this.survey.renderCallback = undefined;\n };\n Object.defineProperty(Survey.prototype, \"hasTitle\", {\n get: function () {\n return !!this.survey.title && this.survey.showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"hasCompletedPage\", {\n get: function () {\n return this.survey.showCompletedPage && this.survey.state === \"completed\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"css\", {\n get: function () {\n return this.survey.css;\n },\n enumerable: false,\n configurable: true\n });\n Survey.prototype.getCompletedPageClasses = function () {\n var css = this.css;\n return css.body + \" \" + css.completedPage;\n };\n Survey.prototype.getProcessedCompletedHtml = function () {\n if (!this.hasCompletedPage)\n return \"\";\n if (!this.processedCompletedHtmlValue) {\n this.processedCompletedHtmlValue = this.survey.processedCompletedHtml;\n }\n return this.processedCompletedHtmlValue;\n };\n Survey.prototype.getCompletedStateClasses = function () {\n return this.css.saveData[this.survey.completedState];\n };\n Survey.prototype.start = function () {\n this.survey.start();\n };\n Survey.prototype.doTrySaveAgain = function () {\n this.survey.doComplete();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Survey.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Watch\"])(\"survey\")\n ], Survey.prototype, \"onPropertyChanged\", null);\n Survey = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Survey);\n return Survey;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"BaseVue\"]));\n\n// TODO: make this functionality available via surveyCss in all examples\nObject.defineProperty(Survey, \"cssType\", {\n get: function () {\n return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"surveyCss\"].currentType;\n },\n set: function (newType) {\n survey_core__WEBPACK_IMPORTED_MODULE_2__[\"StylesManager\"].applyTheme(newType);\n },\n enumerable: true,\n configurable: false,\n});\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey\", Survey);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Survey);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return QuestionText; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar QuestionText = /** @class */ (function (_super) {\n __extends(QuestionText, _super);\n function QuestionText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionText.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n QuestionText.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Object.defineProperty(QuestionText.prototype, \"inputStyle\", {\n get: function () {\n var style = {};\n if (!!this.question.inputWidth) {\n style.width = this.question.inputWidth;\n }\n return style;\n },\n enumerable: false,\n configurable: true\n });\n QuestionText = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], QuestionText);\n return QuestionText;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-text\", QuestionText);\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionText);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return TimerPanel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar TimerPanel = /** @class */ (function (_super) {\n __extends(TimerPanel, _super);\n function TimerPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(TimerPanel.prototype, \"text\", {\n get: function () {\n return this.survey.timerInfoText;\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TimerPanel.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TimerPanel.prototype, \"css\", void 0);\n TimerPanel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TimerPanel);\n return TimerPanel;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-timerpanel\", TimerPanel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TimerPanel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/titlecontent.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************************************************************************************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return TitleContent; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar TitleContent = /** @class */ (function (_super) {\n __extends(TitleContent, _super);\n function TitleContent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], TitleContent.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], TitleContent.prototype, \"css\", void 0);\n TitleContent = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], TitleContent);\n return TitleContent;\n}(vue__WEBPACK_IMPORTED_MODULE_1___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_1___default.a.component(\"survey-question-title-content\", TitleContent);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleContent);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/window.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************/\n/*! exports provided: Window, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return Window; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _surveyModel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyModel */ \"./src/vue/surveyModel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar Window = /** @class */ (function (_super) {\n __extends(Window, _super);\n function Window() {\n var _this = _super.call(this) || this;\n if (_this.window) {\n _this.surveyWindow = _this.window;\n }\n else {\n _this.surveyWindow = new _surveyModel__WEBPACK_IMPORTED_MODULE_2__[\"VueSurveyWindowModel\"](null, _this.survey);\n }\n if (_this.isexpanded !== undefined) {\n _this.surveyWindow.isExpanded = _this.isexpanded;\n }\n if (_this.isExpanded !== undefined) {\n _this.surveyWindow.isExpanded = _this.isExpanded;\n }\n if (_this.closeOnCompleteTimeout !== undefined) {\n _this.surveyWindow.closeOnCompleteTimeout = _this.closeOnCompleteTimeout;\n }\n _this.surveyWindow.isShowing = true;\n var self = _this;\n _this.surveyWindow.closeWindowOnCompleteCallback = function () {\n self.doHide();\n };\n return _this;\n }\n Object.defineProperty(Window.prototype, \"windowSurvey\", {\n get: function () {\n return this.surveyWindow.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"expandedCss\", {\n get: function () {\n return this.surveyWindow.isExpanded\n ? this.css.window.header.buttonCollapsed\n : this.css.window.header.buttonExpanded;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"isExpandedSurvey\", {\n get: function () {\n return this.surveyWindow.isExpanded;\n },\n set: function (val) {\n this.surveyWindow.isExpanded = val;\n },\n enumerable: false,\n configurable: true\n });\n Window.prototype.doExpand = function () {\n this.surveyWindow.isExpanded = !this.surveyWindow.isExpanded;\n };\n Window.prototype.doHide = function () {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(this.surveyWindow, \"isShowing\", false);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"window\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"survey\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"isexpanded\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Window.prototype, \"closeOnCompleteTimeout\", void 0);\n Window = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Window);\n return Window;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-window\", Window);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Window);\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/vue-class-component/dist/vue-class-component.esm.js ***!\n \\**************************************************************************/\n/*! exports provided: default, createDecorator, mixins */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createDecorator\", function() { return createDecorator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mixins\", function() { return mixins; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * vue-class-component v7.2.6\n * (c) 2015-present Evan You\n * @license MIT\n */\n\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\n// The rational behind the verbose Reflect-feature check below is the fact that there are polyfills\n// which add an implementation for Reflect.defineMetadata but not for Reflect.getOwnMetadataKeys.\n// Without this check consumers will encounter hard to track down runtime errors.\nfunction reflectionIsSupported() {\n return typeof Reflect !== 'undefined' && Reflect.defineMetadata && Reflect.getOwnMetadataKeys;\n}\nfunction copyReflectionMetadata(to, from) {\n forwardMetadata(to, from);\n Object.getOwnPropertyNames(from.prototype).forEach(function (key) {\n forwardMetadata(to.prototype, from.prototype, key);\n });\n Object.getOwnPropertyNames(from).forEach(function (key) {\n forwardMetadata(to, from, key);\n });\n}\n\nfunction forwardMetadata(to, from, propertyKey) {\n var metaKeys = propertyKey ? Reflect.getOwnMetadataKeys(from, propertyKey) : Reflect.getOwnMetadataKeys(from);\n metaKeys.forEach(function (metaKey) {\n var metadata = propertyKey ? Reflect.getOwnMetadata(metaKey, from, propertyKey) : Reflect.getOwnMetadata(metaKey, from);\n\n if (propertyKey) {\n Reflect.defineMetadata(metaKey, metadata, to, propertyKey);\n } else {\n Reflect.defineMetadata(metaKey, metadata, to);\n }\n });\n}\n\nvar fakeArray = {\n __proto__: []\n};\nvar hasProto = fakeArray instanceof Array;\nfunction createDecorator(factory) {\n return function (target, key, index) {\n var Ctor = typeof target === 'function' ? target : target.constructor;\n\n if (!Ctor.__decorators__) {\n Ctor.__decorators__ = [];\n }\n\n if (typeof index !== 'number') {\n index = undefined;\n }\n\n Ctor.__decorators__.push(function (options) {\n return factory(options, key, index);\n });\n };\n}\nfunction mixins() {\n for (var _len = arguments.length, Ctors = new Array(_len), _key = 0; _key < _len; _key++) {\n Ctors[_key] = arguments[_key];\n }\n\n return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({\n mixins: Ctors\n });\n}\nfunction isPrimitive(value) {\n var type = _typeof(value);\n\n return value == null || type !== 'object' && type !== 'function';\n}\nfunction warn(message) {\n if (typeof console !== 'undefined') {\n console.warn('[vue-class-component] ' + message);\n }\n}\n\nfunction collectDataFromConstructor(vm, Component) {\n // override _init to prevent to init as Vue instance\n var originalInit = Component.prototype._init;\n\n Component.prototype._init = function () {\n var _this = this;\n\n // proxy to actual vm\n var keys = Object.getOwnPropertyNames(vm); // 2.2.0 compat (props are no longer exposed as self properties)\n\n if (vm.$options.props) {\n for (var key in vm.$options.props) {\n if (!vm.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n }\n\n keys.forEach(function (key) {\n Object.defineProperty(_this, key, {\n get: function get() {\n return vm[key];\n },\n set: function set(value) {\n vm[key] = value;\n },\n configurable: true\n });\n });\n }; // should be acquired class property values\n\n\n var data = new Component(); // restore original _init to avoid memory leak (#209)\n\n Component.prototype._init = originalInit; // create plain data object\n\n var plainData = {};\n Object.keys(data).forEach(function (key) {\n if (data[key] !== undefined) {\n plainData[key] = data[key];\n }\n });\n\n if (true) {\n if (!(Component.prototype instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a) && Object.keys(plainData).length > 0) {\n warn('Component class must inherit Vue or its descendant class ' + 'when class property is used.');\n }\n }\n\n return plainData;\n}\n\nvar $internalHooks = ['data', 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeDestroy', 'destroyed', 'beforeUpdate', 'updated', 'activated', 'deactivated', 'render', 'errorCaptured', 'serverPrefetch' // 2.6\n];\nfunction componentFactory(Component) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options.name = options.name || Component._componentTag || Component.name; // prototype props.\n\n var proto = Component.prototype;\n Object.getOwnPropertyNames(proto).forEach(function (key) {\n if (key === 'constructor') {\n return;\n } // hooks\n\n\n if ($internalHooks.indexOf(key) > -1) {\n options[key] = proto[key];\n return;\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(proto, key);\n\n if (descriptor.value !== void 0) {\n // methods\n if (typeof descriptor.value === 'function') {\n (options.methods || (options.methods = {}))[key] = descriptor.value;\n } else {\n // typescript decorated data\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return _defineProperty({}, key, descriptor.value);\n }\n });\n }\n } else if (descriptor.get || descriptor.set) {\n // computed properties\n (options.computed || (options.computed = {}))[key] = {\n get: descriptor.get,\n set: descriptor.set\n };\n }\n });\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return collectDataFromConstructor(this, Component);\n }\n }); // decorate options\n\n var decorators = Component.__decorators__;\n\n if (decorators) {\n decorators.forEach(function (fn) {\n return fn(options);\n });\n delete Component.__decorators__;\n } // find super\n\n\n var superProto = Object.getPrototypeOf(Component.prototype);\n var Super = superProto instanceof vue__WEBPACK_IMPORTED_MODULE_0___default.a ? superProto.constructor : vue__WEBPACK_IMPORTED_MODULE_0___default.a;\n var Extended = Super.extend(options);\n forwardStaticMembers(Extended, Component, Super);\n\n if (reflectionIsSupported()) {\n copyReflectionMetadata(Extended, Component);\n }\n\n return Extended;\n}\nvar reservedPropertyNames = [// Unique id\n'cid', // Super Vue constructor\n'super', // Component options that will be used by the component\n'options', 'superOptions', 'extendOptions', 'sealedOptions', // Private assets\n'component', 'directive', 'filter'];\nvar shouldIgnore = {\n prototype: true,\n arguments: true,\n callee: true,\n caller: true\n};\n\nfunction forwardStaticMembers(Extended, Original, Super) {\n // We have to use getOwnPropertyNames since Babel registers methods as non-enumerable\n Object.getOwnPropertyNames(Original).forEach(function (key) {\n // Skip the properties that should not be overwritten\n if (shouldIgnore[key]) {\n return;\n } // Some browsers does not allow reconfigure built-in properties\n\n\n var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);\n\n if (extendedDescriptor && !extendedDescriptor.configurable) {\n return;\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(Original, key); // If the user agent does not support `__proto__` or its family (IE <= 10),\n // the sub class properties may be inherited properties from the super class in TypeScript.\n // We need to exclude such properties to prevent to overwrite\n // the component options object which stored on the extended constructor (See #192).\n // If the value is a referenced value (object or function),\n // we can check equality of them and exclude it if they have the same reference.\n // If it is a primitive value, it will be forwarded for safety.\n\n if (!hasProto) {\n // Only `cid` is explicitly exluded from property forwarding\n // because we cannot detect whether it is a inherited property or not\n // on the no `__proto__` environment even though the property is reserved.\n if (key === 'cid') {\n return;\n }\n\n var superDescriptor = Object.getOwnPropertyDescriptor(Super, key);\n\n if (!isPrimitive(descriptor.value) && superDescriptor && superDescriptor.value === descriptor.value) {\n return;\n }\n } // Warn if the users manually declare reserved properties\n\n\n if ( true && reservedPropertyNames.indexOf(key) >= 0) {\n warn(\"Static property name '\".concat(key, \"' declared on class '\").concat(Original.name, \"' \") + 'conflicts with reserved property name of Vue internal. ' + 'It may cause unexpected behavior of the component. Consider renaming the property.');\n }\n\n Object.defineProperty(Extended, key, descriptor);\n });\n}\n\nfunction Component(options) {\n if (typeof options === 'function') {\n return componentFactory(options);\n }\n\n return function (Component) {\n return componentFactory(Component, options);\n };\n}\n\nComponent.registerHooks = function registerHooks(keys) {\n $internalHooks.push.apply($internalHooks, _toConsumableArray(keys));\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _c(\"label\", { class: _vm.itemClass }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.checkedValue,\n expression: \"question.checkedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId,\n disabled: _vm.question.isInputReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: {\n value: _vm.question.checkedValue,\n indeterminate: _vm.question.isIndeterminate,\n checked: Array.isArray(_vm.question.checkedValue)\n ? _vm._i(_vm.question.checkedValue, _vm.question.checkedValue) > -1\n : _vm.question.checkedValue\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.checkedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.question.checkedValue,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"checkedValue\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"checkedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"checkedValue\", $$c)\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"0 0 24 24\" }\n },\n [\n _c(\"rect\", {\n class: _vm.question.cssClasses.uncheckedPath,\n attrs: { x: \"5\", y: \"10\", width: \"14\", height: \"4\" }\n }),\n _vm._v(\" \"),\n _c(\"polygon\", {\n class: _vm.question.cssClasses.checkedPath,\n attrs: {\n points:\n \"19,10 14,10 14,5 10,5 10,10 5,10 5,14 10,14 10,19 14,19 14,14 19,14 \"\n }\n }),\n _vm._v(\" \"),\n _c(\"path\", {\n class: _vm.question.cssClasses.indeterminatePath,\n attrs: {\n d:\n \"M22,0H2C0.9,0,0,0.9,0,2v20c0,1.1,0.9,2,2,2h20c1.1,0,2-0.9,2-2V2C24,0.9,23.1,0,22,0z M21,18L6,3h15V18z M3,6l15,15H3V6z\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" })\n ]),\n _vm._v(\" \"),\n _vm.question.titleLocation === \"hidden\"\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.label },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDisplayLabel }\n })\n ],\n 1\n )\n : _vm._e()\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _c(\"label\", { class: _vm.itemClass }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.checkedValue,\n expression: \"question.checkedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId,\n disabled: _vm.question.isInputReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: {\n value: _vm.question.checkedValue,\n indeterminate: _vm.question.isIndeterminate,\n checked: Array.isArray(_vm.question.checkedValue)\n ? _vm._i(_vm.question.checkedValue, _vm.question.checkedValue) > -1\n : _vm.question.checkedValue\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.checkedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.question.checkedValue,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"checkedValue\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"checkedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"checkedValue\", $$c)\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.getLabelClass(false),\n on: {\n click: function($event) {\n return _vm.onLabelClick($event, false)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locLabelFalse }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.switch,\n on: {\n click: function($event) {\n return _vm.onSwitchClick($event)\n }\n }\n },\n [_c(\"span\", { class: _vm.question.cssClasses.slider })]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.getLabelClass(true),\n on: {\n click: function($event) {\n return _vm.onLabelClick($event, true)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locLabelTrue }\n })\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root, attrs: { role: \"group\" } },\n [\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return [\n _c(\"sv-button-group-item\", {\n key: _vm.question.inputId + \"_\" + index,\n attrs: { item: item, question: _vm.question, index: index }\n })\n ]\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n class: _vm.model.css.label,\n attrs: { title: _vm.model.caption.renderedHtml }\n },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model.question.renderedValue,\n expression: \"model.question.renderedValue\"\n }\n ],\n class: _vm.model.css.control,\n attrs: {\n type: \"radio\",\n name: _vm.model.name,\n id: _vm.model.id,\n \"aria-required\": _vm.model.isRequired,\n \"aria-label\": _vm.model.caption.renderedHtml,\n role: \"radio\",\n \"aria-invalid\": _vm.model.hasErrors,\n \"aria-describedby\": _vm.model.describeBy,\n disabled: _vm.model.readOnly\n },\n domProps: {\n value: _vm.model.value,\n checked: _vm._q(_vm.model.question.renderedValue, _vm.model.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.model.question,\n \"renderedValue\",\n _vm.model.value\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.model.css.decorator },\n [\n !!_vm.model.iconName\n ? _c(\"sv-svg-icon\", {\n class: _vm.model.css.icon,\n attrs: {\n iconName: _vm.model.iconName,\n size: _vm.model.iconSize\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.model.showCaption\n ? _c(\n \"span\",\n { class: _vm.model.css.caption },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.model.caption }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return !_vm.question.hasColumns\n ? _c(\"survey-checkbox-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: { question: _vm.question, item: item, index: index }\n })\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.columns, function(column, colIndex) {\n return _vm.question.hasColumns\n ? _c(\n \"div\",\n { class: _vm.question.getColumnClass() },\n _vm._l(column, function(item, index) {\n return _c(\"survey-checkbox-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: {\n question: _vm.question,\n item: item,\n index: \"\" + colIndex + index\n }\n })\n }),\n 1\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"label\", { class: _vm.getLabelClass(_vm.item) }, [\n _vm.item == _vm.question.selectAllItem\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.isAllSelected,\n expression: \"isAllSelected\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.isAllSelected,\n checked: Array.isArray(_vm.isAllSelected)\n ? _vm._i(_vm.isAllSelected, _vm.isAllSelected) > -1\n : _vm.isAllSelected\n },\n on: {\n change: function($event) {\n var $$a = _vm.isAllSelected,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.isAllSelected,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.isAllSelected = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.isAllSelected = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.isAllSelected = $$c\n }\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item != _vm.question.selectAllItem\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.item.value,\n checked: Array.isArray(_vm.question.renderedValue)\n ? _vm._i(_vm.question.renderedValue, _vm.item.value) > -1\n : _vm.question.renderedValue\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.renderedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.item.value,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $$a.concat([$$v])\n )\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"renderedValue\", $$c)\n }\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"0 0 24 24\" }\n },\n [_c(\"path\", { attrs: { d: \"M5,13l2-2l3,3l7-7l2,2l-9,9L5,13z\" } })]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" })\n ]),\n _vm._v(\" \"),\n !_vm.hideLabel\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.controlLabel,\n attrs: { title: _vm.item.locText.text }\n },\n [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.item.value == _vm.question.otherItem.value\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.hasOther &&\n _vm.question.renderedValue &&\n _vm.question.isOtherSelected,\n expression:\n \"\\n question.hasOther && question.renderedValue && question.isOtherSelected\\n \"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"textarea\", {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.root\n : \"panel-comment-root\",\n attrs: {\n type: \"text\",\n readonly: _vm.question.isInputReadOnly,\n disabled: _vm.question.isInputReadOnly,\n id: _vm.question.inputId,\n maxlength: _vm.question.getMaxLength(),\n cols: _vm.question.cols,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n rows: _vm.question.rows,\n placeholder: _vm.question.isReadOnly\n ? \"\"\n : _vm.question.placeHolder,\n \"aria-required\": _vm.question.isRequired,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: { value: _vm.question.value },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.value))])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!*********************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n \\*********************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"sv-action-bar-item\",\n class: [\n { \"sv-action-bar-item--active\": _vm.item.isActive },\n _vm.item.innerCss\n ],\n attrs: {\n disabled: _vm.item.enabled !== undefined && _vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title\n },\n on: {\n click: function() {\n _vm.item.action()\n }\n }\n },\n [\n _vm.item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-action-bar-item__icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\n \"span\",\n {\n staticClass: \"sv-action-bar-item__title\",\n class: {\n \"sv-action-bar-item__title--with-icon\": !!_vm.item.iconName\n }\n },\n [_vm._v(_vm._s(_vm.item.title))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"sv-popup\", { attrs: { model: _vm.item.popupModel } })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n \\************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"sv-action-bar-item\",\n class: [\n { \"sv-action-bar-item--active\": _vm.item.isActive },\n _vm.item.innerCss\n ],\n attrs: {\n disabled: _vm.item.enabled !== undefined && _vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title\n },\n on: {\n click: function() {\n _vm.item.action()\n }\n }\n },\n [\n _vm.item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-action-bar-item__icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\n \"span\",\n {\n staticClass: \"sv-action-bar-item__title\",\n class: {\n \"sv-action-bar-item__title--with-icon\": !!_vm.item.iconName\n }\n },\n [_vm._v(_vm._s(_vm.item.title))]\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!*****************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n \\*****************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n staticClass: \"sv-action-bar-separator\",\n class: _vm.innerCss\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.hasItems\n ? _c(\n \"div\",\n {\n ref: \"container\",\n staticClass: \"sv-action-bar\",\n on: {\n click: function(event) {\n event.stopPropagation()\n }\n }\n },\n _vm._l(_vm.wrappedItems, function(item) {\n return _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: item.visible || item.visible === undefined,\n expression: \"item.visible || item.visible === undefined\"\n }\n ],\n key: item.id,\n staticClass: \"sv-action\",\n class: { \"sv-action--hidden\": !item.isVisible }\n },\n [\n item.needSeparator ? _c(\"sv-action-bar-separator\") : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(item), {\n tag: \"component\",\n attrs: { item: item }\n })\n ],\n 1\n )\n }),\n 0\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\":\n/*!*************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc& ***!\n \\*************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"survey-question-title-content\", {\n attrs: { element: _vm.element, css: _vm.css }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.getIconCss(_vm.isCollapsed),\n attrs: {\n tabindex: \"0\",\n \"aria-expanded\": _vm.isCollapsed ? \"false\" : \"true\",\n \"aria-controls\": !_vm.isCollapsed ? _vm.element.contentId : null\n },\n on: {\n keyup: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.changeExpanded.apply(null, arguments)\n }\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ul\",\n {\n staticClass: \"sv-list\",\n on: {\n mousedown: function(data, e) {\n e.preventDefault()\n }\n }\n },\n _vm._l(_vm.model.items, function(item) {\n return _c(\n \"li\",\n {\n key: item.id,\n staticClass: \"sv-list__item\",\n class: _vm.model.getItemClass(item),\n on: {\n click: function($event) {\n return _vm.model.selectItem(item)\n }\n }\n },\n [\n item.iconName\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-list__item-icon\",\n attrs: { iconName: item.iconName, size: 24 }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(item.title))])\n ],\n 1\n )\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n class: _vm.question.getDetailPanelButtonCss(_vm.row),\n attrs: {\n type: \"button\",\n \"aria-expanded\": _vm.question.getIsDetailPanelShowing(_vm.row)\n ? \"true\"\n : \"false\",\n \"aria-controls\": _vm.question.getIsDetailPanelShowing(_vm.row)\n ? _vm.row.detailPanelId\n : null\n },\n on: {\n click: function() {\n return _vm.row.showHideDetailPanelClick()\n }\n }\n },\n [_c(\"span\", { class: _vm.question.getDetailPanelIconCss(_vm.row) })]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!****************************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n \\****************************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonRemove,\n attrs: { type: \"button\", disabled: _vm.question.isInputReadOnly },\n on: {\n click: function() {\n return _vm.question.removeRowUI(_vm.row)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locRemoveRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconRemove })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*******************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n \\*******************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.model.isVisible,\n expression: \"model.isVisible\"\n }\n ],\n staticClass: \"sv-popup\",\n class: _vm.model.styleClass,\n on: {\n click: function() {\n _vm.model.clickOutside()\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"sv-popup__container\",\n style: { left: _vm.model.left, top: _vm.model.top },\n on: { click: _vm.clickInside }\n },\n [\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.model.showPointer,\n expression: \"model.showPointer\"\n }\n ],\n staticClass: \"sv-popup__pointer\",\n style: {\n left: _vm.model.pointerTarget.left,\n top: _vm.model.pointerTarget.top\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sv-popup__scrolling-content\" }, [\n _c(\"div\", { staticClass: \"sv-popup__header\" }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"sv-popup__content\" },\n [\n _c(\n _vm.model.contentComponentName,\n _vm._b(\n { tag: \"component\" },\n \"component\",\n _vm.model.contentComponentData,\n false\n )\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.model.isModal,\n expression: \"model.isModal\"\n }\n ],\n staticClass: \"sv-popup__footer\"\n },\n [\n _c(\n \"button\",\n {\n staticClass:\n \"sv-popup__footer-item sv-popup__button sv-popup__button--cancel\",\n on: {\n click: function() {\n _vm.model.cancel()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.model.cancelButtonText) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass:\n \"sv-popup__footer-item sv-popup__button sv-popup__button--cancel\",\n on: {\n click: function() {\n _vm.model.apply()\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.model.applyButtonText) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n \\*********************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!***************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n \\***************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"svg\", { ref: \"svgIcon\", staticClass: \"sv-svg-icon\" }, [_c(\"use\")])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\":\n/*!*************************************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec& ***!\n \\*************************************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"sv-title-actions\" },\n [\n _c(\n \"span\",\n { staticClass: \"sv-title-actions__title\" },\n [\n _vm.element.isPage\n ? _c(\"survey-string\", {\n attrs: { locString: _vm.element.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPage\n ? _c(\"survey-question-title-content\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"sv-action-bar\", {\n staticClass: \"sv-title-actions__bar\",\n attrs: { items: _vm.items }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"survey-panel\", {\n attrs: { question: _vm.contentPanel, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(_vm.getComponentName(_vm.contentQuestion), {\n tag: \"component\",\n attrs: { question: _vm.contentQuestion, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _vm.hasHtml\n ? _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.customHtml) } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasDefaultRender\n ? _c(_vm.componentName, {\n tag: \"component\",\n attrs: { question: _vm.question, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/drag-drop-td.vue?vue&type=template&id=6b922537&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/drag-drop-td.vue?vue&type=template&id=6b922537& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"td\",\n { key: _vm.question.name + \"-td-d&d\", class: _vm.question.cssClasses.cell },\n [\n _c(\n \"svg\",\n {\n class:\n _vm.question.cssClasses.itemIcon +\n \" \" +\n _vm.question.cssClasses.itemIconHoverMod,\n attrs: {\n width: \"10\",\n height: \"16\",\n viewBox: \"0 0 10 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M6 2C6 0.9 6.9 0 8 0C9.1 0 10 0.9 10 2C10 3.1 9.1 4 8 4C6.9 4 6 3.1 6 2ZM2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0ZM8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\"\n }\n })\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root },\n [\n !_vm.question.isReadOnly\n ? _c(\"div\", { class: _vm.question.cssClasses.selectWrapper }, [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n id: _vm.question.inputId,\n autocomplete: _vm.question.autoComplete,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.question,\n \"renderedValue\",\n $event.target.multiple ? $$selectedVal : $$selectedVal[0]\n )\n }\n }\n },\n [\n _vm.question.showOptionsCaption\n ? _c(\"option\", { domProps: { value: undefined } }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.question.optionsCaption) +\n \"\\n \"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item) {\n return _c(\n \"option\",\n {\n attrs: { disabled: !item.isEnabled },\n domProps: { value: item.value }\n },\n [_vm._v(\"\\n \" + _vm._s(item.text) + \"\\n \")]\n )\n })\n ],\n 2\n )\n ])\n : _c(\n \"div\",\n {\n class: _vm.question.cssClasses.control,\n attrs: { disabled: \"\", id: _vm.question.inputId }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.isOtherSelected\n ? _vm.question.otherText\n : _vm.question.displayValue\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isOtherSelected,\n expression: \"isOtherSelected\"\n }\n ],\n attrs: { question: _vm.question }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n \\******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.getRootClass(_vm.element) },\n [\n !_vm.element.isPanel && _vm.element.hasTitleOnLeftTop\n ? _c(\"survey-element-header\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.element.isPanel || !_vm.element.isCollapsed,\n expression: \"element.isPanel || !element.isCollapsed\"\n }\n ],\n class: _vm.getContentClass(_vm.element)\n },\n [\n !_vm.element.isPanel && _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(_vm.element), {\n tag: \"component\",\n attrs: { question: _vm.element, css: _vm.css }\n }),\n _vm._v(\" \"),\n _vm.element.hasComment\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.formGroup },\n [\n _c(\"div\", [_vm._v(_vm._s(_vm.element.commentText))]),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n attrs: {\n commentClass: _vm.css.comment,\n question: _vm.element\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPanel && _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"bottom\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.element.isPanel && _vm.element.hasDescriptionUnderInput\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.descriptionUnderInput },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.element.locDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n !_vm.element.isPanel && _vm.element.hasTitleOnBottom\n ? _c(\"survey-element-header\", {\n attrs: { element: _vm.element, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: _vm.getHeaderClass(_vm.element),\n on: {\n click: function() {\n if (_vm.element.hasInput) {\n _vm.element.focus()\n }\n return true\n }\n }\n },\n [\n _vm.element.hasTitle\n ? _c(\n \"h5\",\n {\n class: _vm.getTitleClass(_vm.element),\n attrs: {\n \"aria-label\": _vm.element.locTitle.renderedHtml,\n id: _vm.element.ariaTitleId\n },\n on: {\n click: function() {\n _vm.element.toggleState()\n }\n }\n },\n [\n _c(_vm.element.getTitleComponentName(), {\n tag: \"component\",\n attrs: { element: _vm.element, css: _vm.css }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.hasDescriptionUnderTitle\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.element.locDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasVisibleErrors,\n expression: \"question.hasVisibleErrors\"\n }\n ],\n class: _vm.classes,\n attrs: { role: \"alert\", id: _vm.question.id + \"_errors\" }\n },\n _vm._l(_vm.question.errors, function(error) {\n return _c(\"div\", [\n _c(\"span\", {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.error.icon\n : \"panel-error-icon\",\n attrs: { \"aria-hidden\": \"true\" }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.error.item\n : \"panel-error-item\"\n },\n [_c(\"survey-string\", { attrs: { locString: error.locText } })],\n 1\n )\n ])\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.text }, [\n _vm._v(_vm._s(_vm.question.displayValue))\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n !_vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.question.cssClasses.fileInput,\n attrs: {\n type: \"file\",\n id: _vm.question.inputId,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null,\n multiple: _vm.question.allowMultiple ? \"multiple\" : undefined,\n title: _vm.question.inputTitle,\n accept: _vm.question.acceptedTypes\n },\n on: { change: _vm.doChange }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.getPlaceholderClass(),\n staticStyle: { color: \"transparent\" },\n attrs: { type: \"file\", disabled: \"\", placeholder: _vm.question.title }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.fileDecorator,\n on: { drop: _vm.onDrop, dragover: _vm.onDragOver }\n },\n [\n _c(\"div\", { class: _vm.question.cssClasses.wrapper }, [\n _c(\n \"label\",\n {\n class:\n _vm.question.cssClasses.chooseFile +\n (_vm.question.isReadOnly\n ? \" \" + _vm.question.cssClasses.controlDisabled\n : \"\"),\n attrs: {\n role: \"button\",\n for: _vm.question.inputId,\n \"aria-label\": _vm.question.chooseButtonCaption\n }\n },\n [_vm._v(_vm._s(_vm.question.chooseButtonCaption))]\n ),\n _vm._v(\" \"),\n _vm.question.isEmpty()\n ? _c(\"span\", { class: _vm.question.cssClasses.noFileChosen }, [\n _vm._v(_vm._s(_vm.question.noFileChosenCaption))\n ])\n : _vm._e()\n ])\n ]\n ),\n _vm._v(\" \"),\n !_vm.question.isReadOnly && !_vm.question.isEmpty()\n ? _c(\n \"button\",\n {\n class: _vm.question.cssClasses.removeButton,\n attrs: { type: \"button\" },\n on: { click: _vm.doClean }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.cleanButtonCaption) + \"\\n \")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isEmpty()\n ? _c(\n \"div\",\n _vm._l(_vm.question.previewValue, function(val, index) {\n return _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: val,\n expression: \"val\"\n }\n ],\n key: _vm.question.inputId + \"_\" + index,\n class: _vm.question.cssClasses.preview\n },\n [\n val.name\n ? _c(\"div\", { class: _vm.question.cssClasses.fileSign }, [\n _c(\n \"a\",\n {\n attrs: {\n href: val.content,\n title: val.name,\n download: val.name,\n width: _vm.question.imageWidth\n },\n on: {\n click: function($event) {\n return _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.canPreviewImage(val)\n ? _c(\"img\", {\n attrs: {\n src: val.content,\n height: _vm.question.imageHeight,\n width: _vm.question.imageWidth,\n alt: \"File preview\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n val.name && !_vm.question.isReadOnly\n ? _c(\"div\", [\n _c(\n \"span\",\n {\n class: _vm.question.cssClasses.removeFile,\n on: {\n click: function($event) {\n return _vm.doRemoveFile(val)\n }\n }\n },\n [_vm._v(_vm._s(_vm.question.removeFileCaption))]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.removeFileSvg,\n attrs: { viewBox: \"0 0 16 16\" },\n on: {\n click: function($event) {\n return _vm.doRemoveFile(val)\n }\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M11,10l-1,1L8,9l-2,2l-1-1l2-2L5,6l1-1l2,2l2-2l1,1L9,8 L11,10z\"\n }\n })\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n val.name\n ? _c(\n \"div\",\n { class: _vm.question.cssClasses.fileSignBottom },\n [\n _c(\n \"a\",\n {\n attrs: {\n href: val.content,\n title: val.name,\n download: val.name,\n width: _vm.question.imageWidth\n },\n on: {\n click: function($event) {\n return _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ]\n )\n : _vm._e()\n ]\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isReadOnly && !_vm.question.isEmpty()\n ? _c(\n \"button\",\n {\n class: _vm.question.cssClasses.removeButtonBottom,\n attrs: { type: \"button\" },\n on: { click: _vm.doClean }\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.cleanButtonCaption) + \"\\n \")]\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n \\********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.isVisible\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.container,\n style: _vm.rootStyle\n },\n [\n _c(\n \"h4\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasTitle,\n expression: \"hasTitle\"\n }\n ],\n class: _vm.getTitleStyle(),\n on: { click: _vm.changeExpanded }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locTitle }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.iconCss\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDescription }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"survey-errors\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n _c(\n \"f-panel\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n style: { paddingLeft: _vm.question.innerPaddingLeft }\n },\n [\n _c(\"survey-flowpanelelement\", {\n attrs: { node: _vm.rootNode, panel: _vm.question, css: \"css\" }\n })\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!***************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n \\***************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n { style: _vm.style },\n [\n !_vm.question\n ? _c(\n _vm.tagName,\n { tag: \"component\" },\n [\n _vm._l(_vm.nodes, function(elNode) {\n return _c(\"survey-flowpanelelement\", {\n key: elNode.elementId,\n attrs: { node: elNode, panel: _vm.panel, css: \"css\" }\n })\n }),\n _vm._v(\"\\n \" + _vm._s(_vm.text) + \"\\n \")\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n !!_vm.question\n ? _c(\n \"span\",\n [\n _c(\"survey-element\", {\n key: _vm.question.idValue,\n style: {\n flexBasis: _vm.question.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: _vm.question.renderWidth,\n minWidth: _vm.question.minWidth,\n maxWidth: _vm.question.maxWidth\n },\n attrs: {\n id: _vm.question.id,\n element: _vm.question,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return (_vm.survey.locTitle.renderedHtml.length > 0 &&\n _vm.survey.showTitle) ||\n _vm.survey.hasLogo\n ? _c(\"div\", { class: _vm.survey.css.header }, [\n _vm.survey.isLogoBefore\n ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n _c(\"img\", {\n class: _vm.survey.css.logoImage,\n style: { objectFit: _vm.survey.logoFit },\n attrs: {\n src: _vm.survey.locLogo.renderedHtml,\n width: _vm.survey.logoWidth\n ? _vm.survey.logoWidth\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight\n : undefined,\n alt: _vm.survey.locTitle.renderedHtml\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.locTitle.renderedHtml.length > 0 && _vm.survey.showTitle\n ? _c(\n \"div\",\n {\n class: _vm.survey.css.headerText,\n style: { maxWidth: _vm.survey.titleMaxWidth }\n },\n [\n _c(\n \"h3\",\n { class: _vm.survey.css.title },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.survey.locTitle }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"h5\",\n { class: _vm.survey.css.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.survey.locDescription }\n })\n ],\n 1\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isLogoAfter\n ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n _c(\"img\", {\n class: _vm.survey.css.logoImage,\n style: { objectFit: _vm.survey.logoFit },\n attrs: {\n src: _vm.survey.locLogo.renderedHtml,\n width: _vm.survey.logoWidth\n ? _vm.survey.logoWidth\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight\n : undefined,\n alt: _vm.survey.locTitle.renderedHtml\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isLogoAfter\n ? _c(\"div\", { staticClass: \"sv-logo--right-tail\" })\n : _vm._e()\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n class: _vm.question.cssClasses.root,\n domProps: { innerHTML: _vm._s(_vm.question.locHtml.renderedHtml) }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _vm.question.contentMode === \"image\"\n ? _c(\"img\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: _vm.question.imageLink,\n alt: _vm.question.text || _vm.question.title,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.contentMode === \"video\"\n ? _c(\"embed\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: _vm.question.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return _c(\"div\", { key: item.value, class: _vm.getItemClass(item) }, [\n _c(\"label\", { class: _vm.question.cssClasses.label }, [\n _vm.question.multiSelect\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.value,\n expression: \"question.value\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n staticStyle: { display: \"none\" },\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + item.value,\n disabled: _vm.question.isInputReadOnly || !item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: item.value,\n checked: Array.isArray(_vm.question.value)\n ? _vm._i(_vm.question.value, item.value) > -1\n : _vm.question.value\n },\n on: {\n change: function($event) {\n var $$a = _vm.question.value,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = item.value,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(_vm.question, \"value\", $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n _vm.$set(\n _vm.question,\n \"value\",\n $$a.slice(0, $$i).concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(_vm.question, \"value\", $$c)\n }\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.value,\n expression: \"question.value\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n staticStyle: { display: \"none\" },\n attrs: {\n type: \"radio\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + item.value,\n disabled: _vm.question.isInputReadOnly || !item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: item.value,\n checked: _vm._q(_vm.question.value, item.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(_vm.question, \"value\", item.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", [\n _vm.question.contentMode === \"image\"\n ? _c(\"img\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: item.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined,\n alt: item.text || item.value\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.contentMode === \"video\"\n ? _c(\"embed\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: item.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.showLabel\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.itemText,\n attrs: { title: item.text || item.value }\n },\n [_vm._v(_vm._s(item.text || item.value))]\n )\n : _vm._e()\n ])\n ])\n ])\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.tableWrapper }, [\n _c(\"fieldset\", [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _c(\"table\", { class: _vm.question.cssClasses.root }, [\n _vm.question.showHeader\n ? _c(\"thead\", [\n _c(\n \"tr\",\n [\n _vm.question.allowRowsDragAndDrop ? _c(\"td\") : _vm._e(),\n _vm._v(\" \"),\n _c(\"td\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasRows,\n expression: \"question.hasRows\"\n }\n ]\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return _c(\n \"th\",\n {\n key: columnIndex,\n class: _vm.question.cssClasses.headerCell\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: column.locText }\n })\n ],\n 1\n )\n })\n ],\n 2\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n _vm._l(_vm.question.visibleRows, function(row, rowIndex) {\n return _c(\n \"tr\",\n {\n key: \"row-\" + row.name + \"-\" + rowIndex,\n class: row.rowClasses\n },\n [\n _vm.question.allowRowsDragAndDrop\n ? _c(\"drag-drop-td\", { attrs: { question: _vm.question } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasRows,\n expression: \"question.hasRows\"\n }\n ],\n class: _vm.question.cssClasses.cell\n },\n [_c(\"survey-string\", { attrs: { locString: row.locText } })],\n 1\n ),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return _vm.question.hasCellText\n ? _c(\n \"td\",\n {\n key: columnIndex,\n class: _vm.question.getItemClass(row, column),\n on: {\n click: function($event) {\n return _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.getCellDisplayLocText(\n row.name,\n column\n )\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return !_vm.question.hasCellText\n ? _c(\n \"td\",\n {\n key: columnIndex,\n class: _vm.question.cssClasses.cell,\n attrs: { title: column.locText.renderedHtml },\n on: {\n click: function($event) {\n return _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\n \"label\",\n { class: _vm.question.getItemClass(row, column) },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: row.value,\n expression: \"row.value\"\n }\n ],\n class: _vm.question.cssClasses.itemValue,\n attrs: {\n type: \"radio\",\n name: row.fullName,\n disabled: _vm.question.isInputReadOnly,\n id:\n _vm.question.inputId +\n \"_\" +\n row.name +\n \"_\" +\n columnIndex,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\":\n _vm.question.locTitle.renderedHtml\n },\n domProps: {\n value: column.value,\n checked: _vm._q(row.value, column.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(row, \"value\", column.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class:\n _vm.question.cssClasses.materialDecorator\n },\n [\n _c(\n \"svg\",\n {\n class:\n _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"-12 -12 24 24\" }\n },\n [\n _c(\"circle\", {\n attrs: { r: \"6\", cx: \"0\", cy: \"0\" }\n })\n ]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"circle\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" }),\n _vm._v(\" \"),\n _c(\"span\", { style: { display: \"none\" } }, [\n _vm._v(\n _vm._s(_vm.question.locTitle.renderedHtml)\n )\n ])\n ]\n )\n ]\n )\n : _vm._e()\n })\n ],\n 2\n )\n }),\n 0\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"td\",\n {\n class: _vm.cell.className,\n style: _vm.getCellStyle(),\n attrs: { title: _vm.getHeaders(), colspan: _vm.cell.colSpans }\n },\n [\n _vm.cell.isActionsCell\n ? _c(\"sv-action-bar\", { attrs: { items: _vm.cell.item.getData() } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasPanel\n ? _c(_vm.getComponentName(_vm.cell.panel), {\n tag: \"component\",\n attrs: { question: _vm.cell.panel, css: _vm.question.survey.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasQuestion\n ? _c(\n \"div\",\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.cell.question, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.cell.isChoice && _vm.cell.question.isDefaultRendering()\n ? _c(_vm.getComponentName(_vm.cell.question), {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isVisible,\n expression: \"isVisible\"\n }\n ],\n tag: \"component\",\n attrs: { question: _vm.cell.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.cell.isChoice && !_vm.cell.question.isDefaultRendering()\n ? _c(_vm.cell.question.getComponentName(), {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isVisible,\n expression: \"isVisible\"\n }\n ],\n tag: \"component\",\n attrs: { question: _vm.cell.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isChoice && !_vm.cell.isCheckbox\n ? _c(\"survey-radiogroup-item\", {\n key: _vm.cell.item.value,\n class: _vm.getItemClass(_vm.cell.item),\n attrs: {\n question: _vm.cell.question,\n item: _vm.cell.item,\n index: \"\" + _vm.cell.index,\n hideLabel: true\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isChoice && _vm.cell.isCheckbox\n ? _c(\"survey-checkbox-item\", {\n key: _vm.cell.item.value,\n class: _vm.getItemClass(_vm.cell.item),\n attrs: {\n question: _vm.cell.question,\n item: _vm.cell.item,\n index: \"\" + _vm.cell.index,\n hideLabel: true\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.cell.question, location: \"bottom\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasTitle\n ? _c(\"survey-string\", { attrs: { locString: _vm.cell.locTitle } })\n : _vm._e(),\n _vm._v(\" \"),\n !!_vm.cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(_vm.cell.requiredText))])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { style: { overflowX: _vm.question.horizontalScroll ? \"scroll\" : \"\" } },\n [_c(\"survey-matrixtable\", { attrs: { question: _vm.question } })],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { style: { overflowX: _vm.question.horizontalScroll ? \"scroll\" : \"\" } },\n [\n _vm.question.renderedTable.showAddRowOnTop\n ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.renderedTable.showTable\n ? _c(\"survey-matrixtable\", { attrs: { question: _vm.question } })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.renderedTable.showTable\n ? _c(\"div\", { class: _vm.question.cssClasses.emptyRowsSection }, [\n _c(\n \"div\",\n { class: _vm.question.cssClasses.emptyRowsText },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locEmptyRowsText }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd +\n \" \" +\n _vm.question.cssClasses.emptyRowsButton,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.renderedTable.showAddRowOnBottom\n ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locAddRowText }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ],\n 1\n )\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"table\", { class: _vm.question.cssClasses.root }, [\n _vm.table.showHeader\n ? _c(\"thead\", [\n _c(\n \"tr\",\n [\n _vm.question.allowRowsDragAndDrop ? _c(\"th\") : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.table.headerRow.cells, function(cell) {\n return _c(\n \"th\",\n {\n key: \"header_\" + cell.id,\n class: _vm.question.cssClasses.headerCell,\n style: { minWidth: cell.minWidth, width: cell.width }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: cell.locTitle }\n }),\n _vm._v(\" \"),\n !!cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(cell.requiredText))])\n : _vm._e()\n ],\n 1\n )\n })\n ],\n 2\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n _vm._l(_vm.table.rows, function(row) {\n return _c(\n \"tr\",\n { key: _vm.question.inputId + \"_\" + row.id, class: row.className },\n [\n _vm.question.allowRowsDragAndDrop\n ? _c(\"drag-drop-td\", { attrs: { question: _vm.question } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(row.cells, function(cell, cellIndex) {\n return _c(\"survey-matrixcell\", {\n key: row.id + \"_\" + cellIndex,\n attrs: { cell: cell, question: _vm.question }\n })\n })\n ],\n 2\n )\n }),\n 0\n ),\n _vm._v(\" \"),\n _vm.table.showFooter\n ? _c(\"tfoot\", [\n _c(\n \"tr\",\n _vm._l(_vm.table.footerRow.cells, function(cell, cellIndex) {\n return _c(\"survey-matrixcell\", {\n key: \"footer_\" + cellIndex,\n attrs: { cell: cell, question: _vm.question }\n })\n }),\n 1\n )\n ])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n { class: _vm.question.cssClasses.root },\n _vm._l(_vm.question.getRows(), function(row, rowindex) {\n return _c(\n \"tr\",\n {\n key: _vm.question.inputId + \"rowkey\" + rowindex,\n class: _vm.question.cssClasses.row\n },\n [\n _vm._l(row, function(item) {\n return [\n _c(\n \"td\",\n {\n key: \"label\" + item.editor.id,\n class:\n _vm.question.cssClasses.itemTitle +\n \" \" +\n _vm.question.cssClasses.cell\n },\n [\n item.editor.isRequireTextBeforeTitle ||\n item.editor.isRequireTextOnStart\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.requiredText },\n [_vm._v(_vm._s(item.editor.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", { attrs: { locString: item.locTitle } }),\n _vm._v(\" \"),\n item.editor.isRequireTextAfterTitle\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.requiredText },\n [_vm._v(_vm._s(item.editor.requiredText))]\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n key: item.editor.id,\n attrs: { css: _vm.question.cssClasses.cell }\n },\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: item.editor, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(item.editor), {\n tag: \"component\",\n attrs: { question: item.editor }\n }),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: item.editor, location: \"bottom\" }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n })\n ],\n 2\n )\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/navigation.vue?vue&type=template&id=75eadfd6& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPrevBtn,\n expression: \"showPrevBtn\"\n }\n ],\n class: _vm.survey.cssNavigationPrev,\n attrs: { type: \"button\", value: _vm.survey.pagePrevText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.prevPage }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showNextBtn,\n expression: \"showNextBtn\"\n }\n ],\n class: _vm.survey.cssNavigationNext,\n attrs: { type: \"button\", value: _vm.survey.pageNextText },\n on: { mousedown: _vm.nextButtonMouseDown, click: _vm.nextPage }\n }),\n _vm._v(\" \"),\n _vm.survey.isPreviewButtonVisible\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.survey.isLastPage,\n expression: \"survey.isLastPage\"\n }\n ],\n class: _vm.survey.cssNavigationPreview,\n attrs: { type: \"button\", value: _vm.survey.previewText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.showPreview }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isCompleteButtonVisible\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showCompleteBtn,\n expression: \"showCompleteBtn\"\n }\n ],\n class: _vm.survey.cssNavigationComplete,\n attrs: { type: \"button\", value: _vm.survey.completeText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.completeLastPage }\n })\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\":\n/*!**********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff& ***!\n \\**********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"form-group\" }, [\n !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"textarea\", {\n class: _vm.question.cssClasses.other || _vm.commentClass,\n attrs: {\n readonly: _vm.question.isInputReadOnly,\n disabled: _vm.question.isInputReadOnly,\n maxlength: _vm.question.getOthersMaxLength(),\n placeholder: _vm.question.otherPlaceHolder,\n \"aria-label\": _vm.question.locTitle.renderedHtml\n },\n domProps: { value: _vm.question.comment },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.comment))])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.page.cssClasses.page.root },\n [\n _vm.showHeader\n ? _c(\n \"h4\",\n { class: _vm.page.cssClasses.page.title },\n [\n !_vm.renderTitleActions\n ? _c(\"survey-string\", {\n attrs: { locString: _vm.page.locTitle }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.renderTitleActions\n ? _c(\"sv-title-actions\", { attrs: { element: _vm.page } })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showDescription\n ? _c(\n \"div\",\n { class: _vm.page.cssClasses.page.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.page.locDescription }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.rows, function(row, index) {\n return row.visible\n ? _c(\n \"div\",\n { key: _vm.page.id + \"_\" + index, class: _vm.css.row },\n [\n _c(\"survey-row\", {\n attrs: { row: row, survey: _vm.survey, css: _vm.css }\n })\n ],\n 1\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n \\****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.isVisible\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.container,\n style: _vm.rootStyle\n },\n [\n _c(\n \"h4\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasTitle,\n expression: \"hasTitle\"\n }\n ],\n class: _vm.getTitleStyle(),\n on: { click: _vm.changeExpanded }\n },\n [\n _vm.question.isRequireTextOnStart\n ? _c(\"span\", { class: _vm.requiredTextCss }, [\n _vm._v(_vm._s(_vm.question.requiredText))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.no\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.number,\n staticStyle: { position: \"static\" }\n },\n [_vm._v(_vm._s(_vm.question.no))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isRequireTextBeforeTitle\n ? _c(\"span\", { class: _vm.requiredTextCss }, [\n _vm._v(_vm._s(_vm.question.requiredText))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locTitle }\n }),\n _vm._v(\" \"),\n _vm.question.isRequireTextAfterTitle\n ? _c(\"span\", { class: _vm.requiredTextCss }, [\n _vm._v(_vm._s(_vm.question.requiredText))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.iconCss,\n attrs: {\n tabindex: \"0\",\n \"aria-expanded\": _vm.isCollapsed ? \"false\" : \"true\",\n \"aria-controls\": !_vm.isCollapsed\n ? _vm.question.contentId\n : null\n },\n on: {\n keyup: function($event) {\n if (\n !$event.type.indexOf(\"key\") &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.changeExpanded.apply(null, arguments)\n }\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDescription }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"survey-errors\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n !_vm.isCollapsed\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.content,\n style: { paddingLeft: _vm.question.innerPaddingLeft },\n attrs: { id: _vm.question.contentId }\n },\n [\n _vm._l(_vm.rows, function(row, index) {\n return row.visible\n ? _c(\n \"div\",\n {\n key: _vm.question.id + \"_\" + index,\n class: _vm.css.row\n },\n [\n _c(\"survey-row\", {\n attrs: {\n row: row,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.hasEditButton\n ? _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.footer },\n [\n _c(\"input\", {\n class: _vm.survey.cssNavigationEdit,\n attrs: {\n type: \"button\",\n value: _vm.survey.editText\n },\n on: { click: _vm.cancelPreview }\n })\n ]\n )\n : _vm._e()\n ],\n 2\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root },\n [\n _vm.question.isProgressTopShowing\n ? _c(\"survey-paneldynamicprogress\", {\n attrs: { question: _vm.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.renderedPanels, function(panel) {\n return [\n _c(\n \"div\",\n { key: panel.id, class: _vm.question.getPanelWrapperCss() },\n [\n _c(\"survey-panel\", { attrs: { question: panel, css: _vm.css } }),\n _vm._v(\" \"),\n _c(\"survey-paneldynamicremove\", {\n attrs: { question: _vm.question, panel: panel }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"hr\", {\n key: \"separator\" + panel.id,\n class: _vm.question.cssClasses.separator\n })\n ]\n }),\n _vm._v(\" \"),\n _vm.question.isProgressBottomShowing\n ? _c(\"survey-paneldynamicprogress\", {\n attrs: { question: _vm.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isRenderModeList && _vm.question.canAddPanel\n ? _c(\"input\", {\n class: _vm.getButtonAddCss(_vm.question),\n attrs: { type: \"button\", value: _vm.question.panelAddText },\n on: { click: _vm.addPanelClick }\n })\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: this.cssClass, staticStyle: { clear: \"both\" } }, [\n _c(\"div\", { class: _vm.question.cssClasses.progressContainer }, [\n _c(\"div\", { attrs: { title: _vm.question.panelPrevText } }, [\n _c(\n \"svg\",\n {\n class: _vm.getButtonPrevCss(_vm.question),\n attrs: { viewBox: \"0 0 10 10\" },\n on: { click: _vm.prevPanelClick }\n },\n [_c(\"polygon\", { attrs: { points: \"2,2 0,4 5,9 10,4 8,2 5,5 \" } })]\n )\n ]),\n _vm._v(\" \"),\n _vm.question.isRangeShowing\n ? _c(\"div\", { class: _vm.question.cssClasses.progress }, [\n _c(\"div\", {\n class: _vm.question.cssClasses.progressBar,\n style: { width: _vm.progress },\n attrs: { role: \"progressbar\" }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { title: _vm.question.panelNextText } }, [\n _c(\n \"svg\",\n {\n class: _vm.getButtonNextCss(_vm.question),\n attrs: { viewBox: \"0 0 10 10\" },\n on: { click: _vm.nextPanelClick }\n },\n [_c(\"polygon\", { attrs: { points: \"2,2 0,4 5,9 10,4 8,2 5,5 \" } })]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.question.canAddPanel\n ? _c(\"input\", {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\", value: _vm.question.panelAddText },\n on: { click: _vm.addPanelClick }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.progressText }, [\n _vm._v(\"\\n \" + _vm._s(_vm.question.progressText) + \"\\n \")\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\":\n/*!*****************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e& ***!\n \\*****************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.canRemovePanel && !_vm.question.isReadOnly\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n class: _vm.question.getPanelRemoveButtonCss(),\n attrs: { type: \"button\", value: _vm.question.panelRemoveText },\n on: {\n click: function($event) {\n return _vm.removePanelClick(_vm.panel)\n }\n }\n })\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*******************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n \\*******************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.progress }, [\n _c(\n \"div\",\n {\n class: _vm.css.progressBar,\n style: { width: _vm.progress },\n attrs: {\n role: \"progressbar\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }\n },\n [\n _c(\n \"span\",\n { class: _vm.css.progressText + \" \" + _vm.css.progressTextInBar },\n [_vm._v(_vm._s(_vm.survey.progressText))]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.css.progressText + \" \" + _vm.css.progressTextUnderBar },\n [_vm._v(_vm._s(_vm.survey.progressText))]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.progressButtonsContainerCenter }, [\n _c(\"div\", { class: _vm.css.progressButtonsContainer }, [\n _c(\"div\", {\n class: _vm.getScrollButtonCss(_vm.hasScroller, true),\n attrs: { role: \"button\" },\n on: {\n click: function($event) {\n return _vm.clickScrollButton(true)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n ref: \"progressButtonsListContainer\",\n class: _vm.css.progressButtonsListContainer\n },\n [\n _c(\n \"ul\",\n { class: _vm.css.progressButtonsList },\n _vm._l(_vm.survey.visiblePages, function(page, index) {\n return _c(\n \"li\",\n {\n key: \"listelement\" + index,\n class: _vm.getListElementCss(index),\n on: {\n click: function($event) {\n _vm.isListElementClickable(index)\n ? _vm.clickListElement(index)\n : null\n }\n }\n },\n [\n _c(\n \"div\",\n {\n class: _vm.css.progressButtonsPageTitle,\n attrs: {\n title: page.locNavigationTitle.renderedHtml || page.name\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n page.locNavigationTitle.renderedHtml || page.name\n ) +\n \"\\n \"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.css.progressButtonsPageDescription,\n attrs: {\n title: page.locNavigationDescription.renderedHtml\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(page.locNavigationDescription.renderedHtml) +\n \"\\n \"\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n class: _vm.getScrollButtonCss(_vm.hasScroller, false),\n attrs: { role: \"button\" },\n on: {\n click: function($event) {\n return _vm.clickScrollButton(false)\n }\n }\n })\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root, attrs: { role: \"radiogroup\" } },\n [\n !_vm.question.hasTitle\n ? _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return !_vm.question.hasColumns\n ? _c(\"survey-radiogroup-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: { question: _vm.question, item: item, index: index }\n })\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.columns, function(column, colIndex) {\n return _vm.question.hasColumns\n ? _c(\n \"div\",\n { class: _vm.question.getColumnClass() },\n _vm._l(column, function(item, index) {\n return _c(\"survey-radiogroup-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: {\n question: _vm.question,\n item: item,\n index: \"\" + colIndex + index\n }\n })\n }),\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.canShowClearButton\n ? _c(\"div\", [\n _c(\"input\", {\n class: _vm.question.cssClasses.clearButton,\n attrs: { type: \"button\", value: _vm.question.clearButtonCaption },\n on: {\n click: function() {\n _vm.question.clearValue()\n }\n }\n })\n ])\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n \\*************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"label\", { class: _vm.getLabelClass(_vm.item) }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"radio\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.item.value,\n checked: _vm._q(_vm.question.renderedValue, _vm.item.value)\n },\n on: {\n change: function($event) {\n return _vm.$set(_vm.question, \"renderedValue\", _vm.item.value)\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"-12 -12 24 24\" }\n },\n [_c(\"circle\", { attrs: { r: \"6\", cx: \"0\", cy: \"0\" } })]\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" }),\n _vm._v(\" \"),\n !_vm.hideLabel\n ? _c(\n \"span\",\n {\n class: _vm.getControlLabelClass(_vm.item),\n attrs: { title: _vm.item.locText.text }\n },\n [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.item.value == _vm.question.otherItem.value\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.hasOther &&\n _vm.question.renderedValue &&\n _vm.question.isOtherSelected,\n expression:\n \"\\n question.hasOther && question.renderedValue && question.isOtherSelected\\n \"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n \\*******************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { tabindex: \"0\" }, on: { keydown: _vm.handleKeydown } },\n [\n _c(\n \"div\",\n { staticStyle: { outline: \"none\" }, attrs: { tabindex: \"-1\" } },\n [\n _c(\"div\", { class: _vm.cssClasses.itemGhostNode }),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.cssClasses.itemContent }, [\n _c(\"div\", { class: _vm.cssClasses.itemIconContainer }, [\n _c(\n \"svg\",\n {\n class:\n _vm.cssClasses.itemIcon +\n \" \" +\n _vm.cssClasses.itemIconHoverMod,\n attrs: {\n width: \"10\",\n height: \"16\",\n viewBox: \"0 0 10 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M6 2C6 0.9 6.9 0 8 0C9.1 0 10 0.9 10 2C10 3.1 9.1 4 8 4C6.9 4 6 3.1 6 2ZM2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0ZM8 6C6.9 6 6 6.9 6 8C6 9.1 6.9 10 8 10C9.1 10 10 9.1 10 8C10 6.9 9.1 6 8 6ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM8 12C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16C9.1 16 10 15.1 10 14C10 12.9 9.1 12 8 12ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n class:\n _vm.cssClasses.itemIcon +\n \" \" +\n _vm.cssClasses.itemIconFocusMod,\n attrs: {\n width: \"10\",\n height: \"24\",\n viewBox: \"0 0 10 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\"path\", { attrs: { d: \"M10 5L5 0L0 5H4V9H6V5H10Z\" } }),\n _vm._v(\" \"),\n _c(\"path\", { attrs: { d: \"M6 19V15H4V19H0L5 24L10 19H6Z\" } })\n ]\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.cssClasses.itemIndex }, [\n _vm._v(_vm._s(_vm.index))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.cssClasses.controlLabel },\n [_c(\"survey-string\", { attrs: { locString: _vm.text } })],\n 1\n )\n ])\n ]\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!**************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n \\**************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.rootClass },\n _vm._l(_vm.question.rankingChoices, function(item, index) {\n return _c(\"survey-ranking-item\", {\n key: item.value + \"-\" + index + \"-item\",\n class: _vm.question.getItemClass(item),\n attrs: {\n text: item.locText,\n index: _vm.question.getNumberByIndex(index),\n handleKeydown: _vm.question.handleKeydown,\n cssClasses: _vm.question.cssClasses\n }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"div\", { class: _vm.getRootClass(_vm.question) }, [\n _c(\n \"fieldset\",\n { attrs: { role: \"radiogroup\" } },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleRateValues, function(item, index) {\n return _c(\n \"label\",\n { key: item.value, class: _vm.getCss(_vm.question, item) },\n [\n _c(\"input\", {\n staticClass: \"sv-visuallyhidden\",\n attrs: {\n type: \"radio\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + index,\n disabled: _vm.question.isInputReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": item.locText.text,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: { value: item.value },\n on: {\n click: function(e) {\n return _vm.question.setValueFromClick(e.target.value)\n }\n }\n }),\n _vm._v(\" \"),\n index === 0\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.minText },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.locMinRateDescription\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.question.cssClasses.itemText },\n [\n _c(\"survey-string\", {\n attrs: { locString: item.locText }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n index === _vm.question.visibleRateValues.length - 1\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.maxText },\n [\n _c(\"survey-string\", {\n attrs: {\n locString: _vm.question.locMaxRateDescription\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n })\n ],\n 2\n )\n ]),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasOther,\n expression: \"question.hasOther\"\n }\n ],\n class: _vm.question.cssClasses.other,\n attrs: { question: _vm.question }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!**************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n \\**************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"sv-vue-row-additional-div\" },\n _vm._l(_vm.row.elements, function(element) {\n return _vm.row.isNeedRender && element.isVisible\n ? _c(\n \"div\",\n {\n key: element.idValue,\n style: {\n flexBasis: element.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: element.renderWidth,\n minWidth: element.minWidth,\n maxWidth: element.maxWidth\n }\n },\n [\n _c(\"survey-element\", {\n style: {\n paddingLeft: element.paddingLeft,\n paddingRight: element.paddingRight\n },\n attrs: {\n id: element.id,\n role: element.ariaRole,\n \"aria-labelledby\": element.hasTitle\n ? element.ariaTitleId\n : null,\n name: element.name,\n element: element,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n 0\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _vm._m(0),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.controls }, [\n _c(\n \"button\",\n {\n class: _vm.question.cssClasses.clearButton,\n attrs: { type: \"button\", title: _vm.question.clearButtonCaption }\n },\n [_vm._v(\"\\n ✖\\n \")]\n )\n ])\n ])\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [_c(\"canvas\", { attrs: { tabindex: \"0\" } })])\n }\n]\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm.locString.hasHtml\n ? _c(\"span\", {\n staticClass: \"sv-string-editor\",\n staticStyle: { position: \"static\" },\n attrs: { contenteditable: \"true\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) },\n on: { blur: _vm.onInput, click: _vm.onClick }\n })\n : _c(\n \"span\",\n {\n staticClass: \"sv-string-editor\",\n staticStyle: { position: \"static\" },\n attrs: { contenteditable: \"true\" },\n on: { blur: _vm.onInput, click: _vm.onClick }\n },\n [_vm._v(_vm._s(_vm.locString.renderedHtml))]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n \\************************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm.locString.hasHtml\n ? _c(\"span\", {\n staticStyle: { position: \"static\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) }\n })\n : _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm._v(_vm._s(_vm.locString.renderedHtml))\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(_vm.locString.renderAs, {\n tag: \"component\",\n attrs: { locString: _vm.locString }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.root }, [\n _c(\"form\", { attrs: { onsubmit: \"return false;\" } }, [\n !_vm.survey.hasLogo\n ? _c(\"div\", { staticClass: \"sv_custom_header\" })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.css.container },\n [\n _c(\"survey-header\", { attrs: { survey: _vm.survey } }),\n _vm._v(\" \"),\n _vm.survey.state === \"starting\"\n ? [\n _c(\n \"div\",\n { class: _vm.css.body },\n [\n _vm.survey.isNavigationButtonsShowingOnTop\n ? _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationStart,\n attrs: {\n type: \"button\",\n value: _vm.survey.startSurveyText\n },\n on: { click: _vm.start }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n attrs: {\n id: _vm.survey.startedPage.id,\n survey: _vm.survey,\n page: _vm.survey.startedPage,\n css: _vm.css\n }\n }),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnBottom\n ? _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationStart,\n attrs: {\n type: \"button\",\n value: _vm.survey.startSurveyText\n },\n on: { click: _vm.start }\n })\n ])\n : _vm._e()\n ],\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"running\" || _vm.survey.state === \"preview\"\n ? [\n _c(\n \"div\",\n { class: _vm.css.body },\n [\n _vm.survey.isShowProgressBarOnTop\n ? _c(\n \"sv-progress-\" +\n _vm.survey.progressBarType.toLowerCase(),\n {\n tag: \"component\",\n attrs: { survey: _vm.survey, css: _vm.css }\n }\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isTimerPanelShowingOnTop\n ? _c(\"survey-timerpanel\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnTop\n ? _c(\"survey-navigation\", {\n key: _vm.navId,\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n key: _vm.pageId,\n attrs: {\n survey: _vm.survey,\n page: _vm.survey.currentPage,\n css: _vm.css\n }\n }),\n _vm._v(\" \"),\n _vm.survey.isTimerPanelShowingOnBottom\n ? _c(\"survey-timerpanel\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isShowProgressBarOnBottom\n ? _c(\n \"sv-progress-\" +\n _vm.survey.progressBarType.toLowerCase(),\n {\n tag: \"component\",\n attrs: { survey: _vm.survey, css: _vm.css }\n }\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowingOnBottom\n ? _c(\"survey-navigation\", {\n key: _vm.navId,\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasCompletedPage\n ? _c(\"div\", [\n _c(\"div\", {\n class: _vm.getCompletedPageClasses(),\n domProps: {\n innerHTML: _vm._s(_vm.getProcessedCompletedHtml())\n }\n }),\n _vm._v(\" \"),\n _vm.survey.completedState != \"\"\n ? _c(\"div\", { class: _vm.css.saveData.root }, [\n _c(\"div\", { class: _vm.getCompletedStateClasses() }, [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.survey.completedStateText))\n ]),\n _vm._v(\" \"),\n _vm.survey.completedState == \"error\"\n ? _c(\"input\", {\n class: _vm.css.saveData.saveAgainButton,\n attrs: {\n type: \"button\",\n value: _vm.survey.getLocString(\n \"saveAgainButton\"\n )\n },\n on: { click: _vm.doTrySaveAgain }\n })\n : _vm._e()\n ])\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"completedbefore\"\n ? _c(\"div\", {\n class: _vm.css.body,\n domProps: {\n innerHTML: _vm._s(_vm.survey.processedCompletedBeforeHtml)\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"loading\"\n ? _c(\"div\", {\n class: _vm.css.body,\n domProps: { innerHTML: _vm._s(_vm.survey.processedLoadingHtml) }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"empty\"\n ? _c(\"div\", { class: _vm.css.bodyEmpty }, [\n _vm._v(\n \"\\n \" + _vm._s(_vm.survey.emptySurveyText) + \"\\n \"\n )\n ])\n : _vm._e()\n ],\n 2\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!***************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n \\***************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\"input\", {\n class: _vm.question.cssClasses.root,\n style: _vm.inputStyle,\n attrs: {\n disabled: _vm.question.isInputReadOnly,\n type: _vm.question.inputType,\n maxlength: _vm.question.getMaxLength(),\n min: _vm.question.renderedMin,\n max: _vm.question.renderedMax,\n step: _vm.question.renderedStep,\n size: _vm.question.inputSize,\n id: _vm.question.inputId,\n list: _vm.question.dataListId,\n placeholder:\n _vm.question.inputType === \"range\" || _vm.question.isReadOnly\n ? \"\"\n : _vm.question.placeHolder,\n autocomplete: _vm.question.autoComplete,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: { value: _vm.question.value },\n on: { change: _vm.change, keyup: _vm.keyup }\n }),\n _vm._v(\" \"),\n _vm.question.dataListId\n ? _c(\n \"datalist\",\n { attrs: { id: _vm.question.dataListId } },\n _vm._l(_vm.question.dataList, function(item) {\n return _c(\"option\", { domProps: { value: item } })\n }),\n 0\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!*********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n \\*********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [_vm._v(_vm._s(_vm.text))])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\":\n/*!***********************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a& ***!\n \\***********************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _vm.element.isRequireTextOnStart\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.no\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.number,\n staticStyle: { position: \"static\" },\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.no))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.isRequireTextBeforeTitle\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", { attrs: { locString: _vm.element.locTitle } }),\n _vm._v(\" \"),\n _vm.element.isRequireTextAfterTitle\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.requiredText,\n attrs: { \"aria-hidden\": true }\n },\n [_vm._v(_vm._s(_vm.element.requiredText))]\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=template&id=62f588b2&\":\n/*!*****************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/window.vue?vue&type=template&id=62f588b2& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.surveyWindow.isShowing,\n expression: \"surveyWindow.isShowing\"\n }\n ],\n class: _vm.css.window.root,\n staticStyle: {\n position: \"fixed\",\n bottom: \"3px\",\n right: \"10px\",\n \"max-width\": \"60%\"\n }\n },\n [\n _c(\"div\", { class: _vm.css.window.header.root }, [\n _c(\n \"span\",\n {\n staticStyle: { width: \"100%\", cursor: \"pointer\" },\n on: { click: _vm.doExpand }\n },\n [\n _c(\n \"span\",\n {\n class: _vm.css.window.header.title,\n staticStyle: { \"padding-right\": \"10px\" }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.windowSurvey.locTitle }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"span\", {\n class: _vm.expandedCss,\n attrs: { \"aria-hidden\": \"true\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _vm.isExpandedSurvey\n ? _c(\n \"span\",\n {\n staticStyle: { float: \"right\", cursor: \"pointer\" },\n on: { click: _vm.doExpand }\n },\n [\n _c(\n \"span\",\n {\n class: _vm.css.window.header.title,\n staticStyle: { \"padding-right\": \"10px\" }\n },\n [_vm._v(\"X\")]\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isExpandedSurvey,\n expression: \"isExpandedSurvey\"\n }\n ],\n class: _vm.css.window.body\n },\n [_c(\"survey\", { attrs: { survey: _vm.windowSurvey } })],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!\n \\********************************************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Emit.js ***!\n \\********************************************************************/\n/*! exports provided: Emit */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Emit\", function() { return Emit; });\nvar __spreadArrays = (undefined && undefined.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\n// Code copied from Vue/src/shared/util.js\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); };\n/**\n * decorator of an event-emitter function\n * @param event The name of the event\n * @return MethodDecorator\n */\nfunction Emit(event) {\n return function (_target, propertyKey, descriptor) {\n var key = hyphenate(propertyKey);\n var original = descriptor.value;\n descriptor.value = function emitter() {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var emit = function (returnValue) {\n var emitName = event || key;\n if (returnValue === undefined) {\n if (args.length === 0) {\n _this.$emit(emitName);\n }\n else if (args.length === 1) {\n _this.$emit(emitName, args[0]);\n }\n else {\n _this.$emit.apply(_this, __spreadArrays([emitName], args));\n }\n }\n else {\n args.unshift(returnValue);\n _this.$emit.apply(_this, __spreadArrays([emitName], args));\n }\n };\n var returnValue = original.apply(this, args);\n if (isPromise(returnValue)) {\n returnValue.then(emit);\n }\n else {\n emit(returnValue);\n }\n return returnValue;\n };\n };\n}\nfunction isPromise(obj) {\n return obj instanceof Promise || (obj && typeof obj.then === 'function');\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Inject.js ***!\n \\**********************************************************************/\n/*! exports provided: Inject */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Inject\", function() { return Inject; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of an inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction Inject(options) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject[key] = options || key;\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js ***!\n \\******************************************************************************/\n/*! exports provided: InjectReactive */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InjectReactive\", function() { return InjectReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive inject\n * @param from key\n * @return PropertyDecorator\n */\nfunction InjectReactive(options) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n var fromKey_1 = !!options ? options.from || options : key;\n var defaultVal_1 = (!!options && options.default) || undefined;\n if (!componentOptions.computed)\n componentOptions.computed = {};\n componentOptions.computed[key] = function () {\n var obj = this[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]];\n return obj ? obj[fromKey_1] : defaultVal_1;\n };\n componentOptions.inject[_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"]] = _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"reactiveInjectKey\"];\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Model.js ***!\n \\*********************************************************************/\n/*! exports provided: Model */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return Model; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of model\n * @param event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction Model(event, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n componentOptions.model = { prop: k, event: event || k };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/ModelSync.js ***!\n \\*************************************************************************/\n/*! exports provided: ModelSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ModelSync\", function() { return ModelSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of synced model and prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param event event name\n * @param options options\n * @return PropertyDecorator\n */\nfunction ModelSync(propName, event, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n componentOptions.model = { prop: propName, event: event || k };\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n get: function () {\n return this[propName];\n },\n set: function (value) {\n // @ts-ignore\n this.$emit(event, value);\n },\n };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Prop.js ***!\n \\********************************************************************/\n/*! exports provided: Prop */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Prop\", function() { return Prop; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a prop\n * @param options the options for the prop\n * @return PropertyDecorator | void\n */\nfunction Prop(options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/PropSync.js ***!\n \\************************************************************************/\n/*! exports provided: PropSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PropSync\", function() { return PropSync; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/metadata */ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\");\n\n\n/**\n * decorator of a synced prop\n * @param propName the name to interface with from outside, must be different from decorated property\n * @param options the options for the synced prop\n * @return PropertyDecorator | void\n */\nfunction PropSync(propName, options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n Object(_helpers_metadata__WEBPACK_IMPORTED_MODULE_1__[\"applyMetadata\"])(options, target, key);\n Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[propName] = options;\n (componentOptions.computed || (componentOptions.computed = {}))[k] = {\n get: function () {\n return this[propName];\n },\n set: function (value) {\n this.$emit(\"update:\" + propName, value);\n },\n };\n })(target, key);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Provide.js ***!\n \\***********************************************************************/\n/*! exports provided: Provide */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Provide\", function() { return Provide; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction Provide(key) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n var provide = componentOptions.provide;\n Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n }\n provide.managed[k] = key || k;\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js ***!\n \\*******************************************************************************/\n/*! exports provided: ProvideReactive */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProvideReactive\", function() { return ProvideReactive; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony import */ var _helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/provideInject */ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\");\n\n\n/**\n * decorator of a reactive provide\n * @param key key\n * @return PropertyDecorator | void\n */\nfunction ProvideReactive(key) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, k) {\n var provide = componentOptions.provide;\n Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"inheritInjected\"])(componentOptions);\n if (Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"needToProduceProvide\"])(provide)) {\n provide = componentOptions.provide = Object(_helpers_provideInject__WEBPACK_IMPORTED_MODULE_1__[\"produceProvide\"])(provide);\n }\n provide.managedReactive[k] = key || k;\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Ref.js ***!\n \\*******************************************************************/\n/*! exports provided: Ref */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Ref\", function() { return Ref; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a ref prop\n * @param refKey the ref key defined in template\n */\nfunction Ref(refKey) {\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (options, key) {\n options.computed = options.computed || {};\n options.computed[key] = {\n cache: false,\n get: function () {\n return this.$refs[refKey || key];\n },\n };\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/VModel.js ***!\n \\**********************************************************************/\n/*! exports provided: VModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VModel\", function() { return VModel; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator for capturings v-model binding to component\n * @param options the options for the prop\n */\nfunction VModel(options) {\n if (options === void 0) { options = {}; }\n var valueKey = 'value';\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, key) {\n ;\n (componentOptions.props || (componentOptions.props = {}))[valueKey] = options;\n (componentOptions.computed || (componentOptions.computed = {}))[key] = {\n get: function () {\n return this[valueKey];\n },\n set: function (value) {\n this.$emit('input', value);\n },\n };\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/decorators/Watch.js ***!\n \\*********************************************************************/\n/*! exports provided: Watch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Watch\", function() { return Watch; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n\n/**\n * decorator of a watch function\n * @param path the path or the expression to observe\n * @param WatchOption\n * @return MethodDecorator\n */\nfunction Watch(path, options) {\n if (options === void 0) { options = {}; }\n var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b;\n return Object(vue_class_component__WEBPACK_IMPORTED_MODULE_0__[\"createDecorator\"])(function (componentOptions, handler) {\n if (typeof componentOptions.watch !== 'object') {\n componentOptions.watch = Object.create(null);\n }\n var watch = componentOptions.watch;\n if (typeof watch[path] === 'object' && !Array.isArray(watch[path])) {\n watch[path] = [watch[path]];\n }\n else if (typeof watch[path] === 'undefined') {\n watch[path] = [];\n }\n watch[path].push({ handler: handler, deep: deep, immediate: immediate });\n });\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/metadata.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/helpers/metadata.js ***!\n \\*********************************************************************/\n/*! exports provided: applyMetadata */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"applyMetadata\", function() { return applyMetadata; });\n/** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */\nvar reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined';\nfunction applyMetadata(options, target, key) {\n if (reflectMetadataIsSupported) {\n if (!Array.isArray(options) &&\n typeof options !== 'function' &&\n !options.hasOwnProperty('type') &&\n typeof options.type === 'undefined') {\n var type = Reflect.getMetadata('design:type', target, key);\n if (type !== Object) {\n options.type = type;\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/helpers/provideInject.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/helpers/provideInject.js ***!\n \\**************************************************************************/\n/*! exports provided: needToProduceProvide, produceProvide, reactiveInjectKey, inheritInjected */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"needToProduceProvide\", function() { return needToProduceProvide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"produceProvide\", function() { return produceProvide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reactiveInjectKey\", function() { return reactiveInjectKey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inheritInjected\", function() { return inheritInjected; });\nfunction needToProduceProvide(original) {\n return (typeof original !== 'function' ||\n (!original.managed && !original.managedReactive));\n}\nfunction produceProvide(original) {\n var provide = function () {\n var _this = this;\n var rv = typeof original === 'function' ? original.call(this) : original;\n rv = Object.create(rv || null);\n // set reactive services (propagates previous services if necessary)\n rv[reactiveInjectKey] = Object.create(this[reactiveInjectKey] || {});\n for (var i in provide.managed) {\n rv[provide.managed[i]] = this[i];\n }\n var _loop_1 = function (i) {\n rv[provide.managedReactive[i]] = this_1[i]; // Duplicates the behavior of `@Provide`\n Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i], {\n enumerable: true,\n configurable: true,\n get: function () { return _this[i]; },\n });\n };\n var this_1 = this;\n for (var i in provide.managedReactive) {\n _loop_1(i);\n }\n return rv;\n };\n provide.managed = {};\n provide.managedReactive = {};\n return provide;\n}\n/** Used for keying reactive provide/inject properties */\nvar reactiveInjectKey = '__reactiveInject__';\nfunction inheritInjected(componentOptions) {\n // inject parent reactive services (if any)\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject = componentOptions.inject || {};\n componentOptions.inject[reactiveInjectKey] = {\n from: reactiveInjectKey,\n default: {},\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-property-decorator/lib/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/vue-property-decorator/lib/index.js ***!\n \\**********************************************************/\n/*! exports provided: Component, Vue, Mixins, Emit, Inject, InjectReactive, Model, ModelSync, Prop, PropSync, Provide, ProvideReactive, Ref, VModel, Watch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, \"Vue\", function() { return vue__WEBPACK_IMPORTED_MODULE_0___default.a; });\n/* harmony import */ var vue_class_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-class-component */ \"./node_modules/vue-class-component/dist/vue-class-component.esm.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Component\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Mixins\", function() { return vue_class_component__WEBPACK_IMPORTED_MODULE_1__[\"mixins\"]; });\n\n/* harmony import */ var _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decorators/Emit */ \"./node_modules/vue-property-decorator/lib/decorators/Emit.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Emit\", function() { return _decorators_Emit__WEBPACK_IMPORTED_MODULE_2__[\"Emit\"]; });\n\n/* harmony import */ var _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./decorators/Inject */ \"./node_modules/vue-property-decorator/lib/decorators/Inject.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Inject\", function() { return _decorators_Inject__WEBPACK_IMPORTED_MODULE_3__[\"Inject\"]; });\n\n/* harmony import */ var _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./decorators/InjectReactive */ \"./node_modules/vue-property-decorator/lib/decorators/InjectReactive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"InjectReactive\", function() { return _decorators_InjectReactive__WEBPACK_IMPORTED_MODULE_4__[\"InjectReactive\"]; });\n\n/* harmony import */ var _decorators_Model__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./decorators/Model */ \"./node_modules/vue-property-decorator/lib/decorators/Model.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _decorators_Model__WEBPACK_IMPORTED_MODULE_5__[\"Model\"]; });\n\n/* harmony import */ var _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./decorators/ModelSync */ \"./node_modules/vue-property-decorator/lib/decorators/ModelSync.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ModelSync\", function() { return _decorators_ModelSync__WEBPACK_IMPORTED_MODULE_6__[\"ModelSync\"]; });\n\n/* harmony import */ var _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./decorators/Prop */ \"./node_modules/vue-property-decorator/lib/decorators/Prop.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Prop\", function() { return _decorators_Prop__WEBPACK_IMPORTED_MODULE_7__[\"Prop\"]; });\n\n/* harmony import */ var _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./decorators/PropSync */ \"./node_modules/vue-property-decorator/lib/decorators/PropSync.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PropSync\", function() { return _decorators_PropSync__WEBPACK_IMPORTED_MODULE_8__[\"PropSync\"]; });\n\n/* harmony import */ var _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./decorators/Provide */ \"./node_modules/vue-property-decorator/lib/decorators/Provide.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Provide\", function() { return _decorators_Provide__WEBPACK_IMPORTED_MODULE_9__[\"Provide\"]; });\n\n/* harmony import */ var _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./decorators/ProvideReactive */ \"./node_modules/vue-property-decorator/lib/decorators/ProvideReactive.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProvideReactive\", function() { return _decorators_ProvideReactive__WEBPACK_IMPORTED_MODULE_10__[\"ProvideReactive\"]; });\n\n/* harmony import */ var _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./decorators/Ref */ \"./node_modules/vue-property-decorator/lib/decorators/Ref.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ref\", function() { return _decorators_Ref__WEBPACK_IMPORTED_MODULE_11__[\"Ref\"]; });\n\n/* harmony import */ var _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./decorators/VModel */ \"./node_modules/vue-property-decorator/lib/decorators/VModel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VModel\", function() { return _decorators_VModel__WEBPACK_IMPORTED_MODULE_12__[\"VModel\"]; });\n\n/* harmony import */ var _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./decorators/Watch */ \"./node_modules/vue-property-decorator/lib/decorators/Watch.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Watch\", function() { return _decorators_Watch__WEBPACK_IMPORTED_MODULE_13__[\"Watch\"]; });\n\n/** vue-property-decorator verson 9.1.2 MIT LICENSE copyright 2020 kaorun343 */\n/// \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/action-bar.ts\":\n/*!***************************!*\\\n !*** ./src/action-bar.ts ***!\n \\***************************/\n/*! exports provided: ActionBarItem, AdaptiveActionBarItemWrapper, AdaptiveElement, ActionBar */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItem\", function() { return ActionBarItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionBarItemWrapper\", function() { return AdaptiveActionBarItemWrapper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveElement\", function() { return AdaptiveElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionBar\", function() { return ActionBar; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./list */ \"./src/list.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./popup */ \"./src/popup.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\nvar ActionBarItem = /** @class */ (function (_super) {\n __extends(ActionBarItem, _super);\n function ActionBarItem(item) {\n var _this = _super.call(this) || this;\n Object.assign(_this, item);\n return _this;\n }\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"id\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"visible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"title\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"tooltip\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"enabled\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"action\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"css\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"innerCss\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"data\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"popupModel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"needSeparator\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"active\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"template\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"component\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"items\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ActionBarItem.prototype, \"visibleIndex\", void 0);\n return ActionBarItem;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar AdaptiveActionBarItemWrapper = /** @class */ (function (_super) {\n __extends(AdaptiveActionBarItemWrapper, _super);\n function AdaptiveActionBarItemWrapper(owner, item) {\n var _this = _super.call(this) || this;\n _this.owner = owner;\n _this.item = item;\n _this.needSeparator = item.needSeparator;\n return _this;\n }\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"visibleIndex\", {\n get: function () {\n return this.item.visibleIndex;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"wrappedItem\", {\n get: function () {\n return this.item;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"stateItem\", {\n get: function () {\n var item = this.item;\n return !!item && item[\"getType\"] ? item : this;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"id\", {\n get: function () {\n return this.item.id;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"visible\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.visible);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"title\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.title);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"tooltip\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.tooltip);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"enabled\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.enabled);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"disabled\", {\n get: function () {\n var isEnabled = this.enabled;\n if (isEnabled === undefined)\n return false;\n return !isEnabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"showTitle\", {\n get: function () {\n return (this.owner.showTitles &&\n (this.item.showTitle || this.item.showTitle === undefined));\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveActionBarItemWrapper.prototype.action = function (context) {\n this.item.action && this.item.action(context);\n };\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"css\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.css);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"innerCss\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.innerCss);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"data\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.data);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"popupModel\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.popupModel);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"active\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.active);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"template\", {\n get: function () {\n return this.item.template;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"component\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.component);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"iconName\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.iconName);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AdaptiveActionBarItemWrapper.prototype, \"items\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_4__[\"unwrap\"])(this.item.items);\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: true })\n ], AdaptiveActionBarItemWrapper.prototype, \"isVisible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], AdaptiveActionBarItemWrapper.prototype, \"needSeparator\", void 0);\n return AdaptiveActionBarItemWrapper;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar AdaptiveElement = /** @class */ (function (_super) {\n __extends(AdaptiveElement, _super);\n function AdaptiveElement() {\n var _this = _super.call(this) || this;\n _this.invisibleItemsListModel = new _list__WEBPACK_IMPORTED_MODULE_2__[\"ListModel\"]([], function (item) {\n _this.invisibleItemSelected(item);\n _this.dotsItemPopupModel.toggleVisibility();\n }, false);\n _this.canGrow = true;\n _this.dotsItemPopupModel = new _popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupModel\"](\"sv-list\", {\n model: _this.invisibleItemsListModel,\n });\n _this.dotsItem = new AdaptiveActionBarItemWrapper(_this, new ActionBarItem({\n id: \"dotsItem-id\",\n component: \"sv-action-bar-item-dropdown\",\n css: \"sv-dots\",\n innerCss: \"sv-dots__item\",\n iconName: \"icon-dots\",\n // showTitle: true,\n // title: \"...\",\n action: function (item) {\n _this.dotsItemPopupModel.toggleVisibility();\n },\n popupModel: _this.dotsItemPopupModel,\n }));\n return _this;\n }\n Object.defineProperty(AdaptiveElement.prototype, \"hasItems\", {\n get: function () {\n return (this.items || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveElement.prototype.invisibleItemSelected = function (item) {\n if (!!item && typeof item.action === \"function\") {\n item.action();\n }\n };\n AdaptiveElement.prototype.showFirstN = function (visibleItemsCount) {\n var _this = this;\n var leftItemsToShow = visibleItemsCount;\n var invisibleItems = [];\n this.items.forEach(function (item) {\n if (item === _this.dotsItem) {\n return;\n }\n item.isVisible = leftItemsToShow > 0;\n if (leftItemsToShow <= 0) {\n invisibleItems.push(item);\n }\n leftItemsToShow--;\n });\n this.invisibleItems = invisibleItems;\n var index = this.items.indexOf(this.dotsItem);\n if (index !== -1) {\n this.items.splice(index, 1);\n }\n if (visibleItemsCount < this.items.length) {\n this.items.splice(visibleItemsCount, 0, this.dotsItem);\n }\n };\n Object.defineProperty(AdaptiveElement.prototype, \"canShrink\", {\n get: function () {\n return this.showTitles;\n },\n enumerable: false,\n configurable: true\n });\n AdaptiveElement.prototype.shrink = function () {\n this.showTitles = false;\n };\n AdaptiveElement.prototype.grow = function () {\n this.showTitles = true;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: true })\n ], AdaptiveElement.prototype, \"showTitles\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"propertyArray\"])()\n ], AdaptiveElement.prototype, \"items\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"propertyArray\"])({\n onSet: function (val, target) {\n target.invisibleItemsListModel.items = target.invisibleItems;\n },\n })\n ], AdaptiveElement.prototype, \"invisibleItems\", void 0);\n return AdaptiveElement;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar ActionBar = /** @class */ (function (_super) {\n __extends(ActionBar, _super);\n function ActionBar() {\n return _super.call(this) || this;\n }\n ActionBar.prototype.setItems = function (items) {\n var setItems = this.wrapItems(items);\n setItems = this.sortItems(setItems);\n this.items = setItems;\n };\n ActionBar.prototype.wrapItems = function (items) {\n var _this = this;\n return items.map(function (item) {\n return new AdaptiveActionBarItemWrapper(_this, item);\n });\n };\n ActionBar.prototype.sortItems = function (items) {\n return []\n .concat(items.filter(function (item) { return item.visibleIndex >= 0 || item.visibleIndex === undefined; }))\n .sort(function (firstItem, secondItem) {\n return firstItem.visibleIndex - secondItem.visibleIndex;\n });\n };\n return ActionBar;\n}(AdaptiveElement));\n\n\n\n/***/ }),\n\n/***/ \"./src/base.ts\":\n/*!*********************!*\\\n !*** ./src/base.ts ***!\n \\*********************/\n/*! exports provided: Bindings, Base, ArrayChanges, SurveyError, SurveyElement, Event, EventBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Bindings\", function() { return Bindings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return Base; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return ArrayChanges; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return SurveyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return SurveyElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return Event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EventBase\", function() { return EventBase; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\n\nvar Bindings = /** @class */ (function () {\n function Bindings(obj) {\n this.obj = obj;\n this.properties = null;\n this.values = null;\n }\n Bindings.prototype.getType = function () {\n return \"bindings\";\n };\n Bindings.prototype.getNames = function () {\n var res = [];\n this.fillProperties();\n for (var i = 0; i < this.properties.length; i++) {\n if (this.properties[i].isVisible(\"\", this.obj)) {\n res.push(this.properties[i].name);\n }\n }\n return res;\n };\n Bindings.prototype.getProperties = function () {\n var res = [];\n this.fillProperties();\n for (var i = 0; i < this.properties.length; i++) {\n res.push(this.properties[i]);\n }\n return res;\n };\n Bindings.prototype.setBinding = function (propertyName, valueName) {\n if (!this.values)\n this.values = {};\n if (!!valueName) {\n this.values[propertyName] = valueName;\n }\n else {\n delete this.values[propertyName];\n if (Object.keys(this.values).length == 0) {\n this.values = null;\n }\n }\n };\n Bindings.prototype.clearBinding = function (propertyName) {\n this.setBinding(propertyName, \"\");\n };\n Bindings.prototype.isEmpty = function () {\n return !this.values;\n };\n Bindings.prototype.getValueNameByPropertyName = function (propertyName) {\n if (!this.values)\n return undefined;\n return this.values[propertyName];\n };\n Bindings.prototype.getPropertiesByValueName = function (valueName) {\n if (!this.values)\n return [];\n var res = [];\n for (var key in this.values) {\n if (this.values[key] == valueName) {\n res.push(key);\n }\n }\n return res;\n };\n Bindings.prototype.getJson = function () {\n if (this.isEmpty())\n return null;\n var res = {};\n for (var key in this.values) {\n res[key] = this.values[key];\n }\n return res;\n };\n Bindings.prototype.setJson = function (value) {\n this.values = null;\n if (!value)\n return;\n this.values = {};\n for (var key in value) {\n this.values[key] = value[key];\n }\n };\n Bindings.prototype.fillProperties = function () {\n if (this.properties !== null)\n return;\n this.properties = [];\n var objProperties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getPropertiesByObj(this.obj);\n for (var i = 0; i < objProperties.length; i++) {\n if (objProperties[i].isBindable) {\n this.properties.push(objProperties[i]);\n }\n }\n };\n return Bindings;\n}());\n\n/**\n * The base class for SurveyJS objects.\n */\nvar Base = /** @class */ (function () {\n function Base() {\n this.propertyHash = {};\n this.eventList = [];\n this.isLoadingFromJsonValue = false;\n this.loadingOwner = null;\n /**\n * Event that raise on property change of the sender object\n * sender - the object that owns the property\n * options.name - the property name that has been changed\n * options.oldValue - old value. Please note, it equals to options.newValue if property is an array\n * options.newValue - new value.\n */\n this.onPropertyChanged = this.addEvent();\n /**\n * Event that raised on changing property of the ItemValue object.\n * sender - the object that owns the property\n * options.propertyName - the property name to which ItemValue array is belong. It can be \"choices\" for dropdown question\n * options.obj - the instance of ItemValue object which property has been changed\n * options.name - the property of ItemObject that has been changed\n * options.oldValue - old value\n * options.newValue - new value\n */\n this.onItemValuePropertyChanged = this.addEvent();\n this.isCreating = true;\n this.bindingsValue = new Bindings(this);\n _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"CustomPropertiesCollection\"].createProperties(this);\n this.onBaseCreating();\n this.isCreating = false;\n }\n Base.isSurveyElement = function (val) {\n if (!val)\n return false;\n if (Array.isArray(val)) {\n if (val.length == 0)\n return false;\n return Base.isSurveyElement(val[0]);\n }\n return !!val.getType && !!val.onPropertyChanged;\n };\n Object.defineProperty(Base, \"commentPrefix\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentPrefix;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].commentPrefix = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns true if a value underfined, null, empty string or empty array.\n *\n * @param value\n * @param trimString a boolean parameter, default value true. If true then it trims the string and functions returns true for a string that contains white spaces only.\n */\n Base.prototype.isValueEmpty = function (value, trimString) {\n if (trimString === void 0) { trimString = true; }\n if (trimString) {\n value = this.trimValue(value);\n }\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isValueEmpty(value);\n };\n Base.prototype.trimValue = function (value) {\n if (!!value && (typeof value === \"string\" || value instanceof String))\n return value.trim();\n return value;\n };\n Base.prototype.IsPropertyEmpty = function (value) {\n return value !== \"\" && this.isValueEmpty(value);\n };\n Base.prototype.dispose = function () {\n for (var i = 0; i < this.eventList.length; i++) {\n this.eventList[i].clear();\n }\n this.isDisposedValue = true;\n };\n Object.defineProperty(Base.prototype, \"isDisposed\", {\n get: function () {\n return this.isDisposedValue === true;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.addEvent = function () {\n var res = new EventBase();\n this.eventList.push(res);\n return res;\n };\n Base.prototype.onBaseCreating = function () { };\n /**\n * Returns the type of the object as a string as it represents in the json. It should be in lowcase.\n */\n Base.prototype.getType = function () {\n return \"base\";\n };\n Base.prototype.getSurvey = function (isLive) {\n if (isLive === void 0) { isLive = false; }\n return null;\n };\n Object.defineProperty(Base.prototype, \"inSurvey\", {\n /**\n * Returns true if the object is inluded into survey, otherwise returns false.\n */\n get: function () {\n return !!this.getSurvey(true);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Base.prototype, \"bindings\", {\n get: function () {\n return this.bindingsValue;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.checkBindings = function (valueName, value) { };\n Base.prototype.updateBindings = function (propertyName, value) {\n var valueName = this.bindings.getValueNameByPropertyName(propertyName);\n if (!!valueName) {\n this.updateBindingValue(valueName, value);\n }\n };\n Base.prototype.updateBindingValue = function (valueName, value) { };\n /**\n * Returns the element template name without prefix. Typically it equals to getType().\n * @see getType\n */\n Base.prototype.getTemplate = function () {\n return this.getType();\n };\n Object.defineProperty(Base.prototype, \"isLoadingFromJson\", {\n /**\n * Returns true if the object is loading from Json at the current moment.\n */\n get: function () {\n return this.getIsLoadingFromJson();\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.getIsLoadingFromJson = function () {\n if (!!this.loadingOwner && this.loadingOwner.isLoadingFromJson)\n return true;\n return this.isLoadingFromJsonValue;\n };\n Base.prototype.startLoadingFromJson = function () {\n this.isLoadingFromJsonValue = true;\n };\n Base.prototype.endLoadingFromJson = function () {\n this.isLoadingFromJsonValue = false;\n };\n /**\n * Deserialized the current object into JSON\n * @see fromJSON\n */\n Base.prototype.toJSON = function () {\n return new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toJsonObject(this);\n };\n /**\n * Load object properties and elements. It doesn't reset properties that was changed before and they are not defined in the json parameter.\n * @param json the object JSON definition\n * @see toJSON\n */\n Base.prototype.fromJSON = function (json) {\n return new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toObject(json, this);\n };\n /**\n * Make a clone of the existing object. Create a new object of the same type and load all properties into it.\n */\n Base.prototype.clone = function () {\n var clonedObj = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].createClass(this.getType());\n clonedObj.fromJSON(this.toJSON());\n return clonedObj;\n };\n Base.prototype.getProgressInfo = function () {\n return SurveyElement.createProgressInfo();\n };\n Base.prototype.localeChanged = function () { };\n Base.prototype.locStrsChanged = function () {\n if (!!this.arraysInfo) {\n for (var key in this.arraysInfo) {\n var item = this.arraysInfo[key];\n if (item && item.isItemValues) {\n var arr = this.getPropertyValue(key);\n if (arr && !!Base.itemValueLocStrChanged)\n Base.itemValueLocStrChanged(arr);\n }\n }\n }\n if (!!this.localizableStrings) {\n for (var key in this.localizableStrings) {\n var item = this.getLocalizableString(key);\n if (item)\n item.strChanged();\n }\n }\n };\n /**\n * Returns the property value by name\n * @param name property name\n */\n Base.prototype.getPropertyValue = function (name, defaultValue) {\n if (defaultValue === void 0) { defaultValue = null; }\n var res = this.getPropertyValueCore(this.propertyHash, name);\n if (this.IsPropertyEmpty(res)) {\n if (defaultValue != null)\n return defaultValue;\n var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.getType(), name);\n if (!!prop && (!prop.isCustom || !this.isCreating)) {\n if (!this.IsPropertyEmpty(prop.defaultValue) &&\n !Array.isArray(prop.defaultValue))\n return prop.defaultValue;\n if (prop.type == \"boolean\" || prop.type == \"switch\")\n return false;\n if (prop.isCustom && !!prop.onGetValue)\n return prop.onGetValue(this);\n }\n }\n return res;\n };\n Base.prototype.getPropertyValueCore = function (propertiesHash, name) {\n if (this.getPropertyValueCoreHandler)\n return this.getPropertyValueCoreHandler(propertiesHash, name);\n else\n return propertiesHash[name];\n };\n Base.prototype.geValueFromHash = function () {\n return this.propertyHash[\"value\"];\n };\n Base.prototype.setPropertyValueCore = function (propertiesHash, name, val) {\n if (this.setPropertyValueCoreHandler && !this.isDisposedValue)\n this.setPropertyValueCoreHandler(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n Base.prototype.iteratePropertiesHash = function (func) {\n var _this = this;\n var keys = [];\n for (var key in this.propertyHash) {\n keys.push(key);\n }\n keys.forEach(function (key) { return func(_this.propertyHash, key); });\n };\n /**\n * set property value\n * @param name property name\n * @param val new property value\n */\n Base.prototype.setPropertyValue = function (name, val) {\n var oldValue = this.getPropertyValue(name);\n if (oldValue && Array.isArray(oldValue)) {\n if (this.isTwoValueEquals(oldValue, val))\n return;\n var arrayInfo = this.arraysInfo[name];\n this.setArray(name, oldValue, val, arrayInfo ? arrayInfo.isItemValues : false, arrayInfo ? arrayInfo.onPush : null);\n }\n else {\n this.setPropertyValueCore(this.propertyHash, name, val);\n if (!this.isDisposedValue && !this.isTwoValueEquals(oldValue, val)) {\n this.propertyValueChanged(name, oldValue, val);\n }\n }\n };\n Base.prototype.clearPropertyValue = function (name) {\n this.setPropertyValueCore(this.propertyHash, name, null);\n delete this.propertyHash[name];\n };\n Base.prototype.onPropertyValueChangedCallback = function (name, oldValue, newValue, sender, arrayChanges) { };\n Base.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n this.onItemValuePropertyChanged.fire(this, {\n obj: item,\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n propertyName: item.ownerPropertyName,\n });\n };\n Base.prototype.onPropertyValueChanged = function (name, oldValue, newValue) { };\n Base.prototype.propertyValueChanged = function (name, oldValue, newValue, arrayChanges, target) {\n if (this.isLoadingFromJson)\n return;\n this.updateBindings(name, newValue);\n this.onPropertyValueChanged(name, oldValue, newValue);\n this.onPropertyChanged.fire(this, {\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n });\n this.doPropertyValueChangedCallback(name, oldValue, newValue, arrayChanges, this);\n if (!this.onPropChangeFunctions)\n return;\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n if (this.onPropChangeFunctions[i].name == name)\n this.onPropChangeFunctions[i].func(newValue);\n }\n };\n Object.defineProperty(Base.prototype, \"isInternal\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.doPropertyValueChangedCallback = function (name, oldValue, newValue, arrayChanges, target) {\n if (this.isInternal)\n return;\n if (!target)\n target = this;\n var notifier = this.getSurvey();\n if (!notifier)\n notifier = this;\n if (!!notifier.doPropertyValueChangedCallback) {\n notifier.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n }\n };\n /**\n * Register a function that will be called on a property value changed.\n * @param name the property name\n * @param func the function with no parameters that will be called on property changed.\n * @param key an optional parameter. If there is already a registered function for this property with the same key, it will be overwritten.\n */\n Base.prototype.registerFunctionOnPropertyValueChanged = function (name, func, key) {\n if (key === void 0) { key = null; }\n if (!this.onPropChangeFunctions) {\n this.onPropChangeFunctions = [];\n }\n if (key) {\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n var item = this.onPropChangeFunctions[i];\n if (item.name == name && item.key == key) {\n item.func = func;\n return;\n }\n }\n }\n this.onPropChangeFunctions.push({ name: name, func: func, key: key });\n };\n /**\n * Register a function that will be called on a property value changed from the names list.\n * @param names the list of properties names\n * @param func the function with no parameters that will be called on property changed.\n * @param key an optional parameter. If there is already a registered function for this property with the same key, it will be overwritten.\n */\n Base.prototype.registerFunctionOnPropertiesValueChanged = function (names, func, key) {\n if (key === void 0) { key = null; }\n for (var i = 0; i < names.length; i++) {\n this.registerFunctionOnPropertyValueChanged(names[i], func, key);\n }\n };\n /**\n * Unregister notification on property value changed\n * @param name the property name\n * @param key the key with which you have registered the notification for this property. It can be null.\n */\n Base.prototype.unRegisterFunctionOnPropertyValueChanged = function (name, key) {\n if (key === void 0) { key = null; }\n if (!this.onPropChangeFunctions)\n return;\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n var item = this.onPropChangeFunctions[i];\n if (item.name == name && item.key == key) {\n this.onPropChangeFunctions.splice(i, 1);\n return;\n }\n }\n };\n /**\n * Unregister notification on property value changed for all properties in the names list.\n * @param names the list of properties names\n * @param key the key with which you have registered the notification for this property. It can be null.\n */\n Base.prototype.unRegisterFunctionOnPropertiesValueChanged = function (names, key) {\n if (key === void 0) { key = null; }\n for (var i = 0; i < names.length; i++) {\n this.unRegisterFunctionOnPropertyValueChanged(names[i], key);\n }\n };\n Base.prototype.createCustomLocalizableObj = function (name) {\n var locStr = this.getLocalizableString(name);\n if (locStr || !this.getLocale)\n return;\n this.createLocalizableString(name, this);\n };\n Base.prototype.createLocalizableString = function (name, owner, useMarkDown) {\n var _this = this;\n if (useMarkDown === void 0) { useMarkDown = false; }\n var locStr = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](owner, useMarkDown, name);\n locStr.onStrChanged = function (oldValue, newValue) {\n _this.propertyValueChanged(name, oldValue, newValue);\n };\n if (!this.localizableStrings) {\n this.localizableStrings = {};\n }\n this.localizableStrings[name] = locStr;\n return locStr;\n };\n Base.prototype.getLocalizableString = function (name) {\n return !!this.localizableStrings ? this.localizableStrings[name] : null;\n };\n Base.prototype.getLocalizableStringText = function (name, defaultStr) {\n if (defaultStr === void 0) { defaultStr = \"\"; }\n var locStr = this.getLocalizableString(name);\n if (!locStr)\n return \"\";\n var res = locStr.text;\n return res ? res : defaultStr;\n };\n Base.prototype.setLocalizableStringText = function (name, value) {\n var locStr = this.getLocalizableString(name);\n if (!locStr)\n return;\n locStr.text = value;\n };\n Base.prototype.addUsedLocales = function (locales) {\n if (!!this.localizableStrings) {\n for (var key in this.localizableStrings) {\n var item = this.getLocalizableString(key);\n if (item)\n this.AddLocStringToUsedLocales(item, locales);\n }\n }\n if (!!this.arraysInfo) {\n for (var key in this.arraysInfo) {\n var items = this.getPropertyValue(key);\n if (!items || !items.length)\n continue;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (item && item.addUsedLocales) {\n item.addUsedLocales(locales);\n }\n }\n }\n }\n };\n Base.prototype.searchText = function (text, founded) {\n var strs = [];\n this.getSearchableLocalizedStrings(strs);\n for (var i = 0; i < strs.length; i++) {\n if (strs[i].setFindText(text)) {\n founded.push({ element: this, str: strs[i] });\n }\n }\n };\n Base.prototype.getSearchableLocalizedStrings = function (arr) {\n if (!!this.localizableStrings) {\n var keys_1 = [];\n this.getSearchableLocKeys(keys_1);\n for (var i = 0; i < keys_1.length; i++) {\n var item = this.getLocalizableString(keys_1[i]);\n if (item)\n arr.push(item);\n }\n }\n if (!this.arraysInfo)\n return;\n var keys = [];\n this.getSearchableItemValueKeys(keys);\n for (var i = 0; i < keys.length; i++) {\n var items = this.getPropertyValue(keys[i]);\n if (!items)\n continue;\n for (var j = 0; j < items.length; j++) {\n arr.push(items[j].locText);\n }\n }\n };\n Base.prototype.getSearchableLocKeys = function (keys) { };\n Base.prototype.getSearchableItemValueKeys = function (keys) { };\n Base.prototype.AddLocStringToUsedLocales = function (locStr, locales) {\n var locs = locStr.getLocales();\n for (var i = 0; i < locs.length; i++) {\n if (locales.indexOf(locs[i]) < 0) {\n locales.push(locs[i]);\n }\n }\n };\n Base.prototype.createItemValues = function (name) {\n var self = this;\n var result = this.createNewArray(name, function (item) {\n item.locOwner = self;\n item.ownerPropertyName = name;\n });\n this.arraysInfo[name].isItemValues = true;\n return result;\n };\n Base.prototype.notifyArrayChanged = function (ar, arrayChanges) {\n !!ar.onArrayChanged && ar.onArrayChanged(arrayChanges);\n };\n Base.prototype.createNewArrayCore = function (name) {\n var res = null;\n if (!!this.createArrayCoreHandler) {\n res = this.createArrayCoreHandler(this.propertyHash, name);\n }\n if (!res) {\n res = new Array();\n this.setPropertyValueCore(this.propertyHash, name, res);\n }\n return res;\n };\n Base.prototype.ensureArray = function (name, onPush, onRemove) {\n if (onPush === void 0) { onPush = null; }\n if (onRemove === void 0) { onRemove = null; }\n if (this.arraysInfo && this.arraysInfo[name]) {\n return;\n }\n return this.createNewArray(name, onPush, onRemove);\n };\n Base.prototype.createNewArray = function (name, onPush, onRemove) {\n if (onPush === void 0) { onPush = null; }\n if (onRemove === void 0) { onRemove = null; }\n var newArray = this.createNewArrayCore(name);\n if (!this.arraysInfo) {\n this.arraysInfo = {};\n }\n this.arraysInfo[name] = { onPush: onPush, isItemValues: false };\n var self = this;\n newArray.push = function (value) {\n var result = Object.getPrototypeOf(newArray).push.call(newArray, value);\n if (!self.isDisposedValue) {\n if (onPush)\n onPush(value, newArray.length - 1);\n var arrayChanges = new ArrayChanges(newArray.length - 1, 0, [value], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n newArray.unshift = function (value) {\n var result = Object.getPrototypeOf(newArray).unshift.call(newArray, value);\n if (!self.isDisposedValue) {\n if (onPush)\n onPush(value, newArray.length - 1);\n var arrayChanges = new ArrayChanges(0, 0, [value], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n newArray.pop = function () {\n var result = Object.getPrototypeOf(newArray).pop.call(newArray);\n if (!self.isDisposedValue) {\n if (onRemove)\n onRemove(result);\n var arrayChanges = new ArrayChanges(newArray.length - 1, 1, [], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n newArray.splice = function (start, deleteCount) {\n var _a;\n var items = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n items[_i - 2] = arguments[_i];\n }\n if (!start)\n start = 0;\n if (!deleteCount)\n deleteCount = 0;\n var result = (_a = Object.getPrototypeOf(newArray).splice).call.apply(_a, __spreadArray([newArray,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n if (!self.isDisposedValue) {\n if (onRemove && result) {\n for (var i = 0; i < result.length; i++) {\n onRemove(result[i]);\n }\n }\n if (onPush) {\n for (var i = 0; i < items.length; i++) {\n onPush(items[i], start + i);\n }\n }\n var arrayChanges = new ArrayChanges(start, deleteCount, items, result);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray, arrayChanges);\n }\n return result;\n };\n return newArray;\n };\n Base.prototype.getItemValueType = function () {\n return undefined;\n };\n Base.prototype.setArray = function (name, src, dest, isItemValues, onPush) {\n var deletedItems = [].concat(src);\n Object.getPrototypeOf(src).splice.call(src, 0, src.length);\n if (!!dest) {\n for (var i = 0; i < dest.length; i++) {\n var item = dest[i];\n if (isItemValues) {\n if (!!Base.createItemValue) {\n item = Base.createItemValue(item, this.getItemValueType());\n }\n }\n Object.getPrototypeOf(src).push.call(src, item);\n if (onPush)\n onPush(src[i]);\n }\n }\n var arrayChanges = new ArrayChanges(0, deletedItems.length, src, deletedItems);\n this.propertyValueChanged(name, deletedItems, src, arrayChanges);\n this.notifyArrayChanged(src, arrayChanges);\n };\n Base.prototype.isTwoValueEquals = function (x, y, caseInSensitive, trimString) {\n if (caseInSensitive === void 0) { caseInSensitive = false; }\n if (trimString === void 0) { trimString = false; }\n if (caseInSensitive) {\n x = this.getValueInLowCase(x);\n y = this.getValueInLowCase(y);\n }\n if (trimString) {\n x = this.trimValue(x);\n y = this.trimValue(y);\n }\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isTwoValueEquals(x, y);\n };\n Base.copyObject = function (dst, src) {\n for (var key in src) {\n var source = src[key];\n if (typeof source === \"object\") {\n source = {};\n this.copyObject(source, src[key]);\n }\n dst[key] = source;\n }\n };\n Base.prototype.copyCssClasses = function (dest, source) {\n if (!source)\n return;\n if (typeof source === \"string\" || source instanceof String) {\n dest[\"root\"] = source;\n }\n else {\n SurveyElement.copyObject(dest, source);\n }\n };\n Base.prototype.getValueInLowCase = function (val) {\n if (!!val && typeof val == \"string\")\n return val.toLowerCase();\n return val;\n };\n return Base;\n}());\n\nvar ArrayChanges = /** @class */ (function () {\n function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {\n this.index = index;\n this.deleteCount = deleteCount;\n this.itemsToAdd = itemsToAdd;\n this.deletedItems = deletedItems;\n }\n return ArrayChanges;\n}());\n\nvar SurveyError = /** @class */ (function () {\n function SurveyError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n this.text = text;\n this.errorOwner = errorOwner;\n this.visible = true;\n }\n Object.defineProperty(SurveyError.prototype, \"locText\", {\n get: function () {\n if (!this.locTextValue) {\n this.locTextValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](this.errorOwner, true);\n this.locTextValue.text = this.getText();\n }\n return this.locTextValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyError.prototype.getText = function () {\n var res = this.text;\n if (!res)\n res = this.getDefaultText();\n if (!!this.errorOwner) {\n res = this.errorOwner.getErrorCustomText(res, this);\n }\n return res;\n };\n SurveyError.prototype.getErrorType = function () {\n return \"base\";\n };\n SurveyError.prototype.getDefaultText = function () {\n return \"\";\n };\n return SurveyError;\n}());\n\n/**\n * Base class of SurveyJS Elements.\n */\nvar SurveyElement = /** @class */ (function (_super) {\n __extends(SurveyElement, _super);\n function SurveyElement(name) {\n var _this = _super.call(this) || this;\n _this.titleActions = [];\n _this.selectedElementInDesignValue = _this;\n _this.disableDesignActions = SurveyElement.CreateDisabledDesignElements;\n _this.isContentElement = false;\n _this.name = name;\n _this.createNewArray(\"errors\");\n _this.registerFunctionOnPropertyValueChanged(\"isReadOnly\", function () {\n _this.onReadOnlyChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"state\", function () {\n if (_this.stateChangedCallback)\n _this.stateChangedCallback();\n });\n _this.registerFunctionOnPropertyValueChanged(\"errors\", function () {\n _this.updateVisibleErrors();\n });\n return _this;\n }\n SurveyElement.createProgressInfo = function () {\n return {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n };\n };\n SurveyElement.getProgressInfoByElements = function (children, isRequired) {\n var info = SurveyElement.createProgressInfo();\n for (var i = 0; i < children.length; i++) {\n if (!children[i].isVisible)\n continue;\n var childInfo = children[i].getProgressInfo();\n info.questionCount += childInfo.questionCount;\n info.answeredQuestionCount += childInfo.answeredQuestionCount;\n info.requiredQuestionCount += childInfo.requiredQuestionCount;\n info.requiredAnsweredQuestionCount +=\n childInfo.requiredAnsweredQuestionCount;\n }\n if (isRequired && info.questionCount > 0) {\n if (info.requiredQuestionCount == 0)\n info.requiredQuestionCount = 1;\n if (info.answeredQuestionCount > 0)\n info.requiredAnsweredQuestionCount = 1;\n }\n return info;\n };\n SurveyElement.ScrollElementToTop = function (elementId) {\n if (!elementId || typeof document === \"undefined\")\n return false;\n var el = document.getElementById(elementId);\n if (!el || !el.scrollIntoView)\n return false;\n var elemTop = el.getBoundingClientRect().top;\n if (elemTop < 0)\n el.scrollIntoView();\n return elemTop < 0;\n };\n SurveyElement.GetFirstNonTextElement = function (elements, removeSpaces) {\n if (removeSpaces === void 0) { removeSpaces = false; }\n if (!elements || !elements.length || elements.length == 0)\n return null;\n if (removeSpaces) {\n var tEl = elements[0];\n if (tEl.nodeName === \"#text\")\n tEl.data = \"\";\n tEl = elements[elements.length - 1];\n if (tEl.nodeName === \"#text\")\n tEl.data = \"\";\n }\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].nodeName != \"#text\" && elements[i].nodeName != \"#comment\")\n return elements[i];\n }\n return null;\n };\n SurveyElement.FocusElement = function (elementId) {\n if (!elementId || typeof document === \"undefined\")\n return false;\n var el = document.getElementById(elementId);\n if (el) {\n el.focus();\n return true;\n }\n return false;\n };\n Object.defineProperty(SurveyElement.prototype, \"state\", {\n /**\n * Set this property to \"collapsed\" to render only Panel title and expanded button and to \"expanded\" to render the collapsed button in the Panel caption\n */\n get: function () {\n return this.getPropertyValue(\"state\");\n },\n set: function (val) {\n this.setPropertyValue(\"state\", val);\n this.notifyStateChanged();\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.notifyStateChanged = function () {\n if (this.survey) {\n this.survey.elementContentVisibilityChanged(this);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"isCollapsed\", {\n /**\n * Returns true if the Element is in the collapsed state\n * @see state\n * @see collapse\n * @see isExpanded\n */\n get: function () {\n if (this.isDesignMode)\n return;\n return this.state == \"collapsed\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isExpanded\", {\n /**\n * Returns true if the Element is in the expanded state\n * @see state\n * @see expand\n * @see isCollapsed\n */\n get: function () {\n return this.state == \"expanded\";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Collapse the Element\n * @see state\n */\n SurveyElement.prototype.collapse = function () {\n if (this.isDesignMode)\n return;\n this.state = \"collapsed\";\n };\n /**\n * Expand the Element\n * @see state\n */\n SurveyElement.prototype.expand = function () {\n this.state = \"expanded\";\n };\n /**\n * Toggle element's state\n * @see state\n */\n SurveyElement.prototype.toggleState = function () {\n if (this.isCollapsed) {\n this.expand();\n return;\n }\n if (this.isExpanded) {\n this.collapse();\n return;\n }\n };\n SurveyElement.prototype.getTitleActions = function () {\n var _this = this;\n this.titleActions = [];\n var expandAction = {\n title: \"\",\n action: function () {\n _this.toggleState();\n },\n };\n Object.defineProperties(expandAction, {\n innerCss: {\n get: function () {\n var css = \"sv-expand-action\";\n if (_this.isExpanded)\n css += \" sv-expand-action--expanded\";\n return css;\n },\n },\n visible: {\n get: function () {\n return _this.isExpanded || _this.isCollapsed;\n },\n },\n });\n this.titleActions.push(expandAction);\n return this.titleActions;\n };\n SurveyElement.prototype.getTitleComponentName = function () {\n var componentName = \"default\";\n if (this.survey.renderTitleActions(this)) {\n componentName = _rendererFactory__WEBPACK_IMPORTED_MODULE_4__[\"RendererFactory\"].Instance.getRenderer(\"element\", \"title-actions\");\n }\n if (componentName == \"default\") {\n return \"sv-default-title\";\n }\n return componentName;\n };\n SurveyElement.prototype.setSurveyImpl = function (value) {\n this.surveyImplValue = value;\n if (!this.surveyImplValue) {\n this.setSurveyCore(null);\n }\n else {\n this.surveyDataValue = this.surveyImplValue.getSurveyData();\n this.setSurveyCore(this.surveyImplValue.getSurvey());\n this.textProcessorValue = this.surveyImplValue.getTextProcessor();\n this.onSetData();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"surveyImpl\", {\n get: function () {\n return this.surveyImplValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"data\", {\n get: function () {\n return this.surveyDataValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"survey\", {\n /**\n * Returns the survey object.\n */\n get: function () {\n return this.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (!!this.surveyValue)\n return this.surveyValue;\n if (!!this.surveyImplValue) {\n this.setSurveyCore(this.surveyImplValue.getSurvey());\n }\n return this.surveyValue;\n };\n SurveyElement.prototype.setSurveyCore = function (value) {\n this.surveyValue = value;\n if (!!this.surveyChangedCallback) {\n this.surveyChangedCallback();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"isDesignMode\", {\n /**\n * Returns true if the question in design mode right now.\n */\n get: function () {\n return !!this.survey && this.survey.isDesignMode;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isInternal\", {\n get: function () {\n return this.isContentElement;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"areInvisibleElementsShowing\", {\n get: function () {\n return (!!this.survey &&\n this.survey.areInvisibleElementsShowing &&\n !this.isContentElement);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isVisible\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isReadOnly\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"readOnly\", {\n /**\n * Set it to true to make an element question/panel/page readonly.\n * Please note, this property is hidden for question without input, for example html question.\n * @see enableIf\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"readOnly\", false);\n },\n set: function (val) {\n if (this.readOnly == val)\n return;\n this.setPropertyValue(\"readOnly\", val);\n if (!this.isLoadingFromJson) {\n this.setPropertyValue(\"isReadOnly\", this.isReadOnly);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.onReadOnlyChanged = function () {\n if (!!this.readOnlyChangedCallback) {\n this.readOnlyChangedCallback();\n }\n };\n SurveyElement.prototype.updateElementCss = function (reNew) { };\n SurveyElement.prototype.getIsLoadingFromJson = function () {\n if (_super.prototype.getIsLoadingFromJson.call(this))\n return true;\n return this.survey ? this.survey.isLoadingFromJson : false;\n };\n Object.defineProperty(SurveyElement.prototype, \"name\", {\n /**\n * This is the identifier of a survey element - question or panel.\n * @see valueName\n */\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n var oldValue = this.name;\n this.setPropertyValue(\"name\", this.getValidName(val));\n if (!this.isLoadingFromJson && !!oldValue) {\n this.onNameChanged(oldValue);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getValidName = function (name) {\n return name;\n };\n SurveyElement.prototype.onNameChanged = function (oldValue) { };\n SurveyElement.prototype.updateBindingValue = function (valueName, value) {\n if (!!this.data &&\n !_helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isTwoValueEquals(value, this.data.getValue(valueName))) {\n this.data.setValue(valueName, value, false);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"errors\", {\n /**\n * The list of errors. It is created by callig hasErrors functions\n * @see hasErrors\n */\n get: function () {\n return this.getPropertyValue(\"errors\");\n },\n set: function (val) {\n this.setPropertyValue(\"errors\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateVisibleErrors = function () {\n var counter = 0;\n for (var i = 0; i < this.errors.length; i++) {\n if (this.errors[i].visible)\n counter++;\n }\n this.hasVisibleErrors = counter > 0;\n };\n Object.defineProperty(SurveyElement.prototype, \"containsErrors\", {\n /**\n * Returns true if a question or a container (panel/page) or their chidren have an error.\n * The value can be out of date. hasErrors function should be called to get the correct value.\n */\n get: function () {\n return this.getPropertyValue(\"containsErrors\", false);\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateContainsErrors = function () {\n this.setPropertyValue(\"containsErrors\", this.getContainsErrors());\n };\n SurveyElement.prototype.getContainsErrors = function () {\n return this.errors.length > 0;\n };\n SurveyElement.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return [];\n };\n Object.defineProperty(SurveyElement.prototype, \"selectedElementInDesign\", {\n get: function () {\n return this.selectedElementInDesignValue;\n },\n set: function (val) {\n this.selectedElementInDesignValue = val;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateCustomWidgets = function () { };\n SurveyElement.prototype.onSurveyLoad = function () { };\n SurveyElement.prototype.onFirstRendering = function () { };\n SurveyElement.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.survey) {\n this.onSurveyLoad();\n }\n };\n SurveyElement.prototype.setVisibleIndex = function (index) {\n return 0;\n };\n Object.defineProperty(SurveyElement.prototype, \"isPage\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isPanel\", {\n /**\n * Return false if it is not panel.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.delete = function () { };\n SurveyElement.prototype.removeSelfFromList = function (list) {\n if (!list || !Array.isArray(list))\n return;\n var index = list.indexOf(this);\n if (index > -1) {\n list.splice(index, 1);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"textProcessor\", {\n get: function () {\n return this.textProcessorValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getProcessedHtml = function (html) {\n if (!html || !this.textProcessor)\n return html;\n return this.textProcessor.processText(html, true);\n };\n SurveyElement.prototype.onSetData = function () { };\n Object.defineProperty(SurveyElement.prototype, \"parent\", {\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getPage = function (parent) {\n while (parent && parent.parent)\n parent = parent.parent;\n if (parent && parent.getType() == \"page\")\n return parent;\n return null;\n };\n SurveyElement.prototype.moveToBase = function (parent, container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n if (!container)\n return false;\n parent.removeElement(this);\n var index = -1;\n if (_helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isNumber(insertBefore)) {\n index = parseInt(insertBefore);\n }\n if (index == -1 && !!insertBefore && !!insertBefore.getType) {\n index = container.indexOf(insertBefore);\n }\n container.addElement(this, index);\n return true;\n };\n SurveyElement.prototype.setPage = function (parent, val) {\n var oldPage = this.getPage(parent);\n if (oldPage === val)\n return;\n if (parent)\n parent.removeElement(this);\n if (val) {\n val.addElement(this, -1);\n }\n };\n SurveyElement.prototype.getSearchableLocKeys = function (keys) {\n keys.push(\"title\");\n keys.push(\"description\");\n };\n SurveyElement.CreateDisabledDesignElements = false;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: false })\n ], SurveyElement.prototype, \"hasVisibleErrors\", void 0);\n return SurveyElement;\n}(Base));\n\nvar Event = /** @class */ (function () {\n function Event() {\n }\n Object.defineProperty(Event.prototype, \"isEmpty\", {\n get: function () {\n return !this.callbacks || this.callbacks.length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Event.prototype.fire = function (sender, options) {\n if (!this.callbacks)\n return;\n for (var i = 0; i < this.callbacks.length; i++) {\n this.callbacks[i](sender, options);\n if (!this.callbacks)\n return;\n }\n };\n Event.prototype.clear = function () {\n this.callbacks = undefined;\n };\n Event.prototype.add = function (func) {\n if (this.hasFunc(func))\n return;\n if (!this.callbacks) {\n this.callbacks = new Array();\n }\n this.callbacks.push(func);\n this.fireCallbackChanged();\n };\n Event.prototype.remove = function (func) {\n if (this.hasFunc(func)) {\n var index = this.callbacks.indexOf(func, 0);\n this.callbacks.splice(index, 1);\n this.fireCallbackChanged();\n }\n };\n Event.prototype.hasFunc = function (func) {\n if (this.callbacks == null)\n return false;\n return this.callbacks.indexOf(func, 0) > -1;\n };\n Event.prototype.fireCallbackChanged = function () {\n if (!!this.onCallbacksChanged) {\n this.onCallbacksChanged();\n }\n };\n return Event;\n}());\n\nvar EventBase = /** @class */ (function (_super) {\n __extends(EventBase, _super);\n function EventBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return EventBase;\n}(Event));\n\n\n\n/***/ }),\n\n/***/ \"./src/calculatedValue.ts\":\n/*!********************************!*\\\n !*** ./src/calculatedValue.ts ***!\n \\********************************/\n/*! exports provided: CalculatedValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return CalculatedValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n/**\n * The calculated value is a way to define the variable in Survey Creator.\n * It has two main properties: name and expression. Based on expression the value read-only property is automatically calculated.\n * The name property should be unique though all calculated values.\n * It uses survey.getVariable/seruvey.setVariable functions to get/set its value. The class do not store its value internally.\n * You may set includeIntoResult property to true to store this calculated value into survey result.\n */\nvar CalculatedValue = /** @class */ (function (_super) {\n __extends(CalculatedValue, _super);\n function CalculatedValue(name, expression) {\n if (name === void 0) { name = null; }\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.expressionIsRunning = false;\n _this.isCalculated = false;\n if (!!name) {\n _this.name = name;\n }\n if (!!expression) {\n _this.expression = expression;\n }\n return _this;\n }\n CalculatedValue.prototype.setOwner = function (data) {\n this.data = data;\n this.rerunExpression();\n };\n CalculatedValue.prototype.getType = function () {\n return \"calculatedvalue\";\n };\n CalculatedValue.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.data && !!this.data[\"getSurvey\"]\n ? this.data.getSurvey()\n : null;\n };\n Object.defineProperty(CalculatedValue.prototype, \"owner\", {\n get: function () {\n return this.data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"name\", {\n /**\n * The calculated value name. It should be non empty and unique.\n */\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"name\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"includeIntoResult\", {\n /**\n * Set this property to true to include the non-empty calculated value into survey result, survey.data property.\n */\n get: function () {\n return this.getPropertyValue(\"includeIntoResult\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"includeIntoResult\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"expression\", {\n /**\n * The Expression that used to calculate the value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n *
Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n this.rerunExpression();\n },\n enumerable: false,\n configurable: true\n });\n CalculatedValue.prototype.locCalculation = function () {\n this.expressionIsRunning = true;\n };\n CalculatedValue.prototype.unlocCalculation = function () {\n this.expressionIsRunning = false;\n };\n CalculatedValue.prototype.resetCalculation = function () {\n this.isCalculated = false;\n };\n CalculatedValue.prototype.doCalculation = function (calculatedValues, values, properties) {\n if (this.isCalculated)\n return;\n this.runExpressionCore(calculatedValues, values, properties);\n this.isCalculated = true;\n };\n CalculatedValue.prototype.runExpression = function (values, properties) {\n this.runExpressionCore(null, values, properties);\n };\n Object.defineProperty(CalculatedValue.prototype, \"value\", {\n get: function () {\n if (!this.data)\n return undefined;\n return this.data.getVariable(this.name);\n },\n enumerable: false,\n configurable: true\n });\n CalculatedValue.prototype.setValue = function (val) {\n if (!this.data)\n return;\n this.data.setVariable(this.name, val);\n };\n Object.defineProperty(CalculatedValue.prototype, \"canRunExpression\", {\n get: function () {\n return (!!this.data &&\n !this.isLoadingFromJson &&\n !!this.expression &&\n !this.expressionIsRunning &&\n !!this.name);\n },\n enumerable: false,\n configurable: true\n });\n CalculatedValue.prototype.rerunExpression = function () {\n if (!this.canRunExpression)\n return;\n this.runExpression(this.data.getFilteredValues(), this.data.getFilteredProperties());\n };\n CalculatedValue.prototype.runExpressionCore = function (calculatedValues, values, properties) {\n if (!this.canRunExpression)\n return;\n this.ensureExpression(values);\n this.locCalculation();\n if (!!calculatedValues) {\n this.runDependentExpressions(calculatedValues, values, properties);\n }\n this.expressionRunner.run(values, properties);\n };\n CalculatedValue.prototype.runDependentExpressions = function (calculatedValues, values, properties) {\n var variables = this.expressionRunner.getVariables();\n if (!variables)\n return;\n for (var i = 0; i < calculatedValues.length; i++) {\n var calcItem = calculatedValues[i];\n if (calcItem === this || variables.indexOf(calcItem.name) < 0)\n continue;\n calcItem.doCalculation(calculatedValues, values, properties);\n values[calcItem.name] = calcItem.value;\n }\n };\n CalculatedValue.prototype.ensureExpression = function (values) {\n var _this = this;\n if (!!this.expressionRunner)\n return;\n this.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ExpressionRunner\"](this.expression);\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value)) {\n _this.setValue(newValue);\n }\n _this.unlocCalculation();\n };\n };\n return CalculatedValue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"calculatedvalue\", [\n { name: \"!name\", isUnique: true },\n \"expression:expression\",\n \"includeIntoResult:boolean\",\n], function () {\n return new CalculatedValue();\n}, \"base\");\n\n\n/***/ }),\n\n/***/ \"./src/choicesRestful.ts\":\n/*!*******************************!*\\\n !*** ./src/choicesRestful.ts ***!\n \\*******************************/\n/*! exports provided: ChoicesRestful, ChoicesRestfull */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return ChoicesRestful; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return ChoicesRestfull; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar XmlParser = /** @class */ (function () {\n function XmlParser() {\n this.parser = new DOMParser();\n }\n XmlParser.prototype.assignValue = function (target, name, value) {\n if (Array.isArray(target[name])) {\n target[name].push(value);\n }\n else if (target[name] !== undefined) {\n target[name] = [target[name]].concat(value);\n }\n else if (typeof value === \"object\" &&\n Object.keys(value).length === 1 &&\n Object.keys(value)[0] === name) {\n target[name] = value[name];\n }\n else {\n target[name] = value;\n }\n };\n XmlParser.prototype.xml2Json = function (xmlNode, result) {\n if (xmlNode.children && xmlNode.children.length > 0) {\n for (var i = 0; i < xmlNode.children.length; i++) {\n var childNode = xmlNode.children[i];\n var childObject = {};\n this.xml2Json(childNode, childObject);\n this.assignValue(result, childNode.nodeName, childObject);\n }\n }\n else {\n this.assignValue(result, xmlNode.nodeName, xmlNode.textContent);\n }\n };\n XmlParser.prototype.parseXmlString = function (xmlString) {\n var xmlRoot = this.parser.parseFromString(xmlString, \"text/xml\");\n var json = {};\n this.xml2Json(xmlRoot, json);\n return json;\n };\n return XmlParser;\n}());\n/**\n * A definition for filling choices for checkbox, dropdown and radiogroup questions from resfull services.\n * The run method call a restful service and results can be get on getResultCallback.\n */\nvar ChoicesRestful = /** @class */ (function (_super) {\n __extends(ChoicesRestful, _super);\n function ChoicesRestful() {\n var _this = _super.call(this) || this;\n _this.lastObjHash = \"\";\n _this.isRunningValue = false;\n _this.processedUrl = \"\";\n _this.processedPath = \"\";\n _this.isUsingCacheFromUrl = undefined;\n _this.error = null;\n _this.createItemValue = function (value) {\n return new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value);\n };\n return _this;\n }\n Object.defineProperty(ChoicesRestful, \"EncodeParameters\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters = val;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.clearCache = function () {\n ChoicesRestful.itemsResult = {};\n ChoicesRestful.sendingSameRequests = {};\n };\n ChoicesRestful.addSameRequest = function (obj) {\n if (!obj.isUsingCache)\n return false;\n var hash = obj.objHash;\n var res = ChoicesRestful.sendingSameRequests[hash];\n if (!res) {\n ChoicesRestful.sendingSameRequests[obj.objHash] = [];\n return false;\n }\n res.push(obj);\n return true;\n };\n ChoicesRestful.unregisterSameRequests = function (obj, items) {\n if (!obj.isUsingCache)\n return;\n var res = ChoicesRestful.sendingSameRequests[obj.objHash];\n delete ChoicesRestful.sendingSameRequests[obj.objHash];\n if (!res)\n return;\n for (var i = 0; i < res.length; i++) {\n if (!!res[i].getResultCallback) {\n res[i].getResultCallback(items);\n }\n }\n };\n ChoicesRestful.getCachedItemsResult = function (obj) {\n var hash = obj.objHash;\n var res = ChoicesRestful.itemsResult[hash];\n if (!res)\n return false;\n if (obj.getResultCallback) {\n obj.getResultCallback(res);\n }\n return true;\n };\n ChoicesRestful.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.owner ? this.owner.survey : null;\n };\n ChoicesRestful.prototype.run = function (textProcessor) {\n if (textProcessor === void 0) { textProcessor = null; }\n if (!this.url || !this.getResultCallback)\n return;\n this.processedText(textProcessor);\n if (!this.processedUrl) {\n this.doEmptyResultCallback({});\n this.lastObjHash = this.objHash;\n return;\n }\n if (this.lastObjHash === this.objHash)\n return;\n this.lastObjHash = this.objHash;\n this.error = null;\n if (this.useChangedItemsResults())\n return;\n if (ChoicesRestful.addSameRequest(this))\n return;\n this.sendRequest();\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isUsingCache\", {\n get: function () {\n if (this.isUsingCacheFromUrl === true)\n return true;\n if (this.isUsingCacheFromUrl === false)\n return false;\n return _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].useCachingForChoicesRestful;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"isRunning\", {\n get: function () {\n return this.getIsRunning();\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.getIsRunning = function () {\n return this.isRunningValue;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isWaitingForParameters\", {\n get: function () {\n return this.url && !this.processedUrl;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.useChangedItemsResults = function () {\n return ChoicesRestful.getCachedItemsResult(this);\n };\n ChoicesRestful.prototype.doEmptyResultCallback = function (serverResult) {\n var items = [];\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, serverResult);\n }\n this.getResultCallback(items);\n };\n ChoicesRestful.prototype.processedText = function (textProcessor) {\n var urlText = this.url;\n if (!!urlText) {\n urlText = urlText\n .replace(ChoicesRestful.cacheText, \"\")\n .replace(ChoicesRestful.noCacheText, \"\");\n }\n if (textProcessor) {\n var pUrl = textProcessor.processTextEx(urlText, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters);\n var pPath = textProcessor.processTextEx(this.path, false, _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].webserviceEncodeParameters);\n if (!pUrl.hasAllValuesOnLastRun || !pPath.hasAllValuesOnLastRun) {\n this.processedUrl = \"\";\n this.processedPath = \"\";\n }\n else {\n this.processedUrl = pUrl.text;\n this.processedPath = pPath.text;\n }\n }\n else {\n this.processedUrl = urlText;\n this.processedPath = this.path;\n }\n if (this.onProcessedUrlCallback) {\n this.onProcessedUrlCallback(this.processedUrl, this.processedPath);\n }\n };\n ChoicesRestful.prototype.parseResponse = function (response) {\n var parsedResponse;\n if (!!response &&\n typeof response.indexOf === \"function\" &&\n response.indexOf(\"<\") === 0) {\n var parser = new XmlParser();\n parsedResponse = parser.parseXmlString(response);\n }\n else {\n try {\n parsedResponse = JSON.parse(response);\n }\n catch (_a) {\n parsedResponse = (response || \"\")\n .split(\"\\n\")\n .map(function (s) { return s.trim(\" \"); })\n .filter(function (s) { return !!s; });\n }\n }\n return parsedResponse;\n };\n ChoicesRestful.prototype.sendRequest = function () {\n this.isRunningValue = true;\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", this.processedUrl);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n var loadingObjHash = this.objHash;\n xhr.onload = function () {\n self.isRunningValue = false;\n if (xhr.status === 200) {\n self.onLoad(self.parseResponse(xhr.response), loadingObjHash);\n }\n else {\n self.onError(xhr.statusText, xhr.responseText);\n }\n };\n var options = { request: xhr };\n if (!!ChoicesRestful.onBeforeSendRequest) {\n ChoicesRestful.onBeforeSendRequest(this, options);\n }\n this.beforeSendRequest();\n options.request.send();\n };\n ChoicesRestful.prototype.getType = function () {\n return \"choicesByUrl\";\n };\n Object.defineProperty(ChoicesRestful.prototype, \"isEmpty\", {\n get: function () {\n return (!this.url &&\n !this.path &&\n !this.valueName &&\n !this.titleName &&\n !this.imageLinkName);\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.getCustomPropertiesNames = function () {\n var properties = this.getCustomProperties();\n var res = new Array();\n for (var i = 0; i < properties.length; i++) {\n res.push(this.getCustomPropertyName(properties[i].name));\n }\n return res;\n };\n ChoicesRestful.prototype.getCustomPropertyName = function (propertyName) {\n return propertyName + \"Name\";\n };\n ChoicesRestful.prototype.getCustomProperties = function () {\n var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].getProperties(this.itemValueType);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].name === \"value\" ||\n properties[i].name === \"text\" ||\n properties[i].name === \"visibleIf\" ||\n properties[i].name === \"enableIf\")\n continue;\n res.push(properties[i]);\n }\n return res;\n };\n ChoicesRestful.prototype.setData = function (json) {\n this.clear();\n if (json.url)\n this.url = json.url;\n if (json.path)\n this.path = json.path;\n if (json.valueName)\n this.valueName = json.valueName;\n if (json.titleName)\n this.titleName = json.titleName;\n if (json.imageLinkName)\n this.imageLinkName = json.imageLinkName;\n if (json.allowEmptyResponse !== undefined)\n this.allowEmptyResponse = json.allowEmptyResponse;\n if (json.attachOriginalItems !== undefined)\n this.attachOriginalItems = json.attachOriginalItems;\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (json[properties[i]])\n this[properties[i]] = json[properties[i]];\n }\n };\n ChoicesRestful.prototype.getData = function () {\n if (this.isEmpty)\n return null;\n var res = {};\n if (this.url)\n res[\"url\"] = this.url;\n if (this.path)\n res[\"path\"] = this.path;\n if (this.valueName)\n res[\"valueName\"] = this.valueName;\n if (this.titleName)\n res[\"titleName\"] = this.titleName;\n if (this.imageLinkName)\n res[\"imageLinkName\"] = this.imageLinkName;\n if (this.allowEmptyResponse)\n res[\"allowEmptyResponse\"] = this.allowEmptyResponse;\n if (this.attachOriginalItems)\n res[\"attachOriginalItems\"] = this.attachOriginalItems;\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (this[properties[i]])\n res[properties[i]] = this[properties[i]];\n }\n return res;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"url\", {\n /**\n * Gets or sets a link to a web service. You can use text preprocessing here.\n * For example, the following url: _https://restcountries.eu/rest/v2/region/{region}_ is changed based on the _region_ question's value.\n * SurveyJS automatically gets data from the web service when the value of the _region_ question changes.\n * @see path\n * @see valueName\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"url\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"url\", val);\n this.isUsingCacheFromUrl = undefined;\n if (!val)\n return;\n if (val.indexOf(ChoicesRestful.cacheText) > -1) {\n this.isUsingCacheFromUrl = true;\n }\n else {\n if (val.indexOf(ChoicesRestful.noCacheText) > -1) {\n this.isUsingCacheFromUrl = false;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"path\", {\n /**\n * Use this property, if a web service returns a lot of information and you need only a part of it.\n * For example, a web service returns a list of countries and a list of capitals.\n * If you need a list of countries, set a correct path from which SurveyJS obtains the data, like: _DataList1\\DataList2_\n * @see url\n * @see valueName\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"path\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"path\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"valueName\", {\n /**\n * Gets or sets the name of a property (in the obtained data object) to which SurveyJS binds to provide values for choice items.\n * @see url\n * @see path\n * @see titleName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"valueName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"titleName\", {\n /**\n * Gets or sets the name of a property (in the obtained data object) to which SurveyJS binds to provide display texts for choice items.\n * @see url\n * @see path\n * @see valueeName\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"titleName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"titleName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"imageLinkName\", {\n get: function () {\n return this.getPropertyValue(\"imageLinkName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageLinkName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"allowEmptyResponse\", {\n get: function () {\n return this.getPropertyValue(\"allowEmptyResponse\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowEmptyResponse\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"attachOriginalItems\", {\n get: function () {\n return this.getPropertyValue(\"attachOriginalItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"attachOriginalItems\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ChoicesRestful.prototype, \"itemValueType\", {\n get: function () {\n if (!this.owner)\n return \"itemvalue\";\n var prop = _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.owner.getType(), \"choices\");\n if (!prop)\n return \"itemvalue\";\n if (prop.type == \"itemvalue[]\")\n return \"itemvalue\";\n return prop.type;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.prototype.clear = function () {\n this.url = \"\";\n this.path = \"\";\n this.valueName = \"\";\n this.titleName = \"\";\n this.imageLinkName = \"\";\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (this[properties[i]])\n this[properties[i]] = \"\";\n }\n };\n ChoicesRestful.prototype.beforeSendRequest = function () {\n if (!!this.beforeSendRequestCallback) {\n this.beforeSendRequestCallback();\n }\n };\n ChoicesRestful.prototype.onLoad = function (result, loadingObjHash) {\n if (loadingObjHash === void 0) { loadingObjHash = null; }\n if (!loadingObjHash) {\n loadingObjHash = this.objHash;\n }\n var items = new Array();\n var updatedResult = this.getResultAfterPath(result);\n if (updatedResult && updatedResult[\"length\"]) {\n for (var i = 0; i < updatedResult.length; i++) {\n var itemValue = updatedResult[i];\n if (!itemValue)\n continue;\n var value = !!this.getItemValueCallback\n ? this.getItemValueCallback(itemValue)\n : this.getValue(itemValue);\n var item = this.createItemValue(value);\n this.setTitle(item, itemValue);\n this.setCustomProperties(item, itemValue);\n if (this.attachOriginalItems) {\n item.originalItem = itemValue;\n }\n var imageLink = this.getImageLink(itemValue);\n if (!!imageLink) {\n item.imageLink = imageLink;\n }\n items.push(item);\n }\n }\n else {\n if (!this.allowEmptyResponse) {\n this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestEmptyError\"](null, this.owner);\n }\n }\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, result);\n }\n if (this.isUsingCache) {\n ChoicesRestful.itemsResult[loadingObjHash] = items;\n }\n this.callResultCallback(items, loadingObjHash);\n ChoicesRestful.unregisterSameRequests(this, items);\n };\n ChoicesRestful.prototype.callResultCallback = function (items, loadingObjHash) {\n if (loadingObjHash != this.objHash)\n return;\n this.getResultCallback(items);\n };\n ChoicesRestful.prototype.setCustomProperties = function (item, itemValue) {\n var properties = this.getCustomProperties();\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n var val = this.getValueCore(itemValue, this.getPropertyBinding(prop.name));\n if (!this.isValueEmpty(val)) {\n item[prop.name] = val;\n }\n }\n };\n ChoicesRestful.prototype.getPropertyBinding = function (propertyName) {\n if (this[this.getCustomPropertyName(propertyName)])\n return this[this.getCustomPropertyName(propertyName)];\n if (this[propertyName])\n return this[propertyName];\n return propertyName;\n };\n ChoicesRestful.prototype.onError = function (status, response) {\n this.error = new _error__WEBPACK_IMPORTED_MODULE_3__[\"WebRequestError\"](status, response, this.owner);\n this.doEmptyResultCallback(response);\n ChoicesRestful.unregisterSameRequests(this, []);\n };\n ChoicesRestful.prototype.getResultAfterPath = function (result) {\n if (!result)\n return result;\n if (!this.processedPath)\n return result;\n var pathes = this.getPathes();\n for (var i = 0; i < pathes.length; i++) {\n result = result[pathes[i]];\n if (!result)\n return null;\n }\n return result;\n };\n ChoicesRestful.prototype.getPathes = function () {\n var pathes = [];\n if (this.processedPath.indexOf(\";\") > -1) {\n pathes = this.path.split(\";\");\n }\n else {\n pathes = this.processedPath.split(\",\");\n }\n if (pathes.length == 0)\n pathes.push(this.processedPath);\n return pathes;\n };\n ChoicesRestful.prototype.getValue = function (item) {\n if (!item)\n return null;\n if (this.valueName)\n return this.getValueCore(item, this.valueName);\n if (!(item instanceof Object))\n return item;\n var len = Object.keys(item).length;\n if (len < 1)\n return null;\n return item[Object.keys(item)[0]];\n };\n ChoicesRestful.prototype.setTitle = function (item, itemValue) {\n var title = this.titleName ? this.titleName : \"title\";\n var val = this.getValueCore(itemValue, title);\n if (!val)\n return;\n if (typeof val === \"string\") {\n item.text = val;\n }\n else {\n item.locText.setJson(val);\n }\n };\n ChoicesRestful.prototype.getImageLink = function (item) {\n var imageLink = this.imageLinkName ? this.imageLinkName : \"imageLink\";\n return this.getValueCore(item, imageLink);\n };\n ChoicesRestful.prototype.getValueCore = function (item, property) {\n if (!item)\n return null;\n if (property.indexOf(\".\") < 0)\n return item[property];\n var properties = property.split(\".\");\n for (var i = 0; i < properties.length; i++) {\n item = item[properties[i]];\n if (!item)\n return null;\n }\n return item;\n };\n Object.defineProperty(ChoicesRestful.prototype, \"objHash\", {\n get: function () {\n return (this.processedUrl +\n \";\" +\n this.processedPath +\n \";\" +\n this.valueName +\n \";\" +\n this.titleName +\n \";\" +\n this.imageLinkName);\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestful.cacheText = \"{CACHE}\";\n ChoicesRestful.noCacheText = \"{NOCACHE}\";\n ChoicesRestful.itemsResult = {};\n ChoicesRestful.sendingSameRequests = {};\n return ChoicesRestful;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * Obsolete, please use ChoicesRestful\n */\nvar ChoicesRestfull = /** @class */ (function (_super) {\n __extends(ChoicesRestfull, _super);\n function ChoicesRestfull() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ChoicesRestfull, \"EncodeParameters\", {\n get: function () {\n return ChoicesRestful.EncodeParameters;\n },\n set: function (val) {\n ChoicesRestful.EncodeParameters = val;\n },\n enumerable: false,\n configurable: true\n });\n ChoicesRestfull.clearCache = function () {\n ChoicesRestful.clearCache();\n };\n Object.defineProperty(ChoicesRestfull, \"onBeforeSendRequest\", {\n get: function () {\n return ChoicesRestful.onBeforeSendRequest;\n },\n set: function (val) {\n ChoicesRestful.onBeforeSendRequest = val;\n },\n enumerable: false,\n configurable: true\n });\n return ChoicesRestfull;\n}(ChoicesRestful));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"choicesByUrl\", [\n \"url\",\n \"path\",\n \"valueName\",\n \"titleName\",\n {\n name: \"imageLinkName\",\n visibleIf: function (obj) {\n return !!obj && !!obj.owner && obj.owner.getType() == \"imagepicker\";\n },\n },\n { name: \"allowEmptyResponse:boolean\", default: false },\n { name: \"attachOriginalItems:boolean\", default: false, visible: false },\n], function () {\n return new ChoicesRestful();\n});\n\n\n/***/ }),\n\n/***/ \"./src/conditionProcessValue.ts\":\n/*!**************************************!*\\\n !*** ./src/conditionProcessValue.ts ***!\n \\**************************************/\n/*! exports provided: ProcessValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return ProcessValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n\nvar ProcessValue = /** @class */ (function () {\n function ProcessValue() {\n this.values = null;\n this.properties = null;\n }\n ProcessValue.prototype.getFirstName = function (text, obj) {\n if (obj === void 0) { obj = null; }\n if (!text)\n return text;\n var res = \"\";\n if (!!obj) {\n res = this.getFirstPropertyName(text, obj);\n if (!!res)\n return res;\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n if (ch == \".\" || ch == \"[\")\n break;\n res += ch;\n }\n return res;\n };\n ProcessValue.prototype.hasValue = function (text, values) {\n if (values === void 0) { values = null; }\n if (!values)\n values = this.values;\n var res = this.getValueCore(text, values);\n return res.hasValue;\n };\n ProcessValue.prototype.getValue = function (text, values) {\n if (values === void 0) { values = null; }\n if (!values)\n values = this.values;\n var res = this.getValueCore(text, values);\n return res.value;\n };\n ProcessValue.prototype.setValue = function (obj, text, value) {\n if (!text)\n return;\n var nonNestedObj = this.getNonNestedObject(obj, text, true);\n if (!nonNestedObj)\n return;\n obj = nonNestedObj.value;\n text = nonNestedObj.text;\n if (!!obj && !!text) {\n obj[text] = value;\n }\n };\n ProcessValue.prototype.getValueInfo = function (valueInfo) {\n if (!!valueInfo.path) {\n valueInfo.value = this.getValueFromPath(valueInfo.path, this.values);\n valueInfo.hasValue =\n valueInfo.value !== null && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(valueInfo.value);\n if (!valueInfo.hasValue &&\n valueInfo.path.length > 1 &&\n valueInfo.path[valueInfo.path.length - 1] == \"length\") {\n valueInfo.hasValue = true;\n valueInfo.value = 0;\n }\n return;\n }\n var res = this.getValueCore(valueInfo.name, this.values);\n valueInfo.value = res.value;\n valueInfo.hasValue = res.hasValue;\n valueInfo.path = res.hasValue ? res.path : null;\n };\n ProcessValue.prototype.getValueFromPath = function (path, values) {\n var index = 0;\n while (!!values && index < path.length) {\n var ind_name = path[index];\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(ind_name) &&\n Array.isArray(values) &&\n ind_name >= values.length)\n return null;\n values = values[ind_name];\n index++;\n }\n return values;\n };\n ProcessValue.prototype.getValueCore = function (text, values) {\n var res = { hasValue: false, value: null, path: null };\n var curValue = values;\n if (!curValue && curValue !== 0 && curValue !== false)\n return res;\n if (text &&\n text.lastIndexOf(\".length\") > -1 &&\n text.lastIndexOf(\".length\") === text.length - \".length\".length) {\n res.value = 0;\n res.hasValue = true;\n }\n var nonNestedObj = this.getNonNestedObject(curValue, text, false);\n if (!nonNestedObj)\n return res;\n res.path = nonNestedObj.path;\n res.value = !!nonNestedObj.text\n ? this.getObjectValue(nonNestedObj.value, nonNestedObj.text)\n : nonNestedObj.value;\n res.hasValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(res.value);\n return res;\n };\n ProcessValue.prototype.getNonNestedObject = function (obj, text, createPath) {\n var curName = this.getFirstPropertyName(text, obj, createPath);\n var path = !!curName ? [curName] : null;\n while (text != curName && !!obj) {\n var isArray = text[0] == \"[\";\n if (!isArray) {\n if (!curName && text == this.getFirstName(text))\n return { value: obj, text: text, path: path };\n obj = this.getObjectValue(obj, curName);\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(obj) && !createPath)\n return null;\n text = text.substr(curName.length);\n }\n else {\n var objInArray = this.getObjInArray(obj, text);\n if (!objInArray)\n return null;\n obj = objInArray.value;\n text = objInArray.text;\n path.push(objInArray.index);\n }\n if (!!text && text[0] == \".\") {\n text = text.substr(1);\n }\n curName = this.getFirstPropertyName(text, obj, createPath);\n if (!!curName) {\n path.push(curName);\n }\n }\n return { value: obj, text: text, path: path };\n };\n ProcessValue.prototype.getObjInArray = function (curValue, text) {\n if (!Array.isArray(curValue))\n return null;\n var index = 1;\n var str = \"\";\n while (index < text.length && text[index] != \"]\") {\n str += text[index];\n index++;\n }\n text = index < text.length ? text.substr(index + 1) : \"\";\n index = this.getIntValue(str);\n if (index < 0 || index >= curValue.length)\n return null;\n return { value: curValue[index], text: text, index: index };\n };\n ProcessValue.prototype.getFirstPropertyName = function (name, obj, createProp) {\n if (createProp === void 0) { createProp = false; }\n if (!name)\n return name;\n if (!obj)\n obj = {};\n if (obj.hasOwnProperty(name))\n return name;\n var nameInLow = name.toLowerCase();\n var A = nameInLow[0];\n var a = A.toUpperCase();\n for (var key in obj) {\n var first = key[0];\n if (first === a || first === A) {\n var keyName = key.toLowerCase();\n if (keyName == nameInLow)\n return key;\n if (nameInLow.length <= keyName.length)\n continue;\n var ch = nameInLow[keyName.length];\n if (ch != \".\" && ch != \"[\")\n continue;\n if (keyName == nameInLow.substr(0, keyName.length))\n return key;\n }\n }\n if (createProp && name[0] !== \"[\") {\n var ind = name.indexOf(\".\");\n if (ind > -1) {\n name = name.substr(0, ind);\n obj[name] = {};\n }\n return name;\n }\n return \"\";\n };\n ProcessValue.prototype.getObjectValue = function (obj, name) {\n if (!name)\n return null;\n return obj[name];\n };\n ProcessValue.prototype.getIntValue = function (str) {\n if (str == \"0\" || ((str | 0) > 0 && str % 1 == 0))\n return Number(str);\n return -1;\n };\n return ProcessValue;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/conditions.ts\":\n/*!***************************!*\\\n !*** ./src/conditions.ts ***!\n \\***************************/\n/*! exports provided: ExpressionRunnerBase, ConditionRunner, ExpressionRunner */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunnerBase\", function() { return ExpressionRunnerBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return ConditionRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return ExpressionRunner; });\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conditionsParser */ \"./src/conditionsParser.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar ExpressionRunnerBase = /** @class */ (function () {\n function ExpressionRunnerBase(expression) {\n this.processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]();\n this.parser = new _conditionsParser__WEBPACK_IMPORTED_MODULE_1__[\"ConditionsParser\"]();\n this.isAsyncValue = false;\n this.hasFunctionValue = false;\n this.expression = expression;\n }\n Object.defineProperty(ExpressionRunnerBase.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n set: function (value) {\n if (this.expression === value)\n return;\n this.expressionValue = value;\n this.operand = this.parser.parseExpression(value);\n this.hasFunctionValue = this.canRun() ? this.operand.hasFunction() : false;\n this.isAsyncValue = this.hasFunction()\n ? this.operand.hasAsyncFunction()\n : false;\n },\n enumerable: false,\n configurable: true\n });\n ExpressionRunnerBase.prototype.getVariables = function () {\n if (!this.operand)\n return [];\n var variables = [];\n this.operand.setVariables(variables);\n return variables;\n };\n ExpressionRunnerBase.prototype.hasFunction = function () {\n return this.hasFunctionValue;\n };\n Object.defineProperty(ExpressionRunnerBase.prototype, \"isAsync\", {\n get: function () {\n return this.isAsyncValue;\n },\n enumerable: false,\n configurable: true\n });\n ExpressionRunnerBase.prototype.canRun = function () {\n return !!this.operand;\n };\n ExpressionRunnerBase.prototype.runCore = function (values, properties) {\n var _this = this;\n if (properties === void 0) { properties = null; }\n if (!this.operand)\n return null;\n this.processValue.values = values;\n this.processValue.properties = properties;\n if (!this.isAsync)\n return this.runValues();\n this.asyncFuncList = [];\n this.operand.addToAsyncList(this.asyncFuncList);\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n this.asyncFuncList[i].onAsyncReady = function () {\n _this.doAsyncFunctionReady();\n };\n }\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n this.asyncFuncList[i].evaluateAsync(this.processValue);\n }\n return false;\n };\n ExpressionRunnerBase.prototype.doAsyncFunctionReady = function () {\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n if (!this.asyncFuncList[i].isReady)\n return;\n }\n this.runValues();\n };\n ExpressionRunnerBase.prototype.runValues = function () {\n var res = this.operand.evaluate(this.processValue);\n this.doOnComplete(res);\n return res;\n };\n ExpressionRunnerBase.prototype.doOnComplete = function (res) { };\n return ExpressionRunnerBase;\n}());\n\nvar ConditionRunner = /** @class */ (function (_super) {\n __extends(ConditionRunner, _super);\n function ConditionRunner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ConditionRunner.prototype.run = function (values, properties) {\n if (properties === void 0) { properties = null; }\n return this.runCore(values, properties) == true;\n };\n ConditionRunner.prototype.doOnComplete = function (res) {\n if (!!this.onRunComplete)\n this.onRunComplete(res == true);\n };\n return ConditionRunner;\n}(ExpressionRunnerBase));\n\nvar ExpressionRunner = /** @class */ (function (_super) {\n __extends(ExpressionRunner, _super);\n function ExpressionRunner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ExpressionRunner.prototype.run = function (values, properties) {\n if (properties === void 0) { properties = null; }\n return this.runCore(values, properties);\n };\n ExpressionRunner.prototype.doOnComplete = function (res) {\n if (!!this.onRunComplete)\n this.onRunComplete(res);\n };\n return ExpressionRunner;\n}(ExpressionRunnerBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/conditionsParser.ts\":\n/*!*********************************!*\\\n !*** ./src/conditionsParser.ts ***!\n \\*********************************/\n/*! exports provided: ConditionsParserError, ConditionsParser */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParserError\", function() { return ConditionsParserError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return ConditionsParser; });\n/* harmony import */ var _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expressions/expressionParser */ \"./src/expressions/expressionParser.ts\");\n\nvar ConditionsParserError = /** @class */ (function () {\n function ConditionsParserError(at, code) {\n this.at = at;\n this.code = code;\n }\n return ConditionsParserError;\n}());\n\nvar ConditionsParser = /** @class */ (function () {\n function ConditionsParser() {\n }\n ConditionsParser.prototype.patchExpression = function (text) {\n return text\n .replace(/=>/g, \">=\")\n .replace(/=/g, \"!=\")\n .replace(/==/g, \"= \")\n .replace(/equals/g, \"equal \")\n .replace(/notequals/g, \"notequal \");\n };\n ConditionsParser.prototype.createCondition = function (text) {\n return this.parseExpression(text);\n };\n ConditionsParser.prototype.parseExpression = function (text) {\n try {\n var result = ConditionsParser.parserCache[text];\n if (result === undefined) {\n result = Object(_expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"parse\"])(this.patchExpression(text));\n if (!result.hasAsyncFunction()) {\n ConditionsParser.parserCache[text] = result;\n }\n }\n return result;\n }\n catch (e) {\n if (e instanceof _expressions_expressionParser__WEBPACK_IMPORTED_MODULE_0__[\"SyntaxError\"]) {\n this.conditionError = new ConditionsParserError(e.location.start.offset, e.message);\n }\n }\n };\n Object.defineProperty(ConditionsParser.prototype, \"error\", {\n get: function () {\n return this.conditionError;\n },\n enumerable: false,\n configurable: true\n });\n ConditionsParser.parserCache = {};\n return ConditionsParser;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssbootstrap.ts\":\n/*!****************************************!*\\\n !*** ./src/defaultCss/cssbootstrap.ts ***!\n \\****************************************/\n/*! exports provided: defaultBootstrapCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return defaultBootstrapCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar defaultBootstrapCss = {\n root: \"sv_main sv_bootstrap_css\",\n container: \"sv_container\",\n header: \"panel-heading card-header\",\n body: \"panel-body card-block mt-4\",\n bodyEmpty: \"panel-body card-block mt-4 sv_body_empty\",\n footer: \"panel-footer card-footer\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"\",\n navigation: {\n complete: \"btn sv_complete_btn\",\n prev: \"btn sv_prev_btn\",\n next: \"btn sv_next_btn\",\n start: \"btn sv_start_btn\",\n preview: \"btn sv_preview_btn\",\n edit: \"btn sv_edit_btn\",\n },\n progress: \"progress center-block mx-auto mb-4\",\n progressBar: \"progress-bar\",\n progressTextUnderBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"\",\n title: \"\",\n description: \"small\",\n },\n pageTitle: \"\",\n pageDescription: \"small\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_qstn\",\n flowRoot: \"sv_q_flow sv_qstn\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n title: \"\",\n titleExpandable: \"sv_q_title_expandable\",\n number: \"sv_q_num\",\n description: \"small\",\n descriptionUnderInput: \"small\",\n requiredText: \"sv_q_required_text\",\n comment: \"form-control\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"has-error\",\n indent: 20,\n formGroup: \"form-group\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"small sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\n },\n error: {\n root: \"alert alert-danger\",\n icon: \"glyphicon glyphicon-exclamation-sign\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qbln form-inline checkbox\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx form-inline\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\n itemInline: \"sv_q_checkbox_inline\",\n itemControl: \"\",\n itemDecorator: \"sv-hidden\",\n label: \"\",\n labelChecked: \"\",\n controlLabel: \"\",\n materialDecorator: \"checkbox-material\",\n other: \"sv_q_checkbox_other form-control\",\n column: \"sv_q_select_column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n comment: \"form-control\",\n dropdown: {\n root: \"\",\n control: \"form-control\",\n other: \"sv_q_dd_other form-control\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"table sv_q_matrix\",\n label: \"sv_q_m_label\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: {\n root: \"table\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n root: \"table\",\n button: \"button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"\",\n navigation: \"sv-paneldynamic__navigation\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n title: \"sv-title sv-question__title\",\n button: \"button\",\n buttonAdd: \"button sv-paneldynamic__add-btn\",\n buttonRemove: \"sv_p_remove_btn\",\n buttonRemoveRight: \"button sv-paneldynamic__remove-btn--right\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\n },\n multipletext: {\n root: \"table\",\n itemTitle: \"\",\n itemValue: \"sv_q_mt_item_value form-control\",\n },\n radiogroup: {\n root: \"sv_qcbc form-inline\",\n item: \"radio\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n label: \"\",\n labelChecked: \"\",\n itemControl: \"\",\n itemDecorator: \"sv-hidden\",\n controlLabel: \"\",\n materialDecorator: \"circle\",\n other: \"sv_q_radiogroup_other form-control\",\n clearButton: \"sv_q_radiogroup_clear button\",\n column: \"sv_q_select_column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_imagepicker_inline\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"btn-group\",\n item: \"btn btn-default btn-secondary\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"form-control\",\n expression: \"form-control\",\n file: {\n root: \"sv_q_file\",\n placeholderInput: \"sv_q_file_placeholder\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv_q_file_input\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-hidden\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"alert alert-info\",\n error: \"alert alert-danger\",\n success: \"alert alert-success\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"modal-content\",\n body: \"modal-body\",\n header: {\n root: \"modal-header panel-title\",\n title: \"pull-left\",\n button: \"glyphicon pull-right\",\n buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n },\n },\n};\n_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"bootstrap\"] = defaultBootstrapCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssbootstrapmaterial.ts\":\n/*!************************************************!*\\\n !*** ./src/defaultCss/cssbootstrapmaterial.ts ***!\n \\************************************************/\n/*! exports provided: defaultBootstrapMaterialCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return defaultBootstrapMaterialCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar defaultBootstrapMaterialCss = {\n root: \"sv_main sv_bootstrapmaterial_css\",\n container: \"sv_container\",\n header: \"card-heading\",\n body: \"card-body\",\n bodyEmpty: \"card-body sv_body_empty\",\n footer: \"card-footer\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"\",\n navigation: {\n complete: \"btn sv_complete_btn btn-primary\",\n prev: \"btn sv_prev_btn btn-primary\",\n next: \"btn sv_next_btn btn-primary\",\n start: \"btn sv_start_btn btn-primary\",\n preview: \"btn sv_preview_btn btn-primary\",\n edit: \"btn sv_edit_btn btn-primary\",\n },\n progress: \"progress center-block mx-auto mb-4\",\n progressBar: \"progress-bar\",\n progressTextUnderBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"\",\n title: \"\",\n description: \"small\",\n },\n pageTitle: \"\",\n pageDescription: \"small\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_qstn form-group bmd-form-group\",\n flowRoot: \"sv_q_flow form-group bmd-form-group\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n requiredText: \"sv_q_required_text\",\n title: \"\",\n titleExpandable: \"sv_q_title_expandable\",\n number: \"sv_q_num\",\n description: \"small\",\n descriptionUnderInput: \"small\",\n comment: \"form-control\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"has-error\",\n indent: 20,\n formGroup: \"form-group bmd-form-group\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"small sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\n },\n error: {\n root: \"alert alert-danger\",\n icon: \"glyphicon glyphicon-exclamation-sign\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qbln checkbox\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbx\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\n itemInline: \"sv_q_checkbox_inline\",\n itemDecorator: \"sv-hidden\",\n itemControl: \"\",\n label: \"\",\n labelChecked: \"\",\n controlLabel: \"\",\n materialDecorator: \"checkbox-decorator\",\n other: \"sv_q_checkbox_other form-control\",\n column: \"sv_q_select_column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n comment: \"form-control\",\n dropdown: {\n root: \"\",\n control: \"form-control\",\n other: \"sv_q_dd_other form-control\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"table sv_q_matrix\",\n row: \"form-group bmd-form-group\",\n label: \"sv_q_m_label radio-inline\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n cellLabel: \"sv_q_m_cell_label\",\n itemValue: \"form-control\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n materialDecorator: \"bmd-radio\",\n },\n matrixdropdown: {\n root: \"table\",\n itemValue: \"form-group bmd-form-group\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n mainRoot: \"sv_qstn\",\n flowRoot: \"sv_q_flow\",\n root: \"table\",\n button: \"btn btn-primary\",\n itemValue: \"form-group bmd-form-group\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"\",\n navigation: \"sv-paneldynamic__navigation\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n title: \"sv-title sv-question__title\",\n button: \"button\",\n buttonAdd: \"button sv-paneldynamic__add-btn btn btn-primary\",\n buttonRemove: \"button sv-paneldynamic__remove-btn btn btn-primary\",\n buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\n },\n multipletext: {\n root: \"table\",\n itemTitle: \"\",\n row: \"form-group bmd-form-group\",\n itemValue: \"sv_q_mt_item_value form-control\",\n },\n radiogroup: {\n root: \"\",\n item: \"radio\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n itemDecorator: \"sv-hidden\",\n label: \"\",\n labelChecked: \"\",\n itemControl: \"\",\n controlLabel: \"sv_q_radiogroup_control_label\",\n materialDecorator: \"bmd-radio\",\n other: \"sv_q_radiogroup_other form-control\",\n clearButton: \"sv_q_radiogroup_clear button btn btn-primary\",\n column: \"sv_q_select_column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_imagepicker_inline\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"btn-group\",\n item: \"btn btn-default btn-secondary\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"form-control\",\n expression: \"form-control\",\n file: {\n root: \"form-group bmd-form-group is-fileinput sv_q_file\",\n placeholderInput: \"\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv_q_file_input\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-hidden\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"alert alert-info\",\n error: \"alert alert-danger\",\n success: \"alert alert-success\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"modal-content\",\n body: \"modal-body\",\n header: {\n root: \"modal-header card-title\",\n title: \"pull-left\",\n button: \"glyphicon pull-right\",\n buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n },\n },\n};\n_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"bootstrapmaterial\"] = defaultBootstrapMaterialCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssmodern.ts\":\n/*!*************************************!*\\\n !*** ./src/defaultCss/cssmodern.ts ***!\n \\*************************************/\n/*! exports provided: modernCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return modernCss; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar modernCss = {\n root: \"sv-root-modern\",\n container: \"sv-container-modern\",\n header: \"sv-title sv-container-modern__title\",\n body: \"sv-body\",\n bodyEmpty: \"sv-body sv-body--empty\",\n footer: \"sv-footer sv-body__footer sv-clearfix\",\n title: \"\",\n description: \"\",\n logo: \"sv-logo\",\n logoImage: \"sv-logo__image\",\n headerText: \"sv-header__text\",\n navigationButton: \"\",\n completedPage: \"sv-completedpage\",\n navigation: {\n complete: \"sv-btn sv-footer__complete-btn\",\n prev: \"sv-btn sv-footer__prev-btn\",\n next: \"sv-btn sv-footer__next-btn\",\n start: \"sv-btn sv-footer__start-btn\",\n preview: \"sv-btn sv-footer__preview-btn\",\n edit: \"sv-btn sv-footer__edit-btn\",\n },\n panel: {\n title: \"sv-title sv-panel__title\",\n titleExpandable: \"sv-panel__title--expandable\",\n titleOnError: \"sv-panel__title--error\",\n description: \"sv-description sv-panel__description\",\n container: \"sv-panel sv-row__panel\",\n content: \"sv-panel__content\",\n icon: \"sv-panel__icon\",\n iconExpanded: \"sv-panel__icon--expanded\",\n footer: \"sv-panel__footer\",\n requiredText: \"sv-panel__required-text\",\n number: \"sv-question__num\",\n },\n paneldynamic: {\n root: \"sv-paneldynamic\",\n navigation: \"sv-paneldynamic__navigation\",\n title: \"sv-title sv-question__title\",\n button: \"sv-btn\",\n buttonRemove: \"sv-paneldynamic__remove-btn\",\n buttonRemoveRight: \"sv-paneldynamic__remove-btn--right\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n separator: \"sv-paneldynamic__separator\",\n panelWrapper: \"sv-paneldynamic__panel-wrapper\",\n panelWrapperInRow: \"sv-paneldynamic__panel-wrapper--in-row\",\n },\n progress: \"sv-progress sv-body__progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-progress__text\",\n progressTextInBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"sv-page sv-body__page\",\n title: \"sv-title sv-page__title\",\n description: \"sv-description sv-page__description\",\n },\n pageTitle: \"sv-title sv-page__title\",\n pageDescription: \"sv-description sv-page__description\",\n row: \"sv-row sv-clearfix\",\n question: {\n mainRoot: \"sv-question sv-row__question\",\n flowRoot: \"sv-question sv-row__question sv-row__question--flow\",\n asCell: \"sv-table__cell\",\n header: \"sv-question__header\",\n headerLeft: \"sv-question__header--location--left\",\n headerTop: \"sv-question__header--location--top\",\n headerBottom: \"sv-question__header--location--bottom\",\n content: \"sv-question__content\",\n contentLeft: \"sv-question__content--left\",\n titleLeftRoot: \"\",\n titleOnAnswer: \"sv-question__title--answer\",\n titleOnError: \"sv-question__title--error\",\n title: \"sv-title sv-question__title\",\n titleExpandable: \"sv-question__title--expandable\",\n icon: \"sv-question__icon\",\n iconExpanded: \"sv-question__icon--expanded\",\n requiredText: \"sv-question__required-text\",\n number: \"sv-question__num\",\n description: \"sv-description sv-question__description\",\n descriptionUnderInput: \"sv-description sv-question__description\",\n comment: \"sv-comment\",\n required: \"sv-question--required\",\n titleRequired: \"sv-question__title--required\",\n indent: 20,\n footer: \"sv-question__footer\",\n formGroup: \"sv-question__form-group\",\n hasError: \"\",\n disabled: \"sv-question--disabled\",\n },\n image: { root: \"sv-image\", image: \"sv_image_image\" },\n error: {\n root: \"sv-question__erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sv-question__erbox--location--top\",\n locationBottom: \"sv-question__erbox--location--bottom\",\n },\n checkbox: {\n root: \"sv-selectbase\",\n item: \"sv-item sv-checkbox sv-selectbase__item\",\n itemSelectAll: \"sv-checkbox--selectall\",\n itemNone: \"sv-checkbox--none\",\n itemDisabled: \"sv-item--disabled sv-checkbox--disabled\",\n itemChecked: \"sv-checkbox--checked\",\n itemHover: \"sv-checkbox--allowhover\",\n itemInline: \"sv-selectbase__item--inline\",\n label: \"sv-selectbase__label\",\n labelChecked: \"\",\n itemControl: \"sv-visuallyhidden sv-item__control\",\n itemDecorator: \"sv-item__svg sv-checkbox__svg\",\n controlLabel: \"sv-item__control-label\",\n materialDecorator: \"sv-item__decorator sv-checkbox__decorator\",\n other: \"sv-comment sv-question__other\",\n column: \"sv-selectbase__column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n radiogroup: {\n root: \"sv-selectbase\",\n item: \"sv-item sv-radio sv-selectbase__item\",\n itemInline: \"sv-selectbase__item--inline\",\n label: \"sv-selectbase__label\",\n labelChecked: \"\",\n itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n itemChecked: \"sv-radio--checked\",\n itemHover: \"sv-radio--allowhover\",\n itemControl: \"sv-visuallyhidden sv-item__control\",\n itemDecorator: \"sv-item__svg sv-radio__svg\",\n controlLabel: \"sv-item__control-label\",\n materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n other: \"sv-comment sv-question__other\",\n clearButton: \"sv-btn sv-selectbase__clear-btn\",\n column: \"sv-selectbase__column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n boolean: {\n root: \"sv_qbln\",\n small: \"sv-row__question--small\",\n item: \"sv-boolean sv-item\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-item--disabled sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n text: {\n root: \"sv-text\",\n small: \"sv-row__question--small\",\n onError: \"sv-text--error\",\n },\n multipletext: {\n root: \"sv-multipletext\",\n item: \"sv-multipletext__item\",\n itemTitle: \"sv-multipletext__item-title\",\n row: \"sv-multipletext__row\",\n cell: \"sv-multipletext__cell\",\n },\n dropdown: {\n root: \"\",\n small: \"sv-row__question--small\",\n control: \"sv-dropdown\",\n selectWrapper: \"\",\n other: \"sv-comment sv-question__other\",\n onError: \"sv-dropdown--error\",\n },\n imagepicker: {\n root: \"sv-imagepicker\",\n item: \"sv-imagepicker__item\",\n itemInline: \"sv-imagepicker__item--inline\",\n itemChecked: \"sv-imagepicker__item--checked\",\n itemDisabled: \"sv-imagepicker__item--disabled\",\n itemHover: \"sv-imagepicker__item--allowhover\",\n label: \"sv-imagepicker__label\",\n itemControl: \"sv-imagepicker__control\",\n image: \"sv-imagepicker__image\",\n itemText: \"sv-imagepicker__text\",\n clearButton: \"sv-btn\",\n other: \"sv-comment sv-question__other\",\n },\n matrix: {\n tableWrapper: \"sv-matrix\",\n root: \"sv-table sv-matrix-root\",\n rowError: \"sv-matrix__row--error\",\n cell: \"sv-table__cell sv-matrix__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n label: \"sv-item sv-radio sv-matrix__label\",\n itemValue: \"sv-visuallyhidden sv-item__control sv-radio__control\",\n itemChecked: \"sv-radio--checked\",\n itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n itemHover: \"sv-radio--allowhover\",\n materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n itemDecorator: \"sv-item__svg sv-radio__svg\",\n cellText: \"sv-matrix__text\",\n cellTextSelected: \"sv-matrix__text--checked\",\n cellTextDisabled: \"sv-matrix__text--disabled\",\n },\n matrixdropdown: {\n root: \"sv-table sv-matrixdropdown\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n row: \"sv-table__row\",\n detailRow: \"sv-table__row sv-table__row--detail\",\n detailRowText: \"sv-table__cell--detail-rowtext\",\n detailCell: \"sv-table__cell--detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv-table__cell--detail-button\",\n detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n detailIcon: \"sv-detail-panel__icon\",\n detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n detailPanelCell: \"sv-table__cell--detail-panel\",\n actionsCell: \"sv-table__cell sv-table__cell--actions\",\n },\n matrixdynamic: {\n root: \"sv-table sv-matrixdynamic\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n button: \"sv-btn\",\n buttonAdd: \"sv-matrixdynamic__add-btn\",\n buttonRemove: \"sv-matrixdynamic__remove-btn\",\n iconAdd: \"\",\n iconRemove: \"\",\n row: \"sv-table__row\",\n detailRow: \"sv-table__row sv-table__row--detail\",\n detailCell: \"sv-table__cell--detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv-table__cell--detail-button\",\n detailButtonExpanded: \"sv-table__cell--detail-button--expanded\",\n detailIcon: \"sv-detail-panel__icon\",\n detailIconExpanded: \"sv-detail-panel__icon--expanded\",\n detailPanelCell: \"sv-table__cell--detail-panel\",\n actionsCell: \"sv-table__cell sv-table__cell--actions\",\n emptyRowsSection: \"sv-table__empty--rows--section\",\n emptyRowsText: \"sv-table__empty--rows--text\",\n emptyRowsButton: \"\",\n },\n rating: {\n root: \"sv-rating\",\n item: \"sv-rating__item\",\n selected: \"sv-rating__item--selected\",\n minText: \"sv-rating__min-text\",\n itemText: \"sv-rating__item-text\",\n maxText: \"sv-rating__max-text\",\n itemDisabled: \"sv-rating--disabled\",\n },\n comment: {\n root: \"sv-comment\",\n small: \"sv-row__question--small\",\n },\n expression: \"\",\n file: {\n root: \"sv-file\",\n other: \"sv-comment sv-question__other\",\n placeholderInput: \"sv-visuallyhidden\",\n preview: \"sv-file__preview\",\n fileSign: \"sv-hidden\",\n fileSignBottom: \"sv-file__sign\",\n fileDecorator: \"sv-file__decorator\",\n fileInput: \"sv-visuallyhidden\",\n noFileChosen: \"sv-description sv-file__no-file-chosen\",\n chooseFile: \"sv-btn sv-file__choose-btn\",\n controlDisabled: \"sv-file__choose-btn--disabled\",\n removeButton: \"sv-hidden\",\n removeButtonBottom: \"sv-btn sv-file__clean-btn\",\n removeFile: \"sv-hidden\",\n removeFileSvg: \"sv-file__remove-svg\",\n wrapper: \"sv-file__wrapper\",\n },\n signaturepad: {\n root: \"sv-signaturepad sjs_sp_container\",\n small: \"sv-row__question--small\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"\",\n error: \"\",\n success: \"\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"sv_window\",\n body: \"sv_window_content\",\n header: {\n root: \"sv_window_title\",\n title: \"\",\n button: \"\",\n buttonExpanded: \"\",\n buttonCollapsed: \"\",\n },\n },\n};\n_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"][\"modern\"] = modernCss;\n\n\n/***/ }),\n\n/***/ \"./src/defaultCss/cssstandard.ts\":\n/*!***************************************!*\\\n !*** ./src/defaultCss/cssstandard.ts ***!\n \\***************************************/\n/*! exports provided: surveyCss, defaultStandardCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return surveyCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return defaultStandardCss; });\nvar surveyCss = {\n currentType: \"\",\n getCss: function () {\n var loc = this.currentType ? this[this.currentType] : defaultStandardCss;\n if (!loc)\n loc = defaultStandardCss;\n return loc;\n },\n};\nvar defaultStandardCss = {\n root: \"sv_main sv_default_css\",\n container: \"sv_container\",\n header: \"sv_header\",\n body: \"sv_body\",\n bodyEmpty: \"sv_body sv_body_empty\",\n footer: \"sv_nav\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"sv_completed_page\",\n navigation: {\n complete: \"sv_complete_btn\",\n prev: \"sv_prev_btn\",\n next: \"sv_next_btn\",\n start: \"sv_start_btn\",\n preview: \"sv_preview_btn\",\n edit: \"sv_edit_btn\",\n },\n progress: \"sv_progress\",\n progressBar: \"sv_progress_bar\",\n progressTextInBar: \"sv-hidden\",\n progressButtonsContainerCenter: \"sv_progress-buttons__container-center\",\n progressButtonsContainer: \"sv_progress-buttons__container\",\n progressButtonsImageButtonLeft: \"sv_progress-buttons__image-button-left\",\n progressButtonsImageButtonRight: \"sv_progress-buttons__image-button-right\",\n progressButtonsImageButtonHidden: \"sv_progress-buttons__image-button--hidden\",\n progressButtonsListContainer: \"sv_progress-buttons__list-container\",\n progressButtonsList: \"sv_progress-buttons__list\",\n progressButtonsListElementPassed: \"sv_progress-buttons__list-element--passed\",\n progressButtonsListElementCurrent: \"sv_progress-buttons__list-element--current\",\n progressButtonsListElementNonClickable: \"sv_progress-buttons__list-element--nonclickable\",\n progressButtonsPageTitle: \"sv_progress-buttons__page-title\",\n progressButtonsPageDescription: \"sv_progress-buttons__page-description\",\n page: {\n root: \"sv_p_root\",\n title: \"sv_page_title\",\n description: \"\",\n },\n // TODO: move to the page object\n pageTitle: \"sv_page_title\",\n pageDescription: \"\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_q sv_qstn\",\n flowRoot: \"sv_q_flow sv_qstn\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n requiredText: \"sv_q_required_text\",\n title: \"sv_q_title\",\n titleExpandable: \"sv_q_title_expandable\",\n number: \"sv_q_num\",\n description: \"sv_q_description\",\n comment: \"\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"\",\n indent: 20,\n footer: \"sv_q_footer\",\n formGroup: \"form-group\",\n asCell: \"sv_matrix_cell\",\n icon: \"sv_question_icon\",\n iconExpanded: \"sv_expanded\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n titleOnError: \"\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n number: \"sv_q_num\",\n requiredText: \"sv_q_required_text\",\n },\n error: {\n root: \"sv_q_erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qcbc sv_qbln\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n materialDecorator: \"sv-item__decorator sv-boolean__decorator \",\n itemDecorator: \"sv-item__svg sv-boolean__svg\",\n checkedPath: \"sv-boolean__checked-path\",\n uncheckedPath: \"sv-boolean__unchecked-path\",\n indeterminatePath: \"sv-boolean__indeterminate-path\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx\",\n item: \"sv_q_checkbox\",\n itemSelectAll: \"sv_q_checkbox_selectall\",\n itemNone: \"sv_q_checkbox_none\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_checkbox_inline\",\n label: \"sv_q_checkbox_label\",\n labelChecked: \"\",\n itemControl: \"sv_q_checkbox_control_item\",\n itemDecorator: \"sv-hidden\",\n controlLabel: \"sv_q_checkbox_control_label\",\n materialDecorator: \"checkbox-material\",\n other: \"sv_q_other sv_q_checkbox_other\",\n column: \"sv_q_select_column\",\n },\n ranking: {\n root: \"sv-ranking\",\n rootMobileMod: \"sv-ranking--mobile\",\n rootDragMod: \"sv-ranking--drag\",\n item: \"sv-ranking-item\",\n itemContent: \"sv-ranking-item__content\",\n itemIndex: \"sv-ranking-item__index\",\n // itemText: \"sv-ranking-item__text\",\n controlLabel: \"sv-ranking-item__text\",\n itemGhostNode: \"sv-ranking-item__ghost\",\n itemIconContainer: \"sv-ranking-item__icon-container\",\n itemIcon: \"sv-ranking-item__icon\",\n itemIconHoverMod: \"sv-ranking-item__icon--hover\",\n itemIconFocusMod: \"sv-ranking-item__icon--focus\",\n itemGhostMod: \"sv-ranking-item--ghost\",\n itemDragMod: \"sv-ranking-item--drag\",\n },\n comment: \"\",\n dropdown: {\n root: \"\",\n control: \"sv_q_dropdown_control\",\n selectWrapper: \"sv_select_wrapper\",\n other: \"sv_q_dd_other\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"sv_q_matrix\",\n label: \"sv_q_m_label\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n cell: \"sv_q_m_cell\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: {\n root: \"sv_q_matrix_dropdown\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailRowText: \"sv_matrix_cell_detail_rowtext\",\n detailCell: \"sv_matrix_cell_detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n },\n matrixdynamic: {\n root: \"sv_q_matrix_dynamic\",\n button: \"sv_matrix_dynamic_button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n cell: \"sv_matrix_cell\",\n headerCell: \"sv_matrix_cell_header\",\n row: \"sv_matrix_row\",\n detailRow: \"sv_matrix_detail_row\",\n detailCell: \"sv_matrix_cell_detail\",\n choiceCell: \"sv-table__cell--choice\",\n detailButton: \"sv_matrix_cell_detail_button\",\n detailButtonExpanded: \"sv_matrix_cell_detail_button_expanded\",\n detailIcon: \"sv_detail_panel_icon\",\n detailIconExpanded: \"sv_detail_expanded\",\n detailPanelCell: \"sv_matrix_cell_detail_panel\",\n actionsCell: \"sv_matrix_cell sv_matrix_cell_actions\",\n emptyRowsSection: \"sv_matrix_empty_rows_section\",\n emptyRowsText: \"sv_matrix_empty_rows_text\",\n emptyRowsButton: \"\",\n },\n paneldynamic: {\n root: \"sv_panel_dynamic\",\n title: \"sv_p_title\",\n button: \"\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n buttonRemove: \"sv_p_remove_btn\",\n buttonRemoveRight: \"sv_p_remove_btn_right\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n panelWrapper: \"sv_p_wrapper\",\n panelWrapperInRow: \"sv_p_wrapper_in_row\",\n },\n multipletext: {\n root: \"sv_q_mt\",\n itemTitle: \"sv_q_mt_title\",\n row: \"sv_q_mt_row\",\n itemValue: \"sv_q_mt_item_value sv_q_text_root\",\n },\n radiogroup: {\n root: \"sv_qcbc\",\n item: \"sv_q_radiogroup\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n itemDecorator: \"sv-hidden\",\n label: \"sv_q_radiogroup_label\",\n labelChecked: \"\",\n itemControl: \"sv_q_radiogroup_control_item\",\n controlLabel: \"\",\n materialDecorator: \"circle\",\n other: \"sv_q_other sv_q_radiogroup_other\",\n clearButton: \"sv_q_radiogroup_clear\",\n column: \"sv_q_select_column\",\n },\n buttongroup: {\n root: \"sv-button-group\",\n item: \"sv-button-group__item\",\n itemIcon: \"sv-button-group__item-icon\",\n itemDecorator: \"sv-button-group__item-decorator\",\n itemCaption: \"sv-button-group__item-caption\",\n itemSelected: \"sv-button-group__item--selected\",\n itemDisabled: \"sv-button-group__item--disabled\",\n itemControl: \"sv-visuallyhidden\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemInline: \"sv_q_imagepicker_inline\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"sv_q_rating\",\n item: \"sv_q_rating_item\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n },\n text: \"sv_q_text_root\",\n expression: \"\",\n file: {\n root: \"sv_q_file\",\n placeholderInput: \"sv-visuallyhidden\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv-visuallyhidden\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-file__decorator\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n chooseFile: \"sv_q_file_choose_button\",\n noFileChosen: \"sv_q_file_placeholder\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"\",\n error: \"\",\n success: \"\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"sv_window\",\n body: \"sv_window_content\",\n header: {\n root: \"sv_window_title\",\n title: \"\",\n button: \"\",\n buttonExpanded: \"\",\n buttonCollapsed: \"\",\n },\n },\n};\nsurveyCss[\"standard\"] = defaultStandardCss;\n\n\n/***/ }),\n\n/***/ \"./src/dxSurveyService.ts\":\n/*!********************************!*\\\n !*** ./src/dxSurveyService.ts ***!\n \\********************************/\n/*! exports provided: dxSurveyService */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return dxSurveyService; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n\n/**\n * The class contains methods to work with api.surveyjs.io service.\n */\nvar dxSurveyService = /** @class */ (function () {\n function dxSurveyService() {\n }\n Object.defineProperty(dxSurveyService, \"serviceUrl\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].surveyServiceUrl;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].surveyServiceUrl = val;\n },\n enumerable: false,\n configurable: true\n });\n dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getSurvey?surveyId=\" + surveyId);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.onload = function () {\n var result = JSON.parse(xhr.response);\n onLoad(xhr.status == 200, result, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.getSurveyJsonAndIsCompleted = function (surveyId, clientId, onLoad) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", dxSurveyService.serviceUrl +\n \"/getSurveyAndIsCompleted?surveyId=\" +\n surveyId +\n \"&clientId=\" +\n clientId);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.onload = function () {\n var result = JSON.parse(xhr.response);\n var surveyJson = result ? result.survey : null;\n var isCompleted = result ? result.isCompleted : null;\n onLoad(xhr.status == 200, surveyJson, isCompleted, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) {\n if (clientId === void 0) { clientId = null; }\n if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/post/\");\n xhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n var data = { postId: postId, surveyResult: JSON.stringify(result) };\n if (clientId)\n data[\"clientId\"] = clientId;\n if (isPartialCompleted)\n data[\"isPartialCompleted\"] = true;\n var dataStringify = JSON.stringify(data);\n var self = this;\n xhr.onload = xhr.onerror = function () {\n if (!onSendResult)\n return;\n onSendResult(xhr.status === 200, xhr.response, xhr);\n };\n xhr.send(dataStringify);\n };\n dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) {\n var xhr = new XMLHttpRequest();\n xhr.onload = xhr.onerror = function () {\n if (!onSendFile)\n return;\n onSendFile(xhr.status == 200, JSON.parse(xhr.response));\n };\n xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/upload/\", true);\n var formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"postId\", postId);\n xhr.send(formData);\n };\n dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) {\n var xhr = new XMLHttpRequest();\n var data = \"resultId=\" + resultId + \"&name=\" + name;\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getResult?\" + data);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n xhr.onload = function () {\n var result = null;\n var list = null;\n if (xhr.status == 200) {\n result = JSON.parse(xhr.response);\n list = [];\n for (var key in result.QuestionResult) {\n var el = { name: key, value: result.QuestionResult[key] };\n list.push(el);\n }\n }\n onGetResult(xhr.status == 200, result, list, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) {\n var xhr = new XMLHttpRequest();\n var data = \"resultId=\" + resultId + \"&clientId=\" + clientId;\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/isCompleted?\" + data);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n xhr.onload = function () {\n var result = null;\n if (xhr.status == 200) {\n result = JSON.parse(xhr.response);\n }\n onIsCompleted(xhr.status == 200, result, xhr.response);\n };\n xhr.send();\n };\n return dxSurveyService;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/chunks/localization.ts\":\n/*!********************************************!*\\\n !*** ./src/entries/chunks/localization.ts ***!\n \\********************************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localization_arabic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../localization/arabic */ \"./src/localization/arabic.ts\");\n/* harmony import */ var _localization_bulgarian__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../localization/bulgarian */ \"./src/localization/bulgarian.ts\");\n/* harmony import */ var _localization_catalan__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../localization/catalan */ \"./src/localization/catalan.ts\");\n/* harmony import */ var _localization_croatian__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../localization/croatian */ \"./src/localization/croatian.ts\");\n/* harmony import */ var _localization_czech__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../localization/czech */ \"./src/localization/czech.ts\");\n/* harmony import */ var _localization_danish__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../localization/danish */ \"./src/localization/danish.ts\");\n/* harmony import */ var _localization_dutch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../localization/dutch */ \"./src/localization/dutch.ts\");\n/* harmony import */ var _localization_estonian__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../localization/estonian */ \"./src/localization/estonian.ts\");\n/* harmony import */ var _localization_finnish__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../localization/finnish */ \"./src/localization/finnish.ts\");\n/* harmony import */ var _localization_french__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../localization/french */ \"./src/localization/french.ts\");\n/* harmony import */ var _localization_georgian__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localization/georgian */ \"./src/localization/georgian.ts\");\n/* harmony import */ var _localization_german__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../localization/german */ \"./src/localization/german.ts\");\n/* harmony import */ var _localization_greek__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../localization/greek */ \"./src/localization/greek.ts\");\n/* harmony import */ var _localization_hebrew__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../localization/hebrew */ \"./src/localization/hebrew.ts\");\n/* harmony import */ var _localization_hindi__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../localization/hindi */ \"./src/localization/hindi.ts\");\n/* harmony import */ var _localization_hungarian__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../localization/hungarian */ \"./src/localization/hungarian.ts\");\n/* harmony import */ var _localization_icelandic__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../localization/icelandic */ \"./src/localization/icelandic.ts\");\n/* harmony import */ var _localization_indonesian__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../localization/indonesian */ \"./src/localization/indonesian.ts\");\n/* harmony import */ var _localization_italian__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../localization/italian */ \"./src/localization/italian.ts\");\n/* harmony import */ var _localization_japanese__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../localization/japanese */ \"./src/localization/japanese.ts\");\n/* harmony import */ var _localization_korean__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../localization/korean */ \"./src/localization/korean.ts\");\n/* harmony import */ var _localization_latvian__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../localization/latvian */ \"./src/localization/latvian.ts\");\n/* harmony import */ var _localization_lithuanian__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../localization/lithuanian */ \"./src/localization/lithuanian.ts\");\n/* harmony import */ var _localization_macedonian__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../localization/macedonian */ \"./src/localization/macedonian.ts\");\n/* harmony import */ var _localization_norwegian__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../localization/norwegian */ \"./src/localization/norwegian.ts\");\n/* harmony import */ var _localization_persian__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../localization/persian */ \"./src/localization/persian.ts\");\n/* harmony import */ var _localization_polish__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../localization/polish */ \"./src/localization/polish.ts\");\n/* harmony import */ var _localization_portuguese__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../localization/portuguese */ \"./src/localization/portuguese.ts\");\n/* harmony import */ var _localization_portuguese_br__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../localization/portuguese-br */ \"./src/localization/portuguese-br.ts\");\n/* harmony import */ var _localization_romanian__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../localization/romanian */ \"./src/localization/romanian.ts\");\n/* harmony import */ var _localization_russian__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../localization/russian */ \"./src/localization/russian.ts\");\n/* harmony import */ var _localization_serbian__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../localization/serbian */ \"./src/localization/serbian.ts\");\n/* harmony import */ var _localization_simplified_chinese__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../localization/simplified-chinese */ \"./src/localization/simplified-chinese.ts\");\n/* harmony import */ var _localization_spanish__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../localization/spanish */ \"./src/localization/spanish.ts\");\n/* harmony import */ var _localization_swahili__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../localization/swahili */ \"./src/localization/swahili.ts\");\n/* harmony import */ var _localization_swedish__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../localization/swedish */ \"./src/localization/swedish.ts\");\n/* harmony import */ var _localization_tajik__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../localization/tajik */ \"./src/localization/tajik.ts\");\n/* harmony import */ var _localization_thai__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../localization/thai */ \"./src/localization/thai.ts\");\n/* harmony import */ var _localization_traditional_chinese__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../localization/traditional-chinese */ \"./src/localization/traditional-chinese.ts\");\n/* harmony import */ var _localization_turkish__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../localization/turkish */ \"./src/localization/turkish.ts\");\n/* harmony import */ var _localization_ukrainian__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../localization/ukrainian */ \"./src/localization/ukrainian.ts\");\n/* harmony import */ var _localization_welsh__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../localization/welsh */ \"./src/localization/welsh.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/chunks/model.ts\":\n/*!*************************************!*\\\n !*** ./src/entries/chunks/model.ts ***!\n \\*************************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, SurveyError, SurveyElement, ArrayChanges, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ActionBarItem, ActionBar, AdaptiveActionBarItemWrapper, AdaptiveElement, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, loadFileFromBase64, createSvg, surveyCss */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return Version; });\n/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../main.scss */ \"./src/main.scss\");\n/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_main_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../settings */ \"./src/settings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _settings__WEBPACK_IMPORTED_MODULE_1__[\"settings\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../helpers */ \"./src/helpers.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"]; });\n\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../validator */ \"./src/validator.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _validator__WEBPACK_IMPORTED_MODULE_3__[\"ValidatorRunner\"]; });\n\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../itemvalue */ \"./src/itemvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"]; });\n\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../base */ \"./src/base.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"ArrayChanges\"]; });\n\n/* harmony import */ var _calculatedValue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../calculatedValue */ \"./src/calculatedValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _calculatedValue__WEBPACK_IMPORTED_MODULE_6__[\"CalculatedValue\"]; });\n\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../error */ \"./src/error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _error__WEBPACK_IMPORTED_MODULE_7__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_7__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_7__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _error__WEBPACK_IMPORTED_MODULE_7__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _error__WEBPACK_IMPORTED_MODULE_7__[\"ExceedSizeError\"]; });\n\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../localizablestring */ \"./src/localizablestring.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableStrings\"]; });\n\n/* harmony import */ var _expressionItems__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../expressionItems */ \"./src/expressionItems.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_9__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_9__[\"UrlConditionItem\"]; });\n\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_10__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_10__[\"ChoicesRestfull\"]; });\n\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_11__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_11__[\"registerFunction\"]; });\n\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../conditions */ \"./src/conditions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_12__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_12__[\"ExpressionRunner\"]; });\n\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_13__[\"ArrayOperand\"]; });\n\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../conditionsParser */ \"./src/conditionsParser.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _conditionsParser__WEBPACK_IMPORTED_MODULE_14__[\"ConditionsParser\"]; });\n\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _conditionProcessValue__WEBPACK_IMPORTED_MODULE_15__[\"ProcessValue\"]; });\n\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_16__[\"propertyArray\"]; });\n\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_17__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony import */ var _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../question_matrixdropdown */ \"./src/question_matrixdropdown.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_18__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_18__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony import */ var _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../question_matrixdynamic */ \"./src/question_matrixdynamic.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony import */ var _question_matrix__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../question_matrix */ \"./src/question_matrix.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_20__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_20__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_20__[\"QuestionMatrixModel\"]; });\n\n/* harmony import */ var _question_multipletext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../question_multipletext */ \"./src/question_multipletext.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_21__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../panel */ \"./src/panel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_22__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _panel__WEBPACK_IMPORTED_MODULE_22__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_22__[\"QuestionRowModel\"]; });\n\n/* harmony import */ var _flowpanel__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../flowpanel */ \"./src/flowpanel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _flowpanel__WEBPACK_IMPORTED_MODULE_23__[\"FlowPanelModel\"]; });\n\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../page */ \"./src/page.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _page__WEBPACK_IMPORTED_MODULE_24__[\"PageModel\"]; });\n\n/* harmony import */ var _template_renderer__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../template-renderer */ \"./src/template-renderer.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../question */ \"./src/question.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _question__WEBPACK_IMPORTED_MODULE_26__[\"Question\"]; });\n\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _questionnonvalue__WEBPACK_IMPORTED_MODULE_27__[\"QuestionNonValue\"]; });\n\n/* harmony import */ var _question_empty__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../question_empty */ \"./src/question_empty.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _question_empty__WEBPACK_IMPORTED_MODULE_28__[\"QuestionEmptyModel\"]; });\n\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_29__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_29__[\"QuestionSelectBase\"]; });\n\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _question_checkbox__WEBPACK_IMPORTED_MODULE_30__[\"QuestionCheckboxModel\"]; });\n\n/* harmony import */ var _question_ranking__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../question_ranking */ \"./src/question_ranking.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _question_ranking__WEBPACK_IMPORTED_MODULE_31__[\"QuestionRankingModel\"]; });\n\n/* harmony import */ var _question_comment__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../question_comment */ \"./src/question_comment.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _question_comment__WEBPACK_IMPORTED_MODULE_32__[\"QuestionCommentModel\"]; });\n\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _question_dropdown__WEBPACK_IMPORTED_MODULE_33__[\"QuestionDropdownModel\"]; });\n\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../questionfactory */ \"./src/questionfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_34__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_34__[\"ElementFactory\"]; });\n\n/* harmony import */ var _question_file__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../question_file */ \"./src/question_file.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _question_file__WEBPACK_IMPORTED_MODULE_35__[\"QuestionFileModel\"]; });\n\n/* harmony import */ var _question_html__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../question_html */ \"./src/question_html.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _question_html__WEBPACK_IMPORTED_MODULE_36__[\"QuestionHtmlModel\"]; });\n\n/* harmony import */ var _question_radiogroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../question_radiogroup */ \"./src/question_radiogroup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _question_radiogroup__WEBPACK_IMPORTED_MODULE_37__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony import */ var _question_rating__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../question_rating */ \"./src/question_rating.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _question_rating__WEBPACK_IMPORTED_MODULE_38__[\"QuestionRatingModel\"]; });\n\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../question_expression */ \"./src/question_expression.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _question_expression__WEBPACK_IMPORTED_MODULE_39__[\"QuestionExpressionModel\"]; });\n\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../question_text */ \"./src/question_text.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _question_text__WEBPACK_IMPORTED_MODULE_40__[\"QuestionTextModel\"]; });\n\n/* harmony import */ var _question_boolean__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../question_boolean */ \"./src/question_boolean.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _question_boolean__WEBPACK_IMPORTED_MODULE_41__[\"QuestionBooleanModel\"]; });\n\n/* harmony import */ var _question_imagepicker__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../question_imagepicker */ \"./src/question_imagepicker.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_42__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_42__[\"ImageItemValue\"]; });\n\n/* harmony import */ var _question_image__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../question_image */ \"./src/question_image.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _question_image__WEBPACK_IMPORTED_MODULE_43__[\"QuestionImageModel\"]; });\n\n/* harmony import */ var _question_signaturepad__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../../question_signaturepad */ \"./src/question_signaturepad.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _question_signaturepad__WEBPACK_IMPORTED_MODULE_44__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony import */ var _question_paneldynamic__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../../question_paneldynamic */ \"./src/question_paneldynamic.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_45__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_45__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../../surveytimer */ \"./src/surveytimer.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _surveytimer__WEBPACK_IMPORTED_MODULE_46__[\"SurveyTimer\"]; });\n\n/* harmony import */ var _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../../surveyProgressButtons */ \"./src/surveyProgressButtons.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_47__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../../survey */ \"./src/survey.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _survey__WEBPACK_IMPORTED_MODULE_48__[\"SurveyModel\"]; });\n\n/* harmony import */ var _trigger__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../../trigger */ \"./src/trigger.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_49__[\"Trigger\"]; });\n\n/* harmony import */ var _surveyWindow__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../../surveyWindow */ \"./src/surveyWindow.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _surveyWindow__WEBPACK_IMPORTED_MODULE_50__[\"SurveyWindowModel\"]; });\n\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../../textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _textPreProcessor__WEBPACK_IMPORTED_MODULE_51__[\"TextPreProcessor\"]; });\n\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../../dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _dxSurveyService__WEBPACK_IMPORTED_MODULE_52__[\"dxSurveyService\"]; });\n\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../../localization/english */ \"./src/localization/english.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _localization_english__WEBPACK_IMPORTED_MODULE_53__[\"englishStrings\"]; });\n\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../../surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_54__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_54__[\"surveyStrings\"]; });\n\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../../questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_55__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_55__[\"CustomWidgetCollection\"]; });\n\n/* harmony import */ var _question_custom__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../../question_custom */ \"./src/question_custom.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_56__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_56__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_56__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_56__[\"ComponentCollection\"]; });\n\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../../stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _stylesmanager__WEBPACK_IMPORTED_MODULE_57__[\"StylesManager\"]; });\n\n/* harmony import */ var _action_bar__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../../action-bar */ \"./src/action-bar.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItem\", function() { return _action_bar__WEBPACK_IMPORTED_MODULE_58__[\"ActionBarItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBar\", function() { return _action_bar__WEBPACK_IMPORTED_MODULE_58__[\"ActionBar\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionBarItemWrapper\", function() { return _action_bar__WEBPACK_IMPORTED_MODULE_58__[\"AdaptiveActionBarItemWrapper\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveElement\", function() { return _action_bar__WEBPACK_IMPORTED_MODULE_58__[\"AdaptiveElement\"]; });\n\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../../list */ \"./src/list.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _list__WEBPACK_IMPORTED_MODULE_59__[\"ListModel\"]; });\n\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../../popup */ \"./src/popup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_60__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_60__[\"PopupBaseViewModel\"]; });\n\n/* harmony import */ var _question_buttongroup__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../../question_buttongroup */ \"./src/question_buttongroup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_61__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_61__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_61__[\"ButtonGroupItemValue\"]; });\n\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../../utils/is-mobile */ \"./src/utils/is-mobile.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _utils_is_mobile__WEBPACK_IMPORTED_MODULE_62__[\"IsMobile\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_63__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_63__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_63__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_63__[\"createSvg\"]; });\n\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_64__[\"surveyCss\"]; });\n\n// styles\n\n//import \"../../modern.scss\";\nvar Version;\nVersion = \"\" + \"1.8.51\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// export { cultureInfo } from \"../../cultureInfo\";\n\n\n\n\n\n\n\n\n\n\n//Uncomment to include the \"date\" question type.\n//export {default as QuestionDateModel} from \"../../plugins/question_date\";\n\n\n/***/ }),\n\n/***/ \"./src/entries/core.ts\":\n/*!*****************************!*\\\n !*** ./src/entries/core.ts ***!\n \\*****************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, SurveyError, SurveyElement, ArrayChanges, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ActionBarItem, ActionBar, AdaptiveActionBarItemWrapper, AdaptiveElement, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, loadFileFromBase64, createSvg, surveyCss, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _chunks_model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunks/model */ \"./src/entries/chunks/model.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItem\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBar\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ActionBar\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionBarItemWrapper\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionBarItemWrapper\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveElement\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony import */ var _chunks_localization__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunks/localization */ \"./src/entries/chunks/localization.ts\");\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_2__[\"defaultStandardCss\"]; });\n\n/* harmony import */ var _defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../defaultCss/cssbootstrap */ \"./src/defaultCss/cssbootstrap.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return _defaultCss_cssbootstrap__WEBPACK_IMPORTED_MODULE_3__[\"defaultBootstrapCss\"]; });\n\n/* harmony import */ var _defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaultCss/cssbootstrapmaterial */ \"./src/defaultCss/cssbootstrapmaterial.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _defaultCss_cssbootstrapmaterial__WEBPACK_IMPORTED_MODULE_4__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony import */ var _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../defaultCss/cssmodern */ \"./src/defaultCss/cssmodern.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_5__[\"modernCss\"]; });\n\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _rendererFactory__WEBPACK_IMPORTED_MODULE_6__[\"RendererFactory\"]; });\n\n/* harmony import */ var _utils_responsivitymanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/responsivitymanager */ \"./src/utils/responsivitymanager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _utils_responsivitymanager__WEBPACK_IMPORTED_MODULE_7__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _utils_responsivitymanager__WEBPACK_IMPORTED_MODULE_7__[\"VerticalResponsivityManager\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/utils */ \"./src/utils/utils.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"unwrap\"]; });\n\n// model\n\n// localization\n\n// css standard classes\n\n// css bootstrap classes\n\n// css bootstrap + material classes\n\n// css modern classes\n\n// utils\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue-ui.ts\":\n/*!*******************************!*\\\n !*** ./src/entries/vue-ui.ts ***!\n \\*******************************/\n/*! exports provided: Model, WindowModel, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, Window, Page, Radiogroup, RadiogroupItem, OtherChoice, Rating, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, Boolean, BooleanSwitch, BooleanCheckbox, Empty, MultipleText, Matrix, Dropdown, File, MatrixCell, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, PanelDynamic, PanelDynamicRemove, PanelDynamicProgress, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, DragDropTD, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../vue/surveyModel */ \"./src/vue/surveyModel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__[\"VueSurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return _vue_surveyModel__WEBPACK_IMPORTED_MODULE_0__[\"VueSurveyWindowModel\"]; });\n\n/* harmony import */ var _vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../vue/survey.vue */ \"./src/vue/survey.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _vue_survey_vue__WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vue/customwidget.vue */ \"./src/vue/customwidget.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _vue_customwidget_vue__WEBPACK_IMPORTED_MODULE_2__[\"CustomWidget\"]; });\n\n/* harmony import */ var _vue_string_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vue/string.vue */ \"./src/vue/string.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _vue_string_vue__WEBPACK_IMPORTED_MODULE_3__[\"SurveyString\"]; });\n\n/* harmony import */ var _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../vue/string-viewer.vue */ \"./src/vue/string-viewer.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _vue_string_viewer_vue__WEBPACK_IMPORTED_MODULE_4__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../vue/string-editor.vue */ \"./src/vue/string-editor.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _vue_string_editor_vue__WEBPACK_IMPORTED_MODULE_5__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _vue_element_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../vue/element.vue */ \"./src/vue/element.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _vue_element_vue__WEBPACK_IMPORTED_MODULE_6__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _vue_window_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../vue/window.vue */ \"./src/vue/window.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _vue_window_vue__WEBPACK_IMPORTED_MODULE_7__[\"Window\"]; });\n\n/* harmony import */ var _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../vue/page.vue */ \"./src/vue/page.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _vue_page_vue__WEBPACK_IMPORTED_MODULE_8__[\"Page\"]; });\n\n/* harmony import */ var _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../vue/radiogroup.vue */ \"./src/vue/radiogroup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _vue_radiogroup_vue__WEBPACK_IMPORTED_MODULE_9__[\"Radiogroup\"]; });\n\n/* harmony import */ var _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../vue/radiogroupitem.vue */ \"./src/vue/radiogroupitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _vue_radiogroupitem_vue__WEBPACK_IMPORTED_MODULE_10__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../vue/otherChoice.vue */ \"./src/vue/otherChoice.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _vue_otherChoice_vue__WEBPACK_IMPORTED_MODULE_11__[\"OtherChoice\"]; });\n\n/* harmony import */ var _vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../vue/rating.vue */ \"./src/vue/rating.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _vue_rating_vue__WEBPACK_IMPORTED_MODULE_12__[\"Rating\"]; });\n\n/* harmony import */ var _vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../vue/comment.vue */ \"./src/vue/comment.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _vue_comment_vue__WEBPACK_IMPORTED_MODULE_13__[\"Comment\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../vue/ranking/ranking.vue */ \"./src/vue/ranking/ranking.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _vue_ranking_ranking_vue__WEBPACK_IMPORTED_MODULE_14__[\"Ranking\"]; });\n\n/* harmony import */ var _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../vue/ranking/ranking-item.vue */ \"./src/vue/ranking/ranking-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _vue_ranking_ranking_item_vue__WEBPACK_IMPORTED_MODULE_15__[\"RankingItem\"]; });\n\n/* harmony import */ var _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../vue/checkbox.vue */ \"./src/vue/checkbox.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _vue_checkbox_vue__WEBPACK_IMPORTED_MODULE_16__[\"Checkbox\"]; });\n\n/* harmony import */ var _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../vue/checkboxitem.vue */ \"./src/vue/checkboxitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _vue_checkboxitem_vue__WEBPACK_IMPORTED_MODULE_17__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../vue/buttongroup.vue */ \"./src/vue/buttongroup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _vue_buttongroup_vue__WEBPACK_IMPORTED_MODULE_18__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../vue/buttongroupitem.vue */ \"./src/vue/buttongroupitem.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _vue_buttongroupitem_vue__WEBPACK_IMPORTED_MODULE_19__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _vue_text_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../vue/text.vue */ \"./src/vue/text.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _vue_text_vue__WEBPACK_IMPORTED_MODULE_20__[\"QuestionText\"]; });\n\n/* harmony import */ var _vue_boolean__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../vue/boolean */ \"./src/vue/boolean.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return _vue_boolean__WEBPACK_IMPORTED_MODULE_21__[\"Boolean\"]; });\n\n/* harmony import */ var _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../vue/boolean-switch.vue */ \"./src/vue/boolean-switch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _vue_boolean_switch_vue__WEBPACK_IMPORTED_MODULE_22__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../vue/boolean-checkbox.vue */ \"./src/vue/boolean-checkbox.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _vue_boolean_checkbox_vue__WEBPACK_IMPORTED_MODULE_23__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../vue/empty.vue */ \"./src/vue/empty.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _vue_empty_vue__WEBPACK_IMPORTED_MODULE_24__[\"Empty\"]; });\n\n/* harmony import */ var _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../vue/multipletext.vue */ \"./src/vue/multipletext.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _vue_multipletext_vue__WEBPACK_IMPORTED_MODULE_25__[\"MultipleText\"]; });\n\n/* harmony import */ var _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../vue/matrix.vue */ \"./src/vue/matrix.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _vue_matrix_vue__WEBPACK_IMPORTED_MODULE_26__[\"Matrix\"]; });\n\n/* harmony import */ var _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../vue/dropdown.vue */ \"./src/vue/dropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _vue_dropdown_vue__WEBPACK_IMPORTED_MODULE_27__[\"Dropdown\"]; });\n\n/* harmony import */ var _vue_file_vue__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../vue/file.vue */ \"./src/vue/file.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _vue_file_vue__WEBPACK_IMPORTED_MODULE_28__[\"File\"]; });\n\n/* harmony import */ var _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../vue/matrixcell.vue */ \"./src/vue/matrixcell.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _vue_matrixcell_vue__WEBPACK_IMPORTED_MODULE_29__[\"MatrixCell\"]; });\n\n/* harmony import */ var _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../vue/matrixtable.vue */ \"./src/vue/matrixtable.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _vue_matrixtable_vue__WEBPACK_IMPORTED_MODULE_30__[\"MatrixTable\"]; });\n\n/* harmony import */ var _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../vue/matrixdropdown.vue */ \"./src/vue/matrixdropdown.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _vue_matrixdropdown_vue__WEBPACK_IMPORTED_MODULE_31__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../vue/matrixdynamic.vue */ \"./src/vue/matrixdynamic.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _vue_matrixdynamic_vue__WEBPACK_IMPORTED_MODULE_32__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../vue/errors.vue */ \"./src/vue/errors.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _vue_errors_vue__WEBPACK_IMPORTED_MODULE_33__[\"Errors\"]; });\n\n/* harmony import */ var _vue_html_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../vue/html.vue */ \"./src/vue/html.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _vue_html_vue__WEBPACK_IMPORTED_MODULE_34__[\"Html\"]; });\n\n/* harmony import */ var _vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../vue/expression.vue */ \"./src/vue/expression.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _vue_expression_vue__WEBPACK_IMPORTED_MODULE_35__[\"Expression\"]; });\n\n/* harmony import */ var _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../vue/imagepicker.vue */ \"./src/vue/imagepicker.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _vue_imagepicker_vue__WEBPACK_IMPORTED_MODULE_36__[\"ImagePicker\"]; });\n\n/* harmony import */ var _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../vue/paneldynamic.vue */ \"./src/vue/paneldynamic.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _vue_paneldynamic_vue__WEBPACK_IMPORTED_MODULE_37__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../vue/paneldynamicremove.vue */ \"./src/vue/paneldynamicremove.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _vue_paneldynamicremove_vue__WEBPACK_IMPORTED_MODULE_38__[\"PanelDynamicRemove\"]; });\n\n/* harmony import */ var _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../vue/paneldynamicprogress.vue */ \"./src/vue/paneldynamicprogress.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_39__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../vue/navigation.vue */ \"./src/vue/navigation.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_40__[\"Navigation\"]; });\n\n/* harmony import */ var _vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../vue/progress.vue */ \"./src/vue/progress.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _vue_progress_vue__WEBPACK_IMPORTED_MODULE_41__[\"Progress\"]; });\n\n/* harmony import */ var _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../vue/progressButtons.vue */ \"./src/vue/progressButtons.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_42__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../vue/timerpanel.vue */ \"./src/vue/timerpanel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_43__[\"TimerPanel\"]; });\n\n/* harmony import */ var _vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../vue/panel.vue */ \"./src/vue/panel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _vue_panel_vue__WEBPACK_IMPORTED_MODULE_44__[\"Panel\"]; });\n\n/* harmony import */ var _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../vue/flowpanel.vue */ \"./src/vue/flowpanel.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_45__[\"FlowPanel\"]; });\n\n/* harmony import */ var _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../vue/flowpanelelement.vue */ \"./src/vue/flowpanelelement.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_46__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _vue_row_vue__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../vue/row.vue */ \"./src/vue/row.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _vue_row_vue__WEBPACK_IMPORTED_MODULE_47__[\"Row\"]; });\n\n/* harmony import */ var _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../vue/elementheader.vue */ \"./src/vue/elementheader.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_48__[\"ElementHeader\"]; });\n\n/* harmony import */ var _vue_image_vue__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../vue/image.vue */ \"./src/vue/image.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _vue_image_vue__WEBPACK_IMPORTED_MODULE_49__[\"QuestionImage\"]; });\n\n/* harmony import */ var _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../vue/signaturepad.vue */ \"./src/vue/signaturepad.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_50__[\"SignaturePad\"]; });\n\n/* harmony import */ var _vue_header_vue__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../vue/header.vue */ \"./src/vue/header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _vue_header_vue__WEBPACK_IMPORTED_MODULE_51__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../vue/custom.vue */ \"./src/vue/custom.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _vue_custom_vue__WEBPACK_IMPORTED_MODULE_52__[\"Custom\"]; });\n\n/* harmony import */ var _vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../vue/composite.vue */ \"./src/vue/composite.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _vue_composite_vue__WEBPACK_IMPORTED_MODULE_53__[\"Composite\"]; });\n\n/* harmony import */ var _vue_drag_drop_td_vue__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../vue/drag-drop-td.vue */ \"./src/vue/drag-drop-td.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropTD\", function() { return _vue_drag_drop_td_vue__WEBPACK_IMPORTED_MODULE_54__[\"DragDropTD\"]; });\n\n/* harmony import */ var _vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../vue/titlecontent.vue */ \"./src/vue/titlecontent.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_titlecontent_vue__WEBPACK_IMPORTED_MODULE_55__[\"TitleContent\"]; });\n\n/* harmony import */ var _vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../vue/components/title-actions/title-actions.vue */ \"./src/vue/components/title-actions/title-actions.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_components_title_actions_title_actions_vue__WEBPACK_IMPORTED_MODULE_56__[\"TitleActions\"]; });\n\n/* harmony import */ var _vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../vue/components/default-title/default-title.vue */ \"./src/vue/components/default-title/default-title.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_components_default_title_default_title_vue__WEBPACK_IMPORTED_MODULE_57__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../vue/components/action-bar/action-bar.vue */ \"./src/vue/components/action-bar/action-bar.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_58__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../vue/components/svg-icon/svg-icon.vue */ \"./src/vue/components/svg-icon/svg-icon.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_59__[\"SvgIcon\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../vue/components/popup/popup.vue */ \"./src/vue/components/popup/popup.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_60__[\"Popup\"]; });\n\n/* harmony import */ var _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../vue/components/list/list.vue */ \"./src/vue/components/list/list.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_61__[\"List\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../vue/components/matrix-actions/remove-button/remove-button.vue */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_62__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../vue/components/matrix-actions/detail-button/detail-button.vue */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_63__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/entries/vue.ts\":\n/*!****************************!*\\\n !*** ./src/entries/vue.ts ***!\n \\****************************/\n/*! exports provided: Version, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, SurveyError, SurveyElement, ArrayChanges, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownColumn, matrixDropdownColumnTypes, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, QuestionExpressionModel, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ActionBarItem, ActionBar, AdaptiveActionBarItemWrapper, AdaptiveElement, ListModel, PopupModel, PopupBaseViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, loadFileFromBase64, createSvg, surveyCss, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Model, WindowModel, Survey, CustomWidget, SurveyString, SurveyStringViewer, SurveyStringEditor, SurveyElementVue, Window, Page, Radiogroup, RadiogroupItem, OtherChoice, Rating, Comment, Ranking, RankingItem, Checkbox, CheckboxItem, ButtonGroup, ButtonGroupItem, QuestionText, Boolean, BooleanSwitch, BooleanCheckbox, Empty, MultipleText, Matrix, Dropdown, File, MatrixCell, MatrixTable, MatrixDropdown, MatrixDynamic, Errors, Html, Expression, ImagePicker, PanelDynamic, PanelDynamicRemove, PanelDynamicProgress, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, DragDropTD, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ \"./src/entries/core.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Version\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"settings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerCountValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"EmailValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"NumericValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RegexValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorResult\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionValidator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ValidatorRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayChanges\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CalculatedValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExceedSizeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"UrlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ChoicesRestfull\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"registerFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ExpressionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ConditionsParser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ProcessValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionEmptyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSelectBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCheckboxModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRankingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCommentModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionDropdownModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ElementFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFileModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionHtmlModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionRatingModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionExpressionModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionTextModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionBooleanModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ImageItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionImageModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTimer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Trigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyWindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"TextPreProcessor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"dxSurveyService\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyStrings\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CustomWidgetCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComponentCollection\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"StylesManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItem\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBar\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionBar\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionBarItemWrapper\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionBarItemWrapper\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveElement\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ListModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItemValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"IsMobile\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createSvg\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultStandardCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultBootstrapCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultBootstrapMaterialCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"modernCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"RendererFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"VerticalResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"unwrap\"]; });\n\n/* harmony import */ var _vue_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vue-ui */ \"./src/entries/vue-ui.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Model\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"WindowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Window\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Boolean\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemove\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Navigation\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropTD\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"DragDropTD\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"DefaultTitle\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/error.ts\":\n/*!**********************!*\\\n !*** ./src/error.ts ***!\n \\**********************/\n/*! exports provided: AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, WebRequestError, WebRequestEmptyError, OtherEmptyError, UploadingFileError, RequiredInAllRowsError, MinRowCountError, KeyDuplicationError, CustomError */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return AnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return OneAnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return RequreNumericError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return ExceedSizeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebRequestError\", function() { return WebRequestError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebRequestEmptyError\", function() { return WebRequestEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherEmptyError\", function() { return OtherEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UploadingFileError\", function() { return UploadingFileError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequiredInAllRowsError\", function() { return RequiredInAllRowsError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MinRowCountError\", function() { return MinRowCountError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"KeyDuplicationError\", function() { return KeyDuplicationError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return CustomError; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar AnswerRequiredError = /** @class */ (function (_super) {\n __extends(AnswerRequiredError, _super);\n function AnswerRequiredError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n AnswerRequiredError.prototype.getErrorType = function () {\n return \"required\";\n };\n AnswerRequiredError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredError\");\n };\n return AnswerRequiredError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OneAnswerRequiredError = /** @class */ (function (_super) {\n __extends(OneAnswerRequiredError, _super);\n function OneAnswerRequiredError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n OneAnswerRequiredError.prototype.getErrorType = function () {\n return \"requireoneanswer\";\n };\n OneAnswerRequiredError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredErrorInPanel\");\n };\n return OneAnswerRequiredError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequreNumericError = /** @class */ (function (_super) {\n __extends(RequreNumericError, _super);\n function RequreNumericError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n RequreNumericError.prototype.getErrorType = function () {\n return \"requirenumeric\";\n };\n RequreNumericError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"numericError\");\n };\n return RequreNumericError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar ExceedSizeError = /** @class */ (function (_super) {\n __extends(ExceedSizeError, _super);\n function ExceedSizeError(maxSize, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.maxSize = maxSize;\n _this.locText.text = _this.getText();\n return _this;\n }\n ExceedSizeError.prototype.getErrorType = function () {\n return \"exceedsize\";\n };\n ExceedSizeError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"exceedMaxSize\")[\"format\"](this.getTextSize());\n };\n ExceedSizeError.prototype.getTextSize = function () {\n var sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var fixed = [0, 0, 2, 3, 3];\n if (this.maxSize === 0) {\n return \"0 Byte\";\n }\n var i = Math.floor(Math.log(this.maxSize) / Math.log(1024));\n var value = this.maxSize / Math.pow(1024, i);\n return value.toFixed(fixed[i]) + \" \" + sizes[i];\n };\n return ExceedSizeError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestError = /** @class */ (function (_super) {\n __extends(WebRequestError, _super);\n function WebRequestError(status, response, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.status = status;\n _this.response = response;\n return _this;\n }\n WebRequestError.prototype.getErrorType = function () {\n return \"webrequest\";\n };\n WebRequestError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"urlRequestError\")[\"format\"](this.status, this.response);\n };\n return WebRequestError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar WebRequestEmptyError = /** @class */ (function (_super) {\n __extends(WebRequestEmptyError, _super);\n function WebRequestEmptyError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n WebRequestEmptyError.prototype.getErrorType = function () {\n return \"webrequestempty\";\n };\n WebRequestEmptyError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"urlGetChoicesError\");\n };\n return WebRequestEmptyError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar OtherEmptyError = /** @class */ (function (_super) {\n __extends(OtherEmptyError, _super);\n function OtherEmptyError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n OtherEmptyError.prototype.getErrorType = function () {\n return \"otherempty\";\n };\n OtherEmptyError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"otherRequiredError\");\n };\n return OtherEmptyError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar UploadingFileError = /** @class */ (function (_super) {\n __extends(UploadingFileError, _super);\n function UploadingFileError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n UploadingFileError.prototype.getErrorType = function () {\n return \"uploadingfile\";\n };\n UploadingFileError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"uploadingFile\");\n };\n return UploadingFileError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar RequiredInAllRowsError = /** @class */ (function (_super) {\n __extends(RequiredInAllRowsError, _super);\n function RequiredInAllRowsError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n RequiredInAllRowsError.prototype.getErrorType = function () {\n return \"requiredinallrowserror\";\n };\n RequiredInAllRowsError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"requiredInAllRowsError\");\n };\n return RequiredInAllRowsError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar MinRowCountError = /** @class */ (function (_super) {\n __extends(MinRowCountError, _super);\n function MinRowCountError(minRowCount, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.minRowCount = minRowCount;\n return _this;\n }\n MinRowCountError.prototype.getErrorType = function () {\n return \"minrowcounterror\";\n };\n MinRowCountError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"]\n .getString(\"minRowCountError\")[\"format\"](this.minRowCount);\n };\n return MinRowCountError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar KeyDuplicationError = /** @class */ (function (_super) {\n __extends(KeyDuplicationError, _super);\n function KeyDuplicationError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n KeyDuplicationError.prototype.getErrorType = function () {\n return \"keyduplicationerror\";\n };\n KeyDuplicationError.prototype.getDefaultText = function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"keyDuplicationError\");\n };\n return KeyDuplicationError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\nvar CustomError = /** @class */ (function (_super) {\n __extends(CustomError, _super);\n function CustomError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n CustomError.prototype.getErrorType = function () {\n return \"custom\";\n };\n return CustomError;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyError\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/expressionItems.ts\":\n/*!********************************!*\\\n !*** ./src/expressionItems.ts ***!\n \\********************************/\n/*! exports provided: ExpressionItem, HtmlConditionItem, UrlConditionItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionItem\", function() { return ExpressionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return HtmlConditionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return UrlConditionItem; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar ExpressionItem = /** @class */ (function (_super) {\n __extends(ExpressionItem, _super);\n function ExpressionItem(expression) {\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"html\", _this);\n _this.expression = expression;\n return _this;\n }\n ExpressionItem.prototype.getType = function () {\n return \"expressionitem\";\n };\n ExpressionItem.prototype.runCondition = function (values, properties) {\n if (!this.expression)\n return false;\n return new _conditions__WEBPACK_IMPORTED_MODULE_2__[\"ConditionRunner\"](this.expression).run(values, properties);\n };\n Object.defineProperty(ExpressionItem.prototype, \"expression\", {\n /**\n * The expression property. If this expression returns true, then survey will use html property to show on complete page.\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ExpressionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n ExpressionItem.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ExpressionItem.prototype.getMarkdownHtml = function (text, name) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : null;\n };\n ExpressionItem.prototype.getRenderer = function (name) {\n return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n };\n ExpressionItem.prototype.getProcessedText = function (text) {\n return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ExpressionItem;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * A class that contains expression and html propeties. It uses in survey.completedHtmlOnCondition array.\n * If the expression returns true then html of this item uses instead of survey.completedHtml property\n * @see SurveyModel.completedHtmlOnCondition\n * @see SurveyModel.completedHtml\n */\nvar HtmlConditionItem = /** @class */ (function (_super) {\n __extends(HtmlConditionItem, _super);\n function HtmlConditionItem(expression, html) {\n if (expression === void 0) { expression = null; }\n if (html === void 0) { html = null; }\n var _this = _super.call(this, expression) || this;\n _this.createLocalizableString(\"html\", _this);\n _this.html = html;\n return _this;\n }\n HtmlConditionItem.prototype.getType = function () {\n return \"htmlconditionitem\";\n };\n Object.defineProperty(HtmlConditionItem.prototype, \"html\", {\n /**\n * The html that shows on completed ('Thank you') page. The expression should return true\n * @see expression\n */\n get: function () {\n return this.getLocalizableStringText(\"html\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"html\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HtmlConditionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n return HtmlConditionItem;\n}(ExpressionItem));\n\n/**\n * A class that contains expression and url propeties. It uses in survey.navigateToUrlOnCondition array.\n * If the expression returns true then url of this item uses instead of survey.navigateToUrl property\n * @see SurveyModel.navigateToUrl\n */\nvar UrlConditionItem = /** @class */ (function (_super) {\n __extends(UrlConditionItem, _super);\n function UrlConditionItem(expression, url) {\n if (expression === void 0) { expression = null; }\n if (url === void 0) { url = null; }\n var _this = _super.call(this, expression) || this;\n _this.createLocalizableString(\"url\", _this);\n _this.url = url;\n return _this;\n }\n UrlConditionItem.prototype.getType = function () {\n return \"urlconditionitem\";\n };\n Object.defineProperty(UrlConditionItem.prototype, \"url\", {\n /**\n * The url that survey navigates to on completing the survey. The expression should return true\n * @see expression\n */\n get: function () {\n return this.getLocalizableStringText(\"url\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"url\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(UrlConditionItem.prototype, \"locUrl\", {\n get: function () {\n return this.getLocalizableString(\"url\");\n },\n enumerable: false,\n configurable: true\n });\n return UrlConditionItem;\n}(ExpressionItem));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"expressionitem\", [\"expression:condition\"], function () {\n return new ExpressionItem();\n}, \"base\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"htmlconditionitem\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new HtmlConditionItem();\n}, \"expressionitem\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"urlconditionitem\", [{ name: \"url:string\", serializationProperty: \"locUrl\" }], function () {\n return new UrlConditionItem();\n}, \"expressionitem\");\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressionParser.ts\":\n/*!*********************************************!*\\\n !*** ./src/expressions/expressionParser.ts ***!\n \\*********************************************/\n/*! exports provided: SyntaxError, parse */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SyntaxError\", function() { return SyntaxError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parse\", function() { return parse; });\n/* harmony import */ var _expressions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expressions */ \"./src/expressions/expressions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n// Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.3.1 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nvar SyntaxError = /** @class */ (function (_super) {\n __extends(SyntaxError, _super);\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n return _this;\n }\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n return SyntaxError;\n}(Error));\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = { Expression: peg$parseExpression };\n var peg$startRuleFunction = peg$parseExpression;\n var peg$c0 = function (head, tail) {\n return buildBinaryOperand(head, tail, true);\n };\n var peg$c1 = \"||\";\n var peg$c2 = peg$literalExpectation(\"||\", false);\n var peg$c3 = \"or\";\n var peg$c4 = peg$literalExpectation(\"or\", true);\n var peg$c5 = function () { return \"or\"; };\n var peg$c6 = \"&&\";\n var peg$c7 = peg$literalExpectation(\"&&\", false);\n var peg$c8 = \"and\";\n var peg$c9 = peg$literalExpectation(\"and\", true);\n var peg$c10 = function () { return \"and\"; };\n var peg$c11 = function (head, tail) {\n return buildBinaryOperand(head, tail);\n };\n var peg$c12 = \"<=\";\n var peg$c13 = peg$literalExpectation(\"<=\", false);\n var peg$c14 = \"lessorequal\";\n var peg$c15 = peg$literalExpectation(\"lessorequal\", true);\n var peg$c16 = function () { return \"lessorequal\"; };\n var peg$c17 = \">=\";\n var peg$c18 = peg$literalExpectation(\">=\", false);\n var peg$c19 = \"greaterorequal\";\n var peg$c20 = peg$literalExpectation(\"greaterorequal\", true);\n var peg$c21 = function () { return \"greaterorequal\"; };\n var peg$c22 = \"=\";\n var peg$c23 = peg$literalExpectation(\"=\", false);\n var peg$c24 = \"equal\";\n var peg$c25 = peg$literalExpectation(\"equal\", true);\n var peg$c26 = function () { return \"equal\"; };\n var peg$c27 = \"!=\";\n var peg$c28 = peg$literalExpectation(\"!=\", false);\n var peg$c29 = \"notequal\";\n var peg$c30 = peg$literalExpectation(\"notequal\", true);\n var peg$c31 = function () { return \"notequal\"; };\n var peg$c32 = \"<\";\n var peg$c33 = peg$literalExpectation(\"<\", false);\n var peg$c34 = \"less\";\n var peg$c35 = peg$literalExpectation(\"less\", true);\n var peg$c36 = function () { return \"less\"; };\n var peg$c37 = \">\";\n var peg$c38 = peg$literalExpectation(\">\", false);\n var peg$c39 = \"greater\";\n var peg$c40 = peg$literalExpectation(\"greater\", true);\n var peg$c41 = function () { return \"greater\"; };\n var peg$c42 = \"+\";\n var peg$c43 = peg$literalExpectation(\"+\", false);\n var peg$c44 = function () { return \"plus\"; };\n var peg$c45 = \"-\";\n var peg$c46 = peg$literalExpectation(\"-\", false);\n var peg$c47 = function () { return \"minus\"; };\n var peg$c48 = \"*\";\n var peg$c49 = peg$literalExpectation(\"*\", false);\n var peg$c50 = function () { return \"mul\"; };\n var peg$c51 = \"/\";\n var peg$c52 = peg$literalExpectation(\"/\", false);\n var peg$c53 = function () { return \"div\"; };\n var peg$c54 = \"%\";\n var peg$c55 = peg$literalExpectation(\"%\", false);\n var peg$c56 = function () { return \"mod\"; };\n var peg$c57 = \"^\";\n var peg$c58 = peg$literalExpectation(\"^\", false);\n var peg$c59 = \"power\";\n var peg$c60 = peg$literalExpectation(\"power\", true);\n var peg$c61 = function () { return \"power\"; };\n var peg$c62 = \"*=\";\n var peg$c63 = peg$literalExpectation(\"*=\", false);\n var peg$c64 = \"contains\";\n var peg$c65 = peg$literalExpectation(\"contains\", true);\n var peg$c66 = \"contain\";\n var peg$c67 = peg$literalExpectation(\"contain\", true);\n var peg$c68 = function () { return \"contains\"; };\n var peg$c69 = \"notcontains\";\n var peg$c70 = peg$literalExpectation(\"notcontains\", true);\n var peg$c71 = \"notcontain\";\n var peg$c72 = peg$literalExpectation(\"notcontain\", true);\n var peg$c73 = function () { return \"notcontains\"; };\n var peg$c74 = \"anyof\";\n var peg$c75 = peg$literalExpectation(\"anyof\", true);\n var peg$c76 = function () { return \"anyof\"; };\n var peg$c77 = \"allof\";\n var peg$c78 = peg$literalExpectation(\"allof\", true);\n var peg$c79 = function () { return \"allof\"; };\n var peg$c80 = \"(\";\n var peg$c81 = peg$literalExpectation(\"(\", false);\n var peg$c82 = \")\";\n var peg$c83 = peg$literalExpectation(\")\", false);\n var peg$c84 = function (expr) { return expr; };\n var peg$c85 = function (name, params) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"FunctionOperand\"](name, params); };\n var peg$c86 = \"!\";\n var peg$c87 = peg$literalExpectation(\"!\", false);\n var peg$c88 = \"negate\";\n var peg$c89 = peg$literalExpectation(\"negate\", true);\n var peg$c90 = function (expr) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, \"negate\"); };\n var peg$c91 = function (expr, op) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"UnaryOperand\"](expr, op); };\n var peg$c92 = \"empty\";\n var peg$c93 = peg$literalExpectation(\"empty\", true);\n var peg$c94 = function () { return \"empty\"; };\n var peg$c95 = \"notempty\";\n var peg$c96 = peg$literalExpectation(\"notempty\", true);\n var peg$c97 = function () { return \"notempty\"; };\n var peg$c98 = \"undefined\";\n var peg$c99 = peg$literalExpectation(\"undefined\", false);\n var peg$c100 = \"null\";\n var peg$c101 = peg$literalExpectation(\"null\", false);\n var peg$c102 = function () { return null; };\n var peg$c103 = function (value) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Const\"](value); };\n var peg$c104 = \"{\";\n var peg$c105 = peg$literalExpectation(\"{\", false);\n var peg$c106 = \"}\";\n var peg$c107 = peg$literalExpectation(\"}\", false);\n var peg$c108 = function (value) { return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"Variable\"](value); };\n var peg$c109 = function (value) { return value; };\n var peg$c110 = \"''\";\n var peg$c111 = peg$literalExpectation(\"''\", false);\n var peg$c112 = function () { return \"\"; };\n var peg$c113 = \"\\\"\\\"\";\n var peg$c114 = peg$literalExpectation(\"\\\"\\\"\", false);\n var peg$c115 = \"'\";\n var peg$c116 = peg$literalExpectation(\"'\", false);\n var peg$c117 = function (value) { return \"'\" + value + \"'\"; };\n var peg$c118 = \"\\\"\";\n var peg$c119 = peg$literalExpectation(\"\\\"\", false);\n var peg$c120 = \"[\";\n var peg$c121 = peg$literalExpectation(\"[\", false);\n var peg$c122 = \"]\";\n var peg$c123 = peg$literalExpectation(\"]\", false);\n var peg$c124 = function (sequence) { return sequence; };\n var peg$c125 = \",\";\n var peg$c126 = peg$literalExpectation(\",\", false);\n var peg$c127 = function (expr, tail) {\n if (expr == null)\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"]([]);\n var array = [expr];\n if (Array.isArray(tail)) {\n var flatten = flattenArray(tail);\n for (var i = 3; i < flatten.length; i += 4) {\n array.push(flatten[i]);\n }\n }\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"ArrayOperand\"](array);\n };\n var peg$c128 = \"true\";\n var peg$c129 = peg$literalExpectation(\"true\", true);\n var peg$c130 = function () { return true; };\n var peg$c131 = \"false\";\n var peg$c132 = peg$literalExpectation(\"false\", true);\n var peg$c133 = function () { return false; };\n var peg$c134 = \"0x\";\n var peg$c135 = peg$literalExpectation(\"0x\", false);\n var peg$c136 = function () { return parseInt(text(), 16); };\n var peg$c137 = /^[\\-]/;\n var peg$c138 = peg$classExpectation([\"-\"], false, false);\n var peg$c139 = function (sign, num) { return sign == null ? num : -num; };\n var peg$c140 = \".\";\n var peg$c141 = peg$literalExpectation(\".\", false);\n var peg$c142 = function () { return parseFloat(text()); };\n var peg$c143 = function () { return parseInt(text(), 10); };\n var peg$c144 = \"0\";\n var peg$c145 = peg$literalExpectation(\"0\", false);\n var peg$c146 = function () { return 0; };\n var peg$c147 = function (chars) { return chars.join(\"\"); };\n var peg$c148 = \"\\\\'\";\n var peg$c149 = peg$literalExpectation(\"\\\\'\", false);\n var peg$c150 = function () { return \"'\"; };\n var peg$c151 = \"\\\\\\\"\";\n var peg$c152 = peg$literalExpectation(\"\\\\\\\"\", false);\n var peg$c153 = function () { return \"\\\"\"; };\n var peg$c154 = /^[^\"']/;\n var peg$c155 = peg$classExpectation([\"\\\"\", \"'\"], true, false);\n var peg$c156 = function () { return text(); };\n var peg$c157 = /^[^{}]/;\n var peg$c158 = peg$classExpectation([\"{\", \"}\"], true, false);\n var peg$c159 = /^[0-9]/;\n var peg$c160 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$c161 = /^[1-9]/;\n var peg$c162 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c163 = /^[a-zA-Z]/;\n var peg$c164 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$c165 = peg$otherExpectation(\"whitespace\");\n var peg$c166 = /^[ \\t\\n\\r]/;\n var peg$c167 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$resultsCache = {};\n var peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n }\n else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n }\n else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n var key = peg$currPos * 34 + 0;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLogicOr();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseOrSign();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseLogicOr();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseOrSign();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseLogicOr();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s2, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseOrSign() {\n var s0, s1;\n var key = peg$currPos * 34 + 1;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c2);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c3) {\n s1 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c4);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 2;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLogicAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseAndSign();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseLogicAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseAndSign();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseLogicAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAndSign() {\n var s0, s1;\n var key = peg$currPos * 34 + 3;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c8) {\n s1 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 4;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseCompOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseComparableOperators();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseCompOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseComparableOperators();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseCompOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseComparableOperators() {\n var s0, s1;\n var key = peg$currPos * 34 + 5;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c14) {\n s1 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c16();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c18);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 14).toLowerCase() === peg$c19) {\n s1 = input.substr(peg$currPos, 14);\n peg$currPos += 14;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c20);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c22;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c24) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c25);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 60) {\n s1 = peg$c32;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4).toLowerCase() === peg$c34) {\n s1 = input.substr(peg$currPos, 4);\n peg$currPos += 4;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c36();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c37;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c38);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c39) {\n s1 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c40);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseCompOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 6;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsePlusMinusOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePlusMinusSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsePlusMinusOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePlusMinusSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsePlusMinusOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePlusMinusSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 7;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c42;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c44();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c45;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c46);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePlusMinusOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 8;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseMulDivOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMulDivSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseMulDivOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMulDivSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseMulDivOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseMulDivSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 9;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c48;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c51;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c52);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 37) {\n s1 = peg$c54;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c55);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseMulDivOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 10;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseBinaryFuncOp();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePowerSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBinaryFuncOp();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePowerSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBinaryFuncOp();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePowerSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 11;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c57;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c58);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c59) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c60);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseBinaryFuncOp() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 12;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseBinFunctions();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseBinFunctions();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseBinFunctions() {\n var s0, s1;\n var key = peg$currPos * 34 + 13;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c62) {\n s1 = peg$c62;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c63);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c64) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c66) {\n s1 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c68();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c69) {\n s1 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c70);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 10).toLowerCase() === peg$c71) {\n s1 = input.substr(peg$currPos, 10);\n peg$currPos += 10;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c72);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c73();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c74) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c75);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c76();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c77) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c78);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c79();\n }\n s0 = s1;\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 34 + 14;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c80;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c82;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c84(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunctionOp();\n if (s0 === peg$FAILED) {\n s0 = peg$parseUnaryFunctionOp();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAtom();\n if (s0 === peg$FAILED) {\n s0 = peg$parseArrayOp();\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseFunctionOp() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 34 + 15;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLettersAndDigits();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c80;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSequence();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c82;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c85(s1, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseUnaryFunctionOp() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 16;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c86;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c87);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6).toLowerCase() === peg$c88) {\n s1 = input.substr(peg$currPos, 6);\n peg$currPos += 6;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c90(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseAtom();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseUnFunctions();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c91(s1, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseUnFunctions() {\n var s0, s1;\n var key = peg$currPos * 34 + 17;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c92) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c94();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c95) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c96);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c97();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAtom() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 34 + 18;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c98) {\n s2 = peg$c98;\n peg$currPos += 9;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c99);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c100) {\n s2 = peg$c100;\n peg$currPos += 4;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c101);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c102();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseConstValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c104;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c105);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValueInput();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s4 = peg$c106;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c107);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c108(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseConstValue() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 19;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLogicValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseArithmeticValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseLettersAndDigits();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c109(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c110) {\n s1 = peg$c110;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c111);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c113) {\n s1 = peg$c113;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c114);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c112();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c115;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c116);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseAnyInput();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c115;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c116);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c117(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c118;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c119);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseAnyInput();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c118;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c119);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c117(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseArrayOp() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 20;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c120;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c121);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseSequence();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c122;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c123);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c124(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseSequence() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 21;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c125;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c125;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c127(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicValue() {\n var s0, s1;\n var key = peg$currPos * 34 + 22;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4).toLowerCase() === peg$c128) {\n s1 = input.substr(peg$currPos, 4);\n peg$currPos += 4;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c129);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c130();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c131) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c132);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c133();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseArithmeticValue() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 23;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c134) {\n s1 = peg$c134;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c135);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c136();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c137.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c138);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c139(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseNumber() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 24;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseDigits();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c140;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c141);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDigits();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c142();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNonZeroDigits();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c143();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c144;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c145);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c146();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseValueInput() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 25;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseValueCharacters();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseValueCharacters();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c147(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAnyInput() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 26;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseAnyCharacters();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseAnyCharacters();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c147(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAnyCharacters() {\n var s0, s1;\n var key = peg$currPos * 34 + 27;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c148) {\n s1 = peg$c148;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c149);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c150();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c151) {\n s1 = peg$c151;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c152);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c153();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c154.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c155);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseValueCharacters() {\n var s0, s1;\n var key = peg$currPos * 34 + 28;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (peg$c157.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c158);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLettersAndDigits() {\n var s0, s1, s2, s3, s4, s5, s6;\n var key = peg$currPos * 34 + 29;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLetters();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parseDigits();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseLetters();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseLetters();\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parseDigits();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseLetters();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseLetters();\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseDigits() {\n var s0, s1;\n var key = peg$currPos * 34 + 30;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c159.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c160);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c159.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c160);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseNonZeroDigits() {\n var s0, s1;\n var key = peg$currPos * 34 + 31;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c161.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c162);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c161.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c162);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLetters() {\n var s0, s1;\n var key = peg$currPos * 34 + 32;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c163.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c164);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c163.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c164);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parse_() {\n var s0, s1;\n var key = peg$currPos * 34 + 33;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = [];\n if (peg$c166.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c167);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c166.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c167);\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c165);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function buildBinaryOperand(head, tail, isArithmeticOp) {\n if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n return tail.reduce(function (result, elements) {\n return new _expressions__WEBPACK_IMPORTED_MODULE_0__[\"BinaryOperand\"](elements[1], result, elements[3], isArithmeticOp);\n }, head);\n }\n function flattenArray(array) {\n return [].concat.apply([], array);\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n }\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nvar parse = peg$parse;\n\n\n/***/ }),\n\n/***/ \"./src/expressions/expressions.ts\":\n/*!****************************************!*\\\n !*** ./src/expressions/expressions.ts ***!\n \\****************************************/\n/*! exports provided: Operand, BinaryOperand, UnaryOperand, ArrayOperand, Const, Variable, FunctionOperand, OperandMaker */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return Operand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return BinaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UnaryOperand\", function() { return UnaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return ArrayOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return Const; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return Variable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return FunctionOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OperandMaker\", function() { return OperandMaker; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar Operand = /** @class */ (function () {\n function Operand() {\n }\n Operand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n return \"\";\n };\n Operand.prototype.hasFunction = function () {\n return false;\n };\n Operand.prototype.hasAsyncFunction = function () {\n return false;\n };\n Operand.prototype.addToAsyncList = function (list) { };\n return Operand;\n}());\n\nvar BinaryOperand = /** @class */ (function (_super) {\n __extends(BinaryOperand, _super);\n function BinaryOperand(operatorName, left, right, isArithmeticOp) {\n if (left === void 0) { left = null; }\n if (right === void 0) { right = null; }\n if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n var _this = _super.call(this) || this;\n _this.operatorName = operatorName;\n _this.left = left;\n _this.right = right;\n _this.isArithmeticValue = isArithmeticOp;\n if (isArithmeticOp) {\n _this.consumer = OperandMaker.binaryFunctions[\"arithmeticOp\"](operatorName);\n }\n else {\n _this.consumer = OperandMaker.binaryFunctions[operatorName];\n }\n if (_this.consumer == null) {\n OperandMaker.throwInvalidOperatorError(operatorName);\n }\n return _this;\n }\n BinaryOperand.prototype.getType = function () {\n return \"binary\";\n };\n Object.defineProperty(BinaryOperand.prototype, \"isArithmetic\", {\n get: function () {\n return this.isArithmeticValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"isConjunction\", {\n get: function () {\n return this.operatorName == \"or\" || this.operatorName == \"and\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"conjunction\", {\n get: function () {\n return this.isConjunction ? this.operatorName : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"leftOperand\", {\n get: function () {\n return this.left;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"rightOperand\", {\n get: function () {\n return this.right;\n },\n enumerable: false,\n configurable: true\n });\n BinaryOperand.prototype.evaluateParam = function (x, processValue) {\n return x == null ? null : x.evaluate(processValue);\n };\n BinaryOperand.prototype.evaluate = function (processValue) {\n return this.consumer.call(this, this.evaluateParam(this.left, processValue), this.evaluateParam(this.right, processValue));\n };\n BinaryOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (\"(\" +\n OperandMaker.safeToString(this.left, func) +\n \" \" +\n OperandMaker.operatorToString(this.operatorName) +\n \" \" +\n OperandMaker.safeToString(this.right, func) +\n \")\");\n };\n BinaryOperand.prototype.setVariables = function (variables) {\n if (this.left != null)\n this.left.setVariables(variables);\n if (this.right != null)\n this.right.setVariables(variables);\n };\n BinaryOperand.prototype.hasFunction = function () {\n return ((!!this.left && this.left.hasFunction()) ||\n (!!this.right && this.right.hasFunction()));\n };\n BinaryOperand.prototype.hasAsyncFunction = function () {\n return ((!!this.left && this.left.hasAsyncFunction()) ||\n (!!this.right && this.right.hasAsyncFunction()));\n };\n BinaryOperand.prototype.addToAsyncList = function (list) {\n if (!!this.left)\n this.left.addToAsyncList(list);\n if (!!this.right)\n this.right.addToAsyncList(list);\n };\n return BinaryOperand;\n}(Operand));\n\nvar UnaryOperand = /** @class */ (function (_super) {\n __extends(UnaryOperand, _super);\n function UnaryOperand(expressionValue, operatorName) {\n var _this = _super.call(this) || this;\n _this.expressionValue = expressionValue;\n _this.operatorName = operatorName;\n _this.consumer = OperandMaker.unaryFunctions[operatorName];\n if (_this.consumer == null) {\n OperandMaker.throwInvalidOperatorError(operatorName);\n }\n return _this;\n }\n Object.defineProperty(UnaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(UnaryOperand.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n enumerable: false,\n configurable: true\n });\n UnaryOperand.prototype.getType = function () {\n return \"unary\";\n };\n UnaryOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (OperandMaker.operatorToString(this.operatorName) +\n \" \" +\n this.expression.toString(func));\n };\n UnaryOperand.prototype.evaluate = function (processValue) {\n var value = this.expression.evaluate(processValue);\n return this.consumer.call(this, value);\n };\n UnaryOperand.prototype.setVariables = function (variables) {\n this.expression.setVariables(variables);\n };\n return UnaryOperand;\n}(Operand));\n\nvar ArrayOperand = /** @class */ (function (_super) {\n __extends(ArrayOperand, _super);\n function ArrayOperand(values) {\n var _this = _super.call(this) || this;\n _this.values = values;\n return _this;\n }\n ArrayOperand.prototype.getType = function () {\n return \"array\";\n };\n ArrayOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (\"[\" +\n this.values\n .map(function (el) {\n return el.toString(func);\n })\n .join(\", \") +\n \"]\");\n };\n ArrayOperand.prototype.evaluate = function (processValue) {\n return this.values.map(function (el) {\n return el.evaluate(processValue);\n });\n };\n ArrayOperand.prototype.setVariables = function (variables) {\n this.values.forEach(function (el) {\n el.setVariables(variables);\n });\n };\n ArrayOperand.prototype.hasFunction = function () {\n return this.values.some(function (operand) { return operand.hasFunction(); });\n };\n ArrayOperand.prototype.hasAsyncFunction = function () {\n return this.values.some(function (operand) { return operand.hasAsyncFunction(); });\n };\n ArrayOperand.prototype.addToAsyncList = function (list) {\n this.values.forEach(function (operand) { return operand.addToAsyncList(list); });\n };\n return ArrayOperand;\n}(Operand));\n\nvar Const = /** @class */ (function (_super) {\n __extends(Const, _super);\n function Const(value) {\n var _this = _super.call(this) || this;\n _this.value = value;\n return _this;\n }\n Const.prototype.getType = function () {\n return \"const\";\n };\n Const.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return this.value.toString();\n };\n Object.defineProperty(Const.prototype, \"correctValue\", {\n get: function () {\n return this.getCorrectValue(this.value);\n },\n enumerable: false,\n configurable: true\n });\n Const.prototype.evaluate = function () {\n return this.getCorrectValue(this.value);\n };\n Const.prototype.setVariables = function (variables) { };\n Const.prototype.getCorrectValue = function (value) {\n if (!value || typeof value != \"string\")\n return value;\n if (this.isBooleanValue(value))\n return value.toLowerCase() === \"true\";\n if (value.length > 1 &&\n this.isQuote(value[0]) &&\n this.isQuote(value[value.length - 1]))\n return value.substr(1, value.length - 2);\n if (OperandMaker.isNumeric(value)) {\n if (value.indexOf(\"0x\") == 0)\n return parseInt(value);\n if (value.length > 1 && value[0] == \"0\")\n return value;\n return parseFloat(value);\n }\n return value;\n };\n Const.prototype.isQuote = function (ch) {\n return ch == \"'\" || ch == '\"';\n };\n Const.prototype.isBooleanValue = function (value) {\n return (value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n return Const;\n}(Operand));\n\nvar Variable = /** @class */ (function (_super) {\n __extends(Variable, _super);\n function Variable(variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.variableName = variableName;\n _this.valueInfo = {};\n _this.useValueAsItIs = false;\n if (!!_this.variableName &&\n _this.variableName.length > 1 &&\n _this.variableName[0] === Variable.DisableConversionChar) {\n _this.variableName = _this.variableName.substr(1);\n _this.useValueAsItIs = true;\n }\n return _this;\n }\n Variable.prototype.getType = function () {\n return \"variable\";\n };\n Variable.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n var prefix = this.useValueAsItIs ? Variable.DisableConversionChar : \"\";\n return \"{\" + prefix + this.variableName + \"}\";\n };\n Object.defineProperty(Variable.prototype, \"variable\", {\n get: function () {\n return this.variableName;\n },\n enumerable: false,\n configurable: true\n });\n Variable.prototype.evaluate = function (processValue) {\n this.valueInfo.name = this.variableName;\n processValue.getValueInfo(this.valueInfo);\n return this.valueInfo.hasValue\n ? this.getCorrectValue(this.valueInfo.value)\n : null;\n };\n Variable.prototype.setVariables = function (variables) {\n variables.push(this.variableName);\n };\n Variable.prototype.getCorrectValue = function (value) {\n if (this.useValueAsItIs)\n return value;\n return _super.prototype.getCorrectValue.call(this, value);\n };\n Variable.DisableConversionChar = \"#\";\n return Variable;\n}(Const));\n\nvar FunctionOperand = /** @class */ (function (_super) {\n __extends(FunctionOperand, _super);\n function FunctionOperand(originalValue, parameters) {\n var _this = _super.call(this) || this;\n _this.originalValue = originalValue;\n _this.parameters = parameters;\n _this.isReadyValue = false;\n if (Array.isArray(parameters) && parameters.length === 0) {\n _this.parameters = new ArrayOperand([]);\n }\n return _this;\n }\n FunctionOperand.prototype.getType = function () {\n return \"function\";\n };\n FunctionOperand.prototype.evaluateAsync = function (processValue) {\n var _this = this;\n this.isReadyValue = false;\n var asyncProcessValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_2__[\"ProcessValue\"]();\n asyncProcessValue.values = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.values);\n asyncProcessValue.properties = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(processValue.properties);\n asyncProcessValue.properties.returnResult = function (result) {\n _this.asynResult = result;\n _this.isReadyValue = true;\n _this.onAsyncReady();\n };\n this.evaluateCore(asyncProcessValue);\n };\n FunctionOperand.prototype.evaluate = function (processValue) {\n if (this.isReady)\n return this.asynResult;\n return this.evaluateCore(processValue);\n };\n FunctionOperand.prototype.evaluateCore = function (processValue) {\n return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.run(this.originalValue, this.parameters.evaluate(processValue), processValue.properties);\n };\n FunctionOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return this.originalValue + \"(\" + this.parameters.toString(func) + \")\";\n };\n FunctionOperand.prototype.setVariables = function (variables) {\n this.parameters.setVariables(variables);\n };\n Object.defineProperty(FunctionOperand.prototype, \"isReady\", {\n get: function () {\n return this.isReadyValue;\n },\n enumerable: false,\n configurable: true\n });\n FunctionOperand.prototype.hasFunction = function () {\n return true;\n };\n FunctionOperand.prototype.hasAsyncFunction = function () {\n return _functionsfactory__WEBPACK_IMPORTED_MODULE_1__[\"FunctionFactory\"].Instance.isAsyncFunction(this.originalValue);\n };\n FunctionOperand.prototype.addToAsyncList = function (list) {\n if (this.hasAsyncFunction()) {\n list.push(this);\n }\n };\n return FunctionOperand;\n}(Operand));\n\nvar OperandMaker = /** @class */ (function () {\n function OperandMaker() {\n }\n OperandMaker.throwInvalidOperatorError = function (op) {\n throw new Error(\"Invalid operator: '\" + op + \"'\");\n };\n OperandMaker.safeToString = function (operand, func) {\n return operand == null ? \"\" : operand.toString(func);\n };\n OperandMaker.toOperandString = function (value) {\n if (!!value &&\n !OperandMaker.isNumeric(value) &&\n !OperandMaker.isBooleanValue(value))\n value = \"'\" + value + \"'\";\n return value;\n };\n OperandMaker.isSpaceString = function (str) {\n return !!str && !str.replace(\" \", \"\");\n };\n OperandMaker.isNumeric = function (value) {\n if (!!value &&\n (value.indexOf(\"-\") > -1 ||\n value.indexOf(\"+\") > 1 ||\n value.indexOf(\"*\") > -1 ||\n value.indexOf(\"^\") > -1 ||\n value.indexOf(\"/\") > -1 ||\n value.indexOf(\"%\") > -1))\n return false;\n if (OperandMaker.isSpaceString(value))\n return false;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value);\n };\n OperandMaker.isBooleanValue = function (value) {\n return (!!value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n OperandMaker.isTwoValueEquals = function (x, y) {\n if (x === \"undefined\")\n x = undefined;\n if (y === \"undefined\")\n y = undefined;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(x, y, true);\n };\n OperandMaker.operatorToString = function (operatorName) {\n var opStr = OperandMaker.signs[operatorName];\n return opStr == null ? operatorName : opStr;\n };\n OperandMaker.unaryFunctions = {\n empty: function (value) {\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(value);\n },\n notempty: function (value) {\n return !OperandMaker.unaryFunctions.empty(value);\n },\n negate: function (value) {\n return !value;\n },\n };\n OperandMaker.binaryFunctions = {\n arithmeticOp: function (operatorName) {\n return function (a, b) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(a) && !OperandMaker.isSpaceString(a)) {\n a = typeof b === \"string\" ? \"\" : 0;\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(b) && !OperandMaker.isSpaceString(b)) {\n b = typeof a === \"string\" ? \"\" : 0;\n }\n var consumer = OperandMaker.binaryFunctions[operatorName];\n return consumer == null ? null : consumer.call(this, a, b);\n };\n },\n and: function (a, b) {\n return a && b;\n },\n or: function (a, b) {\n return a || b;\n },\n plus: function (a, b) {\n return a + b;\n },\n minus: function (a, b) {\n return a - b;\n },\n mul: function (a, b) {\n return a * b;\n },\n div: function (a, b) {\n if (!b)\n return null;\n return a / b;\n },\n mod: function (a, b) {\n if (!b)\n return null;\n return a % b;\n },\n power: function (a, b) {\n return Math.pow(a, b);\n },\n greater: function (left, right) {\n if (left == null || right == null)\n return false;\n return left > right;\n },\n less: function (left, right) {\n if (left == null || right == null)\n return false;\n return left < right;\n },\n greaterorequal: function (left, right) {\n if (OperandMaker.binaryFunctions.equal(left, right))\n return true;\n return OperandMaker.binaryFunctions.greater(left, right);\n },\n lessorequal: function (left, right) {\n if (OperandMaker.binaryFunctions.equal(left, right))\n return true;\n return OperandMaker.binaryFunctions.less(left, right);\n },\n equal: function (left, right) {\n return OperandMaker.isTwoValueEquals(left, right);\n },\n notequal: function (left, right) {\n return !OperandMaker.binaryFunctions.equal(left, right);\n },\n contains: function (left, right) {\n return OperandMaker.binaryFunctions.containsCore(left, right, true);\n },\n notcontains: function (left, right) {\n if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n return OperandMaker.binaryFunctions.containsCore(left, right, false);\n },\n anyof: function (left, right) {\n if (!left && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n if (!left || (!Array.isArray(left) && left.length === 0))\n return false;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n if (!Array.isArray(left))\n return OperandMaker.binaryFunctions.contains(right, left);\n if (!Array.isArray(right))\n return OperandMaker.binaryFunctions.contains(left, right);\n for (var i = 0; i < right.length; i++) {\n if (OperandMaker.binaryFunctions.contains(left, right[i]))\n return true;\n }\n return false;\n },\n allof: function (left, right) {\n if (!left && !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return false;\n if (!Array.isArray(right))\n return OperandMaker.binaryFunctions.contains(left, right);\n for (var i = 0; i < right.length; i++) {\n if (!OperandMaker.binaryFunctions.contains(left, right[i]))\n return false;\n }\n return true;\n },\n containsCore: function (left, right, isContains) {\n if (!left && left !== 0 && left !== false)\n return false;\n if (!left.length) {\n left = left.toString();\n if (typeof right === \"string\" || right instanceof String) {\n left = left.toUpperCase();\n right = right.toUpperCase();\n }\n }\n if (typeof left === \"string\" || left instanceof String) {\n if (!right)\n return false;\n right = right.toString();\n var found = left.indexOf(right) > -1;\n return isContains ? found : !found;\n }\n var rightArray = Array.isArray(right) ? right : [right];\n for (var rIndex = 0; rIndex < rightArray.length; rIndex++) {\n var i = 0;\n right = rightArray[rIndex];\n for (; i < left.length; i++) {\n if (OperandMaker.isTwoValueEquals(left[i], right))\n break;\n }\n if (i == left.length)\n return !isContains;\n }\n return isContains;\n },\n };\n OperandMaker.signs = {\n less: \"<\",\n lessorequal: \"<=\",\n greater: \">\",\n greaterorequal: \">=\",\n equal: \"==\",\n notequal: \"!=\",\n plus: \"+\",\n minus: \"-\",\n mul: \"*\",\n div: \"/\",\n and: \"and\",\n or: \"or\",\n power: \"^\",\n mod: \"%\",\n negate: \"!\",\n };\n return OperandMaker;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/flowpanel.ts\":\n/*!**************************!*\\\n !*** ./src/flowpanel.ts ***!\n \\**************************/\n/*! exports provided: FlowPanelModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return FlowPanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * The flow panel object. It is a container with flow layout where you can mix questions with markdown text.\n *\n */\nvar FlowPanelModel = /** @class */ (function (_super) {\n __extends(FlowPanelModel, _super);\n function FlowPanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"content\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"content\", function () {\n self.onContentChanged();\n });\n return _this;\n }\n FlowPanelModel.prototype.getType = function () {\n return \"flowpanel\";\n };\n FlowPanelModel.prototype.getChildrenLayoutType = function () {\n return \"flow\";\n };\n FlowPanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onContentChanged();\n };\n Object.defineProperty(FlowPanelModel.prototype, \"content\", {\n get: function () {\n return this.getLocalizableStringText(\"content\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"content\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"locContent\", {\n get: function () {\n return this.getLocalizableString(\"content\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"html\", {\n get: function () {\n return this.getPropertyValue(\"html\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"html\", val);\n },\n enumerable: false,\n configurable: true\n });\n FlowPanelModel.prototype.onContentChanged = function () {\n var html = \"\";\n if (!!this.onCustomHtmlProducing) {\n html = this.onCustomHtmlProducing();\n }\n else {\n html = this.produceHtml();\n }\n this.html = html;\n if (!!this.contentChangedCallback)\n this.contentChangedCallback();\n };\n FlowPanelModel.prototype.produceHtml = function () {\n var html = [];\n //contentElementNamePrefix\n var regEx = /{(.*?(element:)[^$].*?)}/g;\n var str = this.content;\n var startIndex = 0;\n var res = null;\n while ((res = regEx.exec(str)) !== null) {\n if (res.index > startIndex) {\n html.push(str.substr(startIndex, res.index - startIndex));\n startIndex = res.index;\n }\n var question = this.getQuestionFromText(res[0]);\n if (!!question) {\n html.push(this.getHtmlForQuestion(question));\n }\n else {\n html.push(str.substr(startIndex, res.index + res[0].length - startIndex));\n }\n startIndex = res.index + res[0].length;\n }\n if (startIndex < str.length) {\n html.push(str.substr(startIndex, str.length - startIndex));\n }\n return html.join(\"\").replace(new RegExp(\"
\", \"g\"), \"
\");\n };\n FlowPanelModel.prototype.getQuestionFromText = function (str) {\n str = str.substr(1, str.length - 2);\n str = str.replace(FlowPanelModel.contentElementNamePrefix, \"\").trim();\n return this.getQuestionByName(str);\n };\n FlowPanelModel.prototype.getHtmlForQuestion = function (question) {\n if (!!this.onGetHtmlForQuestion)\n return this.onGetHtmlForQuestion(question);\n return \"\";\n };\n FlowPanelModel.prototype.getQuestionHtmlId = function (question) {\n return this.name + \"_\" + question.id;\n };\n FlowPanelModel.prototype.onAddElement = function (element, index) {\n _super.prototype.onAddElement.call(this, element, index);\n this.addElementToContent(element);\n element.renderWidth = \"\";\n };\n FlowPanelModel.prototype.onRemoveElement = function (element) {\n var searchStr = this.getElementContentText(element);\n this.content = this.content.replace(searchStr, \"\");\n _super.prototype.onRemoveElement.call(this, element);\n };\n FlowPanelModel.prototype.dragDropMoveElement = function (src, target, targetIndex) { };\n FlowPanelModel.prototype.addElementToContent = function (element) {\n if (this.isLoadingFromJson)\n return;\n var text = this.getElementContentText(element);\n if (!this.insertTextAtCursor(text)) {\n this.content = this.content + text;\n }\n };\n FlowPanelModel.prototype.insertTextAtCursor = function (text, prevName) {\n if (prevName === void 0) { prevName = null; }\n if (!this.isDesignMode ||\n typeof document === \"undefined\" ||\n !window.getSelection)\n return false;\n var sel = window.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n var range = sel.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n var self = this;\n if (self.getContent) {\n var str = self.getContent(prevName);\n this.content = str;\n }\n return true;\n }\n return false;\n };\n FlowPanelModel.prototype.getElementContentText = function (element) {\n return \"{\" + FlowPanelModel.contentElementNamePrefix + element.name + \"}\";\n };\n FlowPanelModel.contentElementNamePrefix = \"element:\";\n return FlowPanelModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_1__[\"PanelModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"flowpanel\", [{ name: \"content:html\", serializationProperty: \"locContent\" }], function () {\n return new FlowPanelModel();\n}, \"panel\");\n\n\n/***/ }),\n\n/***/ \"./src/functionsfactory.ts\":\n/*!*********************************!*\\\n !*** ./src/functionsfactory.ts ***!\n \\*********************************/\n/*! exports provided: FunctionFactory, registerFunction */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return FunctionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return registerFunction; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n\nvar FunctionFactory = /** @class */ (function () {\n function FunctionFactory() {\n this.functionHash = {};\n this.isAsyncHash = {};\n }\n FunctionFactory.prototype.register = function (name, func, isAsync) {\n if (isAsync === void 0) { isAsync = false; }\n this.functionHash[name] = func;\n if (isAsync)\n this.isAsyncHash[name] = true;\n };\n FunctionFactory.prototype.unregister = function (name) {\n delete this.functionHash[name];\n delete this.isAsyncHash[name];\n };\n FunctionFactory.prototype.hasFunction = function (name) {\n return !!this.functionHash[name];\n };\n FunctionFactory.prototype.isAsyncFunction = function (name) {\n return !!this.isAsyncHash[name];\n };\n FunctionFactory.prototype.clear = function () {\n this.functionHash = {};\n };\n FunctionFactory.prototype.getAll = function () {\n var result = [];\n for (var key in this.functionHash) {\n result.push(key);\n }\n return result.sort();\n };\n FunctionFactory.prototype.run = function (name, params, properties) {\n if (properties === void 0) { properties = null; }\n var func = this.functionHash[name];\n if (!func)\n return null;\n var classRunner = {\n func: func,\n };\n if (properties) {\n for (var key in properties) {\n classRunner[key] = properties[key];\n }\n }\n return classRunner.func(params);\n };\n FunctionFactory.Instance = new FunctionFactory();\n return FunctionFactory;\n}());\n\nvar registerFunction = FunctionFactory.Instance.register;\nfunction getParamsAsArray(value, arr) {\n if (value === undefined || value === null)\n return;\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n getParamsAsArray(value[i], arr);\n }\n }\n else {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value)) {\n value = parseFloat(value);\n }\n arr.push(value);\n }\n}\nfunction sum(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = 0;\n for (var i = 0; i < arr.length; i++) {\n res += arr[i];\n }\n return res;\n}\nFunctionFactory.Instance.register(\"sum\", sum);\nfunction min_max(params, isMin) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = undefined;\n for (var i = 0; i < arr.length; i++) {\n if (res === undefined) {\n res = arr[i];\n }\n if (isMin) {\n if (res > arr[i])\n res = arr[i];\n }\n else {\n if (res < arr[i])\n res = arr[i];\n }\n }\n return res;\n}\nfunction min(params) {\n return min_max(params, true);\n}\nFunctionFactory.Instance.register(\"min\", min);\nfunction max(params) {\n return min_max(params, false);\n}\nFunctionFactory.Instance.register(\"max\", max);\nfunction count(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n return arr.length;\n}\nFunctionFactory.Instance.register(\"count\", count);\nfunction avg(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = 0;\n for (var i = 0; i < arr.length; i++) {\n res += arr[i];\n }\n return arr.length > 0 ? res / arr.length : 0;\n}\nFunctionFactory.Instance.register(\"avg\", avg);\nfunction getInArrayParams(params) {\n if (params.length != 2)\n return null;\n var arr = params[0];\n if (!arr)\n return null;\n if (!Array.isArray(arr) && !Array.isArray(Object.keys(arr)))\n return null;\n var name = params[1];\n if (typeof name !== \"string\" && !(name instanceof String))\n return null;\n return { data: arr, name: name };\n}\nfunction calcInArray(params, func) {\n var v = getInArrayParams(params);\n if (!v)\n return undefined;\n var res = undefined;\n if (Array.isArray(v.data)) {\n for (var i = 0; i < v.data.length; i++) {\n var item = v.data[i];\n if (!!item && item[v.name]) {\n res = func(res, item[v.name]);\n }\n }\n }\n else {\n for (var key in v.data) {\n var item = v.data[key];\n if (!!item && item[v.name]) {\n res = func(res, item[v.name]);\n }\n }\n }\n return res;\n}\nfunction sumInArray(params) {\n var res = calcInArray(params, function (res, val) {\n if (res == undefined)\n res = 0;\n return +res + +val;\n });\n return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"sumInArray\", sumInArray);\nfunction minInArray(params) {\n return calcInArray(params, function (res, val) {\n if (res == undefined)\n return val;\n return res < val ? res : val;\n });\n}\nFunctionFactory.Instance.register(\"minInArray\", minInArray);\nfunction maxInArray(params) {\n return calcInArray(params, function (res, val) {\n if (res == undefined)\n return val;\n return res > val ? res : val;\n });\n}\nFunctionFactory.Instance.register(\"maxInArray\", maxInArray);\nfunction countInArray(params) {\n var res = calcInArray(params, function (res, val) {\n if (res == undefined)\n res = 0;\n return res + 1;\n });\n return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"countInArray\", countInArray);\nfunction avgInArray(params) {\n var count = countInArray(params);\n if (count == 0)\n return 0;\n return sumInArray(params) / count;\n}\nFunctionFactory.Instance.register(\"avgInArray\", avgInArray);\nfunction iif(params) {\n if (!params && params.length !== 3)\n return \"\";\n return params[0] ? params[1] : params[2];\n}\nFunctionFactory.Instance.register(\"iif\", iif);\nfunction getDate(params) {\n if (!params && params.length < 1)\n return null;\n if (!params[0])\n return null;\n return new Date(params[0]);\n}\nFunctionFactory.Instance.register(\"getDate\", getDate);\nfunction age(params) {\n if (!params && params.length < 1)\n return null;\n if (!params[0])\n return null;\n var birthDate = new Date(params[0]);\n var today = new Date();\n var age = today.getFullYear() - birthDate.getFullYear();\n var m = today.getMonth() - birthDate.getMonth();\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\n age -= age > 0 ? 1 : 0;\n }\n return age;\n}\nFunctionFactory.Instance.register(\"age\", age);\nfunction isContainerReady(params) {\n if (!params && params.length < 1)\n return false;\n if (!params[0] || !this.survey)\n return false;\n var name = params[0];\n var container = this.survey.getPageByName(name);\n if (!container)\n container = this.survey.getPanelByName(name);\n if (!container)\n return false;\n var questions = container.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].hasErrors(false))\n return false;\n }\n return true;\n}\nFunctionFactory.Instance.register(\"isContainerReady\", isContainerReady);\nfunction isDisplayMode() {\n return this.survey && this.survey.isDisplayMode;\n}\nFunctionFactory.Instance.register(\"isDisplayMode\", isDisplayMode);\nfunction currentDate() {\n return new Date();\n}\nFunctionFactory.Instance.register(\"currentDate\", currentDate);\nfunction today(params) {\n var res = new Date();\n if (Array.isArray(params) && params.length == 1) {\n res.setDate(res.getDate() + params[0]);\n }\n return res;\n}\nFunctionFactory.Instance.register(\"today\", today);\nfunction diffDays(params) {\n if (!Array.isArray(params) || params.length !== 2)\n return 0;\n if (!params[0] || !params[1])\n return 0;\n var date1 = new Date(params[0]);\n var date2 = new Date(params[1]);\n var diffTime = Math.abs(date2 - date1);\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n}\nFunctionFactory.Instance.register(\"diffDays\", diffDays);\n\n\n/***/ }),\n\n/***/ \"./src/helpers.ts\":\n/*!************************!*\\\n !*** ./src/helpers.ts ***!\n \\************************/\n/*! exports provided: Helpers */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return Helpers; });\nvar Helpers = /** @class */ (function () {\n function Helpers() {\n }\n /**\n * A static methods that returns true if a value underfined, null, empty string or empty array.\n * @param value\n */\n Helpers.isValueEmpty = function (value) {\n if (Array.isArray(value) && value.length === 0)\n return true;\n if (!!value && typeof value === \"object\" && value.constructor === Object) {\n for (var key in value) {\n if (!Helpers.isValueEmpty(value[key]))\n return false;\n }\n return true;\n }\n return !value && value !== 0 && value !== false;\n };\n Helpers.isArrayContainsEqual = function (x, y) {\n if (!Array.isArray(x) || !Array.isArray(y))\n return false;\n if (x.length !== y.length)\n return false;\n for (var i = 0; i < x.length; i++) {\n var j = 0;\n for (; j < y.length; j++) {\n if (Helpers.isTwoValueEquals(x[i], y[j]))\n break;\n }\n if (j === y.length)\n return false;\n }\n return true;\n };\n Helpers.isArraysEqual = function (x, y, ignoreOrder) {\n if (ignoreOrder === void 0) { ignoreOrder = false; }\n if (!Array.isArray(x) || !Array.isArray(y))\n return false;\n if (x.length !== y.length)\n return false;\n if (ignoreOrder) {\n var xSorted = [];\n var ySorted = [];\n for (var i = 0; i < x.length; i++) {\n xSorted.push(x[i]);\n ySorted.push(y[i]);\n }\n xSorted.sort();\n ySorted.sort();\n x = xSorted;\n y = ySorted;\n }\n for (var i = 0; i < x.length; i++) {\n if (!Helpers.isTwoValueEquals(x[i], y[i]))\n return false;\n }\n return true;\n };\n Helpers.isTwoValueEquals = function (x, y, ignoreOrder) {\n if (ignoreOrder === void 0) { ignoreOrder = false; }\n if (x === y)\n return true;\n if (Array.isArray(x) && x.length === 0 && typeof y === \"undefined\")\n return true;\n if (Array.isArray(y) && y.length === 0 && typeof x === \"undefined\")\n return true;\n if ((x === undefined || x === null) && y === \"\")\n return true;\n if ((y === undefined || y === null) && x === \"\")\n return true;\n if (typeof x === \"string\" && typeof y == \"string\")\n return x == y;\n if (Helpers.isConvertibleToNumber(x) && Helpers.isConvertibleToNumber(y)) {\n if (parseInt(x) === parseInt(y) && parseFloat(x) === parseFloat(y)) {\n return true;\n }\n }\n if ((!Helpers.isValueEmpty(x) && Helpers.isValueEmpty(y)) ||\n (Helpers.isValueEmpty(x) && !Helpers.isValueEmpty(y)))\n return false;\n if ((x === true || x === false) && typeof y == \"string\") {\n return x.toString() === y.toLocaleLowerCase();\n }\n if ((y === true || y === false) && typeof x == \"string\") {\n return y.toString() === x.toLocaleLowerCase();\n }\n if (!(x instanceof Object) && !(y instanceof Object))\n return x == y;\n if (!(x instanceof Object) || !(y instanceof Object))\n return false;\n if (x[\"equals\"])\n return x.equals(y);\n if (!!x.toJSON && !!y.toJSON && !!x.getType && !!y.getType) {\n if (x.isDiposed || y.isDiposed)\n return false;\n if (x.getType() !== y.getType())\n return false;\n if (!!x.name && x.name !== y.name)\n return false;\n return this.isTwoValueEquals(x.toJSON(), y.toJSON());\n }\n if (Array.isArray(x) && Array.isArray(y))\n return Helpers.isArraysEqual(x, y, ignoreOrder);\n for (var p in x) {\n if (!x.hasOwnProperty(p))\n continue;\n if (!y.hasOwnProperty(p))\n return false;\n if (x[p] === y[p])\n continue;\n if (typeof x[p] !== \"object\")\n return false;\n if (!this.isTwoValueEquals(x[p], y[p]))\n return false;\n }\n for (p in y) {\n if (y.hasOwnProperty(p) && !x.hasOwnProperty(p))\n return false;\n }\n return true;\n };\n Helpers.randomizeArray = function (array) {\n for (var i = array.length - 1; i > 0; i--) {\n var j = Math.floor(Math.random() * (i + 1));\n var temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n return array;\n };\n Helpers.getUnbindValue = function (value) {\n if (!!value && value instanceof Object) {\n //do not return the same object instance!!!\n return JSON.parse(JSON.stringify(value));\n }\n return value;\n };\n Helpers.createCopy = function (obj) {\n var res = {};\n if (!obj)\n return res;\n for (var key in obj) {\n res[key] = obj[key];\n }\n return res;\n };\n Helpers.isConvertibleToNumber = function (value) {\n return (value !== undefined &&\n value !== null &&\n !Array.isArray(value) &&\n !isNaN(value));\n };\n Helpers.isNumber = function (value) {\n if (typeof value == \"string\" &&\n !!value &&\n value.indexOf(\"0x\") == 0 &&\n value.length > 32)\n return false;\n return !isNaN(parseFloat(value)) && isFinite(value);\n };\n Helpers.getMaxLength = function (maxLength, surveyLength) {\n if (maxLength < 0) {\n maxLength = surveyLength;\n }\n return maxLength > 0 ? maxLength : null;\n };\n Helpers.getNumberByIndex = function (index, startIndexStr) {\n if (index < 0)\n return \"\";\n var startIndex = 1;\n var prefix = \"\";\n var postfix = \".\";\n var isNumeric = true;\n var strIndex = \"A\";\n var str = \"\";\n if (!!startIndexStr) {\n str = startIndexStr;\n var ind = str.length - 1;\n var hasDigit = false;\n for (var i = 0; i < str.length; i++) {\n if (Helpers.isCharDigit(str[i])) {\n hasDigit = true;\n break;\n }\n }\n var checkLetter = function () {\n return ((hasDigit && !Helpers.isCharDigit(str[ind])) ||\n Helpers.isCharNotLetterAndDigit(str[ind]));\n };\n while (ind >= 0 && checkLetter())\n ind--;\n var newPostfix = \"\";\n if (ind < str.length - 1) {\n newPostfix = str.substr(ind + 1);\n str = str.substr(0, ind + 1);\n }\n ind = str.length - 1;\n while (ind >= 0) {\n if (checkLetter())\n break;\n ind--;\n if (!hasDigit)\n break;\n }\n strIndex = str.substr(ind + 1);\n prefix = str.substr(0, ind + 1);\n if (parseInt(strIndex))\n startIndex = parseInt(strIndex);\n else if (strIndex.length == 1)\n isNumeric = false;\n if (!!newPostfix || !!prefix) {\n postfix = newPostfix;\n }\n }\n if (isNumeric)\n return prefix + (index + startIndex).toString() + postfix;\n return (prefix + String.fromCharCode(strIndex.charCodeAt(0) + index) + postfix);\n };\n Helpers.isCharNotLetterAndDigit = function (ch) {\n return ch.toUpperCase() == ch.toLowerCase() && !Helpers.isCharDigit(ch);\n };\n Helpers.isCharDigit = function (ch) {\n return ch >= \"0\" && ch <= \"9\";\n };\n return Helpers;\n}());\n\nif (!String.prototype[\"format\"]) {\n String.prototype[\"format\"] = function () {\n var args = arguments;\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != \"undefined\" ? args[number] : match;\n });\n };\n}\n\n\n/***/ }),\n\n/***/ \"./src/itemvalue.ts\":\n/*!**************************!*\\\n !*** ./src/itemvalue.ts ***!\n \\**************************/\n/*! exports provided: ItemValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return ItemValue; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\n\n\n/**\n * Array of ItemValue is used in checkox, dropdown and radiogroup choices, matrix columns and rows.\n * It has two main properties: value and text. If text is empty, value is used for displaying.\n * The text property is localizable and support markdown.\n */\nvar ItemValue = /** @class */ (function (_super) {\n __extends(ItemValue, _super);\n function ItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"itemvalue\"; }\n var _this = _super.call(this) || this;\n _this.typeName = typeName;\n _this.ownerPropertyName = \"\";\n _this.isVisibleValue = true;\n _this.locTextValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](null, true);\n _this.locTextValue.onStrChanged = function (oldValue, newValue) {\n if (newValue == _this.value) {\n newValue = undefined;\n }\n _this.propertyValueChanged(\"text\", oldValue, newValue);\n };\n _this.locTextValue.onGetTextCallback = function (txt) {\n return txt\n ? txt\n : !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(_this.value)\n ? _this.value.toString()\n : null;\n };\n if (text)\n _this.locText.text = text;\n if (!!value && typeof value === \"object\") {\n _this.setData(value);\n }\n else {\n _this.value = value;\n }\n if (_this.getType() != \"itemvalue\") {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(ItemValue, \"Separator\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator = val;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.createArray = function (locOwner) {\n var items = [];\n ItemValue.setupArray(items, locOwner);\n return items;\n };\n ItemValue.setupArray = function (items, locOwner) {\n items.push = function (value) {\n var result = Array.prototype.push.call(this, value);\n value.locOwner = locOwner;\n return result;\n };\n items.unshift = function (value) {\n var result = Array.prototype.unshift.call(this, value);\n value.locOwner = locOwner;\n return result;\n };\n items.splice = function (start, deleteCount) {\n var _a;\n var items = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n items[_i - 2] = arguments[_i];\n }\n var result = (_a = Array.prototype.splice).call.apply(_a, __spreadArray([this,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n for (var i = 0; i < items.length; i++) {\n items[i].locOwner = locOwner;\n }\n return result;\n };\n };\n ItemValue.setData = function (items, values) {\n items.length = 0;\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var item;\n if (typeof value.getType === \"function\") {\n item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(value.getType());\n }\n else {\n item = new ItemValue(null);\n }\n item.setData(value);\n if (!!value.originalItem) {\n item.originalItem = value.originalItem;\n }\n items.push(item);\n }\n };\n ItemValue.getData = function (items) {\n var result = new Array();\n for (var i = 0; i < items.length; i++) {\n result.push(items[i].getData());\n }\n return result;\n };\n ItemValue.getItemByValue = function (items, val) {\n if (!Array.isArray(items))\n return null;\n for (var i = 0; i < items.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(items[i].value, val))\n return items[i];\n }\n return null;\n };\n ItemValue.getTextOrHtmlByValue = function (items, val) {\n var item = ItemValue.getItemByValue(items, val);\n return item !== null ? item.locText.textOrHtml : \"\";\n };\n ItemValue.locStrsChanged = function (items) {\n for (var i = 0; i < items.length; i++) {\n items[i].locText.strChanged();\n }\n };\n ItemValue.runConditionsForItems = function (items, filteredItems, runner, values, properties, useItemExpression) {\n if (useItemExpression === void 0) { useItemExpression = true; }\n return ItemValue.runConditionsForItemsCore(items, filteredItems, runner, values, properties, true, useItemExpression);\n };\n ItemValue.runEnabledConditionsForItems = function (items, runner, values, properties, onItemCallBack) {\n return ItemValue.runConditionsForItemsCore(items, null, runner, values, properties, false, true, onItemCallBack);\n };\n ItemValue.runConditionsForItemsCore = function (items, filteredItems, runner, values, properties, isVisible, useItemExpression, onItemCallBack) {\n if (useItemExpression === void 0) { useItemExpression = true; }\n if (!values) {\n values = {};\n }\n var itemValue = values[\"item\"];\n var choiceValue = values[\"choice\"];\n var hasChanded = false;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n values[\"item\"] = item.value;\n values[\"choice\"] = item.value;\n var itemRunner = useItemExpression && !!item.getConditionRunner\n ? item.getConditionRunner(isVisible)\n : false;\n if (!itemRunner) {\n itemRunner = runner;\n }\n var newValue = true;\n if (itemRunner) {\n newValue = itemRunner.run(values, properties);\n }\n if (newValue && !!onItemCallBack) {\n newValue = onItemCallBack(item);\n }\n if (!!filteredItems && newValue) {\n filteredItems.push(item);\n }\n var oldValue = isVisible ? item.isVisible : item.isEnabled;\n if (newValue != oldValue) {\n hasChanded = true;\n if (isVisible) {\n if (!!item.setIsVisible)\n item.setIsVisible(newValue);\n }\n else {\n if (!!item.setIsEnabled)\n item.setIsEnabled(newValue);\n }\n }\n }\n if (itemValue) {\n values[\"item\"] = itemValue;\n }\n else {\n delete values[\"item\"];\n }\n if (choiceValue) {\n values[\"choice\"] = choiceValue;\n }\n else {\n delete values[\"choice\"];\n }\n return hasChanded;\n };\n ItemValue.prototype.onCreating = function () { };\n ItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"itemvalue\";\n };\n ItemValue.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.locOwner && !!this.locOwner[\"getSurvey\"]\n ? this.locOwner.getSurvey()\n : null;\n };\n ItemValue.prototype.getLocale = function () {\n return (this.locText && this.locText.locale) || \"\";\n };\n Object.defineProperty(ItemValue.prototype, \"locText\", {\n get: function () {\n return this.locTextValue;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.setLocText = function (locText) {\n this.locTextValue = locText;\n };\n Object.defineProperty(ItemValue.prototype, \"locOwner\", {\n get: function () {\n return this.locText.owner;\n },\n set: function (value) {\n this.locText.owner = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (newValue) {\n var text = undefined;\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(newValue)) {\n var str = newValue.toString();\n var index = str.indexOf(_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueSeparator);\n if (index > -1) {\n newValue = str.slice(0, index);\n text = str.slice(index + 1);\n }\n }\n this.setPropertyValue(\"value\", newValue);\n if (!!text) {\n this.text = text;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"hasText\", {\n get: function () {\n return this.locText.pureText ? true : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"pureText\", {\n get: function () {\n return this.locText.pureText;\n },\n set: function (val) {\n this.text = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"text\", {\n get: function () {\n return this.locText.calculatedText; //TODO: it will be correct to use this.locText.text, however it would require a lot of rewriting in Creator\n },\n set: function (newText) {\n this.locText.text = newText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"calculatedText\", {\n get: function () {\n return this.locText.calculatedText;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.getData = function () {\n var json = this.toJSON();\n if (!!json[\"value\"] && !!json[\"value\"][\"pos\"]) {\n delete json[\"value\"][\"pos\"];\n }\n if (Object.keys(json).length == 1 && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(json[\"value\"]))\n return this.value;\n return json;\n };\n ItemValue.prototype.toJSON = function () {\n var res = {};\n var properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(this.getType());\n if (!properties || properties.length == 0) {\n properties = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getProperties(\"itemvalue\");\n }\n var jsoObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n for (var i = 0; i < properties.length; i++) {\n jsoObj.valueToJson(this, res, properties[i]);\n }\n return res;\n };\n ItemValue.prototype.setData = function (value) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value))\n return;\n if (typeof value.value !== \"undefined\") {\n var json = value;\n if (typeof value.toJSON === \"function\") {\n json = value.toJSON();\n }\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, this);\n }\n else {\n this.value = value;\n }\n };\n Object.defineProperty(ItemValue.prototype, \"visibleIf\", {\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"enableIf\", {\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"isVisible\", {\n get: function () {\n return this.isVisibleValue;\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.setIsVisible = function (val) {\n this.isVisibleValue = val;\n };\n Object.defineProperty(ItemValue.prototype, \"isEnabled\", {\n get: function () {\n return this.getPropertyValue(\"isEnabled\", true);\n },\n enumerable: false,\n configurable: true\n });\n ItemValue.prototype.setIsEnabled = function (val) {\n this.setPropertyValue(\"isEnabled\", val);\n };\n ItemValue.prototype.addUsedLocales = function (locales) {\n this.AddLocStringToUsedLocales(this.locTextValue, locales);\n };\n ItemValue.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n if (name === \"value\" && !this.hasText) {\n this.locText.onChanged();\n }\n var funcName = \"itemValuePropertyChanged\";\n if (!this.locOwner || !this.locOwner[funcName])\n return;\n this.locOwner[funcName](this, name, oldValue, newValue);\n };\n ItemValue.prototype.getConditionRunner = function (isVisible) {\n if (isVisible)\n return this.getVisibleConditionRunner();\n return this.getEnableConditionRunner();\n };\n ItemValue.prototype.getVisibleConditionRunner = function () {\n if (!this.visibleIf)\n return null;\n if (!this.visibleConditionRunner)\n this.visibleConditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.visibleIf);\n this.visibleConditionRunner.expression = this.visibleIf;\n return this.visibleConditionRunner;\n };\n ItemValue.prototype.getEnableConditionRunner = function () {\n if (!this.enableIf)\n return null;\n if (!this.enableConditionRunner)\n this.enableConditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.enableIf);\n this.enableConditionRunner.expression = this.enableIf;\n return this.enableConditionRunner;\n };\n return ItemValue;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].createItemValue = function (source, type) {\n var item = null;\n if (!!type) {\n item = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"].metaData.createClass(type, {});\n }\n else if (typeof source.getType === \"function\") {\n item = new ItemValue(null, undefined, source.getType());\n }\n else {\n item = new ItemValue(null);\n }\n item.setData(source);\n return item;\n};\n_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"].itemValueLocStrChanged = function (arr) {\n ItemValue.locStrsChanged(arr);\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObjectProperty\"].getItemValuesDefaultValue = function (val) {\n var res = new Array();\n ItemValue.setData(res, val || []);\n return res;\n};\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"itemvalue\", [\n \"!value\",\n {\n name: \"text\",\n serializationProperty: \"locText\",\n },\n { name: \"visibleIf:condition\", showMode: \"form\" },\n { name: \"enableIf:condition\", showMode: \"form\" },\n], function (value) { return new ItemValue(value); });\n\n\n/***/ }),\n\n/***/ \"./src/jsonobject.ts\":\n/*!***************************!*\\\n !*** ./src/jsonobject.ts ***!\n \\***************************/\n/*! exports provided: property, propertyArray, JsonObjectProperty, CustomPropertiesCollection, JsonMetadataClass, JsonMetadata, JsonError, JsonUnknownPropertyError, JsonMissingTypeErrorBase, JsonMissingTypeError, JsonIncorrectTypeError, JsonRequiredPropertyError, JsonObject, Serializer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return property; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return propertyArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return JsonObjectProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomPropertiesCollection\", function() { return CustomPropertiesCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return JsonMetadataClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return JsonMetadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return JsonError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return JsonUnknownPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return JsonMissingTypeErrorBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return JsonMissingTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return JsonIncorrectTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return JsonRequiredPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return JsonObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return Serializer; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\nfunction ensureLocString(target, options, key) {\n var locString = target.getLocalizableString(key);\n if (!locString) {\n locString = target.createLocalizableString(key, target, true);\n if (typeof options.localizable === \"object\" &&\n typeof options.localizable.onGetTextCallback === \"function\") {\n locString.onGetTextCallback = options.localizable.onGetTextCallback;\n }\n }\n}\nfunction property(options) {\n return function (target, key) {\n if (!options || !options.localizable) {\n Object.defineProperty(target, key, {\n get: function () {\n var value = this.getPropertyValue(key);\n if (value !== undefined) {\n return value;\n }\n if (!!options && options.defaultValue === false)\n return false;\n return !!options\n ? options.defaultValue || this[options.defaultSource]\n : undefined;\n },\n set: function (val) {\n this.setPropertyValue(key, val);\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n }\n else {\n Object.defineProperty(target, key, {\n get: function () {\n ensureLocString(this, options, key);\n return (this.getLocalizableStringText(key) ||\n options.defaultValue ||\n this[options.defaultSource]);\n },\n set: function (val) {\n ensureLocString(this, options, key);\n this.setLocalizableStringText(key, val);\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n Object.defineProperty(target, options.localizable === true\n ? \"loc\" + key.charAt(0).toUpperCase() + key.slice(1)\n : options.localizable.name, {\n get: function () {\n ensureLocString(this, options, key);\n return this.getLocalizableString(key);\n },\n });\n }\n };\n}\nfunction ensureArray(target, options, key) {\n target.ensureArray(key, !!options ? options.onPush : null, !!options ? options.onRemove : null);\n}\nfunction propertyArray(options) {\n return function (target, key) {\n Object.defineProperty(target, key, {\n get: function () {\n ensureArray(this, options, key);\n return this.getPropertyValue(key);\n },\n set: function (val) {\n ensureArray(this, options, key);\n var arr = this.getPropertyValue(key);\n if (val === arr) {\n return;\n }\n if (arr) {\n arr.splice.apply(arr, __spreadArray([0, arr.length], (val || [])));\n }\n else {\n this.setPropertyValue(key, val);\n }\n if (!!options && options.onSet) {\n options.onSet(val, this);\n }\n },\n });\n };\n}\n/**\n * Contains information about a property of a survey element (page, panel, questions, and etc).\n * @see addProperty\n * @see removeProperty\n * @see [Add Properties](https://surveyjs.io/Documentation/Survey-Creator#addproperties)\n * @see [Remove Properties](https://surveyjs.io/Documentation/Survey-Creator#removeproperties)\n */\nvar JsonObjectProperty = /** @class */ (function () {\n function JsonObjectProperty(classInfo, name, isRequired) {\n if (isRequired === void 0) { isRequired = false; }\n this.name = name;\n this.typeValue = null;\n this.choicesValue = null;\n this.baseValue = null;\n this.isRequiredValue = false;\n this.isUniqueValue = false;\n this.readOnlyValue = null;\n this.visibleValue = null;\n this.isLocalizableValue = null;\n this.choicesfunc = null;\n this.dependedProperties = null;\n this.isSerializable = true;\n this.isLightSerializable = true;\n this.isCustom = false;\n this.isDynamicChoices = false; //TODO obsolete, use dependsOn attribute\n this.isBindable = false;\n this.className = null;\n this.alternativeName = null;\n this.classNamePart = null;\n this.baseClassName = null;\n this.defaultValueValue = null;\n this.serializationProperty = null;\n this.displayName = null;\n this.category = \"\";\n this.categoryIndex = -1;\n this.visibleIndex = -1;\n this.nextToProperty = null;\n this.showMode = null;\n this.maxLength = -1;\n this.layout = null;\n this.onGetValue = null;\n this.onSetValue = null;\n this.visibleIf = null;\n this.isArray = false;\n this.classInfoValue = classInfo;\n this.isRequiredValue = isRequired;\n this.idValue = JsonObjectProperty.Index++;\n }\n Object.defineProperty(JsonObjectProperty.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"classInfo\", {\n get: function () {\n return this.classInfoValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"type\", {\n get: function () {\n return this.typeValue ? this.typeValue : \"string\";\n },\n set: function (value) {\n if (value === \"itemvalues\")\n value = \"itemvalue[]\";\n this.typeValue = value;\n if (this.typeValue.indexOf(\"[]\") === this.typeValue.length - 2) {\n this.isArray = true;\n this.className = this.typeValue.substr(0, this.typeValue.length - 2);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isRequired\", {\n get: function () {\n return this.isRequiredValue;\n },\n set: function (val) {\n this.isRequiredValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isUnique\", {\n get: function () {\n return this.isUniqueValue;\n },\n set: function (val) {\n this.isUniqueValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseGetValue\", {\n get: function () {\n return this.onGetValue || this.serializationProperty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"defaultValue\", {\n get: function () {\n var result = this.defaultValueValue;\n if (!!JsonObjectProperty.getItemValuesDefaultValue &&\n JsonObject.metaData.isDescendantOf(this.className, \"itemvalue\")) {\n result = JsonObjectProperty.getItemValuesDefaultValue(this.defaultValueValue || []);\n }\n return result;\n },\n set: function (newValue) {\n this.defaultValueValue = newValue;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.isDefaultValue = function (value) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(this.defaultValue))\n return this.defaultValue == value;\n return ((value === false && (this.type == \"boolean\" || this.type == \"switch\")) ||\n value === \"\" ||\n _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(value));\n };\n JsonObjectProperty.prototype.getValue = function (obj) {\n if (this.onGetValue)\n return this.onGetValue(obj);\n if (this.serializationProperty && !!obj[this.serializationProperty])\n return obj[this.serializationProperty].getJson();\n return obj[this.name];\n };\n JsonObjectProperty.prototype.getPropertyValue = function (obj) {\n if (this.isLocalizable) {\n return !!obj[this.serializationProperty]\n ? obj[this.serializationProperty].text\n : null;\n }\n return this.getValue(obj);\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseSetValue\", {\n get: function () {\n return this.onSetValue || this.serializationProperty;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) {\n if (this.onSetValue) {\n this.onSetValue(obj, value, jsonConv);\n }\n else {\n if (this.serializationProperty && !!obj[this.serializationProperty])\n obj[this.serializationProperty].setJson(value);\n else {\n if (value && typeof value === \"string\") {\n if (this.type == \"number\") {\n value = parseInt(value);\n }\n if (this.type == \"boolean\" || this.type == \"switch\") {\n value = value.toLowerCase() === \"true\";\n }\n }\n obj[this.name] = value;\n }\n }\n };\n JsonObjectProperty.prototype.getObjType = function (objType) {\n if (!this.classNamePart)\n return objType;\n return objType.replace(this.classNamePart, \"\");\n };\n JsonObjectProperty.prototype.getClassName = function (className) {\n if (className)\n className = className.toLowerCase();\n return this.classNamePart && className.indexOf(this.classNamePart) < 0\n ? className + this.classNamePart\n : className;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"choices\", {\n /**\n * Depricated, please use getChoices\n */\n get: function () {\n return this.getChoices(null);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasChoices\", {\n get: function () {\n return !!this.choicesValue || !!this.choicesfunc;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.getChoices = function (obj, choicesCallback) {\n if (choicesCallback === void 0) { choicesCallback = null; }\n if (this.choicesValue != null)\n return this.choicesValue;\n if (this.choicesfunc != null)\n return this.choicesfunc(obj, choicesCallback);\n return null;\n };\n JsonObjectProperty.prototype.setChoices = function (value, valueFunc) {\n if (valueFunc === void 0) { valueFunc = null; }\n this.choicesValue = value;\n this.choicesfunc = valueFunc;\n };\n JsonObjectProperty.prototype.getBaseValue = function () {\n if (!this.baseValue)\n return \"\";\n if (typeof this.baseValue == \"function\")\n return this.baseValue();\n return this.baseValue;\n };\n JsonObjectProperty.prototype.setBaseValue = function (val) {\n this.baseValue = val;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"readOnly\", {\n get: function () {\n return this.readOnlyValue != null ? this.readOnlyValue : false;\n },\n set: function (val) {\n this.readOnlyValue = val;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.isVisible = function (layout, obj) {\n if (obj === void 0) { obj = null; }\n var isLayout = !this.layout || this.layout == layout;\n if (!this.visible || !isLayout)\n return false;\n if (!!this.visibleIf && !!obj)\n return this.visibleIf(obj);\n return true;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"visible\", {\n get: function () {\n return this.visibleValue != null ? this.visibleValue : true;\n },\n set: function (val) {\n this.visibleValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isLocalizable\", {\n get: function () {\n return this.isLocalizableValue != null ? this.isLocalizableValue : false;\n },\n set: function (val) {\n this.isLocalizableValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"dataList\", {\n get: function () {\n return Array.isArray(this.dataListValue) ? this.dataListValue : [];\n },\n set: function (val) {\n this.dataListValue = val;\n },\n enumerable: false,\n configurable: true\n });\n JsonObjectProperty.prototype.mergeWith = function (prop) {\n var valuesNames = JsonObjectProperty.mergableValues;\n for (var i = 0; i < valuesNames.length; i++) {\n this.mergeValue(prop, valuesNames[i]);\n }\n };\n JsonObjectProperty.prototype.addDependedProperty = function (name) {\n if (!this.dependedProperties) {\n this.dependedProperties = [];\n }\n if (this.dependedProperties.indexOf(name) < 0) {\n this.dependedProperties.push(name);\n }\n };\n JsonObjectProperty.prototype.getDependedProperties = function () {\n return !!this.dependedProperties ? this.dependedProperties : [];\n };\n JsonObjectProperty.prototype.schemaType = function () {\n if (!!this.className)\n return \"array\";\n if (!!this.baseClassName)\n return \"array\";\n if (this.type == \"boolean\" || this.type == \"number\")\n return this.type;\n return \"string\";\n };\n JsonObjectProperty.prototype.mergeValue = function (prop, valueName) {\n if (this[valueName] == null && prop[valueName] != null) {\n this[valueName] = prop[valueName];\n }\n };\n JsonObjectProperty.Index = 1;\n JsonObjectProperty.mergableValues = [\n \"typeValue\",\n \"choicesValue\",\n \"baseValue\",\n \"readOnlyValue\",\n \"visibleValue\",\n \"isSerializable\",\n \"isLightSerializable\",\n \"isCustom\",\n \"isBindable\",\n \"isUnique\",\n \"isDynamicChoices\",\n \"isLocalizableValue\",\n \"className\",\n \"alternativeName\",\n \"layout\",\n \"classNamePart\",\n \"baseClassName\",\n \"defaultValue\",\n \"serializationProperty\",\n \"onGetValue\",\n \"onSetValue\",\n \"displayName\",\n \"category\",\n \"categoryIndex\",\n \"visibleIndex\",\n \"nextToProperty\",\n \"showMode\",\n \"dependedProperties\",\n \"visibleIf\",\n \"onPropertyEditorUpdate\",\n \"maxLength\",\n \"maxValue\",\n \"minValue\",\n \"dataListValue\",\n ];\n return JsonObjectProperty;\n}());\n\nvar CustomPropertiesCollection = /** @class */ (function () {\n function CustomPropertiesCollection() {\n }\n CustomPropertiesCollection.addProperty = function (className, property) {\n className = className.toLowerCase();\n var props = CustomPropertiesCollection.properties;\n if (!props[className]) {\n props[className] = [];\n }\n props[className].push(property);\n };\n CustomPropertiesCollection.removeProperty = function (className, propertyName) {\n className = className.toLowerCase();\n var props = CustomPropertiesCollection.properties;\n if (!props[className])\n return;\n var properties = props[className];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].name == propertyName) {\n props[className].splice(i, 1);\n break;\n }\n }\n };\n CustomPropertiesCollection.addClass = function (className, parentClassName) {\n className = className.toLowerCase();\n if (parentClassName) {\n parentClassName = parentClassName.toLowerCase();\n }\n CustomPropertiesCollection.parentClasses[className] = parentClassName;\n };\n CustomPropertiesCollection.getProperties = function (className) {\n className = className.toLowerCase();\n var res = [];\n var props = CustomPropertiesCollection.properties;\n while (className) {\n var properties = props[className];\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n res.push(properties[i]);\n }\n }\n className = CustomPropertiesCollection.parentClasses[className];\n }\n return res;\n };\n CustomPropertiesCollection.createProperties = function (obj) {\n if (!obj || !obj.getType)\n return;\n CustomPropertiesCollection.createPropertiesCore(obj, obj.getType());\n };\n CustomPropertiesCollection.createPropertiesCore = function (obj, className) {\n var props = CustomPropertiesCollection.properties;\n if (props[className]) {\n CustomPropertiesCollection.createPropertiesInObj(obj, props[className]);\n }\n var parentClass = CustomPropertiesCollection.parentClasses[className];\n if (parentClass) {\n CustomPropertiesCollection.createPropertiesCore(obj, parentClass);\n }\n };\n CustomPropertiesCollection.createPropertiesInObj = function (obj, properties) {\n for (var i = 0; i < properties.length; i++) {\n CustomPropertiesCollection.createPropertyInObj(obj, properties[i]);\n }\n };\n CustomPropertiesCollection.createPropertyInObj = function (obj, prop) {\n if (obj[prop.name] || obj.hasOwnProperty(prop.name))\n return;\n if (prop.isLocalizable &&\n prop.serializationProperty &&\n !obj[prop.serializationProperty] &&\n obj.createCustomLocalizableObj) {\n obj.createCustomLocalizableObj(prop.name);\n var locDesc = {\n get: function () {\n return obj.getLocalizableString(prop.name);\n },\n };\n Object.defineProperty(obj, prop.serializationProperty, locDesc);\n var desc = {\n get: function () {\n return obj.getLocalizableStringText(prop.name, prop.defaultValue);\n },\n set: function (v) {\n obj.setLocalizableStringText(prop.name, v);\n },\n };\n Object.defineProperty(obj, prop.name, desc);\n }\n else {\n var defaultValue = prop.defaultValue;\n var isArrayProp = false;\n if (typeof obj.createNewArray === \"function\") {\n if (JsonObject.metaData.isDescendantOf(prop.className, \"itemvalue\")) {\n obj.createNewArray(prop.name, function (item) {\n item.locOwner = obj;\n item.ownerPropertyName = prop.name;\n });\n isArrayProp = true;\n }\n //It is a simple array property\n if (prop.type === \"multiplevalues\") {\n obj.createNewArray(prop.name);\n isArrayProp = true;\n }\n if (isArrayProp) {\n if (Array.isArray(defaultValue)) {\n obj.setPropertyValue(prop.name, defaultValue);\n }\n defaultValue = null;\n }\n }\n if (!!obj.getPropertyValue && !!obj.setPropertyValue) {\n var desc = {\n get: function () {\n if (!!prop.onGetValue) {\n return prop.onGetValue(obj);\n }\n return obj.getPropertyValue(prop.name, defaultValue);\n },\n set: function (v) {\n if (!!prop.onSetValue) {\n prop.onSetValue(obj, v, null);\n }\n else {\n obj.setPropertyValue(prop.name, v);\n }\n },\n };\n Object.defineProperty(obj, prop.name, desc);\n }\n }\n };\n CustomPropertiesCollection.properties = {};\n CustomPropertiesCollection.parentClasses = {};\n return CustomPropertiesCollection;\n}());\n\nvar JsonMetadataClass = /** @class */ (function () {\n function JsonMetadataClass(name, properties, creator, parentName) {\n if (creator === void 0) { creator = null; }\n if (parentName === void 0) { parentName = null; }\n this.name = name;\n this.creator = creator;\n this.parentName = parentName;\n this.properties = null;\n name = name.toLowerCase();\n if (this.parentName) {\n this.parentName = this.parentName.toLowerCase();\n CustomPropertiesCollection.addClass(name, this.parentName);\n }\n this.properties = new Array();\n for (var i = 0; i < properties.length; i++) {\n var prop = this.createProperty(properties[i]);\n if (prop) {\n this.properties.push(prop);\n }\n }\n }\n JsonMetadataClass.prototype.find = function (name) {\n for (var i = 0; i < this.properties.length; i++) {\n if (this.properties[i].name == name)\n return this.properties[i];\n }\n return null;\n };\n JsonMetadataClass.prototype.createProperty = function (propInfo) {\n var propertyName = typeof propInfo === \"string\" ? propInfo : propInfo.name;\n if (!propertyName)\n return;\n var propertyType = null;\n var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol);\n if (typeIndex > -1) {\n propertyType = propertyName.substring(typeIndex + 1);\n propertyName = propertyName.substring(0, typeIndex);\n }\n var isRequired = this.getIsPropertyNameRequired(propertyName) || !!propInfo.isRequired;\n propertyName = this.getPropertyName(propertyName);\n var prop = new JsonObjectProperty(this, propertyName, isRequired);\n if (propertyType) {\n prop.type = propertyType;\n }\n if (typeof propInfo === \"object\") {\n if (propInfo.type) {\n prop.type = propInfo.type;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.default)) {\n prop.defaultValue = propInfo.default;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isSerializable)) {\n prop.isSerializable = propInfo.isSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isLightSerializable)) {\n prop.isLightSerializable = propInfo.isLightSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.maxLength)) {\n prop.maxLength = propInfo.maxLength;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.displayName)) {\n prop.displayName = propInfo.displayName;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.category)) {\n prop.category = propInfo.category;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.categoryIndex)) {\n prop.categoryIndex = propInfo.categoryIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.nextToProperty)) {\n prop.nextToProperty = propInfo.nextToProperty;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.visibleIndex)) {\n prop.visibleIndex = propInfo.visibleIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.showMode)) {\n prop.showMode = propInfo.showMode;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.maxValue)) {\n prop.maxValue = propInfo.maxValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.minValue)) {\n prop.minValue = propInfo.minValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.dataList)) {\n prop.dataList = propInfo.dataList;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isDynamicChoices)) {\n prop.isDynamicChoices = propInfo.isDynamicChoices;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isBindable)) {\n prop.isBindable = propInfo.isBindable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(propInfo.isUnique)) {\n prop.isUnique = propInfo.isUnique;\n }\n if (propInfo.visible === true || propInfo.visible === false) {\n prop.visible = propInfo.visible;\n }\n if (!!propInfo.visibleIf) {\n prop.visibleIf = propInfo.visibleIf;\n }\n if (!!propInfo.onPropertyEditorUpdate) {\n prop.onPropertyEditorUpdate = propInfo.onPropertyEditorUpdate;\n }\n if (propInfo.readOnly === true) {\n prop.readOnly = true;\n }\n if (propInfo.choices) {\n var choicesFunc = typeof propInfo.choices === \"function\" ? propInfo.choices : null;\n var choicesValue = typeof propInfo.choices !== \"function\" ? propInfo.choices : null;\n prop.setChoices(choicesValue, choicesFunc);\n }\n if (!!propInfo.baseValue) {\n prop.setBaseValue(propInfo.baseValue);\n }\n if (propInfo.onGetValue) {\n prop.onGetValue = propInfo.onGetValue;\n }\n if (propInfo.onSetValue) {\n prop.onSetValue = propInfo.onSetValue;\n }\n if (propInfo.isLocalizable) {\n propInfo.serializationProperty = \"loc\" + prop.name;\n }\n if (propInfo.serializationProperty) {\n prop.serializationProperty = propInfo.serializationProperty;\n var s;\n if (prop.serializationProperty &&\n prop.serializationProperty.indexOf(\"loc\") == 0) {\n prop.isLocalizable = true;\n }\n }\n if (propInfo.isLocalizable) {\n prop.isLocalizable = propInfo.isLocalizable;\n }\n if (propInfo.className) {\n prop.className = propInfo.className;\n }\n if (propInfo.baseClassName) {\n prop.baseClassName = propInfo.baseClassName;\n }\n if (propInfo.classNamePart) {\n prop.classNamePart = propInfo.classNamePart;\n }\n if (propInfo.alternativeName) {\n prop.alternativeName = propInfo.alternativeName;\n }\n if (propInfo.layout) {\n prop.layout = propInfo.layout;\n }\n if (propInfo.dependsOn) {\n this.addDependsOnProperties(prop, propInfo.dependsOn);\n }\n }\n return prop;\n };\n JsonMetadataClass.prototype.addDependsOnProperties = function (prop, dependsOn) {\n if (Array.isArray(dependsOn)) {\n for (var i = 0; i < dependsOn.length; i++) {\n this.addDependsOnProperty(prop, dependsOn[i]);\n }\n }\n else {\n this.addDependsOnProperty(prop, dependsOn);\n }\n };\n JsonMetadataClass.prototype.addDependsOnProperty = function (prop, dependsOn) {\n var property = this.find(dependsOn);\n if (!property) {\n property = Serializer.findProperty(this.parentName, dependsOn);\n }\n if (!property)\n return;\n property.addDependedProperty(prop.name);\n };\n JsonMetadataClass.prototype.getIsPropertyNameRequired = function (propertyName) {\n return (propertyName.length > 0 &&\n propertyName[0] == JsonMetadataClass.requiredSymbol);\n };\n JsonMetadataClass.prototype.getPropertyName = function (propertyName) {\n if (!this.getIsPropertyNameRequired(propertyName))\n return propertyName;\n propertyName = propertyName.slice(1);\n return propertyName;\n };\n JsonMetadataClass.requiredSymbol = \"!\";\n JsonMetadataClass.typeSymbol = \":\";\n return JsonMetadataClass;\n}());\n\n/**\n * The metadata object. It contains object properties' runtime information and allows you to modify it.\n */\nvar JsonMetadata = /** @class */ (function () {\n function JsonMetadata() {\n this.classes = {};\n this.alternativeNames = {};\n this.childrenClasses = {};\n this.classProperties = {};\n this.classHashProperties = {};\n }\n JsonMetadata.prototype.getObjPropertyValue = function (obj, name) {\n if (this.isObjWrapper(obj)) {\n var orignalObj = obj.getOriginalObj();\n var prop = Serializer.findProperty(orignalObj.getType(), name);\n if (!!prop)\n return this.getObjPropertyValueCore(orignalObj, prop);\n }\n var prop = Serializer.findProperty(obj.getType(), name);\n if (!prop)\n return obj[name];\n return this.getObjPropertyValueCore(obj, prop);\n };\n JsonMetadata.prototype.setObjPropertyValue = function (obj, name, val) {\n if (!!obj[name] && !!obj[name].setJson) {\n obj[name].setJson(val);\n }\n else {\n obj[name] = val;\n }\n };\n JsonMetadata.prototype.getObjPropertyValueCore = function (obj, prop) {\n if (!prop.isSerializable)\n return obj[prop.name];\n if (prop.isLocalizable) {\n if (prop.isArray)\n return obj[prop.name];\n if (!!prop.serializationProperty)\n return obj[prop.serializationProperty].text;\n }\n return obj.getPropertyValue(prop.name);\n };\n JsonMetadata.prototype.isObjWrapper = function (obj) {\n return !!obj.getOriginalObj && !!obj.getOriginalObj();\n };\n JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) {\n if (creator === void 0) { creator = null; }\n if (parentName === void 0) { parentName = null; }\n name = name.toLowerCase();\n var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName);\n this.classes[name] = metaDataClass;\n if (parentName) {\n parentName = parentName.toLowerCase();\n var children = this.childrenClasses[parentName];\n if (!children) {\n this.childrenClasses[parentName] = [];\n }\n this.childrenClasses[parentName].push(metaDataClass);\n }\n return metaDataClass;\n };\n JsonMetadata.prototype.removeClass = function (name) {\n var metaClass = this.findClass(name);\n if (!metaClass)\n return;\n delete this.classes[metaClass.name];\n if (!!metaClass.parentName) {\n var index = this.childrenClasses[metaClass.parentName].indexOf(metaClass);\n if (index > -1) {\n this.childrenClasses[metaClass.parentName].splice(index, 1);\n }\n }\n };\n JsonMetadata.prototype.overrideClassCreatore = function (name, creator) {\n this.overrideClassCreator(name, creator);\n };\n JsonMetadata.prototype.overrideClassCreator = function (name, creator) {\n name = name.toLowerCase();\n var metaDataClass = this.findClass(name);\n if (metaDataClass) {\n metaDataClass.creator = creator;\n }\n };\n JsonMetadata.prototype.getProperties = function (className) {\n var metaClass = this.findClass(className);\n if (!metaClass)\n return [];\n var properties = this.classProperties[metaClass.name];\n if (!!properties)\n return properties;\n this.fillPropertiesForClass(metaClass.name);\n return this.classProperties[metaClass.name];\n };\n JsonMetadata.prototype.getHashProperties = function (className) {\n var metaClass = this.findClass(className);\n if (!metaClass)\n return {};\n var properties = this.classHashProperties[metaClass.name];\n if (!!properties)\n return properties;\n this.fillPropertiesForClass(metaClass.name);\n return this.classHashProperties[metaClass.name];\n };\n JsonMetadata.prototype.fillPropertiesForClass = function (className) {\n var properties = new Array();\n var hashProperties = {};\n this.fillProperties(className, properties, hashProperties);\n this.classProperties[className] = properties;\n this.classHashProperties[className] = hashProperties;\n };\n JsonMetadata.prototype.getPropertiesByObj = function (obj) {\n if (!obj || !obj.getType)\n return [];\n var res = {};\n var props = this.getProperties(obj.getType());\n for (var i = 0; i < props.length; i++) {\n res[props[i].name] = props[i];\n }\n var dynamicProps = !!obj.getDynamicType\n ? this.getProperties(obj.getDynamicType())\n : null;\n if (dynamicProps && dynamicProps.length > 0) {\n for (var i = 0; i < dynamicProps.length; i++) {\n var dProp = dynamicProps[i];\n if (!!res[dProp.name])\n continue;\n res[dProp.name] = dProp;\n }\n }\n return Object.keys(res).map(function (key) { return res[key]; });\n };\n JsonMetadata.prototype.getDynamicPropertiesByObj = function (obj, dynamicType) {\n if (dynamicType === void 0) { dynamicType = null; }\n if (!obj || !obj.getType || (!obj.getDynamicType && !dynamicType))\n return [];\n var dType = !!dynamicType ? dynamicType : obj.getDynamicType();\n if (!dType)\n return [];\n var dynamicProps = this.getProperties(dType);\n if (!dynamicProps || dynamicProps.length == 0)\n return [];\n var hash = {};\n var props = this.getProperties(obj.getType());\n for (var i = 0; i < props.length; i++) {\n hash[props[i].name] = props[i];\n }\n var res = [];\n for (var i = 0; i < dynamicProps.length; i++) {\n var dProp = dynamicProps[i];\n if (!hash[dProp.name]) {\n res.push(dProp);\n }\n }\n return res;\n };\n JsonMetadata.prototype.hasOriginalProperty = function (obj, propName) {\n return !!this.getOriginalProperty(obj, propName);\n };\n JsonMetadata.prototype.getOriginalProperty = function (obj, propName) {\n var res = this.findProperty(obj.getType(), propName);\n if (!!res)\n return res;\n if (this.isObjWrapper(obj))\n return this.findProperty(obj.getOriginalObj().getType(), propName);\n return null;\n };\n JsonMetadata.prototype.findProperty = function (className, propertyName) {\n var hash = this.getHashProperties(className);\n var res = hash[propertyName];\n return !!res ? res : null;\n };\n JsonMetadata.prototype.findProperties = function (className, propertyNames) {\n var result = [];\n var hash = this.getHashProperties(className);\n for (var i = 0; i < propertyNames.length; i++) {\n var prop = hash[propertyNames[i]];\n if (prop) {\n result.push(prop);\n }\n }\n return result;\n };\n JsonMetadata.prototype.getAllPropertiesByName = function (propertyName) {\n var res = new Array();\n var classes = this.getAllClasses();\n for (var i = 0; i < classes.length; i++) {\n var classInfo = this.findClass(classes[i]);\n for (var j = 0; j < classInfo.properties.length; j++) {\n if (classInfo.properties[j].name == propertyName) {\n res.push(classInfo.properties[j]);\n break;\n }\n }\n }\n return res;\n };\n JsonMetadata.prototype.getAllClasses = function () {\n var res = new Array();\n for (var name in this.classes) {\n res.push(name);\n }\n return res;\n };\n JsonMetadata.prototype.createClass = function (name, json) {\n if (json === void 0) { json = undefined; }\n name = name.toLowerCase();\n var metaDataClass = this.findClass(name);\n if (!metaDataClass)\n return null;\n if (metaDataClass.creator)\n return metaDataClass.creator(json);\n var parentName = metaDataClass.parentName;\n while (parentName) {\n metaDataClass = this.findClass(parentName);\n if (!metaDataClass)\n return null;\n parentName = metaDataClass.parentName;\n if (metaDataClass.creator)\n return this.createCustomType(name, metaDataClass.creator, json);\n }\n return null;\n };\n JsonMetadata.prototype.createCustomType = function (name, creator, json) {\n if (json === void 0) { json = undefined; }\n name = name.toLowerCase();\n var res = creator(json);\n var customTypeName = name;\n var customTemplateName = res.getTemplate\n ? res.getTemplate()\n : res.getType();\n res.getType = function () {\n return customTypeName;\n };\n res.getTemplate = function () {\n return customTemplateName;\n };\n CustomPropertiesCollection.createProperties(res);\n return res;\n };\n JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) {\n if (canBeCreated === void 0) { canBeCreated = false; }\n name = name.toLowerCase();\n var result = [];\n this.fillChildrenClasses(name, canBeCreated, result);\n return result;\n };\n JsonMetadata.prototype.getRequiredProperties = function (name) {\n var properties = this.getProperties(name);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].isRequired) {\n res.push(properties[i].name);\n }\n }\n return res;\n };\n JsonMetadata.prototype.addProperties = function (className, propertiesInfos) {\n className = className.toLowerCase();\n var metaDataClass = this.findClass(className);\n for (var i = 0; i < propertiesInfos.length; i++) {\n this.addCustomPropertyCore(metaDataClass, propertiesInfos[i]);\n }\n };\n JsonMetadata.prototype.addProperty = function (className, propertyInfo) {\n return this.addCustomPropertyCore(this.findClass(className), propertyInfo);\n };\n JsonMetadata.prototype.addCustomPropertyCore = function (metaDataClass, propertyInfo) {\n if (!metaDataClass)\n return null;\n var property = metaDataClass.createProperty(propertyInfo);\n if (property) {\n property.isCustom = true;\n this.addPropertyToClass(metaDataClass, property);\n this.emptyClassPropertiesHash(metaDataClass);\n CustomPropertiesCollection.addProperty(metaDataClass.name, property);\n }\n return property;\n };\n JsonMetadata.prototype.removeProperty = function (className, propertyName) {\n var metaDataClass = this.findClass(className);\n if (!metaDataClass)\n return false;\n var property = metaDataClass.find(propertyName);\n if (property) {\n this.removePropertyFromClass(metaDataClass, property);\n this.emptyClassPropertiesHash(metaDataClass);\n CustomPropertiesCollection.removeProperty(metaDataClass.name, propertyName);\n }\n };\n JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) {\n if (metaDataClass.find(property.name) != null)\n return;\n metaDataClass.properties.push(property);\n };\n JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) {\n var index = metaDataClass.properties.indexOf(property);\n if (index < 0)\n return;\n metaDataClass.properties.splice(index, 1);\n };\n JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) {\n this.classProperties[metaDataClass.name] = null;\n this.classHashProperties[metaDataClass.name] = null;\n var childClasses = this.getChildrenClasses(metaDataClass.name);\n for (var i = 0; i < childClasses.length; i++) {\n this.classProperties[childClasses[i].name] = null;\n this.classHashProperties[childClasses[i].name] = null;\n }\n };\n JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) {\n var children = this.childrenClasses[name];\n if (!children)\n return;\n for (var i = 0; i < children.length; i++) {\n if (!canBeCreated || children[i].creator) {\n result.push(children[i]);\n }\n this.fillChildrenClasses(children[i].name, canBeCreated, result);\n }\n };\n JsonMetadata.prototype.findClass = function (name) {\n name = name.toLowerCase();\n var res = this.classes[name];\n if (!res) {\n var newName = this.alternativeNames[name];\n if (!!newName && newName != name)\n return this.findClass(newName);\n }\n return res;\n };\n JsonMetadata.prototype.isDescendantOf = function (className, ancestorClassName) {\n if (!className || !ancestorClassName) {\n return false;\n }\n className = className.toLowerCase();\n ancestorClassName = ancestorClassName.toLowerCase();\n var class_ = this.findClass(className);\n if (!class_) {\n return false;\n }\n var parentClass = class_;\n do {\n if (parentClass.name === ancestorClassName) {\n return true;\n }\n parentClass = this.classes[parentClass.parentName];\n } while (!!parentClass);\n return false;\n };\n JsonMetadata.prototype.addAlterNativeClassName = function (name, alternativeName) {\n this.alternativeNames[alternativeName.toLowerCase()] = name.toLowerCase();\n };\n JsonMetadata.prototype.generateSchema = function (className) {\n if (className === void 0) { className = undefined; }\n if (!className)\n className = \"survey\";\n var classInfo = this.findClass(className);\n if (!classInfo)\n return null;\n var res = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"SurveyJS Library json schema\",\n type: \"object\",\n properties: {},\n definitions: {},\n };\n this.generateSchemaProperties(classInfo, res.properties, res.definitions);\n return res;\n };\n JsonMetadata.prototype.generateSchemaProperties = function (classInfo, schemaProperties, schemaDef) {\n if (!classInfo)\n return;\n for (var i = 0; i < classInfo.properties.length; i++) {\n var prop = classInfo.properties[i];\n schemaProperties[prop.name] = this.generateSchemaProperty(prop, schemaDef);\n }\n };\n JsonMetadata.prototype.generateSchemaProperty = function (prop, schemaDef) {\n var res = { type: prop.schemaType() };\n if (prop.hasChoices) {\n res.enum = prop.getChoices(null);\n }\n if (!!prop.className) {\n res.items = { $ref: \"#\" + prop.className };\n this.generateChemaClass(prop.className, schemaDef);\n }\n if (!!prop.baseClassName) {\n var usedClasses = this.getChildrenClasses(prop.baseClassName, true);\n if (prop.baseClassName == \"question\") {\n usedClasses.push(this.findClass(\"panel\"));\n }\n res.items = [];\n for (var i = 0; i < usedClasses.length; i++) {\n var className = usedClasses[i].name;\n res.items.push({ $ref: \"#\" + className });\n this.generateChemaClass(className, schemaDef);\n }\n }\n return res;\n };\n JsonMetadata.prototype.generateChemaClass = function (className, schemaDef) {\n if (!!schemaDef[className])\n return;\n var classInfo = this.findClass(className);\n if (!classInfo)\n return;\n var hasParent = !!classInfo.parentName && classInfo.parentName != \"base\";\n if (hasParent) {\n this.generateChemaClass(classInfo.parentName, schemaDef);\n }\n var res = { type: \"object\", $id: \"#\" + className };\n schemaDef[className] = res;\n var props = {};\n this.generateSchemaProperties(classInfo, props, schemaDef);\n if (hasParent) {\n res.allOff = [\n { $ref: \"#\" + classInfo.parentName },\n { properties: props },\n ];\n }\n else {\n res.properties = props;\n }\n };\n JsonMetadata.prototype.fillProperties = function (name, list, hash) {\n var metaDataClass = this.findClass(name);\n if (!metaDataClass)\n return;\n if (metaDataClass.parentName) {\n this.fillProperties(metaDataClass.parentName, list, hash);\n }\n for (var i = 0; i < metaDataClass.properties.length; i++) {\n var prop = metaDataClass.properties[i];\n this.addPropertyCore(prop, list, hash);\n hash[prop.name] = prop;\n }\n };\n JsonMetadata.prototype.addPropertyCore = function (property, list, hash) {\n if (!hash[property.name]) {\n list.push(property);\n return;\n }\n var index = -1;\n for (var i = 0; i < list.length; i++) {\n if (list[i].name == property.name) {\n index = i;\n break;\n }\n }\n property.mergeWith(list[index]);\n list[index] = property;\n };\n return JsonMetadata;\n}());\n\nvar JsonError = /** @class */ (function () {\n function JsonError(type, message) {\n this.type = type;\n this.message = message;\n this.description = \"\";\n this.at = -1;\n }\n JsonError.prototype.getFullDescription = function () {\n return this.message + (this.description ? \"\\n\" + this.description : \"\");\n };\n return JsonError;\n}());\n\nvar JsonUnknownPropertyError = /** @class */ (function (_super) {\n __extends(JsonUnknownPropertyError, _super);\n function JsonUnknownPropertyError(propertyName, className) {\n var _this = _super.call(this, \"unknownproperty\", \"The property '\" +\n propertyName +\n \"' in class '\" +\n className +\n \"' is unknown.\") || this;\n _this.propertyName = propertyName;\n _this.className = className;\n var properties = JsonObject.metaData.getProperties(className);\n if (properties) {\n _this.description = \"The list of available properties are: \";\n for (var i = 0; i < properties.length; i++) {\n if (i > 0)\n _this.description += \", \";\n _this.description += properties[i].name;\n }\n _this.description += \".\";\n }\n return _this;\n }\n return JsonUnknownPropertyError;\n}(JsonError));\n\nvar JsonMissingTypeErrorBase = /** @class */ (function (_super) {\n __extends(JsonMissingTypeErrorBase, _super);\n function JsonMissingTypeErrorBase(baseClassName, type, message) {\n var _this = _super.call(this, type, message) || this;\n _this.baseClassName = baseClassName;\n _this.type = type;\n _this.message = message;\n _this.description = \"The following types are available: \";\n var types = JsonObject.metaData.getChildrenClasses(baseClassName, true);\n for (var i = 0; i < types.length; i++) {\n if (i > 0)\n _this.description += \", \";\n _this.description += \"'\" + types[i].name + \"'\";\n }\n _this.description += \".\";\n return _this;\n }\n return JsonMissingTypeErrorBase;\n}(JsonError));\n\nvar JsonMissingTypeError = /** @class */ (function (_super) {\n __extends(JsonMissingTypeError, _super);\n function JsonMissingTypeError(propertyName, baseClassName) {\n var _this = _super.call(this, baseClassName, \"missingtypeproperty\", \"The property type is missing in the object. Please take a look at property: '\" +\n propertyName +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.baseClassName = baseClassName;\n return _this;\n }\n return JsonMissingTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonIncorrectTypeError = /** @class */ (function (_super) {\n __extends(JsonIncorrectTypeError, _super);\n function JsonIncorrectTypeError(propertyName, baseClassName) {\n var _this = _super.call(this, baseClassName, \"incorrecttypeproperty\", \"The property type is incorrect in the object. Please take a look at property: '\" +\n propertyName +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.baseClassName = baseClassName;\n return _this;\n }\n return JsonIncorrectTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonRequiredPropertyError = /** @class */ (function (_super) {\n __extends(JsonRequiredPropertyError, _super);\n function JsonRequiredPropertyError(propertyName, className) {\n var _this = _super.call(this, \"requiredproperty\", \"The property '\" +\n propertyName +\n \"' is required in class '\" +\n className +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.className = className;\n return _this;\n }\n return JsonRequiredPropertyError;\n}(JsonError));\n\nvar JsonObject = /** @class */ (function () {\n function JsonObject() {\n this.errors = new Array();\n this.lightSerializing = false;\n }\n Object.defineProperty(JsonObject, \"metaData\", {\n get: function () {\n return JsonObject.metaDataValue;\n },\n enumerable: false,\n configurable: true\n });\n JsonObject.prototype.toJsonObject = function (obj, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n return this.toJsonObjectCore(obj, null, storeDefaults);\n };\n JsonObject.prototype.toObject = function (jsonObj, obj) {\n this.toObjectCore(jsonObj, obj);\n var error = this.getRequiredError(obj, jsonObj);\n if (!!error) {\n this.addNewError(error, jsonObj);\n }\n };\n JsonObject.prototype.toObjectCore = function (jsonObj, obj) {\n if (!jsonObj)\n return;\n var properties = null;\n var objType = undefined;\n var needAddErrors = true;\n if (obj.getType) {\n objType = obj.getType();\n properties = JsonObject.metaData.getProperties(objType);\n needAddErrors =\n !!objType && !JsonObject.metaData.isDescendantOf(objType, \"itemvalue\");\n }\n if (!properties)\n return;\n if (obj.startLoadingFromJson) {\n obj.startLoadingFromJson();\n }\n properties = this.addDynamicProperties(obj, jsonObj, properties);\n for (var key in jsonObj) {\n if (key === JsonObject.typePropertyName)\n continue;\n if (key === JsonObject.positionPropertyName) {\n obj[key] = jsonObj[key];\n continue;\n }\n var property = this.findProperty(properties, key);\n if (!property) {\n if (needAddErrors) {\n this.addNewError(new JsonUnknownPropertyError(key.toString(), objType), jsonObj);\n }\n continue;\n }\n this.valueToObj(jsonObj[key], obj, property);\n }\n if (obj.endLoadingFromJson) {\n obj.endLoadingFromJson();\n }\n };\n JsonObject.prototype.toJsonObjectCore = function (obj, property, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n if (!obj || !obj.getType)\n return obj;\n if (typeof obj.getData === \"function\")\n return obj.getData();\n var result = {};\n if (property != null && !property.className) {\n result[JsonObject.typePropertyName] = property.getObjType(obj.getType());\n }\n this.propertiesToJson(obj, JsonObject.metaData.getProperties(obj.getType()), result, storeDefaults);\n this.propertiesToJson(obj, this.getDynamicProperties(obj), result, storeDefaults);\n return result;\n };\n JsonObject.prototype.getDynamicProperties = function (obj) {\n return Serializer.getDynamicPropertiesByObj(obj);\n };\n JsonObject.prototype.addDynamicProperties = function (obj, jsonObj, properties) {\n if (!obj.getDynamicPropertyName)\n return properties;\n var dynamicPropName = obj.getDynamicPropertyName();\n if (!dynamicPropName)\n return properties;\n if (jsonObj[dynamicPropName]) {\n obj[dynamicPropName] = jsonObj[dynamicPropName];\n }\n var dynamicProperties = this.getDynamicProperties(obj);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n res.push(properties[i]);\n }\n for (var i = 0; i < dynamicProperties.length; i++) {\n res.push(dynamicProperties[i]);\n }\n return res;\n };\n JsonObject.prototype.propertiesToJson = function (obj, properties, json, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n for (var i = 0; i < properties.length; i++) {\n this.valueToJson(obj, json, properties[i], storeDefaults);\n }\n };\n JsonObject.prototype.valueToJson = function (obj, result, property, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n if (property.isSerializable === false ||\n (property.isLightSerializable === false && this.lightSerializing))\n return;\n var value = property.getValue(obj);\n if (!storeDefaults && property.isDefaultValue(value))\n return;\n if (this.isValueArray(value)) {\n var arrValue = [];\n for (var i = 0; i < value.length; i++) {\n arrValue.push(this.toJsonObjectCore(value[i], property, storeDefaults));\n }\n value = arrValue.length > 0 ? arrValue : null;\n }\n else {\n value = this.toJsonObjectCore(value, property, storeDefaults);\n }\n var hasValue = typeof obj[\"getPropertyValue\"] === \"function\" &&\n obj[\"getPropertyValue\"](property.name, null) !== null;\n if ((storeDefaults && hasValue) || !property.isDefaultValue(value)) {\n result[property.name] = value;\n }\n };\n JsonObject.prototype.valueToObj = function (value, obj, property) {\n if (value == null)\n return;\n this.removePos(property, value);\n if (property != null && property.hasToUseSetValue) {\n property.setValue(obj, value, this);\n return;\n }\n if (this.isValueArray(value)) {\n this.valueToArray(value, obj, property.name, property);\n return;\n }\n var newObj = this.createNewObj(value, property);\n if (newObj.newObj) {\n this.toObjectCore(value, newObj.newObj);\n value = newObj.newObj;\n }\n if (!newObj.error) {\n if (property != null) {\n property.setValue(obj, value, this);\n }\n else {\n obj[property.name] = value;\n }\n }\n };\n JsonObject.prototype.removePos = function (property, value) {\n if (!property || !property.type || property.type.indexOf(\"value\") < 0)\n return;\n this.removePosFromObj(value);\n };\n JsonObject.prototype.removePosFromObj = function (obj) {\n if (!obj)\n return;\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n this.removePosFromObj(obj[i]);\n }\n }\n if (!!obj[JsonObject.positionPropertyName]) {\n delete obj[JsonObject.positionPropertyName];\n }\n };\n JsonObject.prototype.isValueArray = function (value) {\n return value && Array.isArray(value);\n };\n JsonObject.prototype.createNewObj = function (value, property) {\n var result = { newObj: null, error: null };\n var className = value[JsonObject.typePropertyName];\n if (!className && property != null && property.className) {\n className = property.className;\n }\n className = property.getClassName(className);\n result.newObj = className\n ? JsonObject.metaData.createClass(className, value)\n : null;\n result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className);\n return result;\n };\n JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) {\n var error = null;\n if (newObj) {\n error = this.getRequiredError(newObj, value);\n }\n else {\n if (property.baseClassName) {\n if (!className) {\n error = new JsonMissingTypeError(property.name, property.baseClassName);\n }\n else {\n error = new JsonIncorrectTypeError(property.name, property.baseClassName);\n }\n }\n }\n if (error) {\n this.addNewError(error, value);\n }\n return error;\n };\n JsonObject.prototype.getRequiredError = function (obj, jsonValue) {\n if (!obj.getType || typeof obj.getData === \"function\")\n return null;\n var className = obj.getType();\n var requiredProperties = JsonObject.metaData.getRequiredProperties(className);\n if (!requiredProperties)\n return null;\n for (var i = 0; i < requiredProperties.length; i++) {\n if (!jsonValue[requiredProperties[i]]) {\n return new JsonRequiredPropertyError(requiredProperties[i], className);\n }\n }\n return null;\n };\n JsonObject.prototype.addNewError = function (error, jsonObj) {\n if (jsonObj && jsonObj[JsonObject.positionPropertyName]) {\n error.at = jsonObj[JsonObject.positionPropertyName].start;\n }\n this.errors.push(error);\n };\n JsonObject.prototype.valueToArray = function (value, obj, key, property) {\n if (obj[key] && value.length > 0)\n obj[key].splice(0, obj[key].length);\n var valueRes = obj[key] ? obj[key] : [];\n this.addValuesIntoArray(value, valueRes, property);\n if (!obj[key])\n obj[key] = valueRes;\n };\n JsonObject.prototype.addValuesIntoArray = function (value, result, property) {\n for (var i = 0; i < value.length; i++) {\n var newValue = this.createNewObj(value[i], property);\n if (newValue.newObj) {\n if (!!value[i].name) {\n newValue.newObj.name = value[i].name;\n }\n result.push(newValue.newObj);\n this.toObjectCore(value[i], newValue.newObj);\n }\n else {\n if (!newValue.error) {\n result.push(value[i]);\n }\n }\n }\n };\n JsonObject.prototype.findProperty = function (properties, key) {\n if (!properties)\n return null;\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n if (prop.name == key || prop.alternativeName == key)\n return prop;\n }\n return null;\n };\n JsonObject.typePropertyName = \"type\";\n JsonObject.positionPropertyName = \"pos\";\n JsonObject.metaDataValue = new JsonMetadata();\n return JsonObject;\n}());\n\n/**\n * An alias for the metadata object. It contains object properties' runtime information and allows you to modify it.\n * @see JsonMetadata\n */\nvar Serializer = JsonObject.metaData;\n\n\n/***/ }),\n\n/***/ \"./src/list.ts\":\n/*!*********************!*\\\n !*** ./src/list.ts ***!\n \\*********************/\n/*! exports provided: ListModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return ListModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\nvar ListModel = /** @class */ (function (_super) {\n __extends(ListModel, _super);\n function ListModel(items, onItemSelect, allowSelection, selectedItem) {\n var _this = _super.call(this) || this;\n _this.onItemSelect = onItemSelect;\n _this.allowSelection = allowSelection;\n _this.selectItem = function (itemValue) {\n _this.isExpanded = false;\n if (_this.allowSelection) {\n _this.selectedItem = itemValue;\n }\n if (!!_this.onItemSelect) {\n _this.onItemSelect(itemValue);\n }\n };\n _this.isItemDisabled = function (itemValue) {\n return itemValue.enabled !== undefined && !itemValue.enabled;\n };\n _this.isItemSelected = function (itemValue) {\n return _this.allowSelection && _this.selectedItem == itemValue;\n };\n _this.getItemClass = function (itemValue) {\n var className = \"sv-list__item\";\n if (_this.isItemDisabled(itemValue)) {\n className += \" sv-list__item--disabled\";\n }\n if (_this.isItemSelected(itemValue)) {\n className += \" sv-list__item--selected\";\n }\n return className;\n };\n _this.createNewArray(\"items\");\n _this.items = items;\n _this.selectedItem = selectedItem;\n return _this;\n }\n Object.defineProperty(ListModel.prototype, \"items\", {\n get: function () {\n return this.getPropertyValue(\"items\");\n },\n set: function (value) {\n var _a;\n (_a = this.items).splice.apply(_a, __spreadArray([0, this.items.length], (value || [])));\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], ListModel.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], ListModel.prototype, \"selectedItem\", void 0);\n return ListModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/localizablestring.ts\":\n/*!**********************************!*\\\n !*** ./src/localizablestring.ts ***!\n \\**********************************/\n/*! exports provided: LocalizableString, LocalizableStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return LocalizableString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return LocalizableStrings; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n\n\n\n/**\n * The class represents the string that supports multi-languages and markdown.\n * It uses in all objects where support for multi-languages and markdown is required.\n */\nvar LocalizableString = /** @class */ (function () {\n function LocalizableString(owner, useMarkdown, name) {\n if (useMarkdown === void 0) { useMarkdown = false; }\n this.owner = owner;\n this.useMarkdown = useMarkdown;\n this.name = name;\n this.values = {};\n this.htmlValues = {};\n this.onCreating();\n }\n Object.defineProperty(LocalizableString, \"defaultLocale\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"locale\", {\n get: function () {\n return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.strChanged = function () {\n this.searchableText = undefined;\n if (this.renderedText === undefined)\n return;\n this.calculatedTextValue = this.calText();\n if (this.renderedText !== this.calculatedTextValue) {\n this.renderedText = undefined;\n this.calculatedTextValue = undefined;\n }\n this.onChanged();\n };\n Object.defineProperty(LocalizableString.prototype, \"text\", {\n get: function () {\n return this.pureText;\n },\n set: function (value) {\n this.setLocaleText(this.locale, value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"calculatedText\", {\n get: function () {\n this.renderedText =\n this.calculatedTextValue !== undefined\n ? this.calculatedTextValue\n : this.calText();\n this.calculatedTextValue = undefined;\n return this.renderedText;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.calText = function () {\n var res = this.pureText;\n if (res &&\n this.owner &&\n this.owner.getProcessedText &&\n res.indexOf(\"{\") > -1) {\n res = this.owner.getProcessedText(res);\n }\n if (this.onGetTextCallback)\n res = this.onGetTextCallback(res);\n return res;\n };\n Object.defineProperty(LocalizableString.prototype, \"pureText\", {\n get: function () {\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var res = this.getValue(loc);\n if (!res && loc == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n res = this.getValue(_surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].defaultLocale);\n }\n if (!res && loc !== _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n res = this.getValue(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName);\n }\n if (!res)\n res = \"\";\n return res;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"hasHtml\", {\n get: function () {\n return this.hasHtmlValue();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"html\", {\n get: function () {\n if (!this.hasHtml)\n return \"\";\n return this.getHtmlValue();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"textOrHtml\", {\n get: function () {\n return this.hasHtml ? this.getHtmlValue() : this.calculatedText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"renderedHtml\", {\n get: function () {\n return this.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.getLocaleText = function (loc) {\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var res = this.getValue(loc);\n return res ? res : \"\";\n };\n LocalizableString.prototype.setLocaleText = function (loc, value) {\n if (value == this.getLocaleText(loc))\n return;\n if (value &&\n loc &&\n loc != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !this.getValue(loc) &&\n value == this.getLocaleText(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName))\n return;\n var curLoc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n if (!curLoc)\n curLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n var hasOnStrChanged = this.onStrChanged && loc === curLoc;\n var oldValue = hasOnStrChanged ? this.pureText : undefined;\n delete this.htmlValues[loc];\n if (!value) {\n if (this.getValue(loc))\n this.deleteValue(loc);\n }\n else {\n if (typeof value === \"string\") {\n if (loc != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n value == this.getLocaleText(_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName)) {\n this.setLocaleText(loc, null);\n }\n else {\n this.setValue(loc, value);\n if (loc == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName) {\n this.deleteValuesEqualsToDefault(value);\n }\n }\n }\n }\n this.strChanged();\n if (hasOnStrChanged) {\n this.onStrChanged(oldValue, value);\n }\n };\n LocalizableString.prototype.hasNonDefaultText = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return false;\n return keys.length > 1 || keys[0] != _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n };\n LocalizableString.prototype.getLocales = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return [];\n return keys;\n };\n LocalizableString.prototype.getJson = function () {\n if (!!this.sharedData)\n return this.sharedData.getJson();\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return null;\n if (keys.length == 1 &&\n keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serializeLocalizableStringAsObject)\n return this.values[keys[0]];\n return this.values;\n };\n LocalizableString.prototype.setJson = function (value) {\n if (!!this.sharedData) {\n this.sharedData.setJson(value);\n return;\n }\n this.values = {};\n this.htmlValues = {};\n if (!value)\n return;\n if (typeof value === \"string\") {\n this.setLocaleText(null, value);\n }\n else {\n for (var key in value) {\n this.setLocaleText(key, value[key]);\n }\n }\n this.strChanged();\n };\n Object.defineProperty(LocalizableString.prototype, \"renderAs\", {\n get: function () {\n if (!this.owner) {\n return LocalizableString.defaultRenderer;\n }\n if (typeof this.owner.getRenderer !== \"function\") {\n return LocalizableString.defaultRenderer;\n }\n return (this.owner.getRenderer(this.name) || LocalizableString.defaultRenderer);\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.equals = function (obj) {\n if (!!this.sharedData)\n return this.sharedData.equals(obj);\n if (!obj || !obj.values)\n return false;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.values, obj.values);\n };\n LocalizableString.prototype.setFindText = function (text) {\n if (this.searchText == text)\n return;\n this.searchText = text;\n if (!this.searchableText) {\n var textOrHtml = this.textOrHtml;\n this.searchableText = !!textOrHtml ? textOrHtml.toLowerCase() : \"\";\n }\n var str = this.searchableText;\n var index = !!str && !!text ? str.indexOf(text) : undefined;\n if (index < 0)\n index = undefined;\n if (index != undefined || this.searchIndex != index) {\n this.searchIndex = index;\n if (!!this.onSearchChanged) {\n this.onSearchChanged();\n }\n }\n return this.searchIndex != undefined;\n };\n LocalizableString.prototype.onChanged = function () { };\n LocalizableString.prototype.onCreating = function () { };\n LocalizableString.prototype.hasHtmlValue = function () {\n if (!this.owner || !this.useMarkdown)\n return false;\n var renderedText = this.calculatedText;\n if (!renderedText)\n return false;\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n this.htmlValues[loc] = this.owner.getMarkdownHtml(renderedText, this.name);\n return this.htmlValues[loc] ? true : false;\n };\n LocalizableString.prototype.getHtmlValue = function () {\n var loc = this.locale;\n if (!loc)\n loc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n return this.htmlValues[loc];\n };\n LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) {\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName)\n continue;\n if (this.getValue(keys[i]) == defaultValue) {\n this.deleteValue(keys[i]);\n }\n }\n };\n LocalizableString.prototype.getValue = function (loc) {\n if (!!this.sharedData)\n return this.sharedData.getValue(loc);\n return this.values[loc];\n };\n LocalizableString.prototype.setValue = function (loc, value) {\n if (!!this.sharedData)\n this.sharedData.setValue(loc, value);\n else\n this.values[loc] = value;\n };\n LocalizableString.prototype.deleteValue = function (loc) {\n if (!!this.sharedData)\n this.sharedData.deleteValue(loc);\n else\n delete this.values[loc];\n };\n LocalizableString.prototype.getValuesKeys = function () {\n if (!!this.sharedData)\n return this.sharedData.getValuesKeys();\n return Object.keys(this.values);\n };\n LocalizableString.SerializeAsObject = false;\n LocalizableString.defaultRenderer = \"sv-string-viewer\";\n LocalizableString.editableRenderer = \"sv-string-editor\";\n return LocalizableString;\n}());\n\n/**\n * The class represents the list of strings that supports multi-languages.\n */\nvar LocalizableStrings = /** @class */ (function () {\n function LocalizableStrings(owner) {\n this.owner = owner;\n this.values = {};\n }\n Object.defineProperty(LocalizableStrings.prototype, \"locale\", {\n get: function () {\n return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableStrings.prototype, \"value\", {\n get: function () {\n return this.getValue(\"\");\n },\n set: function (val) {\n this.setValue(\"\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LocalizableStrings.prototype, \"text\", {\n get: function () {\n return Array.isArray(this.value) ? this.value.join(\"\\n\") : \"\";\n },\n set: function (val) {\n this.value = !!val ? val.split(\"\\n\") : [];\n },\n enumerable: false,\n configurable: true\n });\n LocalizableStrings.prototype.getLocaleText = function (loc) {\n var res = this.getValueCore(loc, !loc || loc === this.locale);\n if (!res || !Array.isArray(res) || res.length == 0)\n return \"\";\n return res.join(\"\\n\");\n };\n LocalizableStrings.prototype.setLocaleText = function (loc, newValue) {\n var val = !!newValue ? newValue.split(\"\\n\") : null;\n this.setValue(loc, val);\n };\n LocalizableStrings.prototype.getValue = function (loc) {\n return this.getValueCore(loc);\n };\n LocalizableStrings.prototype.getValueCore = function (loc, useDefault) {\n if (useDefault === void 0) { useDefault = true; }\n loc = this.getLocale(loc);\n if (this.values[loc])\n return this.values[loc];\n if (useDefault) {\n var defLoc = _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n if (loc !== defLoc)\n return this.values[defLoc];\n }\n return [];\n };\n LocalizableStrings.prototype.setValue = function (loc, val) {\n loc = this.getLocale(loc);\n if (!val || val.length == 0) {\n delete this.values[loc];\n }\n else {\n this.values[loc] = val;\n }\n };\n Object.defineProperty(LocalizableStrings.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableStrings.prototype.getLocale = function (loc) {\n if (!!loc)\n return loc;\n loc = this.locale;\n return !!loc ? loc : _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName;\n };\n LocalizableStrings.prototype.getLocales = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return [];\n return keys;\n };\n LocalizableStrings.prototype.getJson = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return null;\n if (keys.length == 1 &&\n keys[0] == _settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].defaultLocaleName &&\n !_settings__WEBPACK_IMPORTED_MODULE_2__[\"settings\"].serializeLocalizableStringAsObject)\n return this.values[keys[0]];\n return this.values;\n };\n LocalizableStrings.prototype.setJson = function (value) {\n this.values = {};\n if (!value)\n return;\n if (Array.isArray(value)) {\n this.setValue(null, value);\n }\n else {\n for (var key in value) {\n this.setValue(key, value[key]);\n }\n }\n };\n LocalizableStrings.prototype.getValuesKeys = function () {\n return Object.keys(this.values);\n };\n return LocalizableStrings;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/localization/arabic.ts\":\n/*!************************************!*\\\n !*** ./src/localization/arabic.ts ***!\n \\************************************/\n/*! exports provided: arabicSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"arabicSurveyStrings\", function() { return arabicSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar arabicSurveyStrings = {\n pagePrevText: \"السابق\",\n pageNextText: \"التالي\",\n completeText: \"إرسال البيانات\",\n previewText: \"معاينة\",\n editText: \"تعديل\",\n startSurveyText: \"بداية\",\n otherItemText: \"نص آخر\",\n noneItemText: \"لا شيء\",\n selectAllItemText: \"اختر الكل\",\n progressText: \"{1} صفحة {0} من\",\n panelDynamicProgressText: \"سجل {0} من {1}\",\n questionsProgressText: \"تمت الإجابة على أسئلة {0} / {1}\",\n emptySurvey: \"لا توجد صفحة مرئية أو سؤال في النموذج\",\n completingSurvey: \"شكرا لكم لاستكمال النموذج!\",\n completingSurveyBefore: \"تظهر سجلاتنا أنك قد أكملت هذا الاستطلاع بالفعل.\",\n loadingSurvey: \"...يتم تحميل النموذج\",\n optionsCaption: \"...اختر\",\n value: \"القيمة\",\n requiredError: \".يرجى الإجابة على السؤال\",\n requiredErrorInPanel: \"الرجاء الإجابة على سؤال واحد على الأقل.\",\n requiredInAllRowsError: \"يرجى الإجابة على الأسئلة في جميع الصفوف\",\n numericError: \"يجب أن تكون القيمة رقمية.\",\n textMinLength: \"الرجاء إدخال ما لا يقل عن {0} حروف\",\n textMaxLength: \"الرجاء إدخال أقل من {0} حروف\",\n textMinMaxLength: \"يرجى إدخال أكثر من {0} وأقل من {1} حروف\",\n minRowCountError: \"يرجى ملء ما لا يقل عن {0} الصفوف\",\n minSelectError: \"يرجى تحديد ما لا يقل عن {0} المتغيرات\",\n maxSelectError: \"يرجى تحديد ما لا يزيد عن {0} المتغيرات\",\n numericMinMax: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1} وتساوي أو أقل من {2}ا\",\n numericMin: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1}ا\",\n numericMax: \"و'{0}' يجب أن تكون مساوية أو أقل من {1}ا\",\n invalidEmail: \"الرجاء إدخال بريد الكتروني صحيح\",\n invalidExpression: \"يجب أن يعرض التعبير: {0} 'صواب'.\",\n urlRequestError: \"طلب إرجاع خطأ '{0}'. {1}ا\",\n urlGetChoicesError: \"عاد طلب البيانات فارغ أو 'المسار' غير صحيح \",\n exceedMaxSize: \"ينبغي ألا يتجاوز حجم الملف {0}ا\",\n otherRequiredError: \"الرجاء إدخال قيمة أخرى\",\n uploadingFile: \"تحميل الملف الخاص بك. يرجى الانتظار عدة ثوان والمحاولة لاحقًا\",\n loadingFile: \"جار التحميل...\",\n chooseFile: \"اختر الملفات...\",\n noFileChosen: \"لم تقم باختيار ملف\",\n confirmDelete: \"هل تريد حذف السجل؟\",\n keyDuplicationError: \"يجب أن تكون هذه القيمة فريدة.\",\n addColumn: \"أضف العمود\",\n addRow: \"اضافة صف\",\n removeRow: \"إزالة صف\",\n addPanel: \"اضف جديد\",\n removePanel: \"إزالة\",\n choices_Item: \"بند\",\n matrix_column: \"عمود\",\n matrix_row: \"صف\",\n savingData: \"يتم حفظ النتائج على الخادم ...\",\n savingDataError: \"حدث خطأ ولم نتمكن من حفظ النتائج.\",\n savingDataSuccess: \"تم حفظ النتائج بنجاح!\",\n saveAgainButton: \"حاول مجددا\",\n timerMin: \"دقيقة\",\n timerSec: \"ثانية\",\n timerSpentAll: \"لقد أنفقت {0} على هذه الصفحة و {1} إجمالاً.\",\n timerSpentPage: \"لقد أنفقت {0} على هذه الصفحة.\",\n timerSpentSurvey: \"لقد أنفقت {0} إجمالاً.\",\n timerLimitAll: \"لقد أنفقت {0} من {1} في هذه الصفحة و {2} من إجمالي {3}.\",\n timerLimitPage: \"لقد أنفقت {0} من {1} في هذه الصفحة.\",\n timerLimitSurvey: \"لقد أنفقت {0} من إجمالي {1}.\",\n cleanCaption: \"نظيف\",\n clearCaption: \"واضح\",\n chooseFileCaption: \"اختر ملف\",\n removeFileCaption: \"قم بإزالة هذا الملف\",\n booleanCheckedLabel: \"نعم\",\n booleanUncheckedLabel: \"لا\",\n confirmRemoveFile: \"هل أنت متأكد أنك تريد إزالة هذا الملف: {0}؟\",\n confirmRemoveAllFiles: \"هل أنت متأكد أنك تريد إزالة كافة الملفات؟\",\n questionTitlePatternText: \"عنوان السؤال\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ar\"] = arabicSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ar\"] = \"العربية\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/bulgarian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/bulgarian.ts ***!\n \\***************************************/\n/*! exports provided: bulgarianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bulgarianStrings\", function() { return bulgarianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar bulgarianStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Напред\",\n completeText: \"Край\",\n previewText: \"Визуализация\",\n editText: \"редактиране\",\n startSurveyText: \"Начало\",\n otherItemText: \"Друго (опишете)\",\n noneItemText: \"Нито един\",\n selectAllItemText: \"Всички\",\n progressText: \"стр. {0}, общо стр. {1}\",\n panelDynamicProgressText: \"Запис {0} от {1}\",\n questionsProgressText: \"Отговорени на {0} / {1} въпроса\",\n emptySurvey: \"Анкетата не съдържа видими страници или въпроси.\",\n completingSurvey: \"Благодарим ви за участието в анкетата!\",\n completingSurveyBefore: \"Изглежда, че вие вече сте попълнили анкетата.\",\n loadingSurvey: \"Зареждане на анкетата...\",\n optionsCaption: \"Изберете...\",\n value: \"value\",\n requiredError: \"Моля, отговорете на следния въпрос.\",\n requiredErrorInPanel: \"Моля, отговорете поне на един от въпросите.\",\n requiredInAllRowsError: \"Моля, отговорете на въпросите на всички редове.\",\n numericError: \"Стойността следва да бъде число.\",\n textMinLength: \"Моля, използвайте поне {0} символа.\",\n textMaxLength: \"Моля, използвайте не повече от {0} символа.\",\n textMinMaxLength: \"Моля, използвайте повече от {0} и по-малко от {1} символа.\",\n minRowCountError: \"Моля, попълнете поне {0} реда.\",\n minSelectError: \"Моля, изберете поне {0} варианта.\",\n maxSelectError: \"Моля, изберете не повече от {0} варианта.\",\n numericMinMax: \"Стойността '{0}' следва да бъде равна или по-голяма от {1} и равна или по-малка от {2}\",\n numericMin: \"Стойността '{0}' следва да бъде равна или по-голяма от {1}\",\n numericMax: \"Стойността '{0}' следва да бъде равна или по-малка от {1}\",\n invalidEmail: \"Моля, въведете валиден адрес на електронна поща.\",\n invalidExpression: \"Изразът: {0} трябва да дава резултат 'true' (истина).\",\n urlRequestError: \"Заявката води до грешка '{0}'. {1}\",\n urlGetChoicesError: \"Заявката не връща данни или частта 'path' (път до търсения ресурс на сървъра) е неправилно зададена\",\n exceedMaxSize: \"Размерът на файла следва да не превишава {0}.\",\n otherRequiredError: \"Моля, въведете другата стойност.\",\n uploadingFile: \"Вашит файл се зарежда на сървъра. Моля, изчакайте няколко секунди и тогава опитвайте отново.\",\n loadingFile: \"Зареждане...\",\n chooseFile: \"Изберете файл(ове)...\",\n noFileChosen: \"Няма избран файл\",\n confirmDelete: \"Желаете ли да изтриете записа?\",\n keyDuplicationError: \"Стойността следва да бъде уникална.\",\n addColumn: \"Добавяне на колона\",\n addRow: \"Добавяне на ред\",\n removeRow: \"Премахване на ред\",\n addPanel: \"Добавяне на панел\",\n removePanel: \"Премахване на панел\",\n choices_Item: \"елемент\",\n matrix_column: \"Колона\",\n matrix_row: \"Ред\",\n savingData: \"Резултатите се запазват на сървъра...\",\n savingDataError: \"Поради възникнала грешка резултатите не можаха да бъдат запазени.\",\n savingDataSuccess: \"Резултатите бяха запазени успешно!\",\n saveAgainButton: \"Нов опит\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Вие използвахте {0} на тази страница и общо {1}.\",\n timerSpentPage: \"Вие използвахте {0} на тази страница.\",\n timerSpentSurvey: \"Вие използвахте общо {0}.\",\n timerLimitAll: \"Вие изпозвахте {0} от {1} на тази страница и общо {2} от {3}.\",\n timerLimitPage: \"Вие използвахте {0} от {1} на тази страница.\",\n timerLimitSurvey: \"Вие използвахте общо {0} от {1}.\",\n cleanCaption: \"Изчистване\",\n clearCaption: \"Начално състояние\",\n chooseFileCaption: \"Изберете файл\",\n removeFileCaption: \"Премахване на файла\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Не\",\n confirmRemoveFile: \"Наистина ли искате да премахнете този файл: {0}?\",\n confirmRemoveAllFiles: \"Наистина ли искате да премахнете всички файлове?\",\n questionTitlePatternText: \"Заглавие на въпроса\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"bg\"] = bulgarianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"bg\"] = \"български\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/catalan.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/catalan.ts ***!\n \\*************************************/\n/*! exports provided: catalanSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"catalanSurveyStrings\", function() { return catalanSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar catalanSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Següent\",\n completeText: \"Complet\",\n otherItemText: \"Un altre (descrigui)\",\n progressText: \"Pàgina {0} de {1}\",\n emptySurvey: \"No hi ha cap pàgina visible o pregunta a l'enquesta.\",\n completingSurvey: \"Gràcies per completar l'enquesta!\",\n loadingSurvey: \"L'enquesta s'està carregant ...\",\n optionsCaption: \"Selecciona ...\",\n requiredError: \"Si us plau contesti la pregunta.\",\n requiredInAllRowsError: \"Si us plau contesti les preguntes de cada filera.\",\n numericError: \"L'estimació ha de ser numèrica.\",\n textMinLength: \"Si us plau entre almenys {0} símbols.\",\n textMaxLength: \"Si us plau entre menys de {0} símbols.\",\n textMinMaxLength: \"Si us plau entre més de {0} i menys de {1} símbols.\",\n minRowCountError: \"Si us plau ompli almenys {0} fileres.\",\n minSelectError: \"Si us plau seleccioni almenys {0} variants.\",\n maxSelectError: \"Si us plau seleccioni no més de {0} variants.\",\n numericMinMax: \"El '{0}' deu ser igual o més de {1} i igual o menys de {2}\",\n numericMin: \"El '{0}' ha de ser igual o més de {1}\",\n numericMax: \"El '{0}' ha de ser igual o menys de {1}\",\n invalidEmail: \"Si us plau afegiu un correu electrònic vàlid.\",\n urlRequestError: \"La sol·licitud va tornar error '{0}'. {1}\",\n urlGetChoicesError: \"La sol·licitud va tornar buida de dates o la propietat 'trajectòria' no és correcta\",\n exceedMaxSize: \"La mida de l'arxiu no pot excedir {0}.\",\n otherRequiredError: \"Si us plau afegiu l'altra estimació.\",\n uploadingFile: \"El seu arxiu s'està pujant. Si us plau esperi uns segons i intenteu-ho de nou.\",\n addRow: \"Afegiu una filera\",\n removeRow: \"Eliminar una filera\",\n choices_firstItem: \"primer article\",\n choices_secondItem: \"segon article\",\n choices_thirdItem: \"tercer article\",\n matrix_column: \"Columna\",\n matrix_row: \"Filera\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ca\"] = catalanSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ca\"] = \"català\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/croatian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/croatian.ts ***!\n \\**************************************/\n/*! exports provided: croatianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"croatianStrings\", function() { return croatianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar croatianStrings = {\n pagePrevText: \"Prethodni\",\n pageNextText: \"Sljedeći\",\n completeText: \"Kompletan\",\n previewText: \"Pregled\",\n editText: \"Uređivanje\",\n startSurveyText: \"Početak\",\n otherItemText: \"Ostali (opis)\",\n noneItemText: \"Nitko\",\n selectAllItemText: \"Select All\",\n progressText: \"Stranica {0} od {1}\",\n panelDynamicProgressText: \"Zapisa {0} od {1}\",\n questionsProgressText: \"Odgovorio na {0}/{1} pitanja\",\n emptySurvey: \"U anketi nema vidljive stranice ili pitanja.\",\n completingSurvey: \"Hvala vam što ste završili anketu!\",\n completingSurveyBefore: \"Naši zapisi pokazuju da ste već završili ovu anketu.\",\n loadingSurvey: \"Anketa o učitavanje...\",\n optionsCaption: \"Odaberite...\",\n value: \"vrijednost\",\n requiredError: \"Molim vas odgovorite na pitanje.\",\n requiredErrorInPanel: \"Molim vas odgovorite na barem jedno pitanje.\",\n requiredInAllRowsError: \"Odgovorite na pitanja u svim redovima.\",\n numericError: \"Vrijednost bi trebala biti brojčana.\",\n textMinLength: \"Unesite najmanje {0} znak(ova).\",\n textMaxLength: \"Unesite manje od {0} znak(ova).\",\n textMinMaxLength: \"Unesite više od {0} i manje od {1} znakova.\",\n minRowCountError: \"Molimo ispunite najmanje {0} redaka.\",\n minSelectError: \"Odaberite barem {0} varijante.\",\n maxSelectError: \"Odaberite ne više od {0} varijanti.\",\n numericMinMax: \"'{0}'bi trebao biti jednak ili više od {1} i jednak ili manji od {2}.\",\n numericMin: \"'{0}' bi trebao biti jednak ili više od {1}.\",\n numericMax: \"'{0}' bi trebao biti jednak ili manji od {1}\",\n invalidEmail: \"Unesite valjanu e-mail adresu.\",\n invalidExpression: \"Izraz: {0} treba vratiti 'true'.\",\n urlRequestError: \"Zahtjev vratio pogrešku '{0}'. {1}\",\n urlGetChoicesError: \"Zahtjev je vratio prazne podatke ili je 'path' svojstvo netočna.\",\n exceedMaxSize: \"Veličina datoteke ne smije prelaziti {0}.\",\n otherRequiredError: \"Unesite drugu vrijednost.\",\n uploadingFile: \"Vaša datoteka se prenosi. Pričekajte nekoliko sekundi i pokušajte ponovno.\",\n loadingFile: \"Učitavanje...\",\n chooseFile: \"Odaberite datoteku...\",\n noFileChosen: \"Nije odabrana datoteka\",\n confirmDelete: \"Želite li izbrisati zapis?\",\n keyDuplicationError: \"Ta bi vrijednost trebala biti jedinstvena.\",\n addColumn: \"Dodavanje stupca\",\n addRow: \"Dodavanje redaka\",\n removeRow: \"Ukloniti\",\n addPanel: \"Dodavanje novih\",\n removePanel: \"Ukloniti\",\n choices_Item: \"stavku\",\n matrix_column: \"Stupca\",\n matrix_row: \"Redak\",\n savingData: \"Rezultati se spremaju na poslužitelju...\",\n savingDataError: \"Došlo je do pogreške i nismo mogli spremiti rezultate.\",\n savingDataSuccess: \"Rezultati su uspješno spremljeni!\",\n saveAgainButton: \"Pokušaj ponovo\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Vi ste proveli {0} na ovoj stranici i {1} ukupno.\",\n timerSpentPage: \"Potrošili ste {0} na ovu stranicu.\",\n timerSpentSurvey: \"You have spent {0} in total. {0}.\",\n timerLimitAll: \"Vi ste proveli {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n timerLimitPage: \"Potrošio si {0} od {1} na ovoj stranici.\",\n timerLimitSurvey: \"Ukupno ste potrošili {0} od {1}.\",\n cleanCaption: \"Očistiti\",\n clearCaption: \"Očistiti\",\n chooseFileCaption: \"Odaberite datoteku\",\n removeFileCaption: \"Uklonite ovu datoteku\",\n booleanCheckedLabel: \"Da\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Jeste li sigurni da želite ukloniti ovu datoteku: {0}?\",\n confirmRemoveAllFiles: \"Jeste li sigurni da želite ukloniti sve datoteke?\",\n questionTitlePatternText: \"Naslov pitanja\",\n modalCancelButtonText: \"Otkazati\",\n modalApplyButtonText: \"Primijeniti\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hr\"] = croatianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hr\"] = \"hrvatski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/czech.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/czech.ts ***!\n \\***********************************/\n/*! exports provided: czechSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"czechSurveyStrings\", function() { return czechSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar czechSurveyStrings = {\n pagePrevText: \"Předchozí\",\n pageNextText: \"Další\",\n completeText: \"Hotovo\",\n previewText: \"Náhled\",\n editText: \"Upravit\",\n startSurveyText: \"Start\",\n otherItemText: \"Jiná odpověď (napište)\",\n noneItemText: \"Žádný\",\n selectAllItemText: \"Vybrat vše\",\n progressText: \"Strana {0} z {1}\",\n panelDynamicProgressText: \"Záznam {0} z {1}\",\n questionsProgressText: \"Zodpovězené otázky: {0} / {1}\",\n emptySurvey: \"Průzkumu neobsahuje žádné otázky.\",\n completingSurvey: \"Děkujeme za vyplnění průzkumu!\",\n completingSurveyBefore: \"Naše záznamy ukazují, že jste tento průzkum již dokončili.\",\n loadingSurvey: \"Probíhá načítání průzkumu...\",\n optionsCaption: \"Vyber...\",\n value: \"hodnota\",\n requiredError: \"Odpovězte prosím na otázku.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\n requiredInAllRowsError: \"Odpovězte prosím na všechny otázky.\",\n numericError: \"V tomto poli lze zadat pouze čísla.\",\n textMinLength: \"Zadejte prosím alespoň {0} znaků.\",\n textMaxLength: \"Zadejte prosím méně než {0} znaků.\",\n textMinMaxLength: \"Zadejte prosím více než {0} a méně než {1} znaků.\",\n minRowCountError: \"Vyplňte prosím alespoň {0} řádků.\",\n minSelectError: \"Vyberte prosím alespoň {0} varianty.\",\n maxSelectError: \"Nevybírejte prosím více než {0} variant.\",\n numericMinMax: \"Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}\",\n numericMin: \"Odpověď '{0}' by mělo být větší nebo rovno {1}\",\n numericMax: \"Odpověď '{0}' by mělo být menší nebo rovno {1}\",\n invalidEmail: \"Zadejte prosím platnou e-mailovou adresu.\",\n invalidExpression: \"Výraz: {0} by měl vrátit hodnotu „true“.\",\n urlRequestError: \"Požadavek vrátil chybu '{0}'. {1}\",\n urlGetChoicesError: \"Požadavek nevrátil data nebo cesta je neplatná\",\n exceedMaxSize: \"Velikost souboru by neměla být větší než {0}.\",\n otherRequiredError: \"Zadejte prosím jinou hodnotu.\",\n uploadingFile: \"Váš soubor se nahrává. Zkuste to prosím za několik sekund.\",\n loadingFile: \"Načítání...\",\n chooseFile: \"Vyberte soubory ...\",\n noFileChosen: \"Není zvolený žádný soubor\",\n confirmDelete: \"Chcete smazat záznam?\",\n keyDuplicationError: \"Tato hodnota by měla být jedinečná.\",\n addColumn: \"Přidat sloupec\",\n addRow: \"Přidat řádek\",\n removeRow: \"Odstranit\",\n addPanel: \"Přidat nový\",\n removePanel: \"Odstranit\",\n choices_Item: \"položka\",\n matrix_column: \"Sloupec\",\n matrix_row: \"Řádek\",\n savingData: \"Výsledky se ukládají na server ...\",\n savingDataError: \"Došlo k chybě a výsledky jsme nemohli uložit.\",\n savingDataSuccess: \"Výsledky byly úspěšně uloženy!\",\n saveAgainButton: \"Zkus to znovu\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Na této stránce jste utratili celkem {0} a celkem {1}.\",\n timerSpentPage: \"Na této stránce jste utratili {0}.\",\n timerSpentSurvey: \"Celkem jste utratili {0}.\",\n timerLimitAll: \"Na této stránce jste utratili {0} z {1} a celkem {2} z {3}.\",\n timerLimitPage: \"Na této stránce jste strávili {0} z {1}.\",\n timerLimitSurvey: \"Celkově jste utratili {0} z {1}.\",\n cleanCaption: \"Čistý\",\n clearCaption: \"Průhledná\",\n chooseFileCaption: \"Vyberte soubor\",\n removeFileCaption: \"Odeberte tento soubor\",\n booleanCheckedLabel: \"Ano\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Opravdu chcete odebrat tento soubor: {0}?\",\n confirmRemoveAllFiles: \"Opravdu chcete odstranit všechny soubory?\",\n questionTitlePatternText: \"Název otázky\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cs\"] = czechSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cs\"] = \"čeština\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/danish.ts\":\n/*!************************************!*\\\n !*** ./src/localization/danish.ts ***!\n \\************************************/\n/*! exports provided: danishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"danishSurveyStrings\", function() { return danishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar danishSurveyStrings = {\n pagePrevText: \"Tilbage\",\n pageNextText: \"Videre\",\n completeText: \"Færdig\",\n previewText: \"Forpremiere\",\n editText: \"Redigér\",\n startSurveyText: \"Start\",\n otherItemText: \"Valgfrit svar...\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Vælg alle\",\n progressText: \"Side {0} af {1}\",\n panelDynamicProgressText: \"Optag {0} af {1}\",\n questionsProgressText: \"Besvarede {0} / {1} spørgsmål\",\n emptySurvey: \"Der er ingen synlige spørgsmål.\",\n completingSurvey: \"Mange tak for din besvarelse!\",\n completingSurveyBefore: \"Vores data viser at du allerede har gennemført dette spørgeskema.\",\n loadingSurvey: \"Spørgeskemaet hentes fra serveren...\",\n optionsCaption: \"Vælg...\",\n value: \"værdi\",\n requiredError: \"Besvar venligst spørgsmålet.\",\n requiredErrorInPanel: \"Besvar venligst mindst ét spørgsmål.\",\n requiredInAllRowsError: \"Besvar venligst spørgsmål i alle rækker.\",\n numericError: \"Angiv et tal.\",\n textMinLength: \"Angiv mindst {0} tegn.\",\n textMaxLength: \"Please enter less than {0} characters.\",\n textMinMaxLength: \"Angiv mere end {0} og mindre end {1} tegn.\",\n minRowCountError: \"Udfyld mindst {0} rækker.\",\n minSelectError: \"Vælg venligst mindst {0} svarmulighed(er).\",\n maxSelectError: \"Vælg venligst færre {0} svarmuligheder(er).\",\n numericMinMax: \"'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}\",\n numericMin: \"'{0}' skal være lig med eller større end {1}\",\n numericMax: \"'{0}' skal være lig med eller mindre end {1}\",\n invalidEmail: \"Angiv venligst en gyldig e-mail adresse.\",\n invalidExpression: \"Udtrykket: {0} skal returnere 'true'.\",\n urlRequestError: \"Forespørgslen returnerede fejlen '{0}'. {1}\",\n urlGetChoicesError: \"Forespørgslen returnerede ingen data eller 'path' parameteren er forkert\",\n exceedMaxSize: \"Filstørrelsen må ikke overstige {0}.\",\n otherRequiredError: \"Angiv en værdi for dit valgfrie svar.\",\n uploadingFile: \"Din fil bliver uploadet. Vent nogle sekunder og prøv eventuelt igen.\",\n loadingFile: \"Indlæser...\",\n chooseFile: \"Vælg fil(er)...\",\n noFileChosen: \"Ingen fil er valgt\",\n confirmDelete: \"Vil du fjerne den?\",\n keyDuplicationError: \"Denne værdi skal være unik.\",\n addColumn: \"Tilføj kolonne\",\n addRow: \"Tilføj række\",\n removeRow: \"Fjern\",\n addPanel: \"Tilføj ny\",\n removePanel: \"Fjern\",\n choices_Item: \"valg\",\n matrix_column: \"Kolonne\",\n matrix_row: \"Række\",\n savingData: \"Resultaterne bliver gemt på serveren...\",\n savingDataError: \"Der opstod en fejl og vi kunne ikke gemme resultatet.\",\n savingDataSuccess: \"Resultatet blev gemt!\",\n saveAgainButton: \"Prøv igen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har brugt {0} på denne side og {1} i alt.\",\n timerSpentPage: \"Du har brugt {0} på denne side.\",\n timerSpentSurvey: \"Du har brugt {0} i alt.\",\n timerLimitAll: \"Du har brugt {0} af {1} på denne side og {2} af {3} i alt.\",\n timerLimitPage: \"Du har brugt {0} af {1} på denne side.\",\n timerLimitSurvey: \"Du har brugt {0} af {1} i alt.\",\n cleanCaption: \"Rens\",\n clearCaption: \"Fjern\",\n chooseFileCaption: \"Vælg fil\",\n removeFileCaption: \"Fjern denne fil\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Ingen\",\n confirmRemoveFile: \"Er du sikker på, at du vil fjerne denne fil: {0}?\",\n confirmRemoveAllFiles: \"Er du sikker på, at du vil fjerne alle filer?\",\n questionTitlePatternText: \"Spørgsmåls titel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"da\"] = danishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"da\"] = \"dansk\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/dutch.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/dutch.ts ***!\n \\***********************************/\n/*! exports provided: dutchSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dutchSurveyStrings\", function() { return dutchSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created on behalf https://github.com/Frank13\n//Modified on behalf Roeland Verbakel\n\nvar dutchSurveyStrings = {\n pagePrevText: \"Vorige\",\n pageNextText: \"Volgende\",\n completeText: \"Verzenden\",\n previewText: \"Voorbeeld\",\n editText: \"Bewerk\",\n startSurveyText: \"Begin met\",\n otherItemText: \"Anders, nl.\",\n noneItemText: \"Geen\",\n selectAllItemText: \"Selecteer Alles\",\n progressText: \"Pagina {0} van {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Geantwoord {0}/{1} vragen\",\n emptySurvey: \"Er is geen zichtbare pagina of vraag in deze vragenlijst\",\n completingSurvey: \"Bedankt voor het invullen van de vragenlijst\",\n completingSurveyBefore: \"Onze gegevens tonen aan dat je deze vragenlijst reeds beantwoord hebt.\",\n loadingSurvey: \"De vragenlijst is aan het laden...\",\n optionsCaption: \"Kies...\",\n value: \"waarde\",\n requiredError: \"Dit is een vereiste vraag\",\n requiredErrorInPanel: \"Gelieve ten minste een vraag te beantwoorden.\",\n requiredInAllRowsError: \"Deze vraag vereist één antwoord per rij\",\n numericError: \"Het antwoord moet een getal zijn\",\n textMinLength: \"Vul minstens {0} karakters in\",\n textMaxLength: \"Gelieve minder dan {0} karakters in te vullen.\",\n textMinMaxLength: \"Gelieve meer dan {0} en minder dan {1} karakters in te vullen.\",\n minRowCountError: \"Gelieve ten minste {0} rijen in te vullen.\",\n minSelectError: \"Selecteer minimum {0} antwoorden\",\n maxSelectError: \"Selecteer niet meer dan {0} antwoorden\",\n numericMinMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}\",\n numericMin: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n numericMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n invalidEmail: \"Vul een geldig e-mailadres in\",\n invalidExpression: \"De uitdrukking: {0} moet 'waar' teruggeven.\",\n urlRequestError: \"De vraag keerde een fout terug '{0}'. {1}\",\n urlGetChoicesError: \"De vraag gaf een leeg antwoord terug of de 'pad' eigenschap is niet correct\",\n exceedMaxSize: \"De grootte van het bestand mag niet groter zijn dan {0}\",\n otherRequiredError: \"Vul het veld 'Anders, nl.' in\",\n uploadingFile: \"Uw bestand wordt opgeladen. Gelieve enkele seconden te wachten en opnieuw te proberen.\",\n loadingFile: \"Opladen...\",\n chooseFile: \"Kies uw bestand(en)...\",\n noFileChosen: \"Geen bestand gekozen\",\n confirmDelete: \"Wil je deze gegevens verwijderen?\",\n keyDuplicationError: \"Deze waarde moet uniek zijn.\",\n addColumn: \"Voeg kolom toe\",\n addRow: \"Voeg rij toe\",\n removeRow: \"Verwijder\",\n addPanel: \"Nieuwe toevoegen\",\n removePanel: \"Verwijder\",\n choices_Item: \"onderwerp\",\n matrix_column: \"Kolom\",\n matrix_row: \"Rij\",\n savingData: \"De resultaten worden bewaard op de server...\",\n savingDataError: \"Er was een probleem en we konden de resultaten niet bewaren.\",\n savingDataSuccess: \"De resultaten werden succesvol bewaard!\",\n saveAgainButton: \"Probeer opnieuw\",\n timerMin: \"minimum\",\n timerSec: \"sec\",\n timerSpentAll: \"U heeft {0} gespendeerd op deze pagina en {1} in totaal.\",\n timerSpentPage: \"U heeft {0} op deze pagina gespendeerd.\",\n timerSpentSurvey: \"U heeft in totaal {0} gespendeerd.\",\n timerLimitAll: \"U heeft {0} van {1} op deze pagina gespendeerd en {2} van {3} in totaal.\",\n timerLimitPage: \"U heeft {0} van {1} gespendeerd op deze pagina.\",\n timerLimitSurvey: \"U heeft {0} van {1} in het totaal.\",\n cleanCaption: \"Kuis op\",\n clearCaption: \"Kuis op\",\n chooseFileCaption: \"Gekozen bestand\",\n removeFileCaption: \"Verwijder deze file\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Neen\",\n confirmRemoveFile: \"Bent u zeker dat u deze file wilt verwijderen: {0}?\",\n confirmRemoveAllFiles: \"Bent u zeker dat u al deze files wilt verwijderen?\",\n questionTitlePatternText: \"Titel van de vraag\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"nl\"] = dutchSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"nl\"] = \"nederlands\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/english.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/english.ts ***!\n \\*************************************/\n/*! exports provided: englishStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return englishStrings; });\n//Uncomment this line on creating a translation file\n//import { surveyLocalization } from \"../surveyStrings\";\nvar englishStrings = {\n pagePrevText: \"Previous\",\n pageNextText: \"Next\",\n completeText: \"Complete\",\n previewText: \"Preview\",\n editText: \"Edit\",\n startSurveyText: \"Start\",\n otherItemText: \"Other (describe)\",\n noneItemText: \"None\",\n selectAllItemText: \"Select All\",\n progressText: \"Page {0} of {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Answered {0}/{1} questions\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Thank you for completing the survey!\",\n completingSurveyBefore: \"Our records show that you have already completed this survey.\",\n loadingSurvey: \"Loading Survey...\",\n optionsCaption: \"Choose...\",\n value: \"value\",\n requiredError: \"Please answer the question.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\n requiredInAllRowsError: \"Please answer questions in all rows.\",\n numericError: \"The value should be numeric.\",\n minError: \"The value should not be less than {0}\",\n maxError: \"The value should not be greater than {0}\",\n textMinLength: \"Please enter at least {0} character(s).\",\n textMaxLength: \"Please enter no more than {0} character(s).\",\n textMinMaxLength: \"Please enter at least {0} and no more than {1} characters.\",\n minRowCountError: \"Please fill in at least {0} row(s).\",\n minSelectError: \"Please select at least {0} variant(s).\",\n maxSelectError: \"Please select no more than {0} variant(s).\",\n numericMinMax: \"The '{0}' should be at least {1} and at most {2}\",\n numericMin: \"The '{0}' should be at least {1}\",\n numericMax: \"The '{0}' should be at most {1}\",\n invalidEmail: \"Please enter a valid e-mail address.\",\n invalidExpression: \"The expression: {0} should return 'true'.\",\n urlRequestError: \"The request returned error '{0}'. {1}\",\n urlGetChoicesError: \"The request returned empty data or the 'path' property is incorrect\",\n exceedMaxSize: \"The file size should not exceed {0}.\",\n otherRequiredError: \"Please enter the other value.\",\n uploadingFile: \"Your file is uploading. Please wait several seconds and try again.\",\n loadingFile: \"Loading...\",\n chooseFile: \"Choose file(s)...\",\n noFileChosen: \"No file chosen\",\n confirmDelete: \"Do you want to delete the record?\",\n keyDuplicationError: \"This value should be unique.\",\n addColumn: \"Add column\",\n addRow: \"Add row\",\n removeRow: \"Remove\",\n emptyRowsText: \"There are no rows.\",\n addPanel: \"Add new\",\n removePanel: \"Remove\",\n choices_Item: \"item\",\n matrix_column: \"Column\",\n matrix_row: \"Row\",\n multipletext_itemname: \"text\",\n savingData: \"The results are being saved on the server...\",\n savingDataError: \"An error occurred and we could not save the results.\",\n savingDataSuccess: \"The results were saved successfully!\",\n saveAgainButton: \"Try again\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"You have spent {0} on this page and {1} in total.\",\n timerSpentPage: \"You have spent {0} on this page.\",\n timerSpentSurvey: \"You have spent {0} in total.\",\n timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\",\n timerLimitPage: \"You have spent {0} of {1} on this page.\",\n timerLimitSurvey: \"You have spent {0} of {1} in total.\",\n cleanCaption: \"Clean\",\n clearCaption: \"Clear\",\n chooseFileCaption: \"Choose file\",\n removeFileCaption: \"Remove this file\",\n booleanCheckedLabel: \"Yes\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\",\n confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\",\n questionTitlePatternText: \"Question Title\",\n modalCancelButtonText: \"Cancel\",\n modalApplyButtonText: \"Apply\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n//surveyLocalization.locales[\"en\"] = englishStrings;\n//surveyLocalization.localeNames[\"en\"] = \"English\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/estonian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/estonian.ts ***!\n \\**************************************/\n/*! exports provided: estonianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"estonianSurveyStrings\", function() { return estonianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar estonianSurveyStrings = {\n pagePrevText: \"Tagasi\",\n pageNextText: \"Edasi\",\n completeText: \"Lõpeta\",\n previewText: \"Eelvaade\",\n editText: \"Muuda\",\n startSurveyText: \"Alusta\",\n otherItemText: \"Muu (täpsusta)\",\n noneItemText: \"Mitte midagi\",\n selectAllItemText: \"Vali kõik\",\n progressText: \"Lehekülg {0}/{1}\",\n panelDynamicProgressText: \"Kirje {0}/{1}\",\n questionsProgressText: \"Vastatud {0} küsimust {1}-st\",\n emptySurvey: \"Selles uuringus ei ole ühtki nähtavat lehekülge või küsimust.\",\n completingSurvey: \"Aitäh, et vastasid ankeedile!\",\n completingSurveyBefore: \"Meie andmetel oled sa sellele ankeedile juba vastanud.\",\n loadingSurvey: \"Laen ankeeti...\",\n optionsCaption: \"Vali...\",\n value: \"väärtus\",\n requiredError: \"Palun vasta küsimusele.\",\n requiredErrorInPanel: \"Palun vasta vähemalt ühele küsimusele.\",\n requiredInAllRowsError: \"Palun anna vastus igal real.\",\n numericError: \"See peaks olema numbriline väärtus.\",\n textMinLength: \"Palun sisesta vähemalt {0} tähemärki.\",\n textMaxLength: \"Palun ära sisesta rohkem kui {0} tähemärki.\",\n textMinMaxLength: \"Sisesta palun {0} - {1} tähemärki.\",\n minRowCountError: \"Sisesta plaun vähemalt {0} rida.\",\n minSelectError: \"Palun vali vähemalt {0} varianti.\",\n maxSelectError: \"Palun vali kõige rohkem {0} varianti.\",\n numericMinMax: \"'{0}' peaks olema võrdne või suurem kui {1} ja võrdne või väiksem kui {2}\",\n numericMin: \"'{0}' peaks olema võrdne või suurem kui {1}\",\n numericMax: \"'{0}' peaks olema võrnde või väiksem kui {1}\",\n invalidEmail: \"Sisesta palun korrektne e-posti aadress.\",\n invalidExpression: \"Avaldis: {0} peaks tagastama tõese.\",\n urlRequestError: \"Taotlus tagastas vea „{0}”. {1}\",\n urlGetChoicesError: \"Taotlus tagastas tühjad andmed või atribuut 'path' on vale\",\n exceedMaxSize: \"Faili suurus ei tohi ületada {0}.\",\n otherRequiredError: \"Sisesta palun muu vastus.\",\n uploadingFile: \"Sinu fail laeb üles. Palun oota mõned sekundid ning proovi seejärel uuesti.\",\n loadingFile: \"Laen...\",\n chooseFile: \"Vali fail(id)...\",\n noFileChosen: \"Faili pole valitud\",\n confirmDelete: \"Kas tahad kirje kustutada?\",\n keyDuplicationError: \"See väärtus peab olema unikaalne.\",\n addColumn: \"Lisa veerg\",\n addRow: \"Lisa rida\",\n removeRow: \"Eemalda\",\n addPanel: \"Lisa uus\",\n removePanel: \"Eemalda\",\n choices_Item: \"üksus\",\n matrix_column: \"Veerg\",\n matrix_row: \"Rida\",\n savingData: \"Salvestan andmed serveris...\",\n savingDataError: \"Tekkis viga ning me ei saanud vastuseid salvestada.\",\n savingDataSuccess: \"Vastuste salvestamine õnnestus!\",\n saveAgainButton: \"Proovi uuesti\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Oled veetnud {0} sellel lehel ning kokku {1}.\",\n timerSpentPage: \"Oled veetnud {0} sellel lehel.\",\n timerSpentSurvey: \"Oled veetnud {0} kokku.\",\n timerLimitAll: \"Oled kulutanud {0} võimalikust {1} sellel lehel ning {2} võimalikust {3} kokku.\",\n timerLimitPage: \"Oled kulutanud {0} võimalikust {1} sellel lehel.\",\n timerLimitSurvey: \"Oled kulutanud {0} võimalikust {1} koguajast.\",\n cleanCaption: \"Puhasta\",\n clearCaption: \"Puhasta\",\n chooseFileCaption: \"Vali fail\",\n removeFileCaption: \"Eemalda see fail\",\n booleanCheckedLabel: \"Jah\",\n booleanUncheckedLabel: \"Ei\",\n confirmRemoveFile: \"Oled sa kindel, et soovid selle faili eemaldada: {0}?\",\n confirmRemoveAllFiles: \"Oled sa kindel, et soovid eemaldada kõik failid?\",\n questionTitlePatternText: \"Küsimuse pealkiri\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"et\"] = estonianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"et\"] = \"eesti keel\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/finnish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/finnish.ts ***!\n \\*************************************/\n/*! exports provided: finnishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"finnishSurveyStrings\", function() { return finnishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar finnishSurveyStrings = {\n pagePrevText: \"Edellinen\",\n pageNextText: \"Seuraava\",\n completeText: \"Valmis\",\n previewText: \"Esikatselu\",\n editText: \"Muokkaa\",\n startSurveyText: \"Aloita\",\n otherItemText: \"Muu (tarkenna)\",\n noneItemText: \"Ei mitään\",\n selectAllItemText: \"Valitse kaikki\",\n progressText: \"Sivu {0} / {1}\",\n panelDynamicProgressText: \"Osio {0} / {1}\",\n questionsProgressText: \"Olet vastannut {0} / {1} kysymykseen.\",\n emptySurvey: \"Tässä kyselyssä ei ole yhtään näkyvillä olevaa sivua tai kysymystä.\",\n completingSurvey: \"Kiitos kyselyyn vastaamisesta!\",\n completingSurveyBefore: \"Tietojemme mukaan olet jo suorittanut tämän kyselyn.\",\n loadingSurvey: \"Kyselyä ladataan palvelimelta...\",\n optionsCaption: \"Valitse...\",\n value: \"arvo\",\n requiredError: \"Vastaa kysymykseen, kiitos.\",\n requiredErrorInPanel: \"Vastaa ainakin yhteen kysymykseen.\",\n requiredInAllRowsError: \"Vastaa kysymyksiin kaikilla riveillä.\",\n numericError: \"Arvon tulee olla numeerinen.\",\n textMinLength: \"Syötä vähintään {0} merkkiä.\",\n textMaxLength: \"Älä syötä yli {0} merkkiä.\",\n textMinMaxLength: \"Syötä vähintään {0} ja enintään {1} merkkiä.\",\n minRowCountError: \"Täytä vähintään {0} riviä.\",\n minSelectError: \"Valitse vähintään {0} vaihtoehtoa.\",\n maxSelectError: \"Valitse enintään {0} vaihtoehtoa.\",\n numericMinMax: \"Luvun '{0}' tulee olla vähintään {1} ja korkeintaan {2}.\",\n numericMin: \"Luvun '{0}' tulee olla vähintään {1}.\",\n numericMax: \"Luvun '{0}' tulee olla korkeintaan {1}.\",\n invalidEmail: \"Syötä validi sähköpostiosoite.\",\n invalidExpression: \"Lausekkeen: {0} pitäisi palauttaa 'true'.\",\n urlRequestError: \"Pyyntö palautti virheen {0}. {1}\",\n urlGetChoicesError: \"Pyyntö palautti tyhjän tiedoston tai 'path'-asetus on väärä\",\n exceedMaxSize: \"Tiedoston koko ei saa olla suurempi kuin {0}.\",\n otherRequiredError: \"Tarkenna vastaustasi tekstikenttään.\",\n uploadingFile: \"Tiedostoa lähetetään. Odota muutama sekunti ja yritä uudelleen.\",\n loadingFile: \"Ladataan...\",\n chooseFile: \"Valitse tiedosto(t)...\",\n noFileChosen: \"Ei tiedostoa valittuna\",\n confirmDelete: \"Haluatko poistaa osion?\",\n keyDuplicationError: \"Tämä arvo on jo käytössä. Syötä toinen arvo.\",\n addColumn: \"Lisää sarake\",\n addRow: \"Lisää rivi\",\n removeRow: \"Poista\",\n emptyRowsText: \"Ei rivejä\",\n addPanel: \"Lisää uusi\",\n removePanel: \"Poista\",\n choices_Item: \"kohde\",\n matrix_column: \"Sarake\",\n matrix_row: \"Rivi\",\n savingData: \"Tietoja tallennetaan palvelimelle...\",\n savingDataError: \"Tapahtui virhe, emmekä voineet tallentaa kyselyn tietoja.\",\n savingDataSuccess: \"Tiedot tallennettiin onnistuneesti!\",\n saveAgainButton: \"Yritä uudelleen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Olet käyttänyt {0} tällä sivulla ja yhteensä {1}.\",\n timerSpentPage: \"Olet käyttänyt {0} tällä sivulla.\",\n timerSpentSurvey: \"Olet käyttänyt yhteensä {0}.\",\n timerLimitAll: \"Olet käyttänyt tällä sivulla {0} / {1} ja yhteensä {2} / {3}.\",\n timerLimitPage: \"Olet käyttänyt {0} / {1} tällä sivulla.\",\n timerLimitSurvey: \"Olet käyttänyt yhteensä {0} / {1}.\",\n cleanCaption: \"Pyyhi\",\n clearCaption: \"Tyhjennä\",\n chooseFileCaption: \"Valitse tiedosto\",\n removeFileCaption: \"Poista tämä tiedosto\",\n booleanCheckedLabel: \"Kyllä\",\n booleanUncheckedLabel: \"Ei\",\n confirmRemoveFile: \"Haluatko varmasti poistaa tämän tiedoston: {0}?\",\n confirmRemoveAllFiles: \"Haluatko varmasti poistaa kaikki tiedostot?\",\n questionTitlePatternText: \"Kysymyksen otsikko\",\n modalCancelButtonText: \"Peruuta\",\n modalApplyButtonText: \"Käytä\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fi\"] = finnishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fi\"] = \"suomi\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/french.ts\":\n/*!************************************!*\\\n !*** ./src/localization/french.ts ***!\n \\************************************/\n/*! exports provided: frenchSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"frenchSurveyStrings\", function() { return frenchSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar frenchSurveyStrings = {\n pagePrevText: \"Précédent\",\n pageNextText: \"Suivant\",\n completeText: \"Terminer\",\n previewText: \"Aperçu\",\n editText: \"Modifier\",\n startSurveyText: \"Commencer\",\n otherItemText: \"Autre (préciser)\",\n noneItemText: \"Aucun\",\n selectAllItemText: \"Tout sélectionner\",\n progressText: \"Page {0} sur {1}\",\n panelDynamicProgressText: \"Enregistrement {0} sur {1}\",\n questionsProgressText: \"{0}/{1} question(s) répondue(s)\",\n emptySurvey: \"Il n'y a ni page visible ni question visible dans ce questionnaire\",\n completingSurvey: \"Merci d'avoir répondu au questionnaire !\",\n completingSurveyBefore: \"Nos données indiquent que vous avez déjà rempli ce questionnaire.\",\n loadingSurvey: \"Le questionnaire est en cours de chargement...\",\n optionsCaption: \"Choisissez...\",\n value: \"valeur\",\n requiredError: \"La réponse à cette question est obligatoire.\",\n requiredErrorInPanel: \"Merci de répondre au moins à une question.\",\n requiredInAllRowsError: \"Toutes les lignes sont obligatoires\",\n numericError: \"La réponse doit être un nombre.\",\n textMinLength: \"Merci de saisir au moins {0} caractères.\",\n textMaxLength: \"Merci de saisir moins de {0} caractères.\",\n textMinMaxLength: \"Merci de saisir entre {0} et {1} caractères.\",\n minRowCountError: \"Merci de compléter au moins {0} lignes.\",\n minSelectError: \"Merci de sélectionner au minimum {0} réponses.\",\n maxSelectError: \"Merci de sélectionner au maximum {0} réponses.\",\n numericMinMax: \"Votre réponse '{0}' doit être supérieure ou égale à {1} et inférieure ou égale à {2}\",\n numericMin: \"Votre réponse '{0}' doit être supérieure ou égale à {1}\",\n numericMax: \"Votre réponse '{0}' doit être inférieure ou égale à {1}\",\n invalidEmail: \"Merci d'entrer une adresse mail valide.\",\n invalidExpression: \"L'expression: {0} doit retourner 'true'.\",\n urlRequestError: \"La requête a renvoyé une erreur '{0}'. {1}\",\n urlGetChoicesError: \"La requête a renvoyé des données vides ou la propriété 'path' est incorrecte\",\n exceedMaxSize: \"La taille du fichier ne doit pas excéder {0}.\",\n otherRequiredError: \"Merci de préciser le champ 'Autre'.\",\n uploadingFile: \"Votre fichier est en cours de chargement. Merci d'attendre quelques secondes et de réessayer.\",\n loadingFile: \"Chargement...\",\n chooseFile: \"Ajouter des fichiers...\",\n noFileChosen: \"Aucun fichier ajouté\",\n confirmDelete: \"Voulez-vous supprimer cet enregistrement ?\",\n keyDuplicationError: \"Cette valeur doit être unique.\",\n addColumn: \"Ajouter une colonne\",\n addRow: \"Ajouter une ligne\",\n removeRow: \"Supprimer\",\n addPanel: \"Ajouter\",\n removePanel: \"Supprimer\",\n choices_Item: \"item\",\n matrix_column: \"Colonne\",\n matrix_row: \"Ligne\",\n savingData: \"Les résultats sont en cours de sauvegarde sur le serveur...\",\n savingDataError: \"Une erreur est survenue et a empêché la sauvegarde des résultats.\",\n savingDataSuccess: \"Les résultats ont bien été enregistrés !\",\n saveAgainButton: \"Réessayer\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Vous avez passé {0} sur cette page et {1} au total.\",\n timerSpentPage: \"Vous avez passé {0} sur cette page.\",\n timerSpentSurvey: \"Vous avez passé {0} au total.\",\n timerLimitAll: \"Vous avez passé {0} sur {1} sur cette page et {2} sur {3} au total.\",\n timerLimitPage: \"Vous avez passé {0} sur {1} sur cette page.\",\n timerLimitSurvey: \"Vous avez passé {0} sur {1} au total.\",\n cleanCaption: \"Nettoyer\",\n clearCaption: \"Vider\",\n chooseFileCaption: \"Ajouter un fichier\",\n removeFileCaption: \"Enlever ce fichier\",\n booleanCheckedLabel: \"Oui\",\n booleanUncheckedLabel: \"Non\",\n confirmRemoveFile: \"Êtes-vous certains de vouloir supprimer ce fichier : {0}?\",\n confirmRemoveAllFiles: \"Êtes-vous certains de vouloir supprimer tous les fichiers?\",\n questionTitlePatternText: \"Titre de la question\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fr\"] = frenchSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fr\"] = \"français\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/georgian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/georgian.ts ***!\n \\**************************************/\n/*! exports provided: georgianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"georgianSurveyStrings\", function() { return georgianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar georgianSurveyStrings = {\n pagePrevText: \"უკან\",\n pageNextText: \"შემდეგ\",\n completeText: \"დასრულება\",\n progressText: \"გვერდი {0} / {1}\",\n emptySurvey: \"არცერთი კითხვა არ არის.\",\n completingSurvey: \"გმადლობთ კითხვარის შევსებისთვის!\",\n loadingSurvey: \"ჩატვირთვა სერვერიდან...\",\n otherItemText: \"სხვა (გთხოვთ მიუთითეთ)\",\n optionsCaption: \"არჩევა...\",\n requiredError: \"გთხოვთ უპასუხეთ კითხვას.\",\n numericError: \"პასუხი უნდა იყოს რიცხვი.\",\n textMinLength: \"გთხოვთ შეიყვანეთ არანაკლებ {0} სიმბოლო.\",\n minSelectError: \"გთხოვთ აირჩიეთ არანაკლებ {0} ვარიანტი.\",\n maxSelectError: \"გთხოვთ აირჩიეთ არაუმეტეს {0} ვარიანტი.\",\n numericMinMax: \"'{0}' უნდა იყოს მეტი ან ტოლი, ვიდრე {1}, და ნაკლები ან ტოლი ვიდრე {2}\",\n numericMin: \"'{0}' უნდა იყოს მეტი ან ტოლი ვიდრე {1}\",\n numericMax: \"'{0}' უნდა იყოს ნაკლები ან ტოლი ვიდრე {1}\",\n invalidEmail: \"გთხოვთ შეიყვანოთ ელ. ფოსტის რეალური მისამართი.\",\n otherRequiredEror: \"გთხოვთ შეავსეთ ველი 'სხვა'\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ka\"] = georgianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ka\"] = \"ქართული\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/german.ts\":\n/*!************************************!*\\\n !*** ./src/localization/german.ts ***!\n \\************************************/\n/*! exports provided: germanSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"germanSurveyStrings\", function() { return germanSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar germanSurveyStrings = {\n pagePrevText: \"Zurück\",\n pageNextText: \"Weiter\",\n completeText: \"Abschließen\",\n previewText: \"Vorschau\",\n editText: \"Bearbeiten\",\n startSurveyText: \"Start\",\n otherItemText: \"Sonstiges (Bitte angeben)\",\n noneItemText: \"Nichts trifft zu\",\n selectAllItemText: \"Alles auswählen\",\n progressText: \"Seite {0} von {1}\",\n panelDynamicProgressText: \"Eintrag {0} von {1}\",\n questionsProgressText: \"{0}/{1} Fragen beantwortet\",\n emptySurvey: \"Es sind keine Fragen vorhanden.\",\n completingSurvey: \"Vielen Dank, dass Sie die Umfrage abgeschlossen haben!\",\n completingSurveyBefore: \"Wir haben festgestellt, dass Sie diese Umfrage bereits abgeschlossen haben.\",\n loadingSurvey: \"Umfrage wird geladen...\",\n optionsCaption: \"Bitte auswählen...\",\n value: \"Wert\",\n requiredError: \"Bitte beantworten Sie diese Frage.\",\n requiredErrorInPanel: \"Bitte beantworten Sie mindestens eine Frage.\",\n requiredInAllRowsError: \"Bitte beantworten Sie alle Fragen.\",\n numericError: \"Der Wert muss eine Zahl sein.\",\n textMinLength: \"Bitte geben Sie mindestens {0} Zeichen ein.\",\n textMaxLength: \"Bitte geben Sie nicht mehr als {0} Zeichen ein.\",\n textMinMaxLength: \"Bitte geben Sie mindestens {0} und maximal {1} Zeichen ein.\",\n minRowCountError: \"Bitte machen Sie in mindestens {0} Zeilen eine Eingabe.\",\n minSelectError: \"Bitte wählen Sie mindestens {0} Antwort(en) aus.\",\n maxSelectError: \"Bitte wählen Sie nicht mehr als {0} Antwort(en) aus.\",\n numericMinMax: \"'{0}' muss größer oder gleich {1} und kleiner oder gleich {2} sein\",\n numericMin: \"'{0}' muss größer oder gleich {1} sein\",\n numericMax: \"'{0}' muss kleiner oder gleich {1} sein\",\n invalidEmail: \"Bitte geben Sie eine gültige E-Mail-Adresse ein.\",\n invalidExpression: \"Der Ausdruck: {0} muss den Wert 'wahr' zurückgeben.\",\n urlRequestError: \"Ein Netzwerkdienst hat folgenden Fehler zurückgegeben '{0}'. {1}\",\n urlGetChoicesError: \"Eine Netzwerkdienst hat ungültige Daten zurückgegeben\",\n exceedMaxSize: \"Die Datei darf nicht größer als {0} sein.\",\n otherRequiredError: \"Bitte geben Sie einen Wert an.\",\n uploadingFile: \"Bitte warten Sie bis der Upload Ihrer Dateien abgeschlossen ist.\",\n loadingFile: \"Wird hochgeladen...\",\n chooseFile: \"Datei(en) auswählen...\",\n noFileChosen: \"Keine Datei ausgewählt\",\n confirmDelete: \"Wollen Sie den Eintrag löschen?\",\n keyDuplicationError: \"Dieser Wert muss einmalig sein.\",\n addColumn: \"Spalte hinzufügen\",\n addRow: \"Zeile hinzufügen\",\n removeRow: \"Entfernen\",\n addPanel: \"Neu hinzufügen\",\n removePanel: \"Entfernen\",\n choices_Item: \"Element\",\n matrix_column: \"Spalte\",\n matrix_row: \"Zeile\",\n savingData: \"Die Ergebnisse werden auf dem Server gespeichert...\",\n savingDataError: \"Es ist ein Fehler aufgetreten. Die Ergebnisse konnten nicht gespeichert werden.\",\n savingDataSuccess: \"Die Ergebnisse wurden gespeichert!\",\n saveAgainButton: \"Erneut absenden\",\n timerMin: \"Min.\",\n timerSec: \"Sek.\",\n timerSpentAll: \"Sie waren {0} auf dieser Seite und brauchten insgesamt {1}.\",\n timerSpentPage: \"Sie waren {0} auf dieser Seite.\",\n timerSpentSurvey: \"Sie haben insgesamt {0} gebraucht.\",\n timerLimitAll: \"Sie waren {0} von {1} auf dieser Seite und brauchten insgesamt {2} von {3}.\",\n timerLimitPage: \"Sie waren {0} von {1} auf dieser Seite.\",\n timerLimitSurvey: \"Sie haben insgesamt {0} von {1} gebraucht.\",\n cleanCaption: \"Alles löschen\",\n clearCaption: \"Auswahl entfernen\",\n chooseFileCaption: \"Datei auswählen\",\n removeFileCaption: \"Datei löschen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nein\",\n confirmRemoveFile: \"Sind Sie sicher, dass Sie diese Datei löschen möchten: {0}?\",\n confirmRemoveAllFiles: \"Sind Sie sicher, dass Sie alle Dateien löschen möchten?\",\n questionTitlePatternText: \"Fragentitel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"de\"] = germanSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"de\"] = \"deutsch\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/greek.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/greek.ts ***!\n \\***********************************/\n/*! exports provided: greekSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"greekSurveyStrings\", function() { return greekSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created by https://github.com/agelospanagiotakis\n\nvar greekSurveyStrings = {\n pagePrevText: \"Προηγούμενο\",\n pageNextText: \"Επόμενο\",\n completeText: \"Ολοκλήρωση\",\n previewText: \"Προεπισκόπηση\",\n editText: \"Επεξεργασία\",\n startSurveyText: \"Αρχή\",\n otherItemText: \"Άλλο (παρακαλώ διευκρινίστε)\",\n noneItemText: \"Κανένας\",\n selectAllItemText: \"Επιλογή όλων\",\n progressText: \"Σελίδα {0} από {1}\",\n panelDynamicProgressText: \"Εγγραφή {0} από {1}\",\n questionsProgressText: \"Απαντήθηκαν {0} / {1} ερωτήσεις\",\n emptySurvey: \"Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.\",\n completingSurvey: \"Ευχαριστούμε για την συμπλήρωση αυτού του ερωτηματολογίου!\",\n completingSurveyBefore: \"Τα αρχεία μας δείχνουν ότι έχετε ήδη ολοκληρώσει αυτήν την έρευνα.\",\n loadingSurvey: \"Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...\",\n optionsCaption: \"Επιλέξτε...\",\n value: \"αξία\",\n requiredError: \"Παρακαλώ απαντήστε στην ερώτηση.\",\n requiredErrorInPanel: \"Απαντήστε σε τουλάχιστον μία ερώτηση.\",\n requiredInAllRowsError: \"Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.\",\n numericError: \"Η τιμή πρέπει να είναι αριθμητική.\",\n textMinLength: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.\",\n textMaxLength: \"Εισαγάγετε λιγότερους από {0} χαρακτήρες.\",\n textMinMaxLength: \"Εισαγάγετε περισσότερους από {0} και λιγότερους από {1} χαρακτήρες.\",\n minRowCountError: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.\",\n minSelectError: \"Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.\",\n maxSelectError: \"Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.\",\n numericMinMax: \"Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}\",\n numericMin: \"Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}\",\n numericMax: \"Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}\",\n invalidEmail: \"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.\",\n invalidExpression: \"Η έκφραση: {0} θα πρέπει να επιστρέψει 'true'.\",\n urlRequestError: \"Η αίτηση επέστρεψε σφάλμα '{0}'. {1}\",\n urlGetChoicesError: \"Η αίτηση επέστρεψε κενά δεδομένα ή η ιδιότητα 'μονοπάτι/path' είναι εσφαλμένη\",\n exceedMaxSize: \"Το μέγεθος δεν μπορεί να υπερβαίνει τα {0}.\",\n otherRequiredError: \"Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.\",\n uploadingFile: \"Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.\",\n loadingFile: \"Φόρτωση...\",\n chooseFile: \"Επιλογή αρχείων ...\",\n noFileChosen: \"Δεν έχει επιλεγεί αρχείο\",\n confirmDelete: \"Θέλετε να διαγράψετε την εγγραφή;\",\n keyDuplicationError: \"Αυτή η τιμή πρέπει να είναι μοναδική.\",\n addColumn: \"Προσθήκη στήλης\",\n addRow: \"Προσθήκη γραμμής\",\n removeRow: \"Αφαίρεση\",\n addPanel: \"Προσθεσε νεο\",\n removePanel: \"Αφαιρώ\",\n choices_Item: \"είδος\",\n matrix_column: \"Στήλη\",\n matrix_row: \"Σειρά\",\n savingData: \"Τα αποτελέσματα αποθηκεύονται στον διακομιστή ...\",\n savingDataError: \"Παρουσιάστηκε σφάλμα και δεν ήταν δυνατή η αποθήκευση των αποτελεσμάτων.\",\n savingDataSuccess: \"Τα αποτελέσματα αποθηκεύτηκαν με επιτυχία!\",\n saveAgainButton: \"Προσπάθησε ξανά\",\n timerMin: \"ελάχ\",\n timerSec: \"δευτ\",\n timerSpentAll: \"Έχετε δαπανήσει {0} σε αυτήν τη σελίδα και {1} συνολικά.\",\n timerSpentPage: \"Έχετε ξοδέψει {0} σε αυτήν τη σελίδα.\",\n timerSpentSurvey: \"Έχετε ξοδέψει συνολικά {0}.\",\n timerLimitAll: \"Έχετε δαπανήσει {0} από {1} σε αυτήν τη σελίδα και {2} από {3} συνολικά.\",\n timerLimitPage: \"Έχετε ξοδέψει {0} από {1} σε αυτήν τη σελίδα.\",\n timerLimitSurvey: \"Έχετε ξοδέψει {0} από {1} συνολικά.\",\n cleanCaption: \"ΚΑΘΑΡΗ\",\n clearCaption: \"Σαφή\",\n chooseFileCaption: \"Επιλέξτε το αρχείο\",\n removeFileCaption: \"Καταργήστε αυτό το αρχείο\",\n booleanCheckedLabel: \"Ναί\",\n booleanUncheckedLabel: \"Οχι\",\n confirmRemoveFile: \"Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτό το αρχείο: {0};\",\n confirmRemoveAllFiles: \"Είστε βέβαιοι ότι θέλετε να καταργήσετε όλα τα αρχεία;\",\n questionTitlePatternText: \"Τίτλος ερώτησης\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"gr\"] = greekSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"gr\"] = \"ελληνικά\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hebrew.ts\":\n/*!************************************!*\\\n !*** ./src/localization/hebrew.ts ***!\n \\************************************/\n/*! exports provided: hebrewSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hebrewSurveyStrings\", function() { return hebrewSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hebrewSurveyStrings = {\n pagePrevText: \"אחורה\",\n pageNextText: \"קדימה\",\n completeText: \"סיום\",\n previewText: \"תצוגה מקדימה\",\n editText: \"לַעֲרוֹך\",\n startSurveyText: \"הַתחָלָה\",\n otherItemText: \"אחר (נא לתאר)\",\n noneItemText: \"אף אחד\",\n selectAllItemText: \"בחר הכל\",\n progressText: \"דף {1} מתוך {0}\",\n panelDynamicProgressText: \"הקלטה {0} מתוך {1}\",\n questionsProgressText: \"ענה על שאלות\",\n emptySurvey: \"אין שאלות\",\n completingSurvey: \"תודה על מילוי השאלון!\",\n completingSurveyBefore: \"הרשומות שלנו מראות שכבר סיימת את הסקר הזה.\",\n loadingSurvey: \"טעינה מהשרת...\",\n optionsCaption: \"בחר...\",\n value: \"ערך\",\n requiredError: \"אנא השב על השאלה\",\n requiredErrorInPanel: \"אנא ענה לפחות על שאלה אחת.\",\n requiredInAllRowsError: \"אנא ענה על שאלות בכל השורות.\",\n numericError: \"התשובה צריכה להיות מספר.\",\n textMinLength: \"הזן לפחות {0} תווים.\",\n textMaxLength: \"הזן פחות מ- {0} תווים.\",\n textMinMaxLength: \"הזן יותר מ- {0} ופחות מ- {1} תווים.\",\n minRowCountError: \"אנא מלא לפחות {0} שורות.\",\n minSelectError: \"בחר לפחות {0} אפשרויות.\",\n maxSelectError: \"בחר עד {0} אפשרויות.\",\n numericMinMax: \"'{0}' חייב להיות שווה או גדול מ {1}, ושווה ל- {2} או פחות מ- {}}\",\n numericMin: \"'{0}' חייב להיות שווה או גדול מ {1}\",\n numericMax: \"'{0}' חייב להיות שווה או קטן מ {1}\",\n invalidEmail: 'הזן כתובת דוא\"ל חוקית.',\n invalidExpression: \"הביטוי: {0} צריך להחזיר 'אמת'.\",\n urlRequestError: \"הבקשה החזירה את השגיאה '{0}'. {1}\",\n urlGetChoicesError: \"הבקשה החזירה נתונים ריקים או שהמאפיין 'נתיב' שגוי\",\n exceedMaxSize: \"גודל הקובץ לא יעלה על {0}.\",\n otherRequiredError: 'נא להזין נתונים בשדה \"אחר\"',\n uploadingFile: \"הקובץ שלך נטען. המתן מספר שניות ונסה שוב.\",\n loadingFile: \"טוען...\",\n chooseFile: \"לבחור קבצים...\",\n noFileChosen: \"לא נבחר קובץ\",\n confirmDelete: \"האם אתה רוצה למחוק את הרשומה?\",\n keyDuplicationError: \"ערך זה צריך להיות ייחודי.\",\n addColumn: \"הוסף עמודה\",\n addRow: \"להוסיף שורה\",\n removeRow: \"לְהַסִיר\",\n addPanel: \"הוסף חדש\",\n removePanel: \"לְהַסִיר\",\n choices_Item: \"פריט\",\n matrix_column: \"טור\",\n matrix_row: \"שׁוּרָה\",\n savingData: \"התוצאות נשמרות בשרת ...\",\n savingDataError: \"אירעה שגיאה ולא הצלחנו לשמור את התוצאות.\",\n savingDataSuccess: \"התוצאות נשמרו בהצלחה!\",\n saveAgainButton: \"נסה שוב\",\n timerMin: \"דקה\",\n timerSec: \"שניות\",\n timerSpentAll: \"הוצאת {0} בדף זה ובסך הכל {1}.\",\n timerSpentPage: \"הוצאת {0} בדף זה.\",\n timerSpentSurvey: \"הוצאת סכום כולל של {0}.\",\n timerLimitAll: \"הוצאת {0} מתוך {1} בדף זה ו- {2} מתוך {3} בסך הכל.\",\n timerLimitPage: \"הוצאת {0} מתוך {1} בדף זה.\",\n timerLimitSurvey: \"הוצאת סכום כולל של {0} מתוך {1}.\",\n cleanCaption: \"לְנַקוֹת\",\n clearCaption: \"ברור\",\n chooseFileCaption: \"בחר קובץ\",\n removeFileCaption: \"הסר קובץ זה\",\n booleanCheckedLabel: \"כן\",\n booleanUncheckedLabel: \"לא\",\n confirmRemoveFile: \"האם אתה בטוח שברצונך להסיר קובץ זה: {0}?\",\n confirmRemoveAllFiles: \"האם אתה בטוח שברצונך להסיר את כל הקבצים?\",\n questionTitlePatternText: \"כותרת שאלה\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"he\"] = hebrewSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"he\"] = \"עברית\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hindi.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/hindi.ts ***!\n \\***********************************/\n/*! exports provided: hindiStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hindiStrings\", function() { return hindiStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hindiStrings = {\n pagePrevText: \"पिछला\",\n pageNextText: \"अगला\",\n completeText: \"पूरा\",\n previewText: \"पूर्वसमीक्षा\",\n editText: \"संपादित\",\n startSurveyText: \"शुरू\",\n otherItemText: \"दूसरा (वर्णन करें)\",\n noneItemTex: \"कोई नहीं\",\n selectAllItemText: \"सभी का चयन करें\",\n progressText: \"पृष्ठ 1 में से 0\",\n panelDynamicProgressText: \" दस्तावेज {1} के {0}\",\n questionsProgressText: \"{1} सवालों में से {0} के जवाब दिए\",\n emptySurvey: \"सर्वेक्षण में कोई दृश्यमान पृष्ठ या प्रश्न नहीं है\",\n completingSurvey: \"सर्वेक्षण को पूरा करने के लिए धन्यवाद\",\n completingSurveyBefore: \" हमारे रिकॉर्ड बताते हैं कि आप पहले ही इस सर्वेक्षण को पूरा कर चुके हैं\",\n loadingSurvey: \"सर्वेक्षण खुल रहा है.…\",\n optionsCaption: \"चुनें\",\n value: \"मूल्य\",\n requiredError: \"कृपया प्रश्न का उत्तर दें\",\n requiredErrorInPanel: \"कृपया कम से कम एक प्रश्न का उत्तर दें\",\n requiredInAllRowsError: \"कृपया सभी पंक्तियों में सवालों के जवाब दें\",\n numericError: \"मूल्य संख्यात्मक होना चाहिए\",\n textMinLength: \"कृपया कम से कम {0} वर्ण दर्ज करें\",\n textMaxLength: \"कृपया {0} से कम वर्ण दर्ज करें\",\n textMinMaxLength: \"कृपया {0} से अधिक और {1} से कम पात्रों में प्रवेश करें\",\n minRowCountError: \"कृपया कम से कम {0} पंक्तियों को भरें\",\n minSelectError: \"कृपया कम से कम {0} विकल्प का चयन करें\",\n maxSelectError: \"कृपया {0} विकल्पों से अधिक नहीं चुनें\",\n numericMinMax: \"'{0}' {1} से बराबर या अधिक और {2} से बराबर या कम होना चाहिए\",\n numericMin: \"'{0}' {1} से बराबर या अधिक होना चाहिए\",\n numericMax: \"'{0}' {1} से बराबर या कम होना चाहिए\",\n invalidEmail: \"कृपया एक वैध ईमेल पता दर्ज करें\",\n invalidExpression: \"अभिव्यक्ति: {0} को ' सच ' लौटना चाहिए\",\n urlRequestError: \"अनुरोध लौटाया त्रुटि '{0}' . {1}\",\n urlGetChoicesError: \"अनुरोध ने खाली डेटा वापस कर दिया है \",\n exceedMaxSize: \"फ़ाइल का आकार {0} से अधिक नहीं होना चाहिए या फिर 'पाथ' प्रॉपर्टी गलत है\",\n otherRequiredError: \"कृपया दूसरा मूल्य दर्ज करें\",\n uploadingFile: \"आपकी फाइल अपलोड हो रही है। कृपया कई सेकंड इंतजार करें और फिर से प्रयास करें।\",\n loadingFile: \"लोडिंग\",\n chooseFile: \"फ़ाइल चुनें\",\n noFileChosen: \"कोई फाइल नहीं चुनी गई\",\n confirmDelete: \"क्या आप रिकॉर्ड हटाना चाहते हैं\",\n keyDuplicationError: \"यह मान अनोखा होना चाहिए\",\n addColumn: \"कॉलम जोड़ें\",\n addRow: \"पंक्ति जोड़ें\",\n removeRow: \"हटाए\",\n addPanel: \"नया जोड़ें\",\n removePanel: \"हटाए\",\n choices_Item: \"मद\",\n matrix_column: \"कॉलम\",\n matrix_row: \"पंक्ति\",\n savingData: \"परिणाम सर्वर पर सेव हो रहे हैं\",\n savingDataError: \"एक त्रुटि हुई और हम परिणामों को नहीं सेव कर सके\",\n savingDataSuccess: \"परिणाम सफलतापूर्वक सेव हो गए\",\n saveAgainButton: \"फिर कोशिश करो\",\n timerMin: \"मिनट\",\n timerSec: \"सेकंड\",\n timerSpentAll: \"आपने इस पृष्ठ पर {0} खर्च किए हैं और कुल {1}\",\n timerSpentPage: \"आपने इस पृष्ठ पर {0} खर्च किया है\",\n timerSpentSurvey: \"आपने कुल {0} खर्च किया है\",\n timerLimitAll: \"आपने इस पृष्ठ पर {1} की {0} और कुल {3} की {2} खर्च की है।\",\n timerLimitPage: \"आपने इस पृष्ठ पर {1} का {0} खर्च किया है\",\n timerLimitSurvey: \"आपने कुल {1} की {0} खर्च की है\",\n cleanCaption: \"साफ\",\n clearCaption: \"स्पष्ट\",\n chooseFileCaption: \"फ़ाइल चुनें\",\n removeFileCaption: \"इस फाइल को निकालें\",\n booleanCheckedLabel: \"हाँ\",\n booleanUncheckedLabel: \"नहीं\",\n confirmRemoveFile: \"क्या आप सुनिश्चित हैं कि आप इस फ़ाइल को हटाना चाहते हैं: {0}\",\n confirmRemoveAllFiles: \"क्या आप सुनिश्चित हैं कि आप सभी फ़ाइलों को हटाना चाहते हैं\",\n questionTitlePatternText: \"प्रश्न का शीर्षक\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hi\"] = hindiStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hi\"] = \"hindi\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/hungarian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/hungarian.ts ***!\n \\***************************************/\n/*! exports provided: hungarianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hungarianSurveyStrings\", function() { return hungarianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar hungarianSurveyStrings = {\n pagePrevText: \"Vissza\",\n pageNextText: \"Tovább\",\n completeText: \"Kész\",\n previewText: \"Előnézet\",\n editText: \"Szerkesztés\",\n startSurveyText: \"Rajt\",\n otherItemText: \"Egyéb (adja meg)\",\n noneItemText: \"Egyik sem\",\n selectAllItemText: \"Mindet kiválaszt\",\n progressText: \"{0}./{1} oldal\",\n panelDynamicProgressText: \"{0} / {1} rekord\",\n questionsProgressText: \"Válaszolt kérdések: {0} / {1}\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Köszönjük, hogy kitöltötte felmérésünket!\",\n completingSurveyBefore: \"Már kitöltötte a felmérést.\",\n loadingSurvey: \"Felmérés betöltése...\",\n optionsCaption: \"Válasszon...\",\n value: \"érték\",\n requiredError: \"Kérjük, válaszolja meg ezt a kérdést!\",\n requiredErrorInPanel: \"Kérjük, válaszoljon legalább egy kérdésre.\",\n requiredInAllRowsError: \"Kérjük adjon választ minden sorban!\",\n numericError: \"Az érték szám kell, hogy legyen!\",\n textMinLength: \"Adjon meg legalább {0} karaktert!\",\n textMaxLength: \"Legfeljebb {0} karaktert adjon meg!\",\n textMinMaxLength: \"Adjon meg legalább {0}, de legfeljebb {1} karaktert!\",\n minRowCountError: \"Töltsön ki minimum {0} sort!\",\n minSelectError: \"Válasszon ki legalább {0} lehetőséget!\",\n maxSelectError: \"Ne válasszon többet, mint {0} lehetőség!\",\n numericMinMax: \"'{0}' legyen nagyobb, vagy egyenlő, mint {1} és kisebb, vagy egyenlő, mint {2}!\",\n numericMin: \"'{0}' legyen legalább {1}!\",\n numericMax: \"The '{0}' ne legyen nagyobb, mint {1}!\",\n invalidEmail: \"Adjon meg egy valós email címet!\",\n invalidExpression: \"A következő kifejezés: {0} vissza kell adnia az „igaz” értéket.\",\n urlRequestError: \"A lekérdezés hibával tért vissza: '{0}'. {1}\",\n urlGetChoicesError: \"A lekérdezés üres adattal tért vissza, vagy a 'path' paraméter helytelen.\",\n exceedMaxSize: \"A méret nem lehet nagyobb, mint {0}.\",\n otherRequiredError: \"Adja meg az egyéb értéket!\",\n uploadingFile: \"Feltöltés folyamatban. Várjon pár másodpercet, majd próbálja újra.\",\n loadingFile: \"Betöltés...\",\n chooseFile: \"Fájlok kiválasztása ...\",\n noFileChosen: \"Nincs kiválasztva fájl\",\n confirmDelete: \"Törli ezt a rekordot?\",\n keyDuplicationError: \"Az értéknek egyedinek kell lennie.\",\n addColumn: \"Oszlop hozzáadása\",\n addRow: \"Sor hozzáadása\",\n removeRow: \"Eltávolítás\",\n addPanel: \"Új hozzáadása\",\n removePanel: \"Eltávolítás\",\n choices_Item: \"elem\",\n matrix_column: \"Oszlop\",\n matrix_row: \"Sor\",\n savingData: \"Eredmény mentése a szerverre...\",\n savingDataError: \"Egy hiba folytán nem tudtuk elmenteni az eredményt.\",\n savingDataSuccess: \"Eredmény sikeresen mentve!\",\n saveAgainButton: \"Próbálja újra\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Ön {0} összeget költött ezen az oldalon, és összesen {1}.\",\n timerSpentPage: \"{0} összeget költött ezen az oldalon.\",\n timerSpentSurvey: \"Összesen {0} költött.\",\n timerLimitAll: \"Ön {0} / {1} összeget költött ezen az oldalon, és összesen {2} / {3}.\",\n timerLimitPage: \"Ön {0} / {1} összeget költött ezen az oldalon.\",\n timerLimitSurvey: \"Összesen {0} / {1} összeget költött el.\",\n cleanCaption: \"Tiszta\",\n clearCaption: \"Egyértelmű\",\n chooseFileCaption: \"Válassz fájlt\",\n removeFileCaption: \"Távolítsa el ezt a fájlt\",\n booleanCheckedLabel: \"Igen\",\n booleanUncheckedLabel: \"Nem\",\n confirmRemoveFile: \"Biztosan eltávolítja ezt a fájlt: {0}?\",\n confirmRemoveAllFiles: \"Biztosan el akarja távolítani az összes fájlt?\",\n questionTitlePatternText: \"Kérdés címe\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"hu\"] = hungarianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"hu\"] = \"magyar\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/icelandic.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/icelandic.ts ***!\n \\***************************************/\n/*! exports provided: icelandicSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"icelandicSurveyStrings\", function() { return icelandicSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar icelandicSurveyStrings = {\n pagePrevText: \"Tilbaka\",\n pageNextText: \"Áfram\",\n completeText: \"Lokið\",\n previewText: \"Forskoða\",\n editText: \"Breyta\",\n startSurveyText: \"Byrjaðu\",\n otherItemText: \"Hinn (skýring)\",\n noneItemText: \"Enginn\",\n selectAllItemText: \"Velja allt\",\n progressText: \"Síða {0} of {1}\",\n panelDynamicProgressText: \"Taka upp {0} af {1}\",\n questionsProgressText: \"Svarað {0} / {1} spurningum\",\n emptySurvey: \"Það er enginn síða eða spurningar í þessari könnun.\",\n completingSurvey: \"Takk fyrir að fyllja út þessa könnun!\",\n completingSurveyBefore: \"Skrár okkar sýna að þú hefur þegar lokið þessari könnun.\",\n loadingSurvey: \"Könnunin er að hlaða...\",\n optionsCaption: \"Veldu...\",\n value: \"gildi\",\n requiredError: \"Vinsamlegast svarið spurningunni.\",\n requiredErrorInPanel: \"Vinsamlegast svaraðu að minnsta kosti einni spurningu.\",\n requiredInAllRowsError: \"Vinsamlegast svarið spurningum í öllum röðum.\",\n numericError: \"Þetta gildi verður að vera tala.\",\n textMinLength: \"Það ætti að vera minnst {0} tákn.\",\n textMaxLength: \"Það ætti að vera mest {0} tákn.\",\n textMinMaxLength: \"Það ætti að vera fleiri en {0} og færri en {1} tákn.\",\n minRowCountError: \"Vinsamlegast fyllið úr að minnsta kosti {0} raðir.\",\n minSelectError: \"Vinsamlegast veljið að minnsta kosti {0} möguleika.\",\n maxSelectError: \"Vinsamlegast veljið ekki fleiri en {0} möguleika.\",\n numericMinMax: \"'{0}' ætti að vera meira en eða jafnt og {1} minna en eða jafnt og {2}\",\n numericMin: \"{0}' ætti að vera meira en eða jafnt og {1}\",\n numericMax: \"'{0}' ætti að vera minna en eða jafnt og {1}\",\n invalidEmail: \"Vinsamlegast sláið inn gilt netfang.\",\n invalidExpression: \"Tjáningin: {0} ætti að skila 'satt'.\",\n urlRequestError: \"Beiðninn skilaði eftirfaranadi villu '{0}'. {1}\",\n urlGetChoicesError: \"Beiðninng skilaði engum gögnum eða slóðinn var röng\",\n exceedMaxSize: \"Skráinn skal ekki vera stærri en {0}.\",\n otherRequiredError: \"Vinamlegast fyllið út hitt gildið.\",\n uploadingFile: \"Skráinn þín var send. Vinsamlegast bíðið í nokkrar sekúndur og reynið aftur.\",\n loadingFile: \"Hleður ...\",\n chooseFile: \"Veldu skrár ...\",\n noFileChosen: \"Engin skrá valin\",\n confirmDelete: \"Viltu eyða skránni?\",\n keyDuplicationError: \"Þetta gildi ætti að vera einstakt.\",\n addColumn: \"Bæta við dálki\",\n addRow: \"Bæta við röð\",\n removeRow: \"Fjarlægja\",\n addPanel: \"Bæta við nýju\",\n removePanel: \"Fjarlægðu\",\n choices_Item: \"hlutur\",\n matrix_column: \"Dálkur\",\n matrix_row: \"Röð\",\n savingData: \"Niðurstöðurnar eru að spara á netþjóninum ... \",\n savingDataError: \"Villa kom upp og við gátum ekki vistað niðurstöðurnar.\",\n savingDataSuccess: \"Árangurinn var vistaður með góðum árangri!\",\n saveAgainButton: \"Reyndu aftur\",\n timerMin: \"mín\",\n timerSec: \"sek\",\n timerSpentAll: \"Þú hefur eytt {0} á þessari síðu og {1} samtals.\",\n timerSpentPage: \"Þú hefur eytt {0} á þessari síðu.\",\n timerSpentSurvey: \"Þú hefur eytt {0} samtals.\",\n timerLimitAll: \"Þú hefur eytt {0} af {1} á þessari síðu og {2} af {3} samtals.\",\n timerLimitPage: \"Þú hefur eytt {0} af {1} á þessari síðu.\",\n timerLimitSurvey: \"Þú hefur eytt {0} af {1} samtals.\",\n cleanCaption: \"Hreint\",\n clearCaption: \"Hreinsa\",\n chooseFileCaption: \"Veldu skrá\",\n removeFileCaption: \"Fjarlægðu þessa skrá\",\n booleanCheckedLabel: \"Já\",\n booleanUncheckedLabel: \"Nei\",\n confirmRemoveFile: \"Ertu viss um að þú viljir fjarlægja þessa skrá: {0}?\",\n confirmRemoveAllFiles: \"Ertu viss um að þú viljir fjarlægja allar skrár?\",\n questionTitlePatternText: \"Spurningartitill\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"is\"] = icelandicSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"is\"] = \"íslenska\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/indonesian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/indonesian.ts ***!\n \\****************************************/\n/*! exports provided: indonesianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"indonesianStrings\", function() { return indonesianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar indonesianStrings = {\n pagePrevText: \"Sebelumnya\",\n pageNextText: \"Selanjutnya\",\n completeText: \"Selesai\",\n previewText: \"Pratinjau\",\n editText: \"Sunting\",\n startSurveyText: \"Mulai\",\n otherItemText: \"Lainnya (jelaskan)\",\n noneItemText: \"Tidak Ada\",\n selectAllItemText: \"Pilih Semua\",\n progressText: \"Halaman {0} dari {1}\",\n panelDynamicProgressText: \"Rekam {0} dari {1}\",\n questionsProgressText: \"Menjawab pertanyaan {0} / {1}\",\n emptySurvey: \"Tidak ada halaman atau pertanyaan dalam survei.\",\n completingSurvey: \"Terima kasih telah menyelesaikan survei!\",\n completingSurveyBefore: \"Catatan kami menunjukkan bahwa Anda telah menyelesaikan survei ini.\",\n loadingSurvey: \"Memuat survei...\",\n optionsCaption: \"Pilih...\",\n value: \"nilai\",\n requiredError: \"Silahkan jawab pertanyaan berikut.\",\n requiredErrorInPanel: \"Silahkan jawab setidaknya satu petanyaan.\",\n requiredInAllRowsError: \"Silahkan jawab pertanyaan pada semua baris.\",\n numericError: \"Nilai harus berupa angka.\",\n textMinLength: \"Silahkan masukkan setidaknya {0} karakter.\",\n textMaxLength: \"Silahkan masukkan kurang {0} karakter.\",\n textMinMaxLength: \"PSilahkan masukkan lebih dari {0} dan kurang dari {1} karakter.\",\n minRowCountError: \"Silahkan isi setidaknya {0} baris.\",\n minSelectError: \"Silahkan pilih setidaknya {0} varian.\",\n maxSelectError: \"Silahkan pilih tidak lebih dari {0} varian.\",\n numericMinMax: \"'{0}' harus sama dengan atau lebih dari {1} dan harus sama dengan atau kurang dari {2}\",\n numericMin: \"'{0}' harus sama dengan atau lebih dari {1}\",\n numericMax: \"'{0}' harus sama dengan atau kurang dari {1}\",\n invalidEmail: \"Silahkan masukkan e-mail yang benar.\",\n invalidExpression: \"Ekspresi: {0} harus mengembalikan 'benar'.\",\n urlRequestError: \"Permintaan mengembalikan kesalahan '{0}'. {1}\",\n urlGetChoicesError: \"Permintaan mengembalikan data kosong atau properti 'path' salah.\",\n exceedMaxSize: \"Ukuran berkas tidak boleh melebihi {0}.\",\n otherRequiredError: \"Silahkan masukkan nilai lainnnya.\",\n uploadingFile: \"Berkas Anda sedang diunggah. Silahkan tunggu beberapa saat atau coba lagi.\",\n loadingFile: \"Memuat...\",\n chooseFile: \"Pilih berkas...\",\n noFileChosen: \"Tidak ada file yang dipilih\",\n confirmDelete: \"Apakah Anda ingin menghapus catatan?\",\n keyDuplicationError: \"Nilai harus unik.\",\n addColumn: \"Tambah kolom\",\n addRow: \"Tambah baris\",\n removeRow: \"Hapus\",\n addPanel: \"Tambah baru\",\n removePanel: \"Hapus\",\n choices_Item: \"item\",\n matrix_column: \"Kolom\",\n matrix_row: \"Baris\",\n savingData: \"Hasil sedang disimpan pada server...\",\n savingDataError: \"Kesalahan terjadi dan kami tidak dapat menyimpan hasil.\",\n savingDataSuccess: \"Hasil telah sukses disimpan!\",\n saveAgainButton: \"Coba lagi\",\n timerMin: \"menit\",\n timerSec: \"detik\",\n timerSpentAll: \"Anda telah menghabiskan {0} pada halaman ini dan {1} secara keseluruhan.\",\n timerSpentPage: \"YAnda telah menghabiskan {0} pada halaman ini.\",\n timerSpentSurvey: \"Anda telah menghabiskan {0} secara keseluruhan.\",\n timerLimitAll: \"Anda telah menghabiskan {0} dari {1} pada halaman ini dan {2} dari {3} secara keseluruhan.\",\n timerLimitPage: \"Anda telah menghabiskan {0} dari {1} pada halaman ini.\",\n timerLimitSurvey: \"Anda telah menghabiskan {0} dari {1} secara keseluruhan.\",\n cleanCaption: \"Bersihkan\",\n clearCaption: \"Bersihkan\",\n chooseFileCaption: \"Pilih File\",\n removeFileCaption: \"Hapus berkas ini\",\n booleanCheckedLabel: \"Iya\",\n booleanUncheckedLabel: \"Tidak\",\n confirmRemoveFile: \"Anda yakin ingin menghapus file ini: {0}?\",\n confirmRemoveAllFiles: \"Anda yakin ingin menghapus semua file?\",\n questionTitlePatternText: \"Judul pertanyaan\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"id\"] = indonesianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"id\"] = \"bahasa Indonesia\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/italian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/italian.ts ***!\n \\*************************************/\n/*! exports provided: italianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"italianSurveyStrings\", function() { return italianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar italianSurveyStrings = {\n pagePrevText: \"Precedente\",\n pageNextText: \"Successivo\",\n completeText: \"Salva\",\n previewText: \"Anteprima\",\n editText: \"Modifica\",\n startSurveyText: \"Inizio\",\n otherItemText: \"Altro (descrivi)\",\n noneItemText: \"Nessuno\",\n selectAllItemText: \"Seleziona tutti\",\n progressText: \"Pagina {0} di {1}\",\n panelDynamicProgressText: \"Record di {0} di {1}\",\n questionsProgressText: \"Risposte a {0}/{1} domande\",\n emptySurvey: \"Non ci sono pagine o domande visibili nel questionario.\",\n completingSurvey: \"Grazie per aver completato il questionario!\",\n completingSurveyBefore: \"I nostri records mostrano che hai già completato questo questionario.\",\n loadingSurvey: \"Caricamento del questionario in corso...\",\n optionsCaption: \"Scegli...\",\n value: \"valore\",\n requiredError: \"Campo obbligatorio\",\n requiredErrorInPanel: \"Per Favore, rispondi ad almeno una domanda.\",\n requiredInAllRowsError: \"Completare tutte le righe\",\n numericError: \"Il valore deve essere numerico\",\n textMinLength: \"Inserire almeno {0} caratteri\",\n textMaxLength: \"Lunghezza massima consentita {0} caratteri\",\n textMinMaxLength: \"Inserire una stringa con minimo {0} e massimo {1} caratteri\",\n minRowCountError: \"Completare almeno {0} righe.\",\n minSelectError: \"Selezionare almeno {0} varianti.\",\n maxSelectError: \"Selezionare massimo {0} varianti.\",\n numericMinMax: \"'{0}' deve essere uguale o superiore a {1} e uguale o inferiore a {2}\",\n numericMin: \"'{0}' deve essere uguale o superiore a {1}\",\n numericMax: \"'{0}' deve essere uguale o inferiore a {1}\",\n invalidEmail: \"Inserire indirizzo mail valido\",\n invalidExpression: \"L'espressione: {0} dovrebbe tornare 'vero'.\",\n urlRequestError: \"La richiesta ha risposto con un errore '{0}'. {1}\",\n urlGetChoicesError: \"La richiesta ha risposto null oppure il percorso non è corretto\",\n exceedMaxSize: \"Il file non può eccedere {0}\",\n otherRequiredError: \"Inserire il valore 'altro'\",\n uploadingFile: \"File in caricamento. Attendi alcuni secondi e riprova\",\n loadingFile: \"Caricamento...\",\n chooseFile: \"Selezionare file(s)...\",\n noFileChosen: \"Nessun file selezionato\",\n confirmDelete: \"Sei sicuro di voler elminare il record?\",\n keyDuplicationError: \"Questo valore deve essere univoco.\",\n addColumn: \"Aggiungi colonna\",\n addRow: \"Aggiungi riga\",\n removeRow: \"Rimuovi riga\",\n addPanel: \"Aggiungi riga\",\n removePanel: \"Elimina\",\n choices_Item: \"Elemento\",\n matrix_column: \"Colonna\",\n matrix_row: \"Riga\",\n savingData: \"Salvataggio dati sul server...\",\n savingDataError: \"Si è verificato un errore e non è stato possibile salvare i risultati.\",\n savingDataSuccess: \"I risultati sono stati salvati con successo!\",\n saveAgainButton: \"Riprova\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Hai impiegato {0} su questa pagina e {1} in totale.\",\n timerSpentPage: \"Hai impiegato {0} su questa pagina.\",\n timerSpentSurvey: \"Hai impiegato {0} in totale.\",\n timerLimitAll: \"Hai impiegato {0} di {1} su questa pagina e {2} di {3} in totale.\",\n timerLimitPage: \"Hai impiegato {0} di {1} su questa pagina.\",\n timerLimitSurvey: \"Hai impiegato {0} di {1} in totale.\",\n cleanCaption: \"Pulisci\",\n clearCaption: \"Cancella\",\n chooseFileCaption: \"Scegliere il file\",\n removeFileCaption: \"Rimuovere questo file\",\n booleanCheckedLabel: \"Sì\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Sei sicuro di voler elminare questo file: {0}?\",\n confirmRemoveAllFiles: \"Sei sicuro di voler elminare tutti i files?\",\n questionTitlePatternText: \"Titolo della domanda\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"it\"] = italianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"it\"] = \"italiano\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/japanese.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/japanese.ts ***!\n \\**************************************/\n/*! exports provided: japaneseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"japaneseSurveyStrings\", function() { return japaneseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar japaneseSurveyStrings = {\n pagePrevText: \"前へ\",\n pageNextText: \"次へ\",\n completeText: \"完了\",\n previewText: \"プレビュー\",\n editText: \"編集\",\n startSurveyText: \"スタート\",\n otherItemText: \"その他(説明)\",\n noneItemText: \"なし\",\n selectAllItemText: \"すべて選択\",\n progressText: \"{0}/{1}頁\",\n panelDynamicProgressText: \"{1}の{0}を記録する\",\n questionsProgressText: \"{0}/{1}の質問に回答しました。\",\n emptySurvey: \"この調査に表示できるページや質問はありません\",\n completingSurvey: \"調査を完了してくれてありがとうございました\",\n completingSurveyBefore: \"当社の記録によると、この調査はすでに完了しています。\",\n loadingSurvey: \"調査をダウンロード中\",\n optionsCaption: \"選択\",\n value: \"値打ち\",\n requiredError: \"質問にお答え下さい\",\n requiredErrorInPanel: \"最低でも1つの質問に答えてください。\",\n requiredInAllRowsError: \"質問には全列で回答してください。\",\n numericError: \"数字でご記入下さい\",\n textMinLength: \"{0} 文字以上で入力して下さい\",\n textMaxLength: \"{0}文字以下で入力してください。\",\n textMinMaxLength: \"{0}以上{1}未満の文字を入力してください。\",\n minRowCountError: \"{0}行以上で入力して下さい\",\n minSelectError: \"{0}種類以上を選択して下さい\",\n maxSelectError: \"{0}以上のバリアントを選択しないでください。\",\n numericMinMax: \"{0}は{1}以上であり、{2}以下であることが望ましい。\",\n numericMin: \"'{0}' は同等か{1}より大きくなければなりません\",\n numericMax: \"'{0}' は同等か{1}より小さくなければなりません\",\n invalidEmail: \"有効なメールアドレスをご記入下さい\",\n invalidExpression: \"式は {0}は'true'を返すべきです。\",\n urlRequestError: \"リクエストはエラー '{0}' を返しました。{1}\",\n urlGetChoicesError: \"リクエストが空のデータを返したか、'path' プロパティが正しくありません。\",\n exceedMaxSize: \"ファイルのサイズは{0}を超えてはいけません\",\n otherRequiredError: \"その他の値を入力してください。\",\n uploadingFile: \"ファイルをアップロード中です。しばらくしてから再度お試し下さい\",\n loadingFile: \"読み込み中\",\n chooseFile: \"ファイルを選択\",\n noFileChosen: \"選択されたファイルはありません\",\n confirmDelete: \"レコードを削除しますか?\",\n keyDuplicationError: \"この値は一意でなければなりません。\",\n addColumn: \"列の追加\",\n addRow: \"追加行\",\n removeRow: \"除去\",\n addPanel: \"新規追加\",\n removePanel: \"除去\",\n choices_Item: \"品目\",\n matrix_column: \"コラム\",\n matrix_row: \"行\",\n savingData: \"結果はサーバーに保存されています...。\",\n savingDataError: \"エラーが発生し、結果を保存できませんでした。\",\n savingDataSuccess: \"結果は無事に保存されました\",\n saveAgainButton: \"もう一度試してみてください。\",\n timerMin: \"僅少\",\n timerSec: \"セック\",\n timerSpentAll: \"あなたはこのページに{0}を費やし、合計で{1}を費やしました。\",\n timerSpentPage: \"あなたはこのページに{0}を費やしました。\",\n timerSpentSurvey: \"合計で{0}を使ったことになります。\",\n timerLimitAll: \"このページに{1}のうち{0}を費やし、{3}のうち{2}を合計で費やしました。\",\n timerLimitPage: \"このページで{1}の{0}を使ったことがあります。\",\n timerLimitSurvey: \"合計で{1}の{0}を使ったことがあります。\",\n cleanCaption: \"削除\",\n clearCaption: \"空白\",\n chooseFileCaption: \"ファイルを選択\",\n removeFileCaption: \"このファイルを削除\",\n booleanCheckedLabel: \"噫\",\n booleanUncheckedLabel: \"否\",\n confirmRemoveFile: \"このファイルを削除してもよろしいですか?{0}?\",\n confirmRemoveAllFiles: \"すべてのファイルを削除してもよろしいですか?\",\n questionTitlePatternText: \"質問名\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ja\"] = japaneseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ja\"] = \"日本語\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/korean.ts\":\n/*!************************************!*\\\n !*** ./src/localization/korean.ts ***!\n \\************************************/\n/*! exports provided: koreanStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"koreanStrings\", function() { return koreanStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar koreanStrings = {\n pagePrevText: \"이전\",\n pageNextText: \"다음\",\n completeText: \"완료\",\n previewText: \"시사\",\n editText: \"편집하다\",\n startSurveyText: \"시작\",\n otherItemText: \"기타(설명)\",\n noneItemText: \"없음\",\n selectAllItemText: \"모두 선택\",\n progressText: \"페이지 {1} 중 {0}\",\n panelDynamicProgressText: \"{0} / {1} 기록\",\n questionsProgressText: \"{0} / {1} 개의 질문에 답변 함\",\n emptySurvey: \"설문지에 보여지는 페이지나 질문이 없습니다\",\n completingSurvey: \"설문 조사를 완료해 주셔서 감사합니다!\",\n completingSurveyBefore: \"기록에 따르면 이미 설문 조사를 마치셨습니다.\",\n loadingSurvey: \"설문조사가 로드중입니다...\",\n optionsCaption: \"선택하십시오...\",\n value: \"값\",\n requiredError: \"질문에 답하시오.\",\n requiredErrorInPanel: \"하나 이상의 질문에 답하십시오.\",\n requiredInAllRowsError: \"모든 행에 있는 질문에 답하십시오.\",\n numericError: \"값은 숫자여야 합니다.\",\n textMinLength: \"답변의 길이는 최소 {0}자여야 입니다.\",\n textMaxLength: \"답변의 길이는 {0}자를 초과 할 수 없습니다.\",\n textMinMaxLength: \"답변의 길이는 {0} - {1}자 사이여야 합니다.\",\n minRowCountError: \"최소 {0}개의 행을 채우십시오\",\n minSelectError: \"최소 {0}개의 변수를 선택하십시오.\",\n maxSelectError: \"최대 {0}개의 변수를 선택하십시오.\",\n numericMinMax: \"'{0}'은 {1}보다 크거나 같고 {2}보다 작거나 같아야합니다.\",\n numericMin: \"'{0}'은 {1}보다 크거나 같아야합니다.\",\n numericMax: \"'{0}'은 {1}보다 작거나 같아야합니다.\",\n invalidEmail: \"올바른 이메일 주소를 입력하십시오.\",\n invalidExpression: \"표현식: {0}은 '참'이어야 합니다.\",\n urlRequestError: \"'{0}'으로 잘못된 요청입니다. {1}\",\n urlGetChoicesError: \"비어있는 데이터를 요청했거나 잘못된 속성의 경로입니다.\",\n exceedMaxSize: \"파일 크기가 {0}을 초과 할 수 없습니다.\",\n otherRequiredError: \"다른 질문을 작성하십시오.\",\n uploadingFile: \"파일 업로드 중입니다. 잠시 후 다시 시도하십시오.\",\n loadingFile: \"로드 중...\",\n chooseFile: \"파일 선택...\",\n noFileChosen: \"선택된 파일이 없습니다\",\n confirmDelete: \"기록을 삭제하시겠습니까?\",\n keyDuplicationError: \" 이 값은 고유해야합니다.\",\n addColumn: \"열 추가\",\n addRow: \"행 추가\",\n removeRow: \"제거\",\n addPanel: \"새롭게 추가\",\n removePanel: \"제거\",\n choices_Item: \"항목\",\n matrix_column: \"열\",\n matrix_row: \"행\",\n savingData: \"결과가 서버에 저장 중입니다...\",\n savingDataError: \"오류가 발생하여 결과를 저장할 수 없습니다.\",\n savingDataSuccess: \"결과가 성공적으로 저장되었습니다!\",\n saveAgainButton: \"다시 시도하십시오\",\n timerMin: \"분\",\n timerSec: \"초\",\n timerSpentAll: \"현재 페이지에서 {0}을 소요해 총 {1}이 걸렸습니다.\",\n timerSpentPage: \"현재 페이지에서 {0]이 걸렸습니다\",\n timerSpentSurvey: \"총 {0}이 걸렸습니다.\",\n timerLimitAll: \"현재 페이지에서 {0}/{1}을 소요해 총 {2}/{3}이 걸렸습니다.\",\n timerLimitPage: \"현재 페이지에서 {0}/{1}이 걸렸습니다.\",\n timerLimitSurvey: \"총 {0}/{1}이 걸렸습니다.\",\n cleanCaption: \"닦기\",\n clearCaption: \"지우기\",\n chooseFileCaption: \"파일을 선택\",\n removeFileCaption: \"이 파일 제거\",\n booleanCheckedLabel: \"예\",\n booleanUncheckedLabel: \"아니\",\n confirmRemoveFile: \"{0} 파일을 제거 하시겠습니까?\",\n confirmRemoveAllFiles: \"모든 파일을 제거 하시겠습니까?\",\n questionTitlePatternText: \"질문 제목\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ko\"] = koreanStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ko\"] = \"한국어\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/latvian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/latvian.ts ***!\n \\*************************************/\n/*! exports provided: latvianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"latvianSurveyStrings\", function() { return latvianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar latvianSurveyStrings = {\n pagePrevText: \"Atpakaļ\",\n pageNextText: \"Tālāk\",\n completeText: \"Pabeigt\",\n previewText: \"Priekšskatījums\",\n editText: \"Rediģēt\",\n startSurveyText: \"Sākt\",\n otherItemText: \"Cits (lūdzu, aprakstiet!)\",\n noneItemText: \"Nav\",\n selectAllItemText: \"Izvēlēties visus\",\n progressText: \"Lappuse {0} no {1}\",\n panelDynamicProgressText: \"Ierakstīt {0} no {1}\",\n questionsProgressText: \"Atbildēja uz jautājumiem {0} / {1}\",\n emptySurvey: \"Nav neviena jautājuma.\",\n completingSurvey: \"Pateicamies Jums par anketas aizpildīšanu!\",\n completingSurveyBefore: \"Mūsu ieraksti liecina, ka jūs jau esat aizpildījis šo aptauju.\",\n loadingSurvey: \"Ielāde no servera...\",\n optionsCaption: \"Izvēlēties...\",\n value: \"value\",\n requiredError: \"Lūdzu, atbildiet uz jautājumu!\",\n requiredErrorInPanel: \"Lūdzu, atbildiet uz vismaz vienu jautājumu.\",\n requiredInAllRowsError: \"Lūdzu, atbildiet uz jautājumiem visās rindās.\",\n numericError: \"Atbildei ir jābūt skaitlim.\",\n textMinLength: \"Lūdzu, ievadiet vismaz {0} simbolus.\",\n textMaxLength: \"Lūdzu, ievadiet mazāk nekā {0} rakstzīmes.\",\n textMinMaxLength: \"Lūdzu, ievadiet vairāk nekā {0} rakstzīmes un mazāk nekā {1} rakstzīmes.\",\n minRowCountError: \"Lūdzu, aizpildiet vismaz {0} rindas.\",\n minSelectError: \"Lūdzu, izvēlieties vismaz {0} variantu.\",\n maxSelectError: \"Lūdzu, izvēlieties ne vairak par {0} variantiem.\",\n numericMinMax: \"'{0}' jābūt vienādam vai lielākam nekā {1}, un vienādam vai mazākam, nekā {2}\",\n numericMin: \"'{0}' jābūt vienādam vai lielākam {1}\",\n numericMax: \"'{0}' jābūt vienādam vai lielākam {1}\",\n invalidEmail: \"Lūdzu, ievadiet patiesu e-pasta adresi!\",\n invalidExpression: \"Izteicienam: {0} jāatgriež “true”.\",\n urlRequestError: \"Pieprasījumā tika atgriezta kļūda “{0}”. {1}\",\n urlGetChoicesError: \"Pieprasījums atgrieza tukšus datus vai rekvizīts “path” ir nepareizs\",\n exceedMaxSize: \"Faila lielums nedrīkst pārsniegt {0}.\",\n otherRequiredError: \"Lūdzu, ievadiet datus laukā 'Cits'\",\n uploadingFile: \"Jūsu fails tiek augšupielādēts. Lūdzu, uzgaidiet vairākas sekundes un mēģiniet vēlreiz.\",\n loadingFile: \"Notiek ielāde ...\",\n chooseFile: \"Izvēlieties failus ...\",\n noFileChosen: \"Nav izvēlēts neviens fails\",\n confirmDelete: \"Vai vēlaties izdzēst ierakstu?\",\n keyDuplicationError: \"Šai vērtībai jābūt unikālai.\",\n addColumn: \"Pievienot kolonnu\",\n addRow: \"Pievienot rindu\",\n removeRow: \"Noņemt\",\n addPanel: \"Pievieno jaunu\",\n removePanel: \"Noņemt\",\n choices_Item: \"lieta\",\n matrix_column: \"Sleja\",\n matrix_row: \"Rinda\",\n savingData: \"Rezultāti tiek saglabāti serverī ...\",\n savingDataError: \"Radās kļūda, un mēs nevarējām saglabāt rezultātus.\",\n savingDataSuccess: \"Rezultāti tika veiksmīgi saglabāti!\",\n saveAgainButton: \"Mēģini vēlreiz\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Šajā lapā esat iztērējis {0} un kopā {1}.\",\n timerSpentPage: \"Šajā lapā esat iztērējis {0}.\",\n timerSpentSurvey: \"Kopā esat iztērējis {0}.\",\n timerLimitAll: \"Šajā lapā esat iztērējis {0} no {1} un kopā {2} no {3}.\",\n timerLimitPage: \"Šajā lapā esat iztērējis {0} no {1}.\",\n timerLimitSurvey: \"Kopā esat iztērējis {0} no {1}.\",\n cleanCaption: \"Tīrs\",\n clearCaption: \"Skaidrs\",\n chooseFileCaption: \"Izvēlēties failu\",\n removeFileCaption: \"Noņemiet šo failu\",\n booleanCheckedLabel: \"Jā\",\n booleanUncheckedLabel: \"Nē\",\n confirmRemoveFile: \"Vai tiešām vēlaties noņemt šo failu: {0}?\",\n confirmRemoveAllFiles: \"Vai tiešām vēlaties noņemt visus failus?\",\n questionTitlePatternText: \"Jautājuma nosaukums\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lv\"] = latvianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lv\"] = \"latviešu\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/lithuanian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/lithuanian.ts ***!\n \\****************************************/\n/*! exports provided: lithuaniaSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lithuaniaSurveyStrings\", function() { return lithuaniaSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar lithuaniaSurveyStrings = {\n pagePrevText: \"Atgal\",\n pageNextText: \"Toliau\",\n completeText: \"Baigti\",\n previewText: \"Peržiūra\",\n editText: \"Redaguoti\",\n startSurveyText: \"Pradėti\",\n otherItemText: \"Kita (įvesti)\",\n noneItemText: \"Nėra\",\n selectAllItemText: \"Pasirinkti visus\",\n progressText: \"Puslapis {0} iš {1}\",\n panelDynamicProgressText: \"Įrašyti {0} iš {1}\",\n questionsProgressText: \"Atsakė į {0} / {1} klausimus\",\n emptySurvey: \"Apklausoje nėra matomo puslapio ar klausimo.\",\n completingSurvey: \"Dėkojame už dalyvavimą apklausoje!\",\n completingSurveyBefore: \"Mūsų įrašai rodo, kad jau atlikote šią apklausą.\",\n loadingSurvey: \"Prašome palaukti...\",\n optionsCaption: \"Pasirinkti...\",\n value: \"reikšmė\",\n requiredError: \"Būtina atsakyti į šį klausimą.\",\n requiredErrorInPanel: \"Būtina atsakyti bent į vieną klausimą.\",\n requiredInAllRowsError: \"Prašome atsakyti į klausimus visose eilutėse.\",\n numericError: \"Turi būti skaičiai.\",\n textMinLength: \"Prašome suvesti bent {0} simbolius.\",\n textMaxLength: \"Prašome suvesti mažiau nei {0} simbolių.\",\n textMinMaxLength: \"Prašome suvesti daugiau nei {0} ir mažiau nei {1} simbolių.\",\n minRowCountError: \"Prašome suvesti ne mažiau nei {0} eilučių.\",\n minSelectError: \"Prašome pasirinkti bent {0} variantų.\",\n maxSelectError: \"Pasirinkite ne daugiau kaip {0} variantus.\",\n numericMinMax: \"'{0}' turi būti lygus arba didesnis nei {1} ir lygus arba mažesnis nei {2}\",\n numericMin: \"'{0}' turėtų būti lygus arba didesnis nei {1}\",\n numericMax: \"'{0}' turėtų būti lygus ar mažesnis už {1}\",\n invalidEmail: \"Prašome įvesti galiojantį elektroninio pašto adresą.\",\n invalidExpression: \"Reikšmė: {0} turi grąžinti 'true'.\",\n urlRequestError: \"Užklausa grąžino klaidą'{0}'. {1}\",\n urlGetChoicesError: \"Užklausa grąžino tuščius duomenis arba 'path' savybė yra neteisinga\",\n exceedMaxSize: \"Failo dydis neturi viršyti {0}.\",\n otherRequiredError: \"Įveskite kitą reikšmę.\",\n uploadingFile: \"Jūsų failas yra keliamas. Palaukite keletą sekundžių ir bandykite dar kartą.\",\n loadingFile: \"Prašome palaukti...\",\n chooseFile: \"Pasirinkti failą(us)...\",\n noFileChosen: \"Nepasirinktas joks failas\",\n confirmDelete: \"Ar norite ištrinti įrašą?\",\n keyDuplicationError: \"Ši reikšmė turėtų būti unikali.\",\n addColumn: \"Pridėti stulpelį\",\n addRow: \"Pridėti eilutę\",\n removeRow: \"Ištrinti\",\n addPanel: \"Pridėti naują\",\n removePanel: \"Ištrinti\",\n choices_Item: \"elementas\",\n matrix_column: \"Stulpelis\",\n matrix_row: \"Eilutė\",\n savingData: \"Rezultatai saugomi serveryje...\",\n savingDataError: \"Įvyko klaida ir mes negalėjome išsaugoti rezultatų.\",\n savingDataSuccess: \"Rezultatai buvo išsaugoti sėkmingai!\",\n saveAgainButton: \"Bandyti dar kartą\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Praleidote {0} šiame puslapyje ir {1} iš viso.\",\n timerSpentPage: \"Praleidote {0} šiame puslapyje.\",\n timerSpentSurvey: \"Praleidote {0} iš viso.\",\n timerLimitAll: \"Praleidote {0} iš {1} šiame puslapyje ir {2} iš {3} iš viso.\",\n timerLimitPage: \"Praleidote {0} iš {1} šiame puslapyje.\",\n timerLimitSurvey: \"Praleidote {0} iš {1} iš viso.\",\n cleanCaption: \"Išvalyti\",\n clearCaption: \"Valyti\",\n chooseFileCaption: \"Pasirinkti failą\",\n removeFileCaption: \"Ištrinti šį failą\",\n booleanCheckedLabel: \"Taip\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Ar tikrai norite pašalinti šį failą: {0}?\",\n confirmRemoveAllFiles: \"Ar tikrai norite pašalinti visus failus?\",\n questionTitlePatternText: \"Klausimo pavadinimas\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"lt\"] = lithuaniaSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"lt\"] = \"lietuvių\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/macedonian.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/macedonian.ts ***!\n \\****************************************/\n/*! exports provided: macedonianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"macedonianSurveyStrings\", function() { return macedonianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar macedonianSurveyStrings = {\n pagePrevText: \"Претходна\",\n pageNextText: \"Следно\",\n completeText: \"Заврши\",\n previewText: \"Преглед\",\n editText: \"Уредување\",\n startSurveyText: \"Започнете\",\n otherItemText: \"Друго (опиши)\",\n noneItemText: \"Ништо\",\n selectAllItemText: \"Селектирај се\",\n progressText: \"Страница {0} од {1}\",\n panelDynamicProgressText: \"Сними {0} од {1}\",\n questionsProgressText: \"Одговорени на {0} / {1} прашања\",\n emptySurvey: \"Нема видлива страница или прашање во истражувањето.\",\n completingSurvey: \"Ви благодариме што го завршивте истражувањето!\",\n completingSurveyBefore: \"Нашите записи покажуваат дека веќе сте го завршиле ова истражување.\",\n loadingSurvey: \"Анкетата се вчитува ...\",\n optionsCaption: \"Изберете ...\",\n value: \"вредност\",\n requiredError: \"Ве молам, одговорете на прашањето.\",\n requiredErrorInPanel: \"Ве молам, одговорете барем на едно прашање.\",\n requiredInAllRowsError: \"Ве молиме, одговорете на прашања во сите редови.\",\n numericError: \"Вредноста треба да биде нумеричка.\",\n minError: \"Вредноста не треба да биде помала од {0}\",\n maxError: \"Вредноста не треба да биде поголема од {0}\",\n textMinLength: \"Внесете најмалку {0} знак/ци.\",\n textMaxLength: \"Внесете не повеќе од {0} знак/ци.\",\n textMinMaxLength: \"Внесете најмалку {0} и не повеќе од {1} знаци.\",\n minRowCountError: \"Пополнете најмалку {0} ред(ови).\",\n minSelectError: \"Ве молиме изберете најмалку {0} варијанта(и).\",\n maxSelectError: \"Изберете не повеќе од {0} варијанта(и).\",\n numericMinMax: \"'{0}' треба да биде најмалку {1} и најмногу {2}\",\n numericMin: \"'{0}' треба да биде најмалку {1}\",\n numericMax: \"'{0}' треба да биде најмногу {1}\",\n invalidEmail: \"Ве молиме внесете валидна е-маил адреса.\",\n invalidExpression: \"Изразот: {0} треба да се врати 'true'.\",\n urlRequestError: \"Барањето врати грешка '{0}'. {1} \",\n urlGetChoicesError: \"Барањето врати празни податоци или својството 'path' е неточно\",\n exceedMaxSize: \"Големината на датотеката не треба да надминува {0}.\",\n otherRequiredError: \"Внесете ја другата вредност.\",\n uploadingFile: \"Вашата датотека се поставува. Ве молиме почекајте неколку секунди и обидете се повторно.\",\n loadingFile: \"Се вчитува ...\",\n chooseFile: \"Изберете датотека (и) ...\",\n noFileChosen: \"Не се избрани датотеки\",\n confirmDelete: \"Дали сакате да го избришете записот?\",\n keyDuplicationError: \"Оваа вредност треба да биде единствена.\",\n addColumn: \"Додај колона\",\n addRow: \"Додади ред\",\n removeRow: \"Отстрани\",\n emptyRowsText: \"Нема редови.\",\n addPanel: \"Додади ново\",\n removePanel: \"Отстрани\",\n choices_Item: \"ставка\",\n matrix_column: \"Колона\",\n matrix_row: \"Ред\",\n savingData: \"Резултатите се зачувуваат на серверот ...\",\n savingDataError: \"Настана грешка и не можевме да ги зачуваме резултатите.\",\n savingDataSuccess: \"Резултатите беа успешно зачувани!\",\n saveAgainButton: \"Обиди се повторно\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Поминавте {0} на оваа страница и вкупно {1}.\",\n timerSpentPage: \"Поминавте {0} на оваа страница.\",\n timerSpentSurvey: \"Вие потрошивте вкупно {0}.\",\n timerLimitAll: \"Поминавте {0} од {1} на оваа страница и {2} од {3} вкупно.\",\n timerLimitPage: \"Поминавте {0} од {1} на оваа страница.\",\n timerLimitSurvey: \"Вие потрошивте вкупно {0} од {1}.\",\n cleanCaption: \"Чисти\",\n clearCaption: \"Да расчисти\",\n chooseFileCaption: \"Изберете датотека\",\n removeFileCaption: \"Отстранете ја оваа датотека\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Не\",\n confirmRemoveFile: \"Дали сте сигурни дека сакате да ја отстраните оваа датотека: {0}?\",\n confirmRemoveAllFiles: \"Дали сте сигурни дека сакате да ги отстраните сите датотеки?\",\n questionTitlePatternText: \"Наслов на прашањето\",\n modalCancelButtonText: \"Откажи\",\n modalApplyButtonText: \"Аплицирај\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"mk\"] = macedonianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"mk\"] = \"Македонски\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/norwegian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/norwegian.ts ***!\n \\***************************************/\n/*! exports provided: norwegianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"norwegianSurveyStrings\", function() { return norwegianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar norwegianSurveyStrings = {\n pagePrevText: \"Forrige\",\n pageNextText: \"Neste\",\n completeText: \"Fullfør\",\n previewText: \"Forhåndsvisning\",\n editText: \"Redigere\",\n startSurveyText: \"Start\",\n otherItemText: \"Annet (beskriv)\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Velg alle\",\n progressText: \"Side {0} av {1}\",\n panelDynamicProgressText: \"Ta opp {0} av {1}\",\n questionsProgressText: \"Besvarte {0} / {1} spørsmål\",\n emptySurvey: \"Det er ingen synlig side eller spørsmål i undersøkelsen.\",\n completingSurvey: \"Takk for at du fullførte undersøkelsen!\",\n completingSurveyBefore: \"Våre data viser at du allerede har gjennomført denne undersøkelsen.\",\n loadingSurvey: \"Undersøkelsen laster...\",\n optionsCaption: \"Velg...\",\n value: \"verdi\",\n requiredError: \"Vennligst svar på spørsmålet.\",\n requiredErrorInPanel: \"Vennligst svar på minst ett spørsmål.\",\n requiredInAllRowsError: \"Vennligst svar på spørsmål i alle rader.\",\n numericError: \"Verdien skal være numerisk.\",\n textMinLength: \"Vennligst skriv inn minst {0} tegn.\",\n textMaxLength: \"Vennligst skriv inn mindre enn {0} tegn.\",\n textMinMaxLength: \"Vennligst skriv inn mer enn {0} og mindre enn {1} tegn.\",\n minRowCountError: \"Vennligst fyll inn minst {0} rader.\",\n minSelectError: \"Vennligst velg minst {0} varianter.\",\n maxSelectError: \"Vennligst ikke velg mer enn {0} varianter.\",\n numericMinMax: \"'{0}' bør være lik eller mer enn {1} og lik eller mindre enn {2}\",\n numericMin: \"'{0}' bør være lik eller mer enn {1}\",\n numericMax: \"'{0}' bør være lik eller mindre enn {1}\",\n invalidEmail: \"Vennligst skriv inn en gyldig e-post adresse.\",\n invalidExpression: \"Uttrykket: {0} skal returnere 'sant'.\",\n urlRequestError: \"Forespørselen returnerte feilen '{0}'. {1}\",\n urlGetChoicesError: \"Forespørselen returnerte tomme data, eller 'sti' -egenskapen er feil\",\n exceedMaxSize: \"Filstørrelsen bør ikke overstige {0}.\",\n otherRequiredError: \"Vennligst skriv inn den andre verdien.\",\n uploadingFile: \"Filen din lastes opp. Vennligst vent noen sekunder og prøv igjen.\",\n loadingFile: \"Laster inn ...\",\n chooseFile: \"Velg fil (er) ...\",\n noFileChosen: \"Ingen fil valgt\",\n confirmDelete: \"Ønsker du å slette posten?\",\n keyDuplicationError: \"Denne verdien skal være unik.\",\n addColumn: \"Legg til kolonne\",\n addRow: \"Legg til rad\",\n removeRow: \"Fjern\",\n addPanel: \"Legg til ny\",\n removePanel: \"Fjerne\",\n choices_Item: \"element\",\n matrix_column: \"Kolonne\",\n matrix_row: \"Rad\",\n savingData: \"Resultatene lagres på serveren ...\",\n savingDataError: \"Det oppsto en feil, og vi kunne ikke lagre resultatene.\",\n savingDataSuccess: \"Resultatene ble lagret!\",\n saveAgainButton: \"Prøv igjen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har tilbrakt {0} på denne siden og {1} totalt.\",\n timerSpentPage: \"Du har tilbrakt {0} på denne siden.\",\n timerSpentSurvey: \"Du har tilbrakt {0} totalt.\",\n timerLimitAll: \"Du har tilbrakt {0} av {1} på denne siden og totalt {2} av {3}.\",\n timerLimitPage: \"Du har tilbrakt {0} av {1} på denne siden.\",\n timerLimitSurvey: \"Du har tilbrakt {0} av {1} totalt.\",\n cleanCaption: \"Rens\",\n clearCaption: \"Klar\",\n chooseFileCaption: \"Velg Fil\",\n removeFileCaption: \"Fjern denne filen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nei\",\n confirmRemoveFile: \"Er du sikker på at du vil fjerne denne filen: {0}?\",\n confirmRemoveAllFiles: \"Er du sikker på at du vil fjerne alle filene?\",\n questionTitlePatternText: \"Spørsmålstittel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"no\"] = norwegianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"no\"] = \"norsk\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/persian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/persian.ts ***!\n \\*************************************/\n/*! exports provided: persianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"persianSurveyStrings\", function() { return persianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar persianSurveyStrings = {\n pagePrevText: \"قبلی\",\n pageNextText: \"بعدی\",\n completeText: \"تکمیل\",\n previewText: \"پیش نمایش\",\n editText: \"ویرایش\",\n startSurveyText: \"شروع\",\n otherItemText: \"دیگر(توضیح)\",\n noneItemText: \"هیچ\",\n selectAllItemText: \"انتخاب همه\",\n progressText: \"صفحه {0} از {1}\",\n panelDynamicProgressText: \"مورد {0} از {1}\",\n questionsProgressText: \"تعداد پاسخ {0}/{1} سوال\",\n emptySurvey: \"صفحه ای یا گزینه ای برای این پرسشنامه موجود نیست.\",\n completingSurvey: \"از شما بابت تکمیل این پرسشنامه متشکریم\",\n completingSurveyBefore: \"به نظر می رسد هم هم اکنون پرسشنامه را تکمیل کرده اید.\",\n loadingSurvey: \"درحال ایجاد پرسشنامه\",\n optionsCaption: \"انتخاب کنید...\",\n value: \"مقدار\",\n requiredError: \"لطفا به سوال پاسخ دهید\",\n requiredErrorInPanel: \"لطفا حداقل به یک سوال پاسخ دهید.\",\n requiredInAllRowsError: \"لطفا سوالات تمام سطرها را پاسخ دهید.\",\n numericError: \"مقدار باید عددی باشد\",\n textMinLength: \"لطفا حداقل {0} حرف وارد کنید\",\n textMaxLength: \"لطفا کمتر از {0} حرف وارد کنید.\",\n textMinMaxLength: \"لطفا بیشتر از {0} حرف و کمتر از {1} حرف وارد کنید.\",\n minRowCountError: \"لطفا حداقل {0} سطر وارد کنید.\",\n minSelectError: \"حداقل {0} انتخاب کنید.\",\n maxSelectError: \"لطفا بیشتر از {0} انتخاب کنید.\",\n numericMinMax: \"'{0}' باید بین {1} و {2} باشد\",\n numericMin: \"'{0}' بزرگتر مساوی {1} باشد\",\n numericMax: \"'{0}' باید کوچکتر یا مساوی {1} باشد\",\n invalidEmail: \"لطفا ایمیل صحیح درج کنید\",\n invalidExpression: \"عبارت: {0} پاسخ باید 'true' باشد.\",\n urlRequestError: \"درخواست با خطا روبرو شد: '{0}'. {1}\",\n urlGetChoicesError: \"درخواست مسیری خالی بازگشت داده یا مسیر درست تنظیم نشده\",\n exceedMaxSize: \"بیشترین حجم مجاز فایل: {0}\",\n otherRequiredError: \"مقدار 'دیگر' را وارد کنید\",\n uploadingFile: \"فایل در حال آیلود است. لطفا صبر کنید.\",\n loadingFile: \"بارگیری...\",\n chooseFile: \"انتخاب فایل(ها)...\",\n noFileChosen: \"هیچ فایلی انتخاب نشده\",\n confirmDelete: \"آیا مایل به حذف این ردیف هستید؟\",\n keyDuplicationError: \"این مقدار باید غیر تکراری باشد\",\n addColumn: \"ستون جدید\",\n addRow: \"سطر جدید\",\n removeRow: \"حذف\",\n addPanel: \"جدید\",\n removePanel: \"حذف\",\n choices_Item: \"آیتم\",\n matrix_column: \"ستون\",\n matrix_row: \"سطر\",\n savingData: \"نتایج در حال ذخیره سازی در سرور است\",\n savingDataError: \"خطایی در ذخیره سازی نتایج رخ داده است\",\n savingDataSuccess: \"نتایج با موفقیت ذخیره شد\",\n saveAgainButton: \"مجدد تلاش کنید\",\n timerMin: \"دقیقه\",\n timerSec: \"ثانیه\",\n timerSpentAll: \"شما مدت {0} در این صفحه و مدت {1} را در مجموع سپری کرده اید.\",\n timerSpentPage: \"شما مدت {0} را در این صفحه سپری کرده اید.\",\n timerSpentSurvey: \"شما مدت {0} را در مجموع سپری کرده اید.\",\n timerLimitAll: \"شما مدت {0} از {1} در این صفحه و مدت {2} از {3} را در مجموع سپری کرده اید.\",\n timerLimitPage: \"شما مدت {0} از {1} را در این صفحه سپری کرده اید.\",\n timerLimitSurvey: \"شما مدت {0} از {1} را در مجموع سپری کرده اید.\",\n cleanCaption: \"پاکسازی\",\n clearCaption: \"خالی کردن\",\n chooseFileCaption: \"انتخاب فایل\",\n removeFileCaption: \"حذف این فایل\",\n booleanCheckedLabel: \"بله\",\n booleanUncheckedLabel: \"خیر\",\n confirmRemoveFile: \"آیا میخواهید این فایل را پاک کنید: {0}?\",\n confirmRemoveAllFiles: \"آیا میخواهید تمام فایل ها را پاک کنید?\",\n questionTitlePatternText: \"عنوان سوال\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"fa\"] = persianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"fa\"] = \"فارْسِى\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/polish.ts\":\n/*!************************************!*\\\n !*** ./src/localization/polish.ts ***!\n \\************************************/\n/*! exports provided: polishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"polishSurveyStrings\", function() { return polishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar polishSurveyStrings = {\n pagePrevText: \"Wstecz\",\n pageNextText: \"Dalej\",\n completeText: \"Gotowe\",\n previewText: \"Premiera\",\n editText: \"Edycja\",\n startSurveyText: \"Start\",\n otherItemText: \"Inna odpowiedź (wpisz)\",\n noneItemText: \"Brak\",\n selectAllItemText: \"Wybierz wszystkie\",\n progressText: \"Strona {0} z {1}\",\n panelDynamicProgressText: \"Zapis {0} z {1}\",\n questionsProgressText: \"Odpowiedzi na {0}/{1} pytania\",\n emptySurvey: \"Nie ma widocznych pytań.\",\n completingSurvey: \"Dziękujemy za wypełnienie ankiety!\",\n completingSurveyBefore: \"Z naszych zapisów wynika, że wypełniłeś już tę ankietę.\",\n loadingSurvey: \"Trwa wczytywanie ankiety...\",\n optionsCaption: \"Wybierz...\",\n value: \"Wartość\",\n requiredError: \"Proszę odpowiedzieć na to pytanie.\",\n requiredErrorInPanel: \"Proszę odpowiedzieć na co najmniej jedno pytanie.\",\n requiredInAllRowsError: \"Proszę odpowiedzieć na wszystkie pytania.\",\n numericError: \"W tym polu można wpisać tylko liczby.\",\n textMinLength: \"Proszę wpisać co najmniej {0} znaków.\",\n textMaxLength: \"Proszę wpisać mniej niż {0} znaków.\",\n textMinMaxLength: \"Proszę wpisać więcej niż {0} i mniej niż {1} znaków.\",\n minRowCountError: \"Proszę uzupełnić przynajmniej {0} wierszy.\",\n minSelectError: \"Proszę wybrać co najmniej {0} pozycji.\",\n maxSelectError: \"Proszę wybrać nie więcej niż {0} pozycji.\",\n numericMinMax: \"Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}\",\n numericMin: \"Odpowiedź '{0}' powinna być większa lub równa {1}\",\n numericMax: \"Odpowiedź '{0}' powinna być mniejsza lub równa {1}\",\n invalidEmail: \"Proszę podać prawidłowy adres email.\",\n invalidExpression: \"Wyrażenie: {0} powinno wracać 'prawdziwe'.\",\n urlRequestError: \"Żądanie zwróciło błąd '{0}'. {1}\",\n urlGetChoicesError: \"Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa\",\n exceedMaxSize: \"Rozmiar przesłanego pliku nie może przekraczać {0}.\",\n otherRequiredError: \"Proszę podać inną odpowiedź.\",\n uploadingFile: \"Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.\",\n loadingFile: \"Ładowanie...\",\n chooseFile: \"Wybierz plik(i)...\",\n noFileChosen: \"Nie wybrano żadnego pliku\",\n confirmDelete: \"Chcesz skasować nagranie?\",\n keyDuplicationError: \"Ta wartość powinna być wyjątkowa.\",\n addColumn: \"Dodaj kolumnę\",\n addRow: \"Dodaj wiersz\",\n removeRow: \"Usuń\",\n addPanel: \"Dodaj panel\",\n removePanel: \"Usuń\",\n choices_Item: \"element\",\n matrix_column: \"Kolumna\",\n matrix_row: \"Wiersz\",\n savingData: \"Zapisuję wyniki ankiety na serwerze...\",\n savingDataError: \"Wystąpił błąd i wyniki nie mogły zostać zapisane.\",\n savingDataSuccess: \"Wyniki zostały poprawnie zapisane!\",\n saveAgainButton: \"Spróbuj ponownie\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Spędziłeś {0} na tej stronie a w sumie {1}.\",\n timerSpentPage: \"Spędziłeś {0} na tej stronie.\",\n timerSpentSurvey: \"Spędziłeś w sumie {0}.\",\n timerLimitAll: \"Spędziłeś {0} z {1} na tej stronie a w sumie {2} z {3}.\",\n timerLimitPage: \"Spędziłeś {0} z {1} na tej stronie\",\n timerLimitSurvey: \"Spędziłeś {0} z {1}.\",\n cleanCaption: \"Wyczyść\",\n clearCaption: \"Jasne\",\n chooseFileCaption: \"Wybierz plik\",\n removeFileCaption: \"Usuń ten plik\",\n booleanCheckedLabel: \"Tak\",\n booleanUncheckedLabel: \"Nie\",\n confirmRemoveFile: \"Jesteś pewien, że chcesz usunąć ten plik: {0}?\",\n confirmRemoveAllFiles: \"Jesteś pewien, że chcesz usunąć wszystkie pliki?\",\n questionTitlePatternText: \"Tytuł pytania\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pl\"] = polishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pl\"] = \"polski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese-br.ts\":\n/*!*******************************************!*\\\n !*** ./src/localization/portuguese-br.ts ***!\n \\*******************************************/\n/*! exports provided: portugueseBrSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"portugueseBrSurveyStrings\", function() { return portugueseBrSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar portugueseBrSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n previewText: \"Pré-visualização\",\n editText: \"Editar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registro {0} de {1}\",\n questionsProgressText: \"Respostas {0}/{1} perguntas\",\n emptySurvey: \"Não há página visível ou pergunta na pesquisa.\",\n completingSurvey: \"Obrigado por finalizar a pesquisa!\",\n completingSurveyBefore: \"Nossos registros mostram que você já finalizou a pesquisa.\",\n loadingSurvey: \"A pesquisa está carregando...\",\n optionsCaption: \"Selecione...\",\n value: \"valor\",\n requiredError: \"Por favor, responda a pergunta.\",\n requiredErrorInPanel: \"Por favor, responda pelo menos uma pergunta.\",\n requiredInAllRowsError: \"Por favor, responda as perguntas em todas as linhas.\",\n numericError: \"O valor deve ser numérico.\",\n textMinLength: \"Por favor, insira pelo menos {0} caracteres.\",\n textMaxLength: \"Por favor, insira menos de {0} caracteres.\",\n textMinMaxLength: \"Por favor, insira mais de {0} e menos de {1} caracteres.\",\n minRowCountError: \"Preencha pelo menos {0} linhas.\",\n minSelectError: \"Selecione pelo menos {0} opções.\",\n maxSelectError: \"Por favor, selecione não mais do que {0} opções.\",\n numericMinMax: \"O '{0}' deve ser igual ou superior a {1} e igual ou menor que {2}\",\n numericMin: \"O '{0}' deve ser igual ou superior a {1}\",\n numericMax: \"O '{0}' deve ser igual ou inferior a {1}\",\n invalidEmail: \"Por favor, informe um e-mail válido.\",\n invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n urlRequestError: \"A requisição retornou o erro '{0}'. {1}\",\n urlGetChoicesError: \"A requisição não retornou dados ou o 'caminho' da requisição não está correto\",\n exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n otherRequiredError: \"Por favor, informe o outro valor.\",\n uploadingFile: \"Seu arquivo está sendo carregado. Por favor, aguarde alguns segundos e tente novamente.\",\n loadingFile: \"Carregando...\",\n chooseFile: \"Selecione o(s) arquivo(s)...\",\n noFileChosen: \"Nenhum arquivo escolhido\",\n confirmDelete: \"Tem certeza que deseja deletar?\",\n keyDuplicationError: \"Esse valor deve ser único.\",\n addColumn: \"Adicionar coluna\",\n addRow: \"Adicionar linha\",\n removeRow: \"Remover linha\",\n addPanel: \"Adicionar novo\",\n removePanel: \"Remover\",\n choices_Item: \"item\",\n matrix_column: \"Coluna\",\n matrix_row: \"Linha\",\n savingData: \"Os resultados esto sendo salvos no servidor...\",\n savingDataError: \"Ocorreu um erro e não foi possível salvar os resultados.\",\n savingDataSuccess: \"Os resultados foram salvos com sucesso!\",\n saveAgainButton: \"Tente novamente\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n timerSpentPage: \"Você gastou {0} nesta página.\",\n timerSpentSurvey: \"Você gastou {0} no total.\",\n timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n timerLimitSurvey: \"Você gastou {0} de {1} no total.\",\n cleanCaption: \"Limpar\",\n clearCaption: \"Limpar\",\n chooseFileCaption: \"Escolher arquivo\",\n removeFileCaption: \"Remover este arquivo\",\n booleanCheckedLabel: \"Sim\",\n booleanUncheckedLabel: \"Não\",\n confirmRemoveFile: \"Tem certeza que deseja remover este arquivo: {0}?\",\n confirmRemoveAllFiles: \"Tem certeza que deseja remover todos os arquivos?\",\n questionTitlePatternText: \"Título da questão\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt-br\"] = portugueseBrSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt-br\"] = \"português brasileiro\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/portuguese.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/portuguese.ts ***!\n \\****************************************/\n/*! exports provided: portugueseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"portugueseSurveyStrings\", function() { return portugueseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar portugueseSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n previewText: \"Pré-visualização\",\n editText: \"Editar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registo {0} de {1}\",\n questionsProgressText: \"Respostas {0}/{1} perguntas\",\n emptySurvey: \"Não há página visível ou pergunta no questionário.\",\n completingSurvey: \"Obrigado por finalizar o questionário!\",\n completingSurveyBefore: \"Os nossos registos mostram que já finalizou o questionário.\",\n loadingSurvey: \"O questionário está a carregar...\",\n optionsCaption: \"Selecione...\",\n value: \"valor\",\n requiredError: \"Por favor, responda à pergunta.\",\n requiredErrorInPanel: \"Por favor, responda pelo menos a uma pergunta.\",\n requiredInAllRowsError: \"Por favor, responda às perguntas em todas as linhas.\",\n numericError: \"O valor deve ser numérico.\",\n textMinLength: \"Por favor, insira pelo menos {0} caracteres.\",\n textMaxLength: \"Por favor, insira menos de {0} caracteres.\",\n textMinMaxLength: \"Por favor, insira mais de {0} e menos de {1} caracteres.\",\n minRowCountError: \"Preencha pelo menos {0} linhas.\",\n minSelectError: \"Selecione pelo menos {0} opções.\",\n maxSelectError: \"Por favor, selecione no máximo {0} opções.\",\n numericMinMax: \"O '{0}' deve ser igual ou superior a {1} e igual ou menor que {2}\",\n numericMin: \"O '{0}' deve ser igual ou superior a {1}\",\n numericMax: \"O '{0}' deve ser igual ou inferior a {1}\",\n invalidEmail: \"Por favor, insira um e-mail válido.\",\n invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n urlRequestError: \"O pedido retornou o erro '{0}'. {1}\",\n urlGetChoicesError: \"O pedido não retornou dados ou o 'caminho' do pedido não está correto\",\n exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n otherRequiredError: \"Por favor, insira o outro valor.\",\n uploadingFile: \"O seu ficheiro está a carregar. Por favor, aguarde alguns segundos e tente novamente.\",\n loadingFile: \"A carregar...\",\n chooseFile: \"Selecione o(s) arquivo(s)...\",\n noFileChosen: \"Nenhum ficheiro escolhido\",\n confirmDelete: \"Tem a certeza que deseja apagar?\",\n keyDuplicationError: \"Este valor deve ser único.\",\n addColumn: \"Adicionar coluna\",\n addRow: \"Adicionar linha\",\n removeRow: \"Remover linha\",\n addPanel: \"Adicionar novo\",\n removePanel: \"Remover\",\n choices_Item: \"item\",\n matrix_column: \"Coluna\",\n matrix_row: \"Linha\",\n savingData: \"Os resultados estão a ser guardados no servidor...\",\n savingDataError: \"Ocorreu um erro e não foi possível guardar os resultados.\",\n savingDataSuccess: \"Os resultados foram guardados com sucesso!\",\n saveAgainButton: \"Tente novamente\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n timerSpentPage: \"Você gastou {0} nesta página.\",\n timerSpentSurvey: \"Você gastou {0} no total.\",\n timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n timerLimitSurvey: \"Você gastou {0} de {1} no total.\",\n cleanCaption: \"Limpar\",\n clearCaption: \"Limpar\",\n chooseFileCaption: \"Escolher ficheiro\",\n removeFileCaption: \"Remover este ficheiro\",\n booleanCheckedLabel: \"Sim\",\n booleanUncheckedLabel: \"Não\",\n confirmRemoveFile: \"Tem a certeza que deseja remover este ficheiro: {0}?\",\n confirmRemoveAllFiles: \"Tem a certeza que deseja remover todos os ficheiros?\",\n questionTitlePatternText: \"Título da questão\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"pt\"] = portugueseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"pt\"] = \"português\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/romanian.ts\":\n/*!**************************************!*\\\n !*** ./src/localization/romanian.ts ***!\n \\**************************************/\n/*! exports provided: romanianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"romanianSurveyStrings\", function() { return romanianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar romanianSurveyStrings = {\n pagePrevText: \"Precedent\",\n pageNextText: \"Următor\",\n completeText: \"Finalizare\",\n previewText: \"previzualizare\",\n editText: \"Editați\",\n startSurveyText: \"start\",\n otherItemText: \"Altul(precizaţi)\",\n noneItemText: \"Nici unul\",\n selectAllItemText: \"Selectează tot\",\n progressText: \"Pagina {0} din {1}\",\n panelDynamicProgressText: \"Înregistrare {0} din {1}\",\n questionsProgressText: \"Răspunsuri la {0} / {1} întrebări\",\n emptySurvey: \"Nu sunt întrebări pentru acest chestionar\",\n completingSurvey: \"Vă mulţumim pentru timpul acordat!\",\n completingSurveyBefore: \"Din înregistrările noastre reiese că ați completat deja acest chestionar.\",\n loadingSurvey: \"Chestionarul se încarcă...\",\n optionsCaption: \"Alegeţi...\",\n value: \"valoare\",\n requiredError: \"Răspunsul la această întrebare este obligatoriu.\",\n requiredErrorInPanel: \"Vă rugăm să răspundeți la cel puțin o întrebare.\",\n requiredInAllRowsError: \"Toate răspunsurile sunt obligatorii\",\n numericError: \"Răspunsul trebuie să fie numeric.\",\n textMinLength: \"Trebuie să introduceți minim {0} caractere.\",\n textMaxLength: \"Trebuie să introduceți maxim {0} caractere.\",\n textMinMaxLength: \"Trebuie să introduceți mai mult de {0} și mai puțin de {1} caractere.\",\n minRowCountError: \"Trebuie să completați minim {0} rânduri.\",\n minSelectError: \"Trebuie să selectați minim {0} opţiuni.\",\n maxSelectError: \"Trebuie să selectați maxim {0} opţiuni.\",\n numericMinMax: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}\",\n numericMin: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}\",\n numericMax: \"Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}\",\n invalidEmail: \"Trebuie să introduceţi o adresa de email validă.\",\n invalidExpression: \"Expresia: {0} ar trebui să returneze „adevărat”.\",\n urlRequestError: \"Request-ul a returnat eroarea '{0}'. {1}\",\n urlGetChoicesError: \"Request-ul nu a returnat date sau proprietatea 'path' este incorectă\",\n exceedMaxSize: \"Dimensiunea fişierului nu trebuie să depăşească {0}.\",\n otherRequiredError: \"Trebuie să completați câmpul 'Altul'.\",\n uploadingFile: \"Fișierul dumneavoastră este în curs de încărcare. Vă rugăm așteptați câteva secunde și reveniți apoi.\",\n loadingFile: \"Se încarcă...\",\n chooseFile: \"Alege fisierele...\",\n noFileChosen: \"Niciun fișier ales\",\n confirmDelete: \"Sunteți sigur că doriți să ștergeți înregistrarea?\",\n keyDuplicationError: \"Valoarea trebuie să fie unică.\",\n addColumn: \"Adăugați coloană\",\n addRow: \"Adăugare rând\",\n removeRow: \"Ștergere\",\n addPanel: \"Adăugare\",\n removePanel: \"Ștergere\",\n choices_Item: \"opțiune\",\n matrix_column: \"Coloană\",\n matrix_row: \"Rând\",\n savingData: \"Rezultatele sunt în curs de salvare...\",\n savingDataError: \"A intervenit o eroare, rezultatele nu au putut fi salvate.\",\n savingDataSuccess: \"Rezultatele au fost salvate cu succes!\",\n saveAgainButton: \"Încercați din nou\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Ați petrecut {0} pe această pagină și {1} în total.\",\n timerSpentPage: \"Ați petrecut {0} pe această pagină.\",\n timerSpentSurvey: \"Ați petrecut {0} în total.\",\n timerLimitAll: \"Ați petrecut {0} din {1} pe această pagină și {2} din {3} în total.\",\n timerLimitPage: \"Ați petrecut {0} din {1} pe această pagină.\",\n timerLimitSurvey: \"Ați petrecut {0} din {1} în total.\",\n cleanCaption: \"Curat\",\n clearCaption: \"clar\",\n chooseFileCaption: \"Alege fișierul\",\n removeFileCaption: \"Eliminați acest fișier\",\n booleanCheckedLabel: \"da\",\n booleanUncheckedLabel: \"Nu\",\n confirmRemoveFile: \"Sigur doriți să eliminați acest fișier: {0}?\",\n confirmRemoveAllFiles: \"Sigur doriți să eliminați toate fișierele?\",\n questionTitlePatternText: \"Titlul intrebarii\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ro\"] = romanianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ro\"] = \"română\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/russian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/russian.ts ***!\n \\*************************************/\n/*! exports provided: russianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"russianSurveyStrings\", function() { return russianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar russianSurveyStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Далее\",\n completeText: \"Готово\",\n previewText: \"Предварительный просмотр\",\n editText: \"Редактирование\",\n startSurveyText: \"Начать\",\n otherItemText: \"Другое (пожалуйста, опишите)\",\n noneItemText: \"Нет\",\n selectAllItemText: \"Выбрать всё\",\n progressText: \"Страница {0} из {1}\",\n panelDynamicProgressText: \"Запись {0} из {1}\",\n questionsProgressText: \"Ответы на {0}/{1}вопросы\",\n emptySurvey: \"Нет ни одного вопроса.\",\n completingSurvey: \"Благодарим Вас за заполнение анкеты!\",\n completingSurveyBefore: \"Вы уже проходили этот опрос.\",\n loadingSurvey: \"Загрузка с сервера...\",\n optionsCaption: \"Выбрать...\",\n value: \"значение\",\n requiredError: \"Пожалуйста, ответьте на вопрос.\",\n requiredErrorInPanel: \"Пожалуйста, ответьте по крайней мере на один вопрос.\",\n requiredInAllRowsError: \"Пожалуйста, ответьте на вопросы в каждой строке.\",\n numericError: \"Ответ должен быть числом.\",\n textMinLength: \"Пожалуйста введите больше {0} символов.\",\n textMaxLength: \"Пожалуйста введите меньше {0} символов.\",\n textMinMaxLength: \"Пожалуйста введите больше {0} и меньше {1} символов.\",\n minRowCountError: \"Пожалуйста, заполните не меньше {0} строк.\",\n minSelectError: \"Пожалуйста, выберите хотя бы {0} вариантов.\",\n maxSelectError: \"Пожалуйста, выберите не более {0} вариантов.\",\n numericMinMax: \"'{0}' должно быть не меньше чем {1}, и не больше чем {2}\",\n numericMin: \"'{0}' должно быть не меньше чем {1}\",\n numericMax: \"'{0}' должно быть не больше чем {1}\",\n invalidEmail: \"Пожалуйста, введите действительный адрес электронной почты.\",\n invalidExpression: \"Выражение {0} должно возвращать 'true'.\",\n urlRequestError: \"Запрос вернул ошибку '{0}'. {1}\",\n urlGetChoicesError: \"Ответ на запрос пришел пустой или свойство 'path' указано неверно\",\n exceedMaxSize: \"Размер файла не должен превышать {0}.\",\n otherRequiredError: \"Пожалуйста, введите данные в поле 'Другое'\",\n uploadingFile: \"Ваш файл загружается. Подождите несколько секунд и попробуйте снова.\",\n loadingFile: \"Загрузка...\",\n chooseFile: \"Выберите файл(ы)...\",\n noFileChosen: \"Файл не выбран\",\n confirmDelete: \"Вы точно хотите удалить запись?\",\n keyDuplicationError: \"Это значение должно быть уникальным.\",\n addColumn: \"Добавить колонку\",\n addRow: \"Добавить строку\",\n removeRow: \"Удалить\",\n addPanel: \"Добавить новую\",\n removePanel: \"Удалить\",\n choices_Item: \"Вариант\",\n matrix_column: \"Колонка\",\n matrix_row: \"Строка\",\n savingData: \"Результаты сохраняются на сервер...\",\n savingDataError: \"Произошла ошибка, результат не был сохранён.\",\n savingDataSuccess: \"Результат успешно сохранён!\",\n saveAgainButton: \"Попробовать снова\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Вы потратили {0} на этой странице и {1} всего.\",\n timerSpentPage: \"Вы потратили {0} на этой странице.\",\n timerSpentSurvey: \"Вы потратили {0} в течение теста.\",\n timerLimitAll: \"Вы потратили {0} из {1} на этой странице и {2} из {3} для всего теста.\",\n timerLimitPage: \"Вы потратили {0} из {1} на этой странице.\",\n timerLimitSurvey: \"Вы потратили {0} из {1} для всего теста.\",\n cleanCaption: \"Очистить\",\n clearCaption: \"Очистить\",\n chooseFileCaption: \"Выберите файл\",\n removeFileCaption: \"Удалить файл\",\n booleanCheckedLabel: \"Да\",\n booleanUncheckedLabel: \"Нет\",\n confirmRemoveFile: \"Вы уверены, что хотите удалить этот файл: {0}?\",\n confirmRemoveAllFiles: \"Вы уверены, что хотите удалить все файлы?\",\n questionTitlePatternText: \"Название вопроса\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ru\"] = russianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ru\"] = \"русский\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/serbian.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/serbian.ts ***!\n \\*************************************/\n/*! exports provided: serbianStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"serbianStrings\", function() { return serbianStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Uncomment this line on creating a translation file\n\nvar serbianStrings = {\n pagePrevText: \"Nazad\",\n pageNextText: \"Dalje\",\n completeText: \"Završi\",\n previewText: \"Pregledaj\",\n editText: \"Izmeni\",\n startSurveyText: \"Započni\",\n otherItemText: \"Drugo (upiši)\",\n noneItemText: \"Ništa\",\n selectAllItemText: \"Izaberi sve\",\n progressText: \"Stranica {0} od {1}\",\n panelDynamicProgressText: \"Upis {0} od {1}\",\n questionsProgressText: \"Odgovoreno na {0}/{1} pitanja\",\n emptySurvey: \"Nema vidljivih stranica ili pitanja u anketi.\",\n completingSurvey: \"Hvala na popunjavanju ankete!\",\n completingSurveyBefore: \"Prema našim podacima, već ste popunili ovu anketu.\",\n loadingSurvey: \"Učitavam anketu...\",\n optionsCaption: \"Izaberi...\",\n value: \"vrednost\",\n requiredError: \"Molimo odgovorite na ovo pitanje.\",\n requiredErrorInPanel: \"Molimo odgovorite na bar jedno pitanje.\",\n requiredInAllRowsError: \"Molimo odgovorite na pitanja u svim redovima.\",\n numericError: \"Vrednost bi trebalo da bude numerička.\",\n minError: \"Vrednost ne bi trebalo da bude manja od {0}\",\n maxError: \"Vrednost ne bi trebalo da bude veća od {0}\",\n textMinLength: \"Molimo unesite bar {0} znak(ov)a.\",\n textMaxLength: \"Molimo unesite najviše {0} znak(ov)a.\",\n textMinMaxLength: \"Molimo unesite najmanje {0} i ne više od {1} znak(ov)a.\",\n minRowCountError: \"Molimo popunite najmanje {0} red(ova).\",\n minSelectError: \"Molimo izaberite najmanje {0} opcija/e.\",\n maxSelectError: \"Molimo izaberite najviše {0} opcija/e.\",\n numericMinMax: \"'{0}' bi trebalo da bude najmanje {1} i najviše {2}\",\n numericMin: \"'{0}' bi trebalo da bude najmanje {1}\",\n numericMax: \"'{0}' bi trebalo da bude najviše {1}\",\n invalidEmail: \"Molimo unesite ispravnu e-mail adresu.\",\n // vratiti \"true\" ?\n invalidExpression: \"Izraz: {0} bi trebalo da bude tačan.\",\n urlRequestError: \"Zahtev je naišao na grešku '{0}'. {1}\",\n urlGetChoicesError: \"Zahtev nije pronašao podatke, ili je putanja netačna\",\n exceedMaxSize: \"Veličina fajla ne bi trebalo da prelazi {0}.\",\n otherRequiredError: \"Molimo unesite drugu vrednost.\",\n uploadingFile: \"Fajl se šalje. Molimo sačekajte neko vreme i pokušajte ponovo.\",\n loadingFile: \"Učitavanje...\",\n chooseFile: \"Izaberite fajlove...\",\n noFileChosen: \"Nije izabran nijedan fajl\",\n confirmDelete: \"Da li želite da izbrišete unos?\",\n keyDuplicationError: \"Ova vrednost treba da bude jedinstvena.\",\n addColumn: \"Dodaj kolonu\",\n addRow: \"Dodaj red\",\n removeRow: \"Ukloni\",\n emptyRowsText: \"Nema redova.\",\n addPanel: \"Dodaj novo\",\n removePanel: \"Ukloni\",\n choices_Item: \"stavka\",\n matrix_column: \"Kolona\",\n matrix_row: \"Red\",\n multipletext_itemname: \"tekst\",\n savingData: \"U toku je čuvanje podataka na serveru...\",\n savingDataError: \"Došlo je do greške i rezultati nisu sačuvani.\",\n savingDataSuccess: \"Rezultati su uspešno sačuvani!\",\n saveAgainButton: \"Pokušajte ponovo\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Proveli ste {0} na ovoj stranici i {1} ukupno.\",\n timerSpentPage: \"Proveli ste {0} na ovoj stranici.\",\n timerSpentSurvey: \"Proveli ste {0} ukupno.\",\n timerLimitAll: \"Proveli ste {0} od {1} na ovoj stranici i {2} od {3} ukupno.\",\n timerLimitPage: \"Proveli ste {0} od {1} na ovoj stranici.\",\n timerLimitSurvey: \"Proveli ste {0} od {1} ukupno.\",\n cleanCaption: \"Očisti\",\n clearCaption: \"Poništi\",\n chooseFileCaption: \"Izaberi fajl\",\n removeFileCaption: \"Ukloni ovaj fajl\",\n booleanCheckedLabel: \"Da\",\n booleanUncheckedLabel: \"Ne\",\n confirmRemoveFile: \"Da li ste sigurni da želite da uklonite ovaj fajl: {0}?\",\n confirmRemoveAllFiles: \"Da li ste sigurni da želite da uklonite sve fajlove?\",\n questionTitlePatternText: \"Naslov pitanja\",\n modalCancelButtonText: \"Otkaži\",\n modalApplyButtonText: \"Primeni\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"rs\"] = serbianStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"rs\"] = \"Srpski\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/simplified-chinese.ts\":\n/*!************************************************!*\\\n !*** ./src/localization/simplified-chinese.ts ***!\n \\************************************************/\n/*! exports provided: simplifiedChineseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"simplifiedChineseSurveyStrings\", function() { return simplifiedChineseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar simplifiedChineseSurveyStrings = {\n pagePrevText: \"上一页\",\n pageNextText: \"下一页\",\n completeText: \"提交问卷\",\n previewText: \"预览\",\n editText: \"编辑\",\n startSurveyText: \"开始问卷\",\n otherItemText: \"填写其他答案\",\n noneItemText: \"无\",\n selectAllItemText: \"选择全部\",\n progressText: \"第 {0} 页, 共 {1} 页\",\n panelDynamicProgressText: \"{0} of {1}\",\n questionsProgressText: \"第 {0}/{1} 题\",\n emptySurvey: \"问卷中没有问题或页面\",\n completingSurvey: \"感谢您的参与!\",\n completingSurveyBefore: \"你已完成问卷.\",\n loadingSurvey: \"问卷正在加载中...\",\n optionsCaption: \"请选择...\",\n value: \"值\",\n requiredError: \"请填写此问题\",\n requiredErrorInPanel: \"至少回答一题.\",\n requiredInAllRowsError: \"请填写所有行中问题\",\n numericError: \"答案必须是个数字\",\n minError: \"该值不能小于 {0}\",\n maxError: \"该值不能大于 {0}\",\n textMinLength: \"答案长度至少 {0} 个字符\",\n textMaxLength: \"答案长度不能超过 {0} 个字符\",\n textMinMaxLength: \"答案长度必须在 {0} - {1} 个字符之间\",\n minRowCountError: \"最少需要填写 {0} 行答案\",\n minSelectError: \"最少需要选择 {0} 项答案\",\n maxSelectError: \"最多只能选择 {0} 项答案\",\n numericMinMax: \"答案 '{0}' 必须大于等于 {1} 且小于等于 {2}\",\n numericMin: \"答案 '{0}' 必须大于等于 {1}\",\n numericMax: \"答案 '{0}' 必须小于等于 {1}\",\n invalidEmail: \"请输入有效的 Email 地址\",\n invalidExpression: \"公式: {0} 无效.\",\n urlRequestError: \"载入选项时发生错误 '{0}': {1}\",\n urlGetChoicesError: \"未能载入有效的选项或请求参数路径有误\",\n exceedMaxSize: \"文件大小不能超过 {0}\",\n otherRequiredError: \"请完成其他问题\",\n uploadingFile: \"文件上传中... 请耐心等待几秒后重试\",\n loadingFile: \"加载...\",\n chooseFile: \"选择文件...\",\n noFileChosen: \"未选择文件\",\n confirmDelete: \"删除记录?\",\n keyDuplicationError: \"主键不能重复\",\n addColumn: \"添加列\",\n addRow: \"添加行\",\n removeRow: \"删除答案\",\n emptyRowsText: \"无内容\",\n addPanel: \"新添\",\n removePanel: \"删除\",\n choices_Item: \"选项\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n multipletext_itemname: \"文本\",\n savingData: \"正在将结果保存到服务器...\",\n savingDataError: \"在保存结果过程中发生了错误,结果未能保存\",\n savingDataSuccess: \"结果保存成功!\",\n saveAgainButton: \"请重试\",\n timerMin: \"分\",\n timerSec: \"秒\",\n timerSpentAll: \"本页用时 {0} 总计用时{1} .\",\n timerSpentPage: \"本页用时{0} .\",\n timerSpentSurvey: \"总计用时 {0} .\",\n timerLimitAll: \"本页用时 {0} 共 {1}, 总计用时 {2} 共 {3} .\",\n timerLimitPage: \"本页用时 {0} 共 {1} .\",\n timerLimitSurvey: \"总计用时 {0} 共 {1}.\",\n cleanCaption: \"清理\",\n clearCaption: \"清除\",\n chooseFileCaption: \"选择文件\",\n removeFileCaption: \"移除文件\",\n booleanCheckedLabel: \"是\",\n booleanUncheckedLabel: \"否\",\n confirmRemoveFile: \"删除文件: {0}?\",\n confirmRemoveAllFiles: \"删除所有文件?\",\n questionTitlePatternText: \"标题\",\n modalCancelButtonText: \"取消\",\n modalApplyButtonText: \"确定\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-cn\"] = simplifiedChineseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-cn\"] = \"简体中文\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/spanish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/spanish.ts ***!\n \\*************************************/\n/*! exports provided: spanishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"spanishSurveyStrings\", function() { return spanishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar spanishSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Siguiente\",\n completeText: \"Completar\",\n previewText: \"Vista previa\",\n editText: \"Edita\",\n startSurveyText: \"Comienza\",\n otherItemText: \"Otro (describa)\",\n noneItemText: \"Ninguno\",\n selectAllItemText: \"Seleccionar todo\",\n progressText: \"Página {0} de {1}\",\n panelDynamicProgressText: \"Registro {0} de {1}\",\n questionsProgressText: \"Respondió a {0}/{1} preguntas\",\n emptySurvey: \"No hay página visible o pregunta en la encuesta.\",\n completingSurvey: \"Gracias por completar la encuesta!\",\n completingSurveyBefore: \"Nuestros registros muestran que ya ha completado esta encuesta.\",\n loadingSurvey: \"La encuesta está cargando...\",\n optionsCaption: \"Seleccione...\",\n value: \"valor\",\n requiredError: \"Por favor conteste la pregunta.\",\n requiredErrorInPanel: \"Por favor, responda al menos una pregunta.\",\n requiredInAllRowsError: \"Por favor conteste las preguntas en cada hilera.\",\n numericError: \"La estimación debe ser numérica.\",\n textMinLength: \"Por favor entre por lo menos {0} símbolos.\",\n textMaxLength: \"Por favor entre menos de {0} símbolos.\",\n textMinMaxLength: \"Por favor entre más de {0} y menos de {1} símbolos.\",\n minRowCountError: \"Por favor llene por lo menos {0} hileras.\",\n minSelectError: \"Por favor seleccione por lo menos {0} variantes.\",\n maxSelectError: \"Por favor seleccione no más de {0} variantes.\",\n numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n numericMin: \"El '{0}' debe ser igual o más de {1}\",\n numericMax: \"El '{0}' debe ser igual o menos de {1}\",\n invalidEmail: \"Por favor agregue un correo electrónico válido.\",\n invalidExpression: \"La expresión: {0} debería devolver 'verdadero'.\",\n urlRequestError: \"La solicitud regresó error '{0}'. {1}\",\n urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n exceedMaxSize: \"El tamaño del archivo no debe de exceder {0}.\",\n otherRequiredError: \"Por favor agregue la otra estimación.\",\n uploadingFile: \"Su archivo se está subiendo. Por favor espere unos segundos e intente de nuevo.\",\n loadingFile: \"Cargando...\",\n chooseFile: \"Elija archivo(s)...\",\n noFileChosen: \"No se ha elegido ningún archivo\",\n confirmDelete: \"¿Quieres borrar el registro?\",\n keyDuplicationError: \"Este valor debe ser único.\",\n addColumn: \"Añadir columna\",\n addRow: \"Agregue una hilera\",\n removeRow: \"Eliminar una hilera\",\n addPanel: \"Añadir nuevo\",\n removePanel: \"Retire\",\n choices_Item: \"artículo\",\n matrix_column: \"Columna\",\n matrix_row: \"Hilera\",\n savingData: \"Los resultados se están guardando en el servidor...\",\n savingDataError: \"Los resultados se están guardando en el servidor...\",\n savingDataSuccess: \"¡Los resultados se guardaron con éxito!\",\n saveAgainButton: \"Inténtalo de nuevo.\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Has gastado {0} en esta página y {1} en total.\",\n timerSpentPage: \"Usted ha pasado {0} en esta página.\",\n timerSpentSurvey: \"Has gastado en total.\",\n timerLimitAll: \"Has gastado {0} de {1} en esta página y {2} de {3} en total.\",\n timerLimitPage: \"Has gastado {0} de {1} en esta página.\",\n timerLimitSurvey: \"Usted ha gastado {0} de {1} en total.\",\n cleanCaption: \"Limpia\",\n clearCaption: \"Despejen\",\n chooseFileCaption: \"Elija el archivo\",\n removeFileCaption: \"Elimina este archivo\",\n booleanCheckedLabel: \"Sí\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"¿Estás seguro de que quieres eliminar este archivo: {0}?\",\n confirmRemoveAllFiles: \"¿Estás seguro de que quieres eliminar todos los archivos?\",\n questionTitlePatternText: \"Título de la pregunta\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"es\"] = spanishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"es\"] = \"español\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/swahili.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/swahili.ts ***!\n \\*************************************/\n/*! exports provided: swahiliStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swahiliStrings\", function() { return swahiliStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar swahiliStrings = {\n pagePrevText: \"Iliyotangulia\",\n pageNextText: \"Ifuatayo\",\n completeText: \"Kamili\",\n previewText: \"Hakiki\",\n editText: \"Hariri\",\n startSurveyText: \"Anza\",\n otherItemText: \"Nyingine (eleza)\",\n noneItemText: \"Hakuna\",\n selectAllItemText: \"Chagua Zote\",\n progressText: \"Ukurasa {0} wa {1}\",\n panelDynamicProgressText: \"Rekodi {0} ya {1}\",\n questionsProgressText: \"Yaliyojibiwa {0}/{1} maswali\",\n emptySurvey: \"Hakuna ukurasa unaoonekana au swali katika utafiti.\",\n completingSurvey: \"Asanti kwa kukamilisha utafiti!\",\n completingSurveyBefore: \"Recodi zetu zinatuonyesha tayari umekamilisha utafiti.\",\n loadingSurvey: \"Tunaandaa utafiti...\",\n optionsCaption: \"Chagua...\",\n value: \"thamani\",\n requiredError: \"Tafadhali jibu hili swali.\",\n requiredErrorInPanel: \"Tafadhali jibu swali angalau moja.\",\n requiredInAllRowsError: \"Tafadhali jibu maswali katika safu zote.\",\n numericError: \"Thamani inapaswa kuwa ya nambari.\",\n textMinLength: \"Tafadhali ingiza angalau{0} husika.\",\n textMaxLength: \"Tafadhali ingiza isiozidi {0} husika.\",\n textMinMaxLength: \"Tafadhali ingiza kiwango zaidi ya {0} na kisichopungua {1} husika.\",\n minRowCountError: \"Tafadhali jaza isiopungua {0} safu.\",\n minSelectError: \"Tafadhali chagua angalau {0} lahaja.\",\n maxSelectError: \"Tafadhali changua isiozidi {0} lahaja.\",\n numericMinMax: \" '{0}' inapaswa kuwa sawa au zaidi ya {1} na sawa au chini ya {2}\",\n numericMin: \" '{0}'inapaswa kuwa sawa au zaidi ya {1}\",\n numericMax: \" '{0}'inapaswa kuwa sawa au chini ya {1}\",\n invalidEmail: \"Tafadhali ingiza anwani halali ya barua-pepe.\",\n invalidExpression: \"Usemi:{0} inapaswa kurudi 'kweli'.\",\n urlRequestError: \"Ombi lina kosa '{0}'. {1}\",\n urlGetChoicesError: \"Ombi lilirudisha data tupu au the 'path' mali ya njia sio sahihi\",\n exceedMaxSize: \"Saizi ya faili haipaswi kuzidi {0}.\",\n otherRequiredError: \"Tafadhali ingiza thamani nyingine.\",\n uploadingFile: \"Faili yako inapakia.Tafadhali subiri sekunde kadhaa na ujaribu tena.\",\n loadingFile: \"Inapakia...\",\n chooseFile: \"Chagua faili...\",\n noFileChosen: \"Hujachagua faili\",\n confirmDelete: \"Je! Unataka kufuta rekodi?\",\n keyDuplicationError: \"Thamani hii inapaswa kuwa ya kipekee.\",\n addColumn: \"Ongeza Kolamu\",\n addRow: \"Ongeza safu\",\n removeRow: \"Toa\",\n addPanel: \"Ongeza mpya\",\n removePanel: \"Toa\",\n choices_Item: \"kitu\",\n matrix_column: \"Kolamu\",\n matrix_row: \"Safu\",\n savingData: \"Matokeo yamehifadhiwa kwa seva...\",\n savingDataError: \"Kosa limetokea na hatukuweza kuhifadhi matokeo.\",\n savingDataSuccess: \"Matokeo yamehifadhiwa!\",\n saveAgainButton: \"Jaribu tena\",\n timerMin: \"dakika\",\n timerSec: \"sekunde\",\n timerSpentAll: \"Umetumia {0} kwenye ukurasa huu na {1} kwa jumla.\",\n timerSpentPage: \"Umetumia {0} kwenye ukurasa huu.\",\n timerSpentSurvey: \"Umetumia {0} kwa jumla.\",\n timerLimitAll: \"Umetumia {0} ya {1} kwenye ukurasa huu {2} wa {3} kwa jumla.\",\n timerLimitPage: \"Umetumia {0} ya {1} kwenye ukurasa huu.\",\n timerLimitSurvey: \"Umetumia {0} ya {1} kwa jumla.\",\n cleanCaption: \"Safisha\",\n clearCaption: \"Ondoa\",\n chooseFileCaption: \"Chagua faili\",\n removeFileCaption: \"Ondoa faili\",\n booleanCheckedLabel: \"Ndio\",\n booleanUncheckedLabel: \"Hapana\",\n confirmRemoveFile: \"Je! Una uhakika kuwa unataka kuondoa faili hii: {0}?\",\n confirmRemoveAllFiles: \"Je! Una uhakika kuwa unataka kuondoa faili zote?\",\n questionTitlePatternText: \"Kichwa cha Swali\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sw\"] = swahiliStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sw\"] = \"swahili\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/swedish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/swedish.ts ***!\n \\*************************************/\n/*! exports provided: swedishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swedishSurveyStrings\", function() { return swedishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Create by Mattias Asplund\n\nvar swedishSurveyStrings = {\n pagePrevText: \"Föregående\",\n pageNextText: \"Nästa\",\n completeText: \"Färdig\",\n previewText: \"Förhandsvisning\",\n editText: \"Redigera\",\n startSurveyText: \"Start\",\n otherItemText: \"Annat (beskriv)\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Välj alla\",\n progressText: \"Sida {0} av {1}\",\n panelDynamicProgressText: \"Spela in {0} av {1}\",\n questionsProgressText: \"Besvarade {0} / {1} frågor\",\n emptySurvey: \"Det finns ingen synlig sida eller fråga i enkäten.\",\n completingSurvey: \"Tack för att du genomfört enkäten!!\",\n completingSurveyBefore: \"Våra register visar att du redan har slutfört denna undersökning.\",\n loadingSurvey: \"Enkäten laddas...\",\n optionsCaption: \"Välj...\",\n value: \"värde\",\n requiredError: \"Var vänlig besvara frågan.\",\n requiredErrorInPanel: \"Vänligen svara på minst en fråga.\",\n requiredInAllRowsError: \"Var vänlig besvara frågorna på alla rader.\",\n numericError: \"Värdet ska vara numeriskt.\",\n textMinLength: \"Var vänlig ange minst {0} tecken.\",\n textMaxLength: \"Ange färre än {0} tecken.\",\n textMinMaxLength: \"Ange mer än {0} och färre än {1} tecken.\",\n minRowCountError: \"Var vänlig fyll i minst {0} rader.\",\n minSelectError: \"Var vänlig välj åtminstone {0} varianter.\",\n maxSelectError: \"Var vänlig välj inte fler än {0} varianter.\",\n numericMinMax: \"'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}\",\n numericMin: \"'{0}' ska vara lika med eller mer än {1}\",\n numericMax: \"'{0}' ska vara lika med eller mindre än {1}\",\n invalidEmail: \"Var vänlig ange en korrekt e-postadress.\",\n invalidExpression: \"Uttrycket: {0} ska returnera 'true'.\",\n urlRequestError: \"Förfrågan returnerade felet '{0}'. {1}\",\n urlGetChoicesError: \"Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt\",\n exceedMaxSize: \"Filstorleken får ej överstiga {0}.\",\n otherRequiredError: \"Var vänlig ange det andra värdet.\",\n uploadingFile: \"Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.\",\n loadingFile: \"Läser in...\",\n chooseFile: \"Välj fil (er) ...\",\n noFileChosen: \"Ingen fil vald\",\n confirmDelete: \"Vill du radera posten?\",\n keyDuplicationError: \"Detta värde ska vara unikt.\",\n addColumn: \"Lägg till kolumn\",\n addRow: \"Lägg till rad\",\n removeRow: \"Ta bort\",\n addPanel: \"Lägg till ny\",\n removePanel: \"Ta bort\",\n choices_Item: \"Artikel\",\n matrix_column: \"Kolumn\",\n matrix_row: \"Rad\",\n savingData: \"Resultaten sparas på servern ...\",\n savingDataError: \"Ett fel inträffade och vi kunde inte spara resultaten.\",\n savingDataSuccess: \"Resultaten sparades framgångsrikt!\",\n saveAgainButton: \"Försök igen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har spenderat {0} på den här sidan och {1} totalt.\",\n timerSpentPage: \"Du har spenderat {0} på den här sidan.\",\n timerSpentSurvey: \"Du har spenderat {0} totalt.\",\n timerLimitAll: \"Du har spenderat {0} av {1} på den här sidan och {2} av {3} totalt.\",\n timerLimitPage: \"Du har spenderat {0} av {1} på den här sidan.\",\n timerLimitSurvey: \"Du har spenderat {0} av {1} totalt.\",\n cleanCaption: \"Rena\",\n clearCaption: \"Klar\",\n chooseFileCaption: \"Välj FIL\",\n removeFileCaption: \"Ta bort den här filen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nej\",\n confirmRemoveFile: \"Är du säker på att du vill ta bort den här filen: {0}?\",\n confirmRemoveAllFiles: \"Är du säker på att du vill ta bort alla filer?\",\n questionTitlePatternText: \"Frågetitel\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"sv\"] = swedishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"sv\"] = \"svenska\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/tajik.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/tajik.ts ***!\n \\***********************************/\n/*! exports provided: tajikSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"tajikSurveyStrings\", function() { return tajikSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar tajikSurveyStrings = {\n pagePrevText: \"Бозгашт\",\n pageNextText: \"Оянда\",\n completeText: \"Иҷро шуд\",\n startSurveyText: \"Оғоз\",\n otherItemText: \"Дигар (лутфан тавсиф кунед)\",\n noneItemText: \"Не\",\n selectAllItemText: \"Ҳамаро интихоб кардан\",\n progressText: \"Саҳифаи {0} аз {1}\",\n emptySurvey: \"Ягон савол вуҷуд надорад.\",\n completingSurvey: \"Ташаккур барои пур кардани саволнома!\",\n completingSurveyBefore: \"Шумо аллакай ин пурсишро анҷом додаед.\",\n loadingSurvey: \"Боргирӣ аз сервер...\",\n optionsCaption: \"Интихоб кардан...\",\n value: \"қиммат\",\n requiredError: \"Илтимос, ба савол ҷавоб диҳед.\",\n requiredErrorInPanel: \"Илтимос, ақалан ба як савол ҷавоб диҳед.\",\n requiredInAllRowsError: \"Илтимос, ба ҳамаи саволҳо дар ҳамаи сатрҳо ҷавоб диҳед.\",\n numericError: \"Ҷавоб бояд рақам бошад.\",\n textMinLength: \"Илтимос, аз {0} зиёдтар рамз ворид кунед.\",\n textMaxLength: \"Илтимос, аз {0} камтар рамз ворид кунед.\",\n textMinMaxLength: \"Илтимос, аз {0} зиёдтар ва аз {1} камтар рамз ворид кунед.\",\n minRowCountError: \"Илтимос, на камтар аз {0} сатр пур кунед.\",\n minSelectError: \"Илтимос, ақалан {0} вариант интихоб кунед.\",\n maxSelectError: \"Илтимос, на зиёдтар аз {0} вариант интихоб кунед.\",\n numericMinMax: \"'{0}' бояд на кам аз {1} ва на бисёр аз {2} бошад\",\n numericMin: \"'{0}' бояд на кам аз {1} бошад\",\n numericMax: \"'{0}' бояд на зиёд аз {1} бошад\",\n invalidEmail: \"Илтимос, почтаи электронии воқеиро ворид кунед.\",\n invalidExpression: \"Ифодаи {0} бояд 'true' баргардонад.\",\n urlRequestError: \"Дархост хатогӣ бозгардонд '{0}'. {1}\",\n urlGetChoicesError: \"Ҷавоб ба дархост холӣ омад ё хосияти 'path' нодуруст муайян карда шудааст\",\n exceedMaxSize: \"Андозаи файл бояд на калон аз {0} бошад.\",\n otherRequiredError: \"Илтимос, ба майдони 'Дигар' додаҳоро ворид кунед\",\n uploadingFile: \"Файли шумо бор шуда истодааст. Якчанд сония интизор шавед ва бори дигар кӯшиш кунед.\",\n loadingFile: \"Боркунӣ...\",\n chooseFile: \"Файл(ҳо)-ро интихоб кунед...\",\n confirmDelete: \"Шумо мутмаин ҳастед, ки мехоҳед воридро тоза кунед?\",\n keyDuplicationError: \"Ин арзиш бояд беназир бошад.\",\n addColumn: \"Иловаи сутун\",\n addRow: \"Иловаи сатр\",\n removeRow: \"Нест кардан\",\n addPanel: \"Илова кардан\",\n removePanel: \"Нест кардан\",\n choices_Item: \"Вариант\",\n matrix_column: \"Сутун\",\n matrix_row: \"Сатр\",\n savingData: \"Натиҷа ба сервер сабт шуда истодаанд...\",\n savingDataError: \"Хатогӣ ба амал омад, натиҷа сабт нашуд.\",\n savingDataSuccess: \"Натиҷа бомуваффакият сабт шуд!\",\n saveAgainButton: \"Бори дигар кӯшиш карданд\",\n timerMin: \"дақ\",\n timerSec: \"сон\",\n timerSpentAll: \"Шумо {0} дар ин саҳифа ва {1} дар умум сарф кардед.\",\n timerSpentPage: \"Шумо {0} дар ин саҳифа сарф кардед.\",\n timerSpentSurvey: \"Шумо {0} дар ин тест сарф намудед.\",\n timerLimitAll: \"Шумо {0} аз {1} дар ин саҳифа ва {2} аз {3} дар умум сарф кардед дар дохили ин тест.\",\n timerLimitPage: \"Шумо {0} аз {1} дар ин саҳифа сарф кардед.\",\n timerLimitSurvey: \"Шумо {0} аз {1} дар ҳамаи тест сарф кардед.\",\n cleanCaption: \"Тоза кардан\",\n clearCaption: \"Тоза кардан\",\n removeFileCaption: \"Файлро нест кардан\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tg\"] = tajikSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tg\"] = \"тоҷикӣ\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/thai.ts\":\n/*!**********************************!*\\\n !*** ./src/localization/thai.ts ***!\n \\**********************************/\n/*! exports provided: thaiStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"thaiStrings\", function() { return thaiStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n//Created by Padet Taweekunkan\n\nvar thaiStrings = {\n pagePrevText: \"ก่อนหน้า\",\n pageNextText: \"ถัดไป\",\n completeText: \"สำเร็จ\",\n previewText: \"ดูตัวอย่าง\",\n editText: \"แก้ไข\",\n startSurveyText: \"เริ่ม\",\n otherItemText: \"อื่นๆ (โปรดระบุ)\",\n noneItemText: \"ไม่มี\",\n selectAllItemText: \"เลือกทั้งหมด\",\n progressText: \"หน้าที่ {0} จาก {1}\",\n panelDynamicProgressText: \"รายการที่ {0} จาก {1}\",\n questionsProgressText: \"คำตอบที่ {0}/{1} จำนวนคำถาม\",\n emptySurvey: \"ไม่มีหน้าเพจที่มองเห็น หรือ คำถามใน survey นี้\",\n completingSurvey: \"ขอบคุณที่ทำ survey จนเสร็จ\",\n completingSurveyBefore: \"รายการของเราแสดงว่าคุณได้ทำ survey เสร็จเรียบร้อยแล้ว\",\n loadingSurvey: \"กำลังโหลด Survey...\",\n optionsCaption: \"เลือก...\",\n value: \"ข้อมูล\",\n requiredError: \"กรุณาตอบคำถาม\",\n requiredErrorInPanel: \"กรุณาตอบขั้นต่ำหนึ่งคำถาม\",\n requiredInAllRowsError: \"กรุณาตอบคำถามในทุกๆแถว\",\n numericError: \"ข้อมูลที่ใส่ต้องเป็นตัวเลข\",\n textMinLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} ตัวอักษร\",\n textMaxLength: \"กรุณาใส่ไม่เกินจำนวน {0} ตัวอักษร\",\n textMinMaxLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} และไม่เกินจำนวน {1} ตัวอักษร\",\n minRowCountError: \"กรุณาใส่ขั้นต่ำจำนวน {0} แถว\",\n minSelectError: \"กรุณาเลือกอย่างน้อย {0} รายการ\",\n maxSelectError: \"กรุณาเลือกไม่เกิน {0} รายการ\",\n numericMinMax: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1} และน้อยกว่าหรือเท่ากับ {2}\",\n numericMin: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1}\",\n numericMax: \"'{0}' น้อยกว่าหรือเท่ากับ {1}\",\n invalidEmail: \"กรุณาใส่อีเมล์แอดเดรสที่ถูกต้อง\",\n invalidExpression: \"The expression: {0} ต้องรีเทิร์น 'true'.\",\n urlRequestError: \"รีเควสรีเทิร์น error '{0}'. {1}\",\n urlGetChoicesError: \"รีเควสรีเทิร์นข้อมูลว่างเปล่า หรือ 'path' property ไม่ถูกต้อง\",\n exceedMaxSize: \"ขนาดไฟล์ต้องไม่เกิน {0}.\",\n otherRequiredError: \"กรุณาใส่ค่าอื่น\",\n uploadingFile: \"ไฟล์ของคุณกำลังอัพโหลดอยู่. กรุณารอสักครู่แล้วทำการลองอีกครั้ง\",\n loadingFile: \"กำลังโหลด...\",\n chooseFile: \"เลือกไฟล์...\",\n noFileChosen: \"ไม่ไฟล์ที่เลือก\",\n confirmDelete: \"คุณต้องการลบรายการนี้จริงหรือไม่?\",\n keyDuplicationError: \"ข้อมูลนี้ต้องเป็น unique.\",\n addColumn: \"เพิ่มคอลัมน์\",\n addRow: \"เพิ่มแถว\",\n removeRow: \"ลบ\",\n addPanel: \"เพิ่ม\",\n removePanel: \"ลบ\",\n choices_Item: \"ชิ้น\",\n matrix_column: \"คอลัมน์\",\n matrix_row: \"แถว\",\n savingData: \"ผลลัพท์กำลังบันทึกลงที่เซิร์ฟเวอร์...\",\n savingDataError: \"มีความผิดพลาดเกิดขึ้นส่งผลให้ไม่สามารถบันทึกผลได้\",\n savingDataSuccess: \"บันทึกสำเร็จแล้ว\",\n saveAgainButton: \"รบกวนลองอีกครั้ง\",\n timerMin: \"นาที\",\n timerSec: \"วินาที\",\n timerSpentAll: \"คุณใช้เวลา {0} บนหน้านี้และ {1} รวมทั้งหมด\",\n timerSpentPage: \"คุณใช้เวลา {0} บนหน้านี้\",\n timerSpentSurvey: \"คุณใช้เวลา {0} รวมทั้งหมด\",\n timerLimitAll: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้และ {2} ของ {3} รวมทั้งหมด\",\n timerLimitPage: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้\",\n timerLimitSurvey: \"คุณใช้เวลา {0} ของ {1} รวมทั้งหมด\",\n cleanCaption: \"คลีน\",\n clearCaption: \"เคลียร์\",\n chooseFileCaption: \"เลือกไฟล์\",\n removeFileCaption: \"นำไฟล์นี้ออก\",\n booleanCheckedLabel: \"ใช่\",\n booleanUncheckedLabel: \"ไม่ใช่\",\n confirmRemoveFile: \"คุณแน่ใจที่จะนำไฟล์นี้ออกใช่หรือไม่: {0}?\",\n confirmRemoveAllFiles: \"คุณแน่ใจที่จะนำไฟล์ทั้งหมดออกใช่หรือไม่\",\n questionTitlePatternText: \"ชื่อคำถาม\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"th\"] = thaiStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"th\"] = \"ไทย\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/traditional-chinese.ts\":\n/*!*************************************************!*\\\n !*** ./src/localization/traditional-chinese.ts ***!\n \\*************************************************/\n/*! exports provided: traditionalChineseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"traditionalChineseSurveyStrings\", function() { return traditionalChineseSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar traditionalChineseSurveyStrings = {\n pagePrevText: \"上一頁\",\n pageNextText: \"下一頁\",\n completeText: \"提交問卷\",\n otherItemText: \"填寫其他答案\",\n progressText: \"第 {0} 頁, 共 {1} 頁\",\n emptySurvey: \"問卷中沒有問題或頁面\",\n completingSurvey: \"感謝您的參與!\",\n loadingSurvey: \"問卷載入中...\",\n optionsCaption: \"請選擇...\",\n requiredError: \"請填寫此問題\",\n requiredInAllRowsError: \"請填寫所有行中問題\",\n numericError: \"答案必須是個數字\",\n textMinLength: \"答案長度至少 {0} 個字元\",\n textMaxLength: \"答案長度不能超過 {0} 個字元\",\n textMinMaxLength: \"答案長度必須在 {0} - {1} 個字元之間\",\n minRowCountError: \"最少需要填寫 {0} 行答案\",\n minSelectError: \"最少需要選擇 {0} 項答案\",\n maxSelectError: \"最多只能選擇 {0} 項答案\",\n numericMinMax: \"答案 '{0}' 必須大於等於 {1} 且小於等於 {2}\",\n numericMin: \"答案 '{0}' 必須大於等於 {1}\",\n numericMax: \"答案 '{0}' 必須小於等於 {1}\",\n invalidEmail: \"請輸入有效的 Email 地址\",\n urlRequestError: \"載入選項時發生錯誤 '{0}': {1}\",\n urlGetChoicesError: \"未能載入有效的選項或請求參數路徑有誤\",\n exceedMaxSize: \"文件大小不能超過 {0}\",\n otherRequiredError: \"請完成其他問題\",\n uploadingFile: \"文件上傳中... 請耐心等待幾秒後重試\",\n addRow: \"添加答案\",\n removeRow: \"刪除答案\",\n choices_Item: \"選項\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n savingData: \"正在將結果保存到服務器...\",\n savingDataError: \"在保存結果過程中發生了錯誤,結果未能保存\",\n savingDataSuccess: \"結果保存成功!\",\n saveAgainButton: \"請重試\"\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"zh-tw\"] = traditionalChineseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"zh-tw\"] = \"繁體中文\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/turkish.ts\":\n/*!*************************************!*\\\n !*** ./src/localization/turkish.ts ***!\n \\*************************************/\n/*! exports provided: turkishSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"turkishSurveyStrings\", function() { return turkishSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar turkishSurveyStrings = {\n pagePrevText: \"Geri\",\n pageNextText: \"İleri\",\n completeText: \"Anketi Tamamla\",\n previewText: \"Ön izleme\",\n editText: \"Düzenle\",\n startSurveyText: \"Başlat\",\n otherItemText: \"Diğer (açıklayınız)\",\n noneItemText: \"Yok\",\n selectAllItemText: \"Hepsini seç\",\n progressText: \"Sayfa {0} / {1}\",\n panelDynamicProgressText: \"Kayıt {0} / {1}\",\n questionsProgressText: \"Soruları cevapladı {0} / {1}\",\n emptySurvey: \"Ankette görüntülenecek sayfa ya da soru mevcut değil.\",\n completingSurvey: \"Anketimizi tamamladığınız için teşekkür ederiz.\",\n completingSurveyBefore: \"Kayıtlarımız, bu anketi zaten tamamladığınızı gösteriyor.\",\n loadingSurvey: \"Anket sunucudan yükleniyor ...\",\n optionsCaption: \"Seçiniz ...\",\n value: \"değer\",\n requiredError: \"Lütfen soruya cevap veriniz\",\n requiredErrorInPanel: \"Lütfen en az bir soruyu yanıtlayın.\",\n requiredInAllRowsError: \"Lütfen tüm satırlardaki soruları cevaplayınız.\",\n numericError: \"Girilen değer numerik olmalıdır\",\n textMinLength: \"En az {0} sembol giriniz.\",\n textMaxLength: \"Lütfen {0} karakterden az girin.\",\n textMinMaxLength: \"Lütfen {0} ’den fazla ve {1} ’den az karakter girin.\",\n minRowCountError: \"Lütfen en az {0} satırı doldurun.\",\n minSelectError: \"Lütfen en az {0} seçeneği seçiniz.\",\n maxSelectError: \"Lütfen {0} adetten fazla seçmeyiniz.\",\n numericMinMax: \"The '{0}' should be equal or more than {1} and equal or less than {2}\",\n numericMin: \"'{0}' değeri {1} değerine eşit veya büyük olmalıdır\",\n numericMax: \"'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.\",\n invalidEmail: \"Lütfen geçerli bir eposta adresi giriniz.\",\n invalidExpression: \"İfade: {0} 'true' döndürmelidir.\",\n urlRequestError: \"Talebi şu hatayı döndü '{0}'. {1}\",\n urlGetChoicesError: \"Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.\",\n exceedMaxSize: \"Dosya boyutu {0} değerini geçemez.\",\n otherRequiredError: \"Lütfen diğer değerleri giriniz.\",\n uploadingFile: \"Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.\",\n loadingFile: \"Yükleniyor...\",\n chooseFile: \"Dosyaları seçin ...\",\n noFileChosen: \"Dosya seçili değil\",\n confirmDelete: \"Kaydı silmek istiyor musunuz?\",\n keyDuplicationError: \"Bu değer benzersiz olmalıdır.\",\n addColumn: \"Sütun ekleyin\",\n addRow: \"Satır Ekle\",\n removeRow: \"Kaldır\",\n addPanel: \"Yeni ekle\",\n removePanel: \"Kaldırmak\",\n choices_Item: \"eşya\",\n matrix_column: \"Sütun\",\n matrix_row: \"Kürek çekmek\",\n savingData: \"Sonuçlar sunucuya kaydediliyor ...\",\n savingDataError: \"Bir hata oluştu ve sonuçları kaydedemedik.\",\n savingDataSuccess: \"Sonuçlar başarıyla kaydedildi!\",\n saveAgainButton: \"Tekrar deneyin\",\n timerMin: \"min\",\n timerSec: \"saniye\",\n timerSpentAll: \"Bu sayfada {0} ve toplamda {1} harcadınız.\",\n timerSpentPage: \"Bu sayfaya {0} harcadınız.\",\n timerSpentSurvey: \"Toplamda {0} harcadınız.\",\n timerLimitAll: \"Bu sayfaya {0} / {1} ve toplamda {2} / {3} harcadınız.\",\n timerLimitPage: \"Bu sayfaya {0} / {1} harcadınız.\",\n timerLimitSurvey: \"Toplamda {0} / {1} harcadınız.\",\n cleanCaption: \"Temiz\",\n clearCaption: \"Açık\",\n chooseFileCaption: \"Dosya seçin\",\n removeFileCaption: \"Bu dosyayı kaldır\",\n booleanCheckedLabel: \"Evet\",\n booleanUncheckedLabel: \"Hayır\",\n confirmRemoveFile: \"Bu dosyayı kaldırmak istediğinizden emin misiniz: {0}?\",\n confirmRemoveAllFiles: \"Tüm dosyaları kaldırmak istediğinizden emin misiniz?\",\n questionTitlePatternText: \"Soru başlığı\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"tr\"] = turkishSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"tr\"] = \"türkçe\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/ukrainian.ts\":\n/*!***************************************!*\\\n !*** ./src/localization/ukrainian.ts ***!\n \\***************************************/\n/*! exports provided: ukrainianSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ukrainianSurveyStrings\", function() { return ukrainianSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar ukrainianSurveyStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Далі\",\n completeText: \"Завершити\",\n previewText: \"Попередній перегляд\",\n editText: \"Редагувати\",\n startSurveyText: \"Почати\",\n otherItemText: \"Інше (будь ласка, опишіть)\",\n noneItemText: \"Жоден\",\n selectAllItemText: \"Вибрати все\",\n progressText: \"Сторінка {0} з {1}\",\n panelDynamicProgressText: \"Запис {0} із {1}\",\n questionsProgressText: \"Відповіли на {0}/{1} питань\",\n emptySurvey: \"Немає жодного питання.\",\n completingSurvey: \"Дякуємо Вам за заповнення анкети!\",\n completingSurveyBefore: \"Ви вже проходили це опитування.\",\n loadingSurvey: \"Завантаження опитування...\",\n optionsCaption: \"Вибрати...\",\n value: \"значення\",\n requiredError: \"Будь ласка, дайте відповідь.\",\n requiredErrorInPanel: \"Будь ласка, дайте відповідь хоча б на одне питання.\",\n requiredInAllRowsError: \"Будь ласка, дайте відповідь на питання в кожному рядку.\",\n numericError: \"Відповідь повинна бути числом.\",\n textMinLength: \"Будь ласка введіть більше {0} символів.\",\n textMaxLength: \"Будь ласка введіть менше {0} символів.\",\n textMinMaxLength: \"Будь ласка введіть більше {0} и менше {1} символів.\",\n minRowCountError: \"Будь ласка, заповніть не менше {0} рядків.\",\n minSelectError: \"Будь ласка, виберіть хоча б {0} варіантів.\",\n maxSelectError: \"Будь ласка, виберіть не більше {0} варіантів.\",\n numericMinMax: \"'{0}' повинно бути не менше ніж {1}, і не більше ніж {2}\",\n numericMin: \"'{0}' повинно бути не менше ніж {1}\",\n numericMax: \"'{0}' повинно бути не більше ніж {1}\",\n invalidEmail: \"Будь ласка, введіть дійсну адресу електронної пошти.\",\n invalidExpression: \"Вираз {0} повинен повертати 'true'.\",\n urlRequestError: \"Запит повернув помилку '{0}'. {1}\",\n urlGetChoicesError: \"Відповідь на запит повернулась порожньою або властивіть 'path' вказано невірно\",\n exceedMaxSize: \"Розмір файлу не повинен перевищувати {0}.\",\n otherRequiredError: \"Будь ласка, введіть дані в поле 'Інше'\",\n uploadingFile: \"Ваш файл завантажується. Зачекайте декілька секунд і спробуйте знову.\",\n loadingFile: \"Завантаження...\",\n chooseFile: \"Виберіть файл(и)...\",\n noFileChosen: \"Файл не вибрано\",\n confirmDelete: \"Ви хочете видалити запис?\",\n keyDuplicationError: \"Це значення повинно бути унікальним.\",\n addColumn: \"Додати колонку\",\n addRow: \"Додати рядок\",\n removeRow: \"Видалити\",\n addPanel: \"Додати нову\",\n removePanel: \"Видалити\",\n choices_Item: \"Варіант\",\n matrix_column: \"Колонка\",\n matrix_row: \"Рядок\",\n savingData: \"Результати зберігаються на сервер...\",\n savingDataError: \"Відбулася помилка, результат не був збережений.\",\n savingDataSuccess: \"Резвультат успішно збережений!\",\n saveAgainButton: \"Спробувати знову\",\n timerMin: \"хв\",\n timerSec: \"сек\",\n timerSpentAll: \"Ви витратили {0} на цій сторінці і {1} загалом.\",\n timerSpentPage: \"Ви витратили {0} на цій сторінці.\",\n timerSpentSurvey: \"Ви витратили {0} протягом тесту.\",\n timerLimitAll: \"Ви витратили {0} з {1} на цій сторінці і {2} з {3} для всього тесту.\",\n timerLimitPage: \"Ви витратили {0} з {1} на цій сторінці.\",\n timerLimitSurvey: \"Ви витратили {0} з {1} для всього тесту.\",\n cleanCaption: \"Очистити\",\n clearCaption: \"Очистити\",\n chooseFileCaption: \"Виберіть файл\",\n removeFileCaption: \"Видалити файл\",\n booleanCheckedLabel: \"Так\",\n booleanUncheckedLabel: \"Ні\",\n confirmRemoveFile: \"Ви впевнені, що хочете видалити цей файл: {0}?\",\n confirmRemoveAllFiles: \"Ви впевнені, що хочете видалити всі файли?\",\n questionTitlePatternText: \"Назва запитання\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"ua\"] = ukrainianSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"ua\"] = \"українська\";\n\n\n/***/ }),\n\n/***/ \"./src/localization/welsh.ts\":\n/*!***********************************!*\\\n !*** ./src/localization/welsh.ts ***!\n \\***********************************/\n/*! exports provided: welshSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"welshSurveyStrings\", function() { return welshSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar welshSurveyStrings = {\n pagePrevText: \"Blaenorol\",\n pageNextText: \"Nesaf\",\n completeText: \"Cwblhau\",\n previewText: \"Rhagolwg\",\n editText: \"Golygu\",\n startSurveyText: \"Dechrau\",\n otherItemText: \"Arall (disgrifiwch)\",\n noneItemText: \"Dim\",\n selectAllItemText: \"Dewis y Cyfan \",\n progressText: \"Tudalen {0} o {1}\",\n panelDynamicProgressText: \"Cofnod {0} o {1}\",\n questionsProgressText: \"Wedi ateb {0}/{1} cwestiwn\",\n emptySurvey: \"Does dim modd gweld tudalen na chwestiwn yn yr arolwg.\",\n completingSurvey: \"Diolch am lenwi’r holiadur!\",\n completingSurveyBefore: \"Rydych chi wedi llenwi’r arolwg hwn yn barod yn ôl ein cofnodion.\",\n loadingSurvey: \"Wrthi’n Llwytho’r Arolwg...\",\n optionsCaption: \"Dewiswch...\",\n value: \"gwerth\",\n requiredError: \"Atebwch y cwestiwn.\",\n requiredErrorInPanel: \"Atebwch o leiaf un cwestiwn.\",\n requiredInAllRowsError: \"Atebwch y cwestiynau ym mhob rhes.\",\n numericError: \"Dylai’r gwerth fod yn rhif.\",\n textMinLength: \"Rhowch o leiaf {0} nod.\",\n textMaxLength: \"Rhowch lai na {0} nod.\",\n textMinMaxLength: \"Rhowch o leiaf {0} nod ond dim mwy na {1}.\",\n minRowCountError: \"Llenwch o leiaf {0} rhes.\",\n minSelectError: \"Dewiswch o leiaf {0} amrywiolyn.\",\n maxSelectError: \"Peidiwch â dewis mwy na {0} amrywiolyn.\",\n numericMinMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy, a’r fath â {2} neu’n llai\",\n numericMin: \"Dylai’r '{0}' fod yr un fath â {1} neu’n fwy\",\n numericMax: \"Dylai’r '{0}' fod yr un fath â {1} neu’n llai\",\n invalidEmail: \"Rhowch gyfeiriad e-bost dilys.\",\n invalidExpression: \"Dylai’r mynegiad {0} arwain at 'true'.\",\n urlRequestError: \"Roedd y cais wedi arwain at y gwall '{0}'. {1}\",\n urlGetChoicesError: \"Roedd y cais wedi arwain at ddata gwag neu mae priodwedd y ‘path’ yn anghywir \",\n exceedMaxSize: \"Ddylai’r ffeil ddim bod yn fwy na {0}.\",\n otherRequiredError: \"Rhowch y gwerth arall.\",\n uploadingFile: \"Mae eich ffeil wrthi’n llwytho i fyny. Arhoswch ychydig o eiliadau a rhoi cynnig arall arni.\",\n loadingFile: \"Wrthi’n llwytho...\",\n chooseFile: \"Dewiswch ffeil(iau)...\",\n noFileChosen: \"Heb ddewis ffeil \",\n confirmDelete: \"Ydych chi am ddileu’r cofnod?\",\n keyDuplicationError: \"Dylai’r gwerth hwn fod yn unigryw.\",\n addColumn: \"Ychwanegu colofn \",\n addRow: \"Ychwanegu rhes\",\n removeRow: \"Tynnu\",\n addPanel: \"Ychwanegu o’r newydd\",\n removePanel: \"Tynnu\",\n choices_Item: \"eitem\",\n matrix_column: \"Colofn\",\n matrix_row: \"Rhes\",\n savingData: \"Mae’r canlyniadau’n cael eu cadw ar y gweinydd...\",\n savingDataError: \"Roedd gwall a doedd dim modd cadw’r canlyniadau.\",\n savingDataSuccess: \"Wedi llwyddo i gadw’r canlyniadau!\",\n saveAgainButton: \"Rhowch gynnig arall arni\",\n timerMin: \"mun\",\n timerSec: \"eil\",\n timerSpentAll: \"Rydych chi wedi treulio {0} ar y dudalen hon a {1} gyda’i gilydd.\",\n timerSpentPage: \"Rydych chi wedi treulio {0} ar y dudalen hon.\",\n timerSpentSurvey: \"Rydych chi wedi treulio {0} gyda’i gilydd.\",\n timerLimitAll: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon a {2} o {3} gyda’i gilydd.\",\n timerLimitPage: \"Rydych chi wedi treulio {0} o {1} ar y dudalen hon.\",\n timerLimitSurvey: \"Rydych chi wedi treulio {0} o {1} gyda’i gilydd.\",\n cleanCaption: \"Glanhau\",\n clearCaption: \"Clirio\",\n chooseFileCaption: \"Dewiswch ffeil \",\n removeFileCaption: \"Tynnu’r ffeil hon \",\n booleanCheckedLabel: \"Iawn\",\n booleanUncheckedLabel: \"Na\",\n confirmRemoveFile: \"Ydych chi’n siŵr eich bod am dynnu’r ffeil hon: {0}?\",\n confirmRemoveAllFiles: \"Ydych chi’n siŵr eich bod am dynnu pob ffeil?\",\n questionTitlePatternText: \"Teitl y Cwestiwn \",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"cy\"] = welshSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"cy\"] = \"cymraeg\";\n\n\n/***/ }),\n\n/***/ \"./src/main.scss\":\n/*!***********************!*\\\n !*** ./src/main.scss ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n// extracted by mini-css-extract-plugin\n\n/***/ }),\n\n/***/ \"./src/martixBase.ts\":\n/*!***************************!*\\\n !*** ./src/martixBase.ts ***!\n \\***************************/\n/*! exports provided: QuestionMatrixBaseModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixBaseModel\", function() { return QuestionMatrixBaseModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\nvar Sortable = sortablejs__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n/**\n * A Model for a matrix base question.\n */\nvar QuestionMatrixBaseModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixBaseModel, _super);\n function QuestionMatrixBaseModel(name) {\n var _this = _super.call(this, name) || this;\n _this.generatedVisibleRows = null;\n _this.generatedTotalRow = null;\n _this.moveRowByIndex = function (rows, fromIndex, toIndex) {\n var movableRow = rows[fromIndex];\n if (!movableRow)\n return;\n rows.splice(fromIndex, 1);\n rows.splice(toIndex, 0, movableRow);\n };\n _this.filteredRows = null;\n _this.filteredColumns = null;\n _this.columns = _this.createColumnValues();\n _this.rows = _this.createItemValues(\"rows\");\n return _this;\n }\n QuestionMatrixBaseModel.prototype.createColumnValues = function () {\n return this.createItemValues(\"columns\");\n };\n QuestionMatrixBaseModel.prototype.getType = function () {\n return \"matrixbase\";\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"showHeader\", {\n /**\n * Set this property to false, to hide table header. The default value is true.\n */\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n set: function (val) {\n this.setPropertyValue(\"showHeader\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"allowRowsDragAndDrop\", {\n /**\n * Set this property to true, to allow rows drag and drop.\n */\n get: function () {\n return this.getPropertyValue(\"allowRowsDragAndDrop\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRowsDragAndDrop\", val);\n },\n enumerable: false,\n configurable: true\n });\n //cross framework initialization\n QuestionMatrixBaseModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el && this.allowRowsDragAndDrop) {\n this.initSortable(el.querySelector(\"tbody\"));\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n //cross framework destroy\n QuestionMatrixBaseModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (this.sortableInst)\n this.sortableInst.destroy();\n _super.prototype.beforeDestroyQuestionElement.call(this, el);\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columns\", {\n /**\n * The list of columns. A column has a value and an optional text\n */\n get: function () {\n return this.getPropertyValue(\"columns\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"columns\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleColumns\", {\n get: function () {\n return !!this.filteredColumns ? this.filteredColumns : this.columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rows\", {\n /**\n * The list of rows. A row has a value and an optional text\n */\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n set: function (newValue) {\n var newRows = this.processRowsOnSet(newValue);\n this.setPropertyValue(\"rows\", newRows);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixBaseModel.prototype.processRowsOnSet = function (newRows) {\n return newRows;\n };\n QuestionMatrixBaseModel.prototype.getVisibleRows = function () {\n return [];\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleRows\", {\n /**\n * Returns the list of visible rows as model objects.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getVisibleRows();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rowsVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each row item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"rowsVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowsVisibleIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columnsVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each column item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getPropertyValue(\"columnsVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnsVisibleIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixBaseModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runItemsCondition(values, properties);\n };\n QuestionMatrixBaseModel.prototype.filterItems = function () {\n if (this.areInvisibleElementsShowing) {\n this.onRowsChanged();\n return false;\n }\n if (this.isLoadingFromJson || !this.data)\n return false;\n return this.runItemsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n };\n QuestionMatrixBaseModel.prototype.onColumnsChanged = function () { };\n QuestionMatrixBaseModel.prototype.onRowsChanged = function () {\n this.fireCallback(this.visibleRowsChangedCallback);\n };\n QuestionMatrixBaseModel.prototype.shouldRunColumnExpression = function () {\n return !this.survey || !this.survey.areInvisibleElementsShowing;\n };\n QuestionMatrixBaseModel.prototype.hasRowsAsItems = function () {\n return true;\n };\n QuestionMatrixBaseModel.prototype.runItemsCondition = function (values, properties) {\n var oldVisibleRows = null;\n if (!!this.filteredRows && !_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isValueEmpty(this.defaultValue)) {\n oldVisibleRows = [];\n for (var i = 0; i < this.filteredRows.length; i++) {\n oldVisibleRows.push(this.filteredRows[i]);\n }\n }\n var hasChanges = this.hasRowsAsItems() && this.runConditionsForRows(values, properties);\n var hasColumnsChanged = this.runConditionsForColumns(values, properties);\n hasChanges = hasColumnsChanged || hasChanges;\n if (hasChanges) {\n if (!!this.survey &&\n this.survey.isClearValueOnHidden &&\n (!!this.filteredColumns || !!this.filteredRows)) {\n this.clearIncorrectValues();\n }\n if (!!oldVisibleRows) {\n this.restoreNewVisibleRowsValues(oldVisibleRows);\n }\n this.clearGeneratedRows();\n if (hasColumnsChanged) {\n this.onColumnsChanged();\n }\n this.onRowsChanged();\n }\n return hasChanges;\n };\n QuestionMatrixBaseModel.prototype.clearGeneratedRows = function () {\n this.generatedVisibleRows = null;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForRows = function (values, properties) {\n var showInvisibile = !!this.survey && this.survey.areInvisibleElementsShowing;\n var runner = !showInvisibile && !!this.rowsVisibleIf\n ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.rowsVisibleIf)\n : null;\n this.filteredRows = [];\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.rows, this.filteredRows, runner, values, properties, !showInvisibile);\n if (this.filteredRows.length === this.rows.length) {\n this.filteredRows = null;\n }\n return hasChanged;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForColumns = function (values, properties) {\n var useColumnsExpression = !!this.survey && !this.survey.areInvisibleElementsShowing;\n var runner = useColumnsExpression && !!this.columnsVisibleIf\n ? new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](this.columnsVisibleIf)\n : null;\n this.filteredColumns = [];\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].runConditionsForItems(this.columns, this.filteredColumns, runner, values, properties, this.shouldRunColumnExpression());\n if (this.filteredColumns.length === this.columns.length) {\n this.filteredColumns = null;\n }\n return hasChanged;\n };\n QuestionMatrixBaseModel.prototype.clearIncorrectValues = function () {\n var val = this.value;\n if (!val)\n return;\n var newVal = null;\n var isChanged = false;\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n var columns = !!this.filteredColumns ? this.filteredColumns : this.columns;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(columns, val[key])) {\n if (newVal == null)\n newVal = {};\n newVal[key] = val[key];\n }\n else {\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newVal;\n }\n _super.prototype.clearIncorrectValues.call(this);\n };\n QuestionMatrixBaseModel.prototype.clearInvisibleValuesInRows = function () {\n if (this.isEmpty())\n return;\n var newData = this.getUnbindValue(this.value);\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n var key = rows[i].value;\n if (!!newData[key] && !rows[i].isVisible) {\n delete newData[key];\n }\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(newData, this.value))\n return;\n this.value = newData;\n };\n QuestionMatrixBaseModel.prototype.restoreNewVisibleRowsValues = function (oldVisibleRows) {\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n var val = this.defaultValue;\n var newValue = this.getUnbindValue(this.value);\n var isChanged = false;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(rows, key) &&\n !_itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(oldVisibleRows, key)) {\n if (newValue == null)\n newValue = {};\n newValue[key] = val[key];\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newValue;\n }\n };\n QuestionMatrixBaseModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n if (this.isReadOnly)\n return;\n var self = this;\n self.domNode = domNode;\n self.sortableInst = new Sortable(domNode, {\n animation: 100,\n forceFallback: true,\n delay: 200,\n delayOnTouchOnly: true,\n handle: \"tr\",\n onEnd: function (evt) {\n self.moveRowByIndex(self.rows, evt.oldDraggableIndex, evt.newDraggableIndex);\n },\n });\n };\n return QuestionMatrixBaseModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"matrixbase\", [\n \"columnsVisibleIf:condition\",\n \"rowsVisibleIf:condition\",\n { name: \"showHeader:boolean\", default: true },\n {\n name: \"allowRowsDragAndDrop\",\n default: false,\n visible: false,\n isSerializable: false,\n },\n], undefined, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/page.ts\":\n/*!*********************!*\\\n !*** ./src/page.ts ***!\n \\*********************/\n/*! exports provided: PageModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return PageModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * The page object. It has elements collection, that contains questions and panels.\n */\nvar PageModel = /** @class */ (function (_super) {\n __extends(PageModel, _super);\n function PageModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.hasShownValue = false;\n _this.isRandomizing = false;\n /**\n * Time in seconds end-user spent on this page\n */\n _this.timeSpent = 0;\n var self = _this;\n _this.locTitle.onGetTextCallback = function (text) {\n if (self.num > 0)\n return self.num + \". \" + text;\n return text;\n };\n _this.createLocalizableString(\"navigationTitle\", _this, true);\n _this.createLocalizableString(\"navigationDescription\", _this, true);\n return _this;\n }\n PageModel.prototype.getType = function () {\n return \"page\";\n };\n PageModel.prototype.toString = function () {\n return this.name;\n };\n Object.defineProperty(PageModel.prototype, \"isPage\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationTitle\", {\n /**\n * Use this property to show title in navigation buttons. If the value is empty then page name is used.\n * @see survey.progressBarType\n */\n get: function () {\n return this.getLocalizableStringText(\"navigationTitle\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"navigationTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"locNavigationTitle\", {\n get: function () {\n return this.getLocalizableString(\"navigationTitle\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationDescription\", {\n get: function () {\n return this.getLocalizableStringText(\"navigationDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"navigationDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"locNavigationDescription\", {\n get: function () {\n return this.getLocalizableString(\"navigationDescription\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"passed\", {\n get: function () {\n return this.getPropertyValue(\"passed\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"passed\", val);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.delete = function () {\n if (!!this.survey) {\n this.removeSelfFromList(this.survey.pages);\n }\n };\n PageModel.prototype.onFirstRendering = function () {\n if (this.wasShown)\n return;\n _super.prototype.onFirstRendering.call(this);\n };\n Object.defineProperty(PageModel.prototype, \"visibleIndex\", {\n /**\n * The visible index of the page. It has values from 0 to visible page count - 1.\n * @see SurveyModel.visiblePages\n * @see SurveyModel.pages\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIndex\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"isStarted\", {\n /**\n * Returns true, if the page is started page in the survey. It can be shown on the start only and the end-user could not comeback to it after it passed it.\n */\n get: function () {\n return this.survey && this.survey.isPageStarted(this);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.calcCssClasses = function () {\n var css = this.css;\n var classes = { page: {}, pageTitle: \"\", pageDescription: \"\", row: \"\" };\n this.copyCssClasses(classes.page, css.page);\n if (!!css.pageTitle) {\n classes.pageTitle = css.pageTitle;\n }\n if (!!css.pageDescription) {\n classes.pageDescription = css.pageDescription;\n }\n if (!!css.row) {\n classes.row = css.row;\n }\n if (this.survey) {\n this.survey.updatePageCssClasses(this, classes);\n }\n return classes;\n };\n PageModel.prototype.getIsPageVisible = function (exceptionQuestion) {\n if (this.isStarted)\n return false;\n return _super.prototype.getIsPageVisible.call(this, exceptionQuestion);\n };\n Object.defineProperty(PageModel.prototype, \"num\", {\n get: function () {\n return this.getPropertyValue(\"num\", -1);\n },\n set: function (val) {\n if (this.num == val)\n return;\n this.setPropertyValue(\"num\", val);\n this.onNumChanged(val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationButtonsVisibility\", {\n /**\n * Set this property to \"hide\" to make \"Prev\", \"Next\" and \"Complete\" buttons are invisible for this page. Set this property to \"show\" to make these buttons visible, even if survey showNavigationButtons property is false.\n * @see SurveyMode.showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"navigationButtonsVisibility\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigationButtonsVisibility\", val.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"wasShown\", {\n /**\n * The property returns true, if the page has been shown to the end-user.\n */\n get: function () {\n return this.hasShownValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"hasShown\", {\n get: function () {\n return this.wasShown;\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.setWasShown = function (val) {\n if (val == this.hasShownValue)\n return;\n this.hasShownValue = val;\n if (this.isDesignMode)\n return;\n if (val == true && this.areQuestionsRandomized) {\n this.randomizeElements();\n }\n };\n PageModel.prototype.randomizeElements = function () {\n if (this.isRandomizing)\n return;\n this.isRandomizing = true;\n var oldElements = [];\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n oldElements.push(elements[i]);\n }\n var newElements = _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].randomizeArray(oldElements);\n this.elements.splice(0, this.elements.length);\n for (var i = 0; i < newElements.length; i++) {\n this.elements.push(newElements[i]);\n }\n this.isRandomizing = false;\n };\n Object.defineProperty(PageModel.prototype, \"areQuestionsRandomized\", {\n /**\n * The property returns true, if the elements are randomized on the page\n * @see hasShown\n * @see questionsOrder\n * @see SurveyModel.questionsOrder\n */\n get: function () {\n var order = this.questionsOrder == \"default\" && this.survey\n ? this.survey.questionsOrder\n : this.questionsOrder;\n return order == \"random\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"questionsOrder\", {\n /**\n * Use this property to randomize questions. Set it to 'random' to randomize questions, 'initial' to keep them in the same order or 'default' to use the Survey questionsOrder property\n * @see SurveyModel.questionsOrder\n * @see areQuestionsRandomized\n */\n get: function () {\n return this.getPropertyValue(\"questionsOrder\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOrder\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Call it to scroll to the page top.\n */\n PageModel.prototype.scrollToTop = function () {\n if (!!this.survey) {\n this.survey.scrollElementToTop(this, null, this, this.id);\n }\n };\n // public get timeSpent(): number {\n // return this.getPropertyValue(\"timeSpent\", 0);\n // }\n // public set timeSpent(val: number) {\n // this.setPropertyValue(\"timeSpent\", val);\n // }\n /**\n * Returns the list of all panels in the page\n */\n PageModel.prototype.getPanels = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n this.addPanelsIntoList(result, visibleOnly, includingDesignTime);\n return result;\n };\n Object.defineProperty(PageModel.prototype, \"maxTimeToFinish\", {\n /**\n * The maximum time in seconds that end-user has to complete the page. If the value is 0 or less, the end-user has unlimited number of time to finish the page.\n * @see startTimer\n * @see SurveyModel.maxTimeToFinishPage\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinish\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinish\", val);\n },\n enumerable: false,\n configurable: true\n });\n PageModel.prototype.onNumChanged = function (value) { };\n PageModel.prototype.onVisibleChanged = function () {\n if (this.isRandomizing)\n return;\n _super.prototype.onVisibleChanged.call(this);\n if (this.survey != null) {\n this.survey.pageVisibilityChanged(this, this.isVisible);\n }\n };\n PageModel.prototype.dragDropStart = function (src, target, nestedPanelDepth) {\n if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n this.dragDropInfo = new _panel__WEBPACK_IMPORTED_MODULE_2__[\"DragDropInfo\"](src, target, nestedPanelDepth);\n };\n PageModel.prototype.dragDropMoveTo = function (destination, isBottom, isEdge) {\n if (isBottom === void 0) { isBottom = false; }\n if (isEdge === void 0) { isEdge = false; }\n if (!this.dragDropInfo)\n return false;\n this.dragDropInfo.destination = destination;\n this.dragDropInfo.isBottom = isBottom;\n this.dragDropInfo.isEdge = isEdge;\n this.correctDragDropInfo(this.dragDropInfo);\n if (!this.dragDropCanDropTagert())\n return false;\n if (!this.dragDropCanDropSource() || !this.dragDropAllowFromSurvey()) {\n if (!!this.dragDropInfo.source) {\n var row = this.dragDropFindRow(this.dragDropInfo.target);\n this.updateRowsRemoveElementFromRow(this.dragDropInfo.target, row);\n }\n return false;\n }\n this.dragDropAddTarget(this.dragDropInfo);\n return true;\n };\n PageModel.prototype.getTitleActions = function () {\n var titleActions = [];\n this.titleActions = this.survey.getUpdatedPageTitleActions(this, titleActions);\n return this.titleActions;\n };\n PageModel.prototype.correctDragDropInfo = function (dragDropInfo) {\n if (!dragDropInfo.destination)\n return;\n var panel = dragDropInfo.destination.isPanel\n ? dragDropInfo.destination\n : null;\n if (!panel)\n return;\n if (!dragDropInfo.target.isLayoutTypeSupported(panel.getChildrenLayoutType())) {\n dragDropInfo.isEdge = true;\n }\n };\n PageModel.prototype.dragDropAllowFromSurvey = function () {\n var dest = this.dragDropInfo.destination;\n if (!dest || !this.survey)\n return true;\n var insertBefore = null;\n var insertAfter = null;\n var parent = dest.isPage || (!this.dragDropInfo.isEdge && dest.isPanel)\n ? dest\n : dest.parent;\n if (!dest.isPage) {\n var container = dest.parent;\n if (!!container) {\n var elements = container.elements;\n var index = elements.indexOf(dest);\n if (index > -1) {\n insertBefore = dest;\n insertAfter = dest;\n if (this.dragDropInfo.isBottom) {\n insertBefore =\n index < elements.length - 1 ? elements[index + 1] : null;\n }\n else {\n insertAfter = index > 0 ? elements[index - 1] : null;\n }\n }\n }\n }\n var options = {\n target: this.dragDropInfo.target,\n source: this.dragDropInfo.source,\n parent: parent,\n insertAfter: insertAfter,\n insertBefore: insertBefore,\n };\n return this.survey.dragAndDropAllow(options);\n };\n PageModel.prototype.dragDropFinish = function (isCancel) {\n if (isCancel === void 0) { isCancel = false; }\n if (!this.dragDropInfo)\n return;\n var target = this.dragDropInfo.target;\n var row = this.dragDropFindRow(target);\n var targetIndex = this.dragDropGetElementIndex(target, row);\n this.updateRowsRemoveElementFromRow(target, row);\n if (!isCancel && !!row) {\n var src = this.dragDropInfo.source;\n var isSamePanel = false;\n if (!!src && !!src.parent) {\n isSamePanel = row.panel == src.parent;\n if (isSamePanel) {\n row.panel.dragDropMoveElement(src, target, targetIndex);\n targetIndex = -1;\n }\n else {\n src.parent.removeElement(src);\n }\n }\n if (targetIndex > -1) {\n row.panel.addElement(target, targetIndex);\n }\n }\n this.dragDropInfo = null;\n return !isCancel ? target : null;\n };\n PageModel.prototype.dragDropGetElementIndex = function (target, row) {\n if (!row)\n return -1;\n var index = row.elements.indexOf(target);\n if (row.index == 0)\n return index;\n var prevRow = row.panel.rows[row.index - 1];\n var prevElement = prevRow.elements[prevRow.elements.length - 1];\n return index + row.panel.elements.indexOf(prevElement) + 1;\n };\n PageModel.prototype.dragDropCanDropTagert = function () {\n var destination = this.dragDropInfo.destination;\n if (!destination || destination.isPage)\n return true;\n return this.dragDropCanDropCore(this.dragDropInfo.target, destination);\n };\n PageModel.prototype.dragDropCanDropSource = function () {\n var source = this.dragDropInfo.source;\n if (!source)\n return true;\n var destination = this.dragDropInfo.destination;\n if (!this.dragDropCanDropCore(source, destination))\n return false;\n return this.dragDropCanDropNotNext(source, destination, this.dragDropInfo.isEdge, this.dragDropInfo.isBottom);\n };\n PageModel.prototype.dragDropCanDropCore = function (target, destination) {\n if (!destination)\n return true;\n if (this.dragDropIsSameElement(destination, target))\n return false;\n if (target.isPanel) {\n var pnl = target;\n if (pnl.containsElement(destination) ||\n !!pnl.getElementByName(destination.name))\n return false;\n }\n return true;\n };\n PageModel.prototype.dragDropCanDropNotNext = function (source, destination, isEdge, isBottom) {\n if (!destination || (destination.isPanel && !isEdge))\n return true;\n if (source.parent !== destination.parent)\n return true;\n var pnl = source.parent;\n var srcIndex = pnl.elements.indexOf(source);\n var destIndex = pnl.elements.indexOf(destination);\n if (destIndex < srcIndex && !isBottom)\n destIndex--;\n if (isBottom)\n destIndex++;\n return srcIndex < destIndex\n ? destIndex - srcIndex > 1\n : srcIndex - destIndex > 0;\n };\n PageModel.prototype.dragDropIsSameElement = function (el1, el2) {\n return el1 == el2 || el1.name == el2.name;\n };\n PageModel.prototype.ensureRowsVisibility = function () {\n _super.prototype.ensureRowsVisibility.call(this);\n this.getPanels().forEach(function (panel) { return panel.ensureRowsVisibility(); });\n };\n return PageModel;\n}(_panel__WEBPACK_IMPORTED_MODULE_2__[\"PanelModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"page\", [\n {\n name: \"navigationButtonsVisibility\",\n default: \"inherit\",\n choices: [\"inherit\", \"show\", \"hide\"],\n },\n {\n name: \"questionsOrder\",\n default: \"default\",\n choices: [\"default\", \"initial\", \"random\"],\n },\n { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n {\n name: \"navigationTitle\",\n visibleIf: function (obj) {\n return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n },\n serializationProperty: \"locNavigationTitle\",\n },\n {\n name: \"navigationDescription\",\n visibleIf: function (obj) {\n return !!obj.survey && obj.survey.progressBarType === \"buttons\";\n },\n serializationProperty: \"locNavigationDescription\",\n },\n], function () {\n return new PageModel();\n}, \"panelbase\");\n\n\n/***/ }),\n\n/***/ \"./src/panel.ts\":\n/*!**********************!*\\\n !*** ./src/panel.ts ***!\n \\**********************/\n/*! exports provided: DragDropInfo, QuestionRowModel, PanelModelBase, PanelModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropInfo\", function() { return DragDropInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return QuestionRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return PanelModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return PanelModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\nvar DragDropInfo = /** @class */ (function () {\n function DragDropInfo(source, target, nestedPanelDepth) {\n if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n this.source = source;\n this.target = target;\n this.nestedPanelDepth = nestedPanelDepth;\n }\n return DragDropInfo;\n}());\n\nvar QuestionRowModel = /** @class */ (function (_super) {\n __extends(QuestionRowModel, _super);\n function QuestionRowModel(panel) {\n var _this = _super.call(this) || this;\n _this.panel = panel;\n _this._scrollableParent = undefined;\n _this._updateVisibility = undefined;\n _this.idValue = QuestionRowModel.getRowId();\n _this.isNeedRender = !_this.isLazyRendering;\n _this.visible = panel.areInvisibleElementsShowing;\n _this.createNewArray(\"elements\");\n return _this;\n }\n QuestionRowModel.getRowId = function () {\n return \"pr_\" + QuestionRowModel.rowCounter++;\n };\n QuestionRowModel.prototype.startLazyRendering = function (rowContainerDiv, findScrollableContainer) {\n var _this = this;\n if (findScrollableContainer === void 0) { findScrollableContainer = _utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"findScrollableParent\"]; }\n this._scrollableParent = findScrollableContainer(rowContainerDiv);\n this.isNeedRender = !(this._scrollableParent.scrollHeight > this._scrollableParent.clientHeight);\n // if this._scrollableParent is html the scroll event isn't fired, so we should use window\n if (this._scrollableParent === document.documentElement) {\n this._scrollableParent = window;\n }\n if (!this.isNeedRender) {\n this._updateVisibility = function () {\n var isRowContainerDivVisible = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_8__[\"isElementVisible\"])(rowContainerDiv, 50);\n if (!_this.isNeedRender && isRowContainerDivVisible) {\n _this.isNeedRender = true;\n _this.stopLazyRendering();\n }\n };\n setTimeout(function () {\n if (!!_this._scrollableParent &&\n !!_this._scrollableParent.addEventListener) {\n _this._scrollableParent.addEventListener(\"scroll\", _this._updateVisibility);\n }\n _this.ensureVisibility();\n }, 10);\n }\n };\n QuestionRowModel.prototype.ensureVisibility = function () {\n if (!!this._updateVisibility) {\n this._updateVisibility();\n }\n };\n QuestionRowModel.prototype.stopLazyRendering = function () {\n if (!!this._scrollableParent &&\n !!this._updateVisibility &&\n !!this._scrollableParent.removeEventListener) {\n this._scrollableParent.removeEventListener(\"scroll\", this._updateVisibility);\n }\n this._scrollableParent = undefined;\n this._updateVisibility = undefined;\n };\n Object.defineProperty(QuestionRowModel.prototype, \"isLazyRendering\", {\n get: function () {\n return (!!this.panel && !!this.panel.survey && this.panel.survey.isLazyRendering);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"elements\", {\n get: function () {\n return this.getPropertyValue(\"elements\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visible\", {\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"visible\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"isNeedRender\", {\n get: function () {\n return this.getPropertyValue(\"isneedrender\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"isneedrender\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visibleElements\", {\n get: function () {\n return this.elements.filter(function (e) { return e.isVisible; });\n },\n enumerable: false,\n configurable: true\n });\n QuestionRowModel.prototype.updateVisible = function () {\n this.visible = this.calcVisible();\n this.setWidth();\n };\n QuestionRowModel.prototype.addElement = function (q) {\n this.elements.push(q);\n this.updateVisible();\n };\n Object.defineProperty(QuestionRowModel.prototype, \"index\", {\n get: function () {\n return this.panel.rows.indexOf(this);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRowModel.prototype.setWidth = function () {\n var visCount = this.visibleElements.length;\n if (visCount == 0)\n return;\n var counter = 0;\n var preSetWidthElements = [];\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n this.setElementMaxMinWidth(el);\n if (el.isVisible) {\n var width = this.getElementWidth(el);\n if (!!width) {\n el.renderWidth = this.getRenderedWidthFromWidth(width);\n preSetWidthElements.push(el);\n }\n el.rightIndent = counter < visCount - 1 ? 1 : 0;\n counter++;\n }\n else {\n el.renderWidth = \"\";\n }\n }\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (!el.isVisible || preSetWidthElements.indexOf(el) > -1)\n continue;\n if (preSetWidthElements.length == 0) {\n el.renderWidth = (100 / visCount).toFixed(6) + \"%\";\n }\n else {\n el.renderWidth = this.getRenderedCalcWidth(el, preSetWidthElements, visCount);\n }\n }\n };\n QuestionRowModel.prototype.setElementMaxMinWidth = function (el) {\n if (el.width &&\n typeof el.width === \"string\" &&\n el.width.indexOf(\"%\") === -1) {\n el.minWidth = el.width;\n el.maxWidth = el.width;\n }\n };\n QuestionRowModel.prototype.getRenderedCalcWidth = function (el, preSetWidthElements, visCount) {\n var expression = \"100%\";\n for (var i = 0; i < preSetWidthElements.length; i++) {\n expression += \" - \" + preSetWidthElements[i].renderWidth;\n }\n var calcWidthEl = visCount - preSetWidthElements.length;\n if (calcWidthEl > 1) {\n expression = \"(\" + expression + \")/\" + calcWidthEl.toString();\n }\n return \"calc(\" + expression + \")\";\n };\n QuestionRowModel.prototype.getElementWidth = function (el) {\n var width = el.width;\n if (!width || typeof width !== \"string\")\n return \"\";\n return width.trim();\n };\n QuestionRowModel.prototype.getRenderedWidthFromWidth = function (width) {\n return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isNumber(width) ? width + \"px\" : width;\n };\n QuestionRowModel.prototype.calcVisible = function () {\n return this.visibleElements.length > 0;\n };\n QuestionRowModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.stopLazyRendering();\n };\n QuestionRowModel.rowCounter = 100;\n return QuestionRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n/**\n * A base class for a Panel and Page objects.\n */\nvar PanelModelBase = /** @class */ (function (_super) {\n __extends(PanelModelBase, _super);\n function PanelModelBase(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.isQuestionsReady = false;\n _this.questionsValue = new Array();\n _this.createNewArray(\"rows\");\n _this.elementsValue = _this.createNewArray(\"elements\", _this.onAddElement.bind(_this), _this.onRemoveElement.bind(_this));\n _this.id = PanelModelBase.getPanelId();\n _this.createLocalizableString(\"title\", _this, true);\n _this.createLocalizableString(\"description\", _this, true);\n _this.createLocalizableString(\"requiredErrorText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"questionTitleLocation\", function () {\n _this.onVisibleChanged.bind(_this);\n _this.updateElementCss(true);\n });\n _this.registerFunctionOnPropertiesValueChanged([\"questionStartIndex\", \"showQuestionNumbers\"], function () {\n _this.updateVisibleIndexes();\n });\n return _this;\n }\n PanelModelBase.getPanelId = function () {\n return \"sp_\" + PanelModelBase.panelCounter++;\n };\n PanelModelBase.prototype.getType = function () {\n return \"panelbase\";\n };\n PanelModelBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (this.isDesignMode)\n this.onVisibleChanged();\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setSurveyImpl(value);\n }\n };\n PanelModelBase.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.markQuestionListDirty();\n this.onRowsChanged();\n };\n Object.defineProperty(PanelModelBase.prototype, \"title\", {\n /**\n * PanelModel or PageModel title property.\n * @description\n */\n get: function () {\n return this.getLocalizableStringText(\"title\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"_showTitle\", {\n get: function () {\n return ((this.survey.showPageTitles && this.title.length > 0) ||\n (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].allowShowEmptyTitleInDesignMode));\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getTitleActions = function () {\n var titleActions = _super.prototype.getTitleActions.call(this);\n this.titleActions = this.survey.getUpdatedPanelTitleActions(this, titleActions);\n return this.titleActions;\n };\n Object.defineProperty(PanelModelBase.prototype, \"_showDescription\", {\n get: function () {\n return ((this.survey.showPageTitles && this.description.length > 0) ||\n (this.isDesignMode &&\n _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].allowShowEmptyTitleInDesignMode &&\n _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].allowShowEmptyDescriptionInDesignMode));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"description\", {\n /**\n * PanelModel or PageModel description property. It renders under title by using smaller font. Unlike the title, description can be empty.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"description\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].localeChanged();\n }\n };\n PanelModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].locStrsChanged();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"requiredText\", {\n /**\n * Returns the char/string for a required panel.\n * @see SurveyModel.requiredText\n */\n get: function () {\n return this.survey != null && this.isRequired\n ? this.survey.requiredText\n : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"titlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"requireNumTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numRequireTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n */\n get: function () {\n return this.getLocalizableStringText(\"requiredErrorText\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"requiredErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : \"\";\n };\n PanelModelBase.prototype.getMarkdownHtml = function (text, name) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text, name)\n : null;\n };\n PanelModelBase.prototype.getRenderer = function (name) {\n return this.survey ? this.survey.getRendererForString(this, name) : null;\n };\n PanelModelBase.prototype.getProcessedText = function (text) {\n return this.textProcessor\n ? this.textProcessor.processText(text, true)\n : text;\n };\n Object.defineProperty(PanelModelBase.prototype, \"parent\", {\n /**\n * A parent element. It is always null for the Page object and always not null for the Panel object. Panel object may contain Questions and other Panels.\n */\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"depth\", {\n get: function () {\n if (this.parent == null)\n return 0;\n return this.parent.depth + 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"visibleIf\", {\n /**\n * An expression that returns true or false. If it returns true the Panel becomes visible and if it returns false the Panel becomes invisible. The library runs the expression on survey start and on changing a question value. If the property is empty then visible property is used.\n * @see visible\n */\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"cssClasses\", {\n get: function () {\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.calcCssClasses = function () {\n var classes = { panel: {}, error: {}, row: \"\" };\n this.copyCssClasses(classes.panel, this.css.panel);\n this.copyCssClasses(classes.error, this.css.error);\n if (!!this.css.row) {\n classes.row = this.css.row;\n }\n if (this.survey) {\n this.survey.updatePanelCssClasses(this, classes);\n }\n return classes;\n };\n Object.defineProperty(PanelModelBase.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"id\", {\n /**\n * A unique element identificator. It is generated automatically.\n */\n get: function () {\n return this.getPropertyValue(\"id\");\n },\n set: function (val) {\n this.setPropertyValue(\"id\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isPanel\", {\n /**\n * Returns true if the current object is Panel. Returns false if the current object is Page (a root Panel).\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getPanel = function () {\n return this;\n };\n PanelModelBase.prototype.getLayoutType = function () {\n return \"row\";\n };\n PanelModelBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return layoutType !== \"flow\";\n };\n Object.defineProperty(PanelModelBase.prototype, \"questions\", {\n /**\n * Returns the list of all questions located in the Panel/Page, including in the nested Panels.\n * @see Question\n * @see elements\n */\n get: function () {\n if (!this.isQuestionsReady) {\n this.questionsValue = [];\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (el.isPanel) {\n var qs = el.questions;\n for (var j = 0; j < qs.length; j++) {\n this.questionsValue.push(qs[j]);\n }\n }\n else {\n this.questionsValue.push(el);\n }\n }\n this.isQuestionsReady = true;\n }\n return this.questionsValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getValidName = function (name) {\n if (!!name)\n return name.trim();\n return name;\n };\n /**\n * Returns the question by its name\n * @param name the question name\n */\n PanelModelBase.prototype.getQuestionByName = function (name) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].name == name)\n return questions[i];\n }\n return null;\n };\n /**\n * Returns the element by its name. It works recursively.\n * @param name the element name\n */\n PanelModelBase.prototype.getElementByName = function (name) {\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el.name == name)\n return el;\n var pnl = el.getPanel();\n if (!!pnl) {\n var res = pnl.getElementByName(name);\n if (!!res)\n return res;\n }\n }\n return null;\n };\n PanelModelBase.prototype.getQuestionByValueName = function (valueName) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].getValueName() == valueName)\n return questions[i];\n }\n return null;\n };\n /**\n * Returns question values on the current page\n */\n PanelModelBase.prototype.getValue = function () {\n var data = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (q.isEmpty())\n continue;\n var valueName = q.getValueName();\n data[valueName] = q.value;\n if (!!this.data) {\n var comment = this.data.getComment(valueName);\n if (!!comment) {\n data[valueName + _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].commentPrefix] = comment;\n }\n }\n }\n return data;\n };\n /**\n * Return questions values as a JSON object with display text. For example, for dropdown, it would return the item text instead of item value.\n * @param keysAsText Set this value to true, to return key (in matrices questions) as display text as well.\n */\n PanelModelBase.prototype.getDisplayValue = function (keysAsText) {\n var data = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (q.isEmpty())\n continue;\n var valueName = keysAsText ? q.title : q.getValueName();\n data[valueName] = q.getDisplayValue(keysAsText);\n }\n return data;\n };\n /**\n * Returns question comments on the current page\n */\n PanelModelBase.prototype.getComments = function () {\n var comments = {};\n if (!this.data)\n return comments;\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var comment = this.data.getComment(q.getValueName());\n if (!!comment) {\n comments[q.getValueName()] = comment;\n }\n }\n return comments;\n };\n /**\n * Call this function to remove all question values from the current page/panel, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radigroup/dropdown/checkbox choices or matrix rows/columns.\n * Please note, this function doesn't clear values for invisible questions or values that doesn't associated with questions.\n * @see Question.clearIncorrectValues\n */\n PanelModelBase.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].clearIncorrectValues();\n }\n };\n /**\n * Call this function to clear all errors in the panel / page and all its child elements (panels and questions)\n */\n PanelModelBase.prototype.clearErrors = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].clearErrors();\n }\n this.errors = [];\n };\n PanelModelBase.prototype.markQuestionListDirty = function () {\n this.isQuestionsReady = false;\n if (this.parent)\n this.parent.markQuestionListDirty();\n };\n Object.defineProperty(PanelModelBase.prototype, \"elements\", {\n /**\n * Returns the list of the elements in the object, Panel/Page. Elements can be questions or panels. The function doesn't return elements in the nested Panels.\n */\n get: function () {\n return this.elementsValue;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return this.elements;\n };\n /**\n * Returns true if the current element belongs to the Panel/Page. It looks in nested Panels as well.\n * @param element\n * @see PanelModel\n */\n PanelModelBase.prototype.containsElement = function (element) {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (el == element)\n return true;\n var pnl = el.getPanel();\n if (!!pnl) {\n if (pnl.containsElement(element))\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(PanelModelBase.prototype, \"isRequired\", {\n /**\n * Set this property to true, to require the answer at least in one question in the panel.\n */\n get: function () {\n return this.getPropertyValue(\"isRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isRequired\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"requiredIf\", {\n /**\n * An expression that returns true or false. If it returns true the Panel/Page becomes required.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then isRequired property is used.\n * @see isRequired\n */\n get: function () {\n return this.getPropertyValue(\"requiredIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.searchText = function (text, founded) {\n _super.prototype.searchText.call(this, text, founded);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].searchText(text, founded);\n }\n };\n /**\n * Returns true, if there is an error on this Page or inside the current Panel\n * @param fireCallback set it to true, to show errors in UI\n * @param focusOnFirstError set it to true to focus on the first question that doesn't pass the validation\n */\n PanelModelBase.prototype.hasErrors = function (fireCallback, focusOnFirstError, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n if (rec === void 0) { rec = null; }\n rec = !!rec\n ? rec\n : {\n fireCallback: fireCallback,\n focuseOnFirstError: focusOnFirstError,\n firstErrorQuestion: null,\n result: false,\n };\n this.hasErrorsCore(rec);\n if (rec.firstErrorQuestion) {\n rec.firstErrorQuestion.focus(true);\n }\n return rec.result;\n };\n PanelModelBase.prototype.hasErrorsInPanels = function (rec) {\n var errors = [];\n this.hasRequiredError(rec, errors);\n if (this.survey) {\n var customError = this.survey.validatePanel(this);\n if (customError) {\n errors.push(customError);\n rec.result = true;\n }\n }\n if (!!rec.fireCallback) {\n if (!!this.survey) {\n this.survey.beforeSettingPanelErrors(this, errors);\n }\n this.errors = errors;\n }\n };\n //ISurveyErrorOwner\n PanelModelBase.prototype.getErrorCustomText = function (text, error) {\n if (!!this.survey)\n return this.survey.getErrorCustomText(text, error);\n return text;\n };\n PanelModelBase.prototype.hasRequiredError = function (rec, errors) {\n if (!this.isRequired)\n return;\n var visQuestions = [];\n this.addQuestionsToList(visQuestions, true);\n if (visQuestions.length == 0)\n return;\n for (var i = 0; i < visQuestions.length; i++) {\n if (!visQuestions[i].isEmpty())\n return;\n }\n rec.result = true;\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"OneAnswerRequiredError\"](this.requiredErrorText, this));\n if (rec.focuseOnFirstError && !rec.firstErrorQuestion) {\n rec.firstErrorQuestion = visQuestions[0];\n }\n };\n PanelModelBase.prototype.hasErrorsCore = function (rec) {\n var elements = this.elements;\n var element = null;\n for (var i = 0; i < elements.length; i++) {\n element = elements[i];\n if (!element.isVisible)\n continue;\n if (element.isPanel) {\n element.hasErrorsCore(rec);\n }\n else {\n var question = element;\n if (question.isReadOnly)\n continue;\n if (question.hasErrors(rec.fireCallback, rec)) {\n if (rec.focuseOnFirstError && rec.firstErrorQuestion == null) {\n rec.firstErrorQuestion = question;\n }\n rec.result = true;\n }\n }\n }\n this.hasErrorsInPanels(rec);\n this.updateContainsErrors();\n };\n PanelModelBase.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].containsErrors)\n return true;\n }\n return false;\n };\n PanelModelBase.prototype.updateElementVisibility = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.setPropertyValue(\"isVisible\", el.isVisible);\n if (el.isPanel) {\n el.updateElementVisibility();\n }\n }\n };\n PanelModelBase.prototype.getFirstQuestionToFocus = function (withError) {\n if (withError === void 0) { withError = false; }\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.isVisible)\n continue;\n if (el.isPanel) {\n var res = el.getFirstQuestionToFocus(withError);\n if (!!res)\n return res;\n }\n else {\n var q = el;\n if (q.hasInput && (!withError || q.currentErrorCount > 0))\n return q;\n }\n }\n return null;\n };\n /**\n * Call it to focus the input on the first question\n */\n PanelModelBase.prototype.focusFirstQuestion = function () {\n var q = this.getFirstQuestionToFocus();\n if (!!q) {\n q.focus();\n }\n };\n /**\n * Call it to focus the input of the first question that has an error.\n */\n PanelModelBase.prototype.focusFirstErrorQuestion = function () {\n var q = this.getFirstQuestionToFocus(true);\n if (!!q) {\n q.focus();\n }\n };\n /**\n * Fill list array with the questions.\n * @param list\n * @param visibleOnly set it to true to get visible questions only\n */\n PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n this.addElementsToList(list, visibleOnly, includingDesignTime, false);\n };\n /**\n * Fill list array with the panels.\n * @param list\n */\n PanelModelBase.prototype.addPanelsIntoList = function (list, visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n this.addElementsToList(list, visibleOnly, includingDesignTime, true);\n };\n PanelModelBase.prototype.addElementsToList = function (list, visibleOnly, includingDesignTime, isPanel) {\n if (visibleOnly && !this.visible)\n return;\n this.addElementsToListCore(list, this.elements, visibleOnly, includingDesignTime, isPanel);\n };\n PanelModelBase.prototype.addElementsToListCore = function (list, elements, visibleOnly, includingDesignTime, isPanel) {\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (visibleOnly && !el.visible)\n continue;\n if ((isPanel && el.isPanel) || (!isPanel && !el.isPanel)) {\n list.push(el);\n }\n if (el.isPanel) {\n el.addElementsToListCore(list, el.elements, visibleOnly, includingDesignTime, isPanel);\n }\n else {\n if (includingDesignTime) {\n this.addElementsToListCore(list, el.getElementsInDesign(false), visibleOnly, includingDesignTime, isPanel);\n }\n }\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"isActive\", {\n /**\n * Returns true if the current object is Page and it is the current page.\n */\n get: function () {\n return !this.survey || this.survey.currentPage == this.root;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.updateCustomWidgets = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].updateCustomWidgets();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"questionTitleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for this panel/page.\n * @see SurveyModel.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"questionTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getQuestionTitleLocation = function () {\n if (this.onGetQuestionTitleLocation)\n return this.onGetQuestionTitleLocation();\n if (this.questionTitleLocation != \"default\")\n return this.questionTitleLocation;\n if (this.parent)\n return this.parent.getQuestionTitleLocation();\n return this.survey ? this.survey.questionTitleLocation : \"top\";\n };\n PanelModelBase.prototype.getStartIndex = function () {\n if (!!this.parent)\n return this.parent.getQuestionStartIndex();\n if (!!this.survey)\n return this.survey.questionStartIndex;\n return \"\";\n };\n PanelModelBase.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n PanelModelBase.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n PanelModelBase.prototype.getProgressInfo = function () {\n return _base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].getProgressInfoByElements(this.elements, this.isRequired);\n };\n Object.defineProperty(PanelModelBase.prototype, \"root\", {\n get: function () {\n var res = this;\n while (res.parent)\n res = res.parent;\n return res;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.childVisibilityChanged = function () {\n var newIsVisibleValue = this.getIsPageVisible(null);\n var oldIsVisibleValue = this.getPropertyValue(\"isVisible\", true);\n if (newIsVisibleValue !== oldIsVisibleValue) {\n this.onVisibleChanged();\n }\n };\n PanelModelBase.prototype.createRow = function () {\n return new QuestionRowModel(this);\n };\n PanelModelBase.prototype.onSurveyLoad = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onSurveyLoad();\n }\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onFirstRendering = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onFirstRendering();\n }\n this.onRowsChanged();\n };\n Object.defineProperty(PanelModelBase.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.ensureRowsVisibility = function () {\n this.rows.forEach(function (row) {\n row.ensureVisibility();\n });\n };\n PanelModelBase.prototype.onRowsChanged = function () {\n if (this.isLoadingFromJson)\n return;\n this.setPropertyValue(\"rows\", this.buildRows());\n };\n PanelModelBase.prototype.onAddElement = function (element, index) {\n element.setSurveyImpl(this.surveyImpl);\n element.parent = this;\n this.markQuestionListDirty();\n this.updateRowsOnElementAdded(element, index);\n if (element.isPanel) {\n var p = element;\n if (this.survey) {\n this.survey.panelAdded(p, index, this, this.root);\n }\n }\n else {\n if (this.survey) {\n var q = element;\n this.survey.questionAdded(q, index, this, this.root);\n }\n }\n if (!!this.addElementCallback)\n this.addElementCallback(element);\n var self = this;\n element.registerFunctionOnPropertiesValueChanged([\"visible\", \"isVisible\"], function () {\n self.onElementVisibilityChanged(element);\n }, this.id);\n element.registerFunctionOnPropertyValueChanged(\"startWithNewLine\", function () {\n self.onElementStartWithNewLineChanged(element);\n }, this.id);\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onRemoveElement = function (element) {\n element.parent = null;\n this.markQuestionListDirty();\n element.unRegisterFunctionOnPropertiesValueChanged([\"visible\", \"isVisible\", \"startWithNewLine\"], this.id);\n this.updateRowsOnElementRemoved(element);\n if (!element.isPanel) {\n if (this.survey)\n this.survey.questionRemoved(element);\n }\n else {\n if (this.survey)\n this.survey.panelRemoved(element);\n }\n if (!!this.removeElementCallback)\n this.removeElementCallback(element);\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onElementVisibilityChanged = function (element) {\n if (this.isLoadingFromJson)\n return;\n this.updateRowsVisibility(element);\n this.childVisibilityChanged();\n if (!!this.parent) {\n this.parent.onElementVisibilityChanged(this);\n }\n };\n PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) {\n this.onRowsChanged();\n };\n PanelModelBase.prototype.updateRowsVisibility = function (element) {\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.elements.indexOf(element) > -1) {\n row.updateVisible();\n break;\n }\n }\n };\n PanelModelBase.prototype.canBuildRows = function () {\n return !this.isLoadingFromJson && this.getChildrenLayoutType() == \"row\";\n };\n PanelModelBase.prototype.buildRows = function () {\n if (!this.canBuildRows())\n return [];\n var result = new Array();\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n var isNewRow = i == 0 || el.startWithNewLine;\n var row = isNewRow ? this.createRow() : result[result.length - 1];\n if (isNewRow)\n result.push(row);\n row.addElement(el);\n }\n for (var i = 0; i < result.length; i++) {\n result[i].updateVisible();\n }\n return result;\n };\n PanelModelBase.prototype.updateRowsOnElementAdded = function (element, index) {\n if (!this.canBuildRows())\n return;\n var dragDropInfo = new DragDropInfo(null, element);\n dragDropInfo.target = element;\n dragDropInfo.isEdge = this.elements.length > 1;\n if (this.elements.length < 2) {\n dragDropInfo.destination = this;\n }\n else {\n dragDropInfo.isBottom = index > 0;\n if (index == 0) {\n dragDropInfo.destination = this.elements[1];\n }\n else {\n dragDropInfo.destination = this.elements[index - 1];\n }\n }\n this.dragDropAddTargetToRow(dragDropInfo, null);\n };\n PanelModelBase.prototype.updateRowsOnElementRemoved = function (element) {\n if (!this.canBuildRows())\n return;\n this.updateRowsRemoveElementFromRow(element, this.findRowByElement(element));\n };\n PanelModelBase.prototype.updateRowsRemoveElementFromRow = function (element, row) {\n if (!row || !row.panel)\n return;\n var elIndex = row.elements.indexOf(element);\n if (elIndex < 0)\n return;\n row.elements.splice(elIndex, 1);\n if (row.elements.length > 0) {\n row.updateVisible();\n }\n else {\n if (row.index >= 0) {\n row.panel.rows.splice(row.index, 1);\n }\n }\n };\n PanelModelBase.prototype.findRowByElement = function (el) {\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].elements.indexOf(el) > -1)\n return rows[i];\n }\n return null;\n };\n PanelModelBase.prototype.elementWidthChanged = function (el) {\n if (this.isLoadingFromJson)\n return;\n var row = this.findRowByElement(el);\n if (!!row) {\n row.updateVisible();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"processedTitle\", {\n /**\n * Returns rendered title text or html.\n */\n get: function () {\n return this.getRenderedTitle(this.locTitle.textOrHtml);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getRenderedTitle = function (str) {\n return this.textProcessor != null\n ? this.textProcessor.processText(str, true)\n : str;\n };\n Object.defineProperty(PanelModelBase.prototype, \"visible\", {\n /**\n * Use it to get/set the object visibility.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (value) {\n if (value === this.visible)\n return;\n this.setPropertyValue(\"visible\", value);\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!this.isLoadingFromJson)\n this.onVisibleChanged();\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!!this.survey &&\n this.survey.isClearValueOnHiddenContainer &&\n !this.isLoadingFromJson) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (!this.isVisible) {\n questions[i].clearValue();\n }\n else {\n questions[i].updateValueWithDefaults();\n }\n }\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"isVisible\", {\n /**\n * Returns true if object is visible or survey is in design mode right now.\n */\n get: function () {\n return this.areInvisibleElementsShowing || this.getIsPageVisible(null);\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) {\n if (!this.visible)\n return false;\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i] == exceptionQuestion)\n continue;\n if (this.elements[i].isVisible)\n return true;\n }\n return false;\n };\n PanelModelBase.prototype.setVisibleIndex = function (index) {\n if (!this.isVisible || index < 0) {\n this.resetVisibleIndexes();\n return 0;\n }\n this.lastVisibleIndex = index;\n var startIndex = index;\n index += this.beforeSetVisibleIndex(index);\n var panelStartIndex = this.getPanelStartIndex(index);\n var panelIndex = panelStartIndex;\n for (var i = 0; i < this.elements.length; i++) {\n panelIndex += this.elements[i].setVisibleIndex(panelIndex);\n }\n if (this.isContinueNumbering()) {\n index += panelIndex - panelStartIndex;\n }\n return index - startIndex;\n };\n PanelModelBase.prototype.updateVisibleIndexes = function () {\n if (this.lastVisibleIndex === undefined)\n return;\n this.resetVisibleIndexes();\n this.setVisibleIndex(this.lastVisibleIndex);\n };\n PanelModelBase.prototype.resetVisibleIndexes = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setVisibleIndex(-1);\n }\n };\n PanelModelBase.prototype.beforeSetVisibleIndex = function (index) {\n return 0;\n };\n PanelModelBase.prototype.getPanelStartIndex = function (index) {\n return index;\n };\n PanelModelBase.prototype.isContinueNumbering = function () {\n return true;\n };\n Object.defineProperty(PanelModelBase.prototype, \"isReadOnly\", {\n /**\n * Returns true if readOnly property is true or survey is in display mode or parent panel/page is readOnly.\n * @see SurveyModel.model\n * @see readOnly\n */\n get: function () {\n var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.onReadOnlyChanged = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.setPropertyValue(\"isReadOnly\", el.isReadOnly);\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n PanelModelBase.prototype.updateElementCss = function (reNew) {\n this.cssClassesValue = undefined;\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.updateElementCss(reNew);\n }\n _super.prototype.updateElementCss.call(this, reNew);\n };\n Object.defineProperty(PanelModelBase.prototype, \"enableIf\", {\n /**\n * An expression that returns true or false. If it returns false the Panel/Page becomes read only and an end-user will not able to answer on qustions inside it.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then readOnly property is used.\n * @see readOnly\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add an element into Panel or Page. Returns true if the element added successfully. Otherwise returns false.\n * @param element\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addElement = function (element, index) {\n if (index === void 0) { index = -1; }\n if (!this.canAddElement(element))\n return false;\n if (index < 0 || index >= this.elements.length) {\n this.elements.push(element);\n }\n else {\n this.elements.splice(index, 0, element);\n }\n return true;\n };\n PanelModelBase.prototype.insertElementAfter = function (element, after) {\n var index = this.elements.indexOf(after);\n if (index >= 0)\n this.addElement(element, index + 1);\n };\n PanelModelBase.prototype.insertElementBefore = function (element, before) {\n var index = this.elements.indexOf(before);\n if (index >= 0)\n this.addElement(element, index);\n };\n PanelModelBase.prototype.canAddElement = function (element) {\n return (!!element && element.isLayoutTypeSupported(this.getChildrenLayoutType()));\n };\n /**\n * Add a question into Panel or Page. Returns true if the question added successfully. Otherwise returns false.\n * @param question\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addQuestion = function (question, index) {\n if (index === void 0) { index = -1; }\n return this.addElement(question, index);\n };\n /**\n * Add a panel into Panel or Page. Returns true if the panel added successfully. Otherwise returns false.\n * @param panel\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addPanel = function (panel, index) {\n if (index === void 0) { index = -1; }\n return this.addElement(panel, index);\n };\n /**\n * Creates a new question and adds it at location of index, by default the end of the elements list. Returns null, if the question could not be created or could not be added into page or panel.\n * @param questionType the possible values are: \"text\", \"checkbox\", \"dropdown\", \"matrix\", \"html\", \"matrixdynamic\", \"matrixdropdown\" and so on.\n * @param name a question name\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addNewQuestion = function (questionType, name, index) {\n if (name === void 0) { name = null; }\n if (index === void 0) { index = -1; }\n var question = _questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"QuestionFactory\"].Instance.createQuestion(questionType, name);\n if (!this.addQuestion(question, index))\n return null;\n return question;\n };\n /**\n * Creates a new panel and adds it into the end of the elements list. Returns null, if the panel could not be created or could not be added into page or panel.\n * @param name a panel name\n */\n PanelModelBase.prototype.addNewPanel = function (name) {\n if (name === void 0) { name = null; }\n var panel = this.createNewPanel(name);\n if (!this.addPanel(panel))\n return null;\n return panel;\n };\n /**\n * Returns the index of element parameter in the elements list.\n * @param element question or panel\n */\n PanelModelBase.prototype.indexOf = function (element) {\n return this.elements.indexOf(element);\n };\n PanelModelBase.prototype.createNewPanel = function (name) {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n res.name = name;\n return res;\n };\n /**\n * Remove an element (Panel or Question) from the elements list.\n * @param element\n * @see elements\n */\n PanelModelBase.prototype.removeElement = function (element) {\n var index = this.elements.indexOf(element);\n if (index < 0) {\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i].removeElement(element))\n return true;\n }\n return false;\n }\n this.elements.splice(index, 1);\n return true;\n };\n /**\n * Remove question from the elements list.\n * @param question\n * @see elements\n * @see removeElement\n */\n PanelModelBase.prototype.removeQuestion = function (question) {\n this.removeElement(question);\n };\n PanelModelBase.prototype.runCondition = function (values, properties) {\n if (this.isDesignMode || this.isLoadingFromJson)\n return;\n var elements = this.elements.slice();\n for (var i = 0; i < elements.length; i++) {\n elements[i].runCondition(values, properties);\n }\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleCondition(values, properties);\n }\n this.runEnableCondition(values, properties);\n this.runRequiredCondition(values, properties);\n };\n PanelModelBase.prototype.runVisibleCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ConditionRunner\"](this.visibleIf);\n conditionRunner.onRunComplete = function (res) {\n _this.visible = res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.runEnableCondition = function (values, properties) {\n var _this = this;\n if (!this.enableIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ConditionRunner\"](this.enableIf);\n conditionRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.runRequiredCondition = function (values, properties) {\n var _this = this;\n if (!this.requiredIf)\n return;\n var conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ConditionRunner\"](this.requiredIf);\n conditionRunner.onRunComplete = function (res) {\n _this.isRequired = res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.onAnyValueChanged = function (name) {\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n els[i].onAnyValueChanged(name);\n }\n };\n PanelModelBase.prototype.checkBindings = function (valueName, value) {\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n els[i].checkBindings(valueName, value);\n }\n };\n PanelModelBase.prototype.dragDropAddTarget = function (dragDropInfo) {\n var prevRow = this.dragDropFindRow(dragDropInfo.target);\n if (this.dragDropAddTargetToRow(dragDropInfo, prevRow)) {\n this.updateRowsRemoveElementFromRow(dragDropInfo.target, prevRow);\n }\n };\n PanelModelBase.prototype.dragDropFindRow = function (findElement) {\n if (!findElement || findElement.isPage)\n return null;\n var element = findElement;\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].elements.indexOf(element) > -1)\n return rows[i];\n }\n for (var i = 0; i < this.elements.length; i++) {\n var pnl = this.elements[i].getPanel();\n if (!pnl)\n continue;\n var row = pnl.dragDropFindRow(element);\n if (!!row)\n return row;\n }\n return null;\n };\n PanelModelBase.prototype.dragDropAddTargetToRow = function (dragDropInfo, prevRow) {\n if (!dragDropInfo.destination)\n return true;\n if (this.dragDropAddTargetToEmptyPanel(dragDropInfo))\n return true;\n var dest = dragDropInfo.destination;\n var destRow = this.dragDropFindRow(dest);\n if (!destRow)\n return true;\n if (!dragDropInfo.target.startWithNewLine)\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n };\n PanelModelBase.prototype.dragDropAddTargetToEmptyPanel = function (dragDropInfo) {\n if (dragDropInfo.destination.isPage) {\n this.dragDropAddTargetToEmptyPanelCore(this.root, dragDropInfo.target, dragDropInfo.isBottom);\n return true;\n }\n var dest = dragDropInfo.destination;\n if (dest.isPanel && !dragDropInfo.isEdge) {\n var panel = dest;\n if (dragDropInfo.target[\"template\"] === dest) {\n return false;\n }\n if (dragDropInfo.nestedPanelDepth < 0 ||\n dragDropInfo.nestedPanelDepth >= panel.depth) {\n this.dragDropAddTargetToEmptyPanelCore(dest, dragDropInfo.target, dragDropInfo.isBottom);\n return true;\n }\n }\n return false;\n };\n PanelModelBase.prototype.dragDropAddTargetToExistingRow = function (dragDropInfo, destRow, prevRow) {\n var index = destRow.elements.indexOf(dragDropInfo.destination);\n if (index == 0 &&\n !dragDropInfo.isBottom &&\n destRow.elements[0].startWithNewLine) {\n if (destRow.index > 0) {\n dragDropInfo.isBottom = true;\n destRow = destRow.panel.rows[destRow.index - 1];\n dragDropInfo.destination =\n destRow.elements[destRow.elements.length - 1];\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n }\n else {\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n }\n }\n var prevRowIndex = -1;\n if (prevRow == destRow) {\n prevRowIndex = destRow.elements.indexOf(dragDropInfo.target);\n }\n if (dragDropInfo.isBottom)\n index++;\n var srcRow = this.findRowByElement(dragDropInfo.source);\n if (srcRow == destRow &&\n srcRow.elements.indexOf(dragDropInfo.source) == index)\n return false;\n if (index == prevRowIndex)\n return false;\n if (prevRowIndex > -1) {\n destRow.elements.splice(prevRowIndex, 1);\n if (prevRowIndex < index)\n index--;\n }\n destRow.elements.splice(index, 0, dragDropInfo.target);\n destRow.updateVisible();\n return prevRowIndex < 0;\n };\n PanelModelBase.prototype.dragDropAddTargetToNewRow = function (dragDropInfo, destRow, prevRow) {\n var targetRow = destRow.panel.createRow();\n targetRow.addElement(dragDropInfo.target);\n var index = destRow.index;\n if (dragDropInfo.isBottom) {\n index++;\n }\n //same row\n if (!!prevRow && prevRow.panel == targetRow.panel && prevRow.index == index)\n return false;\n var srcRow = this.findRowByElement(dragDropInfo.source);\n if (!!srcRow &&\n srcRow.panel == targetRow.panel &&\n srcRow.elements.length == 1 &&\n srcRow.index == index)\n return false;\n destRow.panel.rows.splice(index, 0, targetRow);\n return true;\n };\n PanelModelBase.prototype.dragDropAddTargetToEmptyPanelCore = function (panel, target, isBottom) {\n var targetRow = panel.createRow();\n targetRow.addElement(target);\n if (panel.elements.length == 0 || isBottom) {\n panel.rows.push(targetRow);\n }\n else {\n panel.rows.splice(0, 0, targetRow);\n }\n };\n PanelModelBase.prototype.dragDropMoveElement = function (src, target, targetIndex) {\n var srcIndex = src.parent.elements.indexOf(src);\n if (targetIndex > srcIndex) {\n targetIndex--;\n }\n this.removeElement(src);\n this.addElement(target, targetIndex);\n };\n PanelModelBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n if (this.rows) {\n for (var i = 0; i < this.rows.length; i++) {\n this.rows[i].dispose();\n }\n this.rows.splice(0, this.rows.length);\n }\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].dispose();\n }\n this.elements.splice(0, this.elements.length);\n };\n PanelModelBase.panelCounter = 100;\n return PanelModelBase;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"]));\n\n/**\n * A container element, similar to the Page objects. However, unlike the Page, Panel can't be a root.\n * It may contain questions and other panels.\n */\nvar PanelModel = /** @class */ (function (_super) {\n __extends(PanelModel, _super);\n function PanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n if (!!self.parent) {\n self.parent.elementWidthChanged(self);\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"innerIndent\", \"rightIndent\"], function () {\n self.onIndentChanged();\n });\n return _this;\n }\n PanelModel.prototype.getType = function () {\n return \"panel\";\n };\n Object.defineProperty(PanelModel.prototype, \"contentId\", {\n get: function () {\n return this.id + \"_content\";\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (live) {\n return !!this.parent ? this.parent.getSurvey(live) : null;\n }\n return _super.prototype.getSurvey.call(this, live);\n };\n PanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onIndentChanged();\n };\n PanelModel.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n this.onIndentChanged();\n };\n Object.defineProperty(PanelModel.prototype, \"isPanel\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"page\", {\n /**\n * Get/set the page where the panel is located.\n */\n get: function () {\n return this.getPage(this.parent);\n },\n set: function (val) {\n this.setPage(this.parent, val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\n };\n /**\n * Move panel to a new container Page/Panel. Add as a last element if insertBefore parameter is not used or inserted into the given index,\n * if insert parameter is number, or before the given element, if the insertBefore parameter is a question or panel\n * @param container Page or Panel to where a question is relocated.\n * @param insertBefore Use it if you want to set the panel to a specific position. You may use a number (use 0 to insert int the beginning) or element, if you want to insert before this element.\n */\n PanelModel.prototype.moveTo = function (container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n return this.moveToBase(this.parent, container, insertBefore);\n };\n Object.defineProperty(PanelModel.prototype, \"visibleIndex\", {\n /**\n * Returns the visible index of the panel in the survey. Commonly it is -1 and it doesn't show.\n * You have to set showNumber to true to show index/numbering for the Panel\n * @see showNumber\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"showNumber\", {\n /**\n * Set showNumber to true to start showing the number for this panel.\n * @see visibleIndex\n */\n get: function () {\n return this.getPropertyValue(\"showNumber\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showNumber\", val);\n this.notifySurveyOnVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"showQuestionNumbers\", {\n /**\n * Gets or sets a value that specifies how the elements numbers inside panel are displayed.\n *\n * The following options are available:\n *\n * - `default` - display questions numbers as defined in parent panel or survey\n * - `onpanel` - display questions numbers, start numbering from beginning of this page\n * - `off` - turn off the numbering for questions titles\n * @see showNumber\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\", \"default\");\n },\n set: function (value) {\n this.setPropertyValue(\"showQuestionNumbers\", value);\n this.notifySurveyOnVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"questionStartIndex\", {\n /**\n * Gets or sets the first question index for elements inside the panel. The first question index is '1.' by default and it is taken from survey.questionStartIndex property.\n * You may start it from '100' or from 'A', by setting '100' or 'A' to this property.\n * You can set the start index to \"(1)\" or \"# A)\" or \"a)\" to render question number as (1), # A) and a) accordingly.\n * @see survey.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"questionStartIndex\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionStartIndex\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getQuestionStartIndex = function () {\n if (!!this.questionStartIndex)\n return this.questionStartIndex;\n return _super.prototype.getQuestionStartIndex.call(this);\n };\n Object.defineProperty(PanelModel.prototype, \"no\", {\n /**\n * The property returns the question number. If question is invisible then it returns empty string.\n * If visibleIndex is 1, then no is 2, or 'B' if survey.questionStartIndex is 'A'.\n * @see SurveyModel.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"no\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.setNo = function (visibleIndex) {\n this.setPropertyValue(\"no\", _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex()));\n };\n PanelModel.prototype.beforeSetVisibleIndex = function (index) {\n var visibleIndex = -1;\n if (this.showNumber && (this.isDesignMode || !this.locTitle.isEmpty)) {\n visibleIndex = index;\n }\n this.setPropertyValue(\"visibleIndex\", visibleIndex);\n this.setNo(visibleIndex);\n return visibleIndex < 0 ? 0 : 1;\n };\n PanelModel.prototype.getPanelStartIndex = function (index) {\n if (this.showQuestionNumbers == \"off\")\n return -1;\n if (this.showQuestionNumbers == \"onpanel\")\n return 0;\n return index;\n };\n PanelModel.prototype.isContinueNumbering = function () {\n return (this.showQuestionNumbers != \"off\" && this.showQuestionNumbers != \"onpanel\");\n };\n PanelModel.prototype.notifySurveyOnVisibilityChanged = function () {\n if (this.survey != null && !this.isLoadingFromJson) {\n this.survey.panelVisibilityChanged(this, this.isVisible);\n }\n };\n PanelModel.prototype.hasErrorsCore = function (rec) {\n _super.prototype.hasErrorsCore.call(this, rec);\n if (this.isCollapsed && rec.result && rec.fireCallback) {\n this.expand();\n }\n };\n PanelModel.prototype.getRenderedTitle = function (str) {\n if (!str) {\n if (this.isCollapsed || this.isExpanded)\n return this.name;\n if (this.isDesignMode)\n return \"[\" + this.name + \"]\";\n }\n return _super.prototype.getRenderedTitle.call(this, str);\n };\n Object.defineProperty(PanelModel.prototype, \"width\", {\n /**\n * The Panel width.\n */\n get: function () {\n return this.getPropertyValue(\"width\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"indent\", {\n /**\n * The left indent. Set this property to increase the panel left indent.\n */\n get: function () {\n return this.getPropertyValue(\"indent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"indent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"innerIndent\", {\n /**\n * The inner indent. Set this property to increase the panel content margin.\n */\n get: function () {\n return this.getPropertyValue(\"innerIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"innerIndent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"renderWidth\", {\n get: function () {\n return this.getPropertyValue(\"renderWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"startWithNewLine\", {\n /**\n * The Panel renders on the new line if the property is true. If the property is false, the panel tries to render on the same line/row with a previous question/panel.\n */\n get: function () {\n return this.getPropertyValue(\"startWithNewLine\", true);\n },\n set: function (value) {\n this.setPropertyValue(\"startWithNewLine\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"rightIndent\", {\n /**\n * The right indent of the Panel.\n */\n get: function () {\n return this.getPropertyValue(\"rightIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"rightIndent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"paddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"paddingLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingLeft\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"innerPaddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"innerPaddingLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"innerPaddingLeft\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"paddingRight\", {\n get: function () {\n return this.getPropertyValue(\"paddingRight\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingRight\", val);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.onIndentChanged = function () {\n if (!this.getSurvey())\n return;\n this.innerPaddingLeft = this.getIndentSize(this.innerIndent);\n this.paddingLeft = this.getIndentSize(this.indent);\n this.paddingRight = this.getIndentSize(this.rightIndent);\n };\n PanelModel.prototype.getIndentSize = function (indent) {\n if (indent < 1)\n return \"\";\n var css = this.survey[\"css\"];\n if (!css)\n return \"\";\n return indent * css.question.indent + \"px\";\n };\n PanelModel.prototype.clearOnDeletingContainer = function () {\n this.elements.forEach(function (element) {\n if (element instanceof _question__WEBPACK_IMPORTED_MODULE_3__[\"Question\"] || element instanceof PanelModel) {\n element.clearOnDeletingContainer();\n }\n });\n };\n Object.defineProperty(PanelModel.prototype, \"hasEditButton\", {\n get: function () {\n if (this.survey && this.survey.state == \"preview\")\n return this.depth == 1;\n return false;\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.cancelPreview = function () {\n if (!this.hasEditButton)\n return;\n this.survey.cancelPreviewByPage(this);\n };\n PanelModel.prototype.onVisibleChanged = function () {\n _super.prototype.onVisibleChanged.call(this);\n this.notifySurveyOnVisibilityChanged();\n };\n return PanelModel;\n}(PanelModelBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"panelbase\", [\n \"name\",\n {\n name: \"elements\",\n alternativeName: \"questions\",\n baseClassName: \"question\",\n visible: false,\n isLightSerializable: false,\n },\n { name: \"visible:boolean\", default: true },\n \"visibleIf:condition\",\n \"enableIf:condition\",\n \"requiredIf:condition\",\n \"readOnly:boolean\",\n {\n name: \"questionTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n },\n { name: \"title:text\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n return new PanelModelBase();\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"panel\", [\n {\n name: \"state\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\"],\n },\n \"isRequired:boolean\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n { name: \"startWithNewLine:boolean\", default: true },\n \"width\",\n { name: \"innerIndent:number\", default: 0, choices: [0, 1, 2, 3] },\n { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3] },\n {\n name: \"page\",\n isSerializable: false,\n visibleIf: function (obj) {\n var survey = obj ? obj.survey : null;\n return !survey || survey.pages.length > 1;\n },\n choices: function (obj) {\n var survey = obj ? obj.survey : null;\n return survey\n ? survey.pages.map(function (p) {\n return { value: p.name, text: p.title };\n })\n : [];\n },\n },\n \"showNumber:boolean\",\n {\n name: \"showQuestionNumbers\",\n default: \"default\",\n choices: [\"default\", \"onpanel\", \"off\"],\n },\n \"questionStartIndex\",\n], function () {\n return new PanelModel();\n}, \"panelbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_5__[\"ElementFactory\"].Instance.registerElement(\"panel\", function (name) {\n return new PanelModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/popup.ts\":\n/*!**********************!*\\\n !*** ./src/popup.ts ***!\n \\**********************/\n/*! exports provided: PopupModel, PopupBaseViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return PopupModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return PopupBaseViewModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _utils_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/popup */ \"./src/utils/popup.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar PopupModel = /** @class */ (function (_super) {\n __extends(PopupModel, _super);\n function PopupModel(contentComponentName, contentComponentData, verticalPosition, horizontalPosition, showPointer, isModal, onCancel, onApply, onHide, onShow, cssClass) {\n if (verticalPosition === void 0) { verticalPosition = \"bottom\"; }\n if (horizontalPosition === void 0) { horizontalPosition = \"left\"; }\n if (showPointer === void 0) { showPointer = true; }\n if (isModal === void 0) { isModal = false; }\n if (onCancel === void 0) { onCancel = function () { }; }\n if (onApply === void 0) { onApply = function () { }; }\n if (onHide === void 0) { onHide = function () { }; }\n if (onShow === void 0) { onShow = function () { }; }\n if (cssClass === void 0) { cssClass = \"\"; }\n var _this = _super.call(this) || this;\n _this.contentComponentName = contentComponentName;\n _this.contentComponentData = contentComponentData;\n _this.verticalPosition = verticalPosition;\n _this.horizontalPosition = horizontalPosition;\n _this.showPointer = showPointer;\n _this.isModal = isModal;\n _this.onCancel = onCancel;\n _this.onApply = onApply;\n _this.onHide = onHide;\n _this.onShow = onShow;\n _this.cssClass = cssClass;\n return _this;\n }\n Object.defineProperty(PopupModel.prototype, \"isVisible\", {\n get: function () {\n return this.getPropertyValue(\"isVisible\", false);\n },\n set: function (value) {\n if (this.isVisible === value) {\n return;\n }\n this.setPropertyValue(\"isVisible\", value);\n this.onVisibilityChanged && this.onVisibilityChanged(value);\n if (this.isVisible) {\n this.onShow();\n }\n else {\n this.onHide();\n }\n },\n enumerable: false,\n configurable: true\n });\n PopupModel.prototype.toggleVisibility = function () {\n this.isVisible = !this.isVisible;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], PopupModel.prototype, \"contentComponentName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], PopupModel.prototype, \"contentComponentData\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"bottom\" })\n ], PopupModel.prototype, \"verticalPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n ], PopupModel.prototype, \"horizontalPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupModel.prototype, \"showPointer\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupModel.prototype, \"isModal\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onCancel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onApply\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onHide\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: function () { } })\n ], PopupModel.prototype, \"onShow\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"\" })\n ], PopupModel.prototype, \"cssClass\", void 0);\n return PopupModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar PopupBaseViewModel = /** @class */ (function (_super) {\n __extends(PopupBaseViewModel, _super);\n function PopupBaseViewModel(model, targetElement) {\n var _this = _super.call(this) || this;\n _this.model = model;\n _this.targetElement = targetElement;\n _this.model.registerFunctionOnPropertyValueChanged(\"isVisible\", function () {\n _this.isVisible = _this.model.isVisible;\n });\n return _this;\n }\n Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentName\", {\n get: function () {\n return this.model.contentComponentName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"contentComponentData\", {\n get: function () {\n return this.model.contentComponentData;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"showPointer\", {\n get: function () {\n return this.model.showPointer;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"isModal\", {\n get: function () {\n return this.model.isModal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"styleClass\", {\n get: function () {\n var css = this.model.cssClass;\n if (this.isModal) {\n css += \" sv-popup--modal\";\n }\n else if (this.showPointer) {\n css += \" sv-popup--show-pointer\";\n css += \" sv-popup--\" + this.popupDirection;\n }\n return css;\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.updatePosition = function () {\n var rect = this.targetElement.getBoundingClientRect();\n var background = this.container.children[0];\n var popupContainer = background.children[0];\n this.popupDirection = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePopupDirection(this.model.verticalPosition, this.model.horizontalPosition);\n var height = popupContainer.offsetHeight;\n var width = popupContainer.offsetWidth;\n var pos = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePosition(rect, height, width, this.model.verticalPosition, this.model.horizontalPosition, this.showPointer);\n this.left = pos.left + \"px\";\n this.top = pos.top + \"px\";\n if (this.showPointer) {\n this.pointerTarget = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePointerTarget(rect, pos.top, pos.left, this.model.verticalPosition, this.model.horizontalPosition);\n }\n this.pointerTarget.top += \"px\";\n this.pointerTarget.left += \"px\";\n };\n PopupBaseViewModel.prototype.clickOutside = function () {\n if (this.isModal) {\n return;\n }\n this.model.isVisible = false;\n };\n PopupBaseViewModel.prototype.cancel = function () {\n this.model.onCancel();\n this.model.isVisible = false;\n };\n PopupBaseViewModel.prototype.apply = function () {\n this.model.onApply();\n this.model.isVisible = false;\n };\n Object.defineProperty(PopupBaseViewModel.prototype, \"cancelButtonText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"modalCancelButtonText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"applyButtonText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"modalApplyButtonText\");\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.model.onVisibilityChanged = undefined;\n };\n PopupBaseViewModel.prototype.initializePopupContainer = function () {\n var container = document.createElement(\"div\");\n this.container = container;\n document.body.appendChild(this.container);\n };\n PopupBaseViewModel.prototype.destroyPopupContainer = function () {\n this.container.remove();\n this.container = undefined;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n ], PopupBaseViewModel.prototype, \"top\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"0px\" })\n ], PopupBaseViewModel.prototype, \"left\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: false })\n ], PopupBaseViewModel.prototype, \"isVisible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"left\" })\n ], PopupBaseViewModel.prototype, \"popupDirection\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: { left: \"0px\", top: \"0px\" } })\n ], PopupBaseViewModel.prototype, \"pointerTarget\", void 0);\n return PopupBaseViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/question.ts\":\n/*!*************************!*\\\n !*** ./src/question.ts ***!\n \\*************************/\n/*! exports provided: Question */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return Question; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A base class for all questions.\n */\nvar Question = /** @class */ (function (_super) {\n __extends(Question, _super);\n function Question(name) {\n var _this = _super.call(this, name) || this;\n _this.conditionRunner = null;\n _this.isCustomWidgetRequested = false;\n _this.customWidgetData = { isNeedRender: true };\n _this.isReadyValue = true;\n /**\n * The event is fired when isReady property of question is changed.\n *
options.question - the question\n *
options.isReady - current value of isReady\n *
options.oldIsReady - old value of isReady\n */\n _this.onReadyChanged = _this.addEvent();\n _this.parentQuestionValue = null;\n _this.isRunningValidatorsValue = false;\n _this.isValueChangedInSurvey = false;\n _this.allowNotifyValueChanged = true;\n //ILocalizableOwner\n _this.locOwner = null;\n _this.id = Question.getQuestionId();\n _this.onCreating();\n _this.createNewArray(\"validators\", function (validator) {\n validator.errorOwner = _this;\n });\n var locTitleValue = _this.createLocalizableString(\"title\", _this, true);\n locTitleValue.onGetTextCallback = function (text) {\n if (!text) {\n text = _this.name;\n }\n if (!_this.survey)\n return text;\n return _this.survey.getUpdatedQuestionTitle(_this, text);\n };\n _this.locProcessedTitle = new _localizablestring__WEBPACK_IMPORTED_MODULE_6__[\"LocalizableString\"](_this, true);\n _this.locProcessedTitle.sharedData = locTitleValue;\n var locCommentText = _this.createLocalizableString(\"commentText\", _this, true);\n locCommentText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"otherItemText\");\n };\n _this.createLocalizableString(\"requiredErrorText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n _this.updateQuestionCss();\n if (!!_this.parent) {\n _this.parent.elementWidthChanged(_this);\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"isRequired\", function () {\n _this.locTitle.onChanged();\n _this.cssClassesValue = undefined;\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"rightIndent\"], function () {\n _this.onIndentChanged();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"hasComment\", \"hasOther\"], function () {\n _this.initCommentFromSurvey();\n });\n return _this;\n }\n Question.getQuestionId = function () {\n return \"sq_\" + Question.questionCounter++;\n };\n Question.prototype.isReadOnlyRenderDiv = function () {\n return this.isReadOnly && _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].readOnlyCommentRenderMode === \"div\";\n };\n Question.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n if (live) {\n return !!this.parent ? this.parent.getSurvey(live) : null;\n }\n if (!!this.onGetSurvey)\n return this.onGetSurvey();\n return _super.prototype.getSurvey.call(this);\n };\n Question.prototype.getValueName = function () {\n if (!!this.valueName)\n return this.valueName.toString();\n return this.name;\n };\n Object.defineProperty(Question.prototype, \"valueName\", {\n /**\n * Use this property if you want to store the question result in the name different from the question name.\n * Question name should be unique in the survey and valueName could be not unique. It allows to share data between several questions with the same valueName.\n * The library set the value automatically if the question.name property is not valid. For example, if it contains the period '.' symbol.\n * In this case if you set the question.name property to 'x.y' then the valueName becomes 'x y'.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see name\n */\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n var oldValueName = this.getValueName();\n this.setPropertyValue(\"valueName\", val);\n this.onValueNameChanged(oldValueName);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onValueNameChanged = function (oldValue) {\n if (!this.survey)\n return;\n this.survey.questionRenamed(this, this.name, !!oldValue ? oldValue : this.name);\n this.initDataFromSurvey();\n };\n Question.prototype.onNameChanged = function (oldValue) {\n this.locTitle.onChanged();\n if (!this.survey)\n return;\n this.survey.questionRenamed(this, oldValue, this.valueName ? this.valueName : oldValue);\n };\n Object.defineProperty(Question.prototype, \"isReady\", {\n get: function () {\n return this.isReadyValue;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get is question ready to use\n */\n Question.prototype.choicesLoaded = function () { };\n Object.defineProperty(Question.prototype, \"page\", {\n /**\n * Get/set the page where the question is located.\n */\n get: function () {\n return this.getPage(this.parent);\n },\n set: function (val) {\n this.setPage(this.parent, val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getPanel = function () {\n return null;\n };\n Question.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\n };\n Object.defineProperty(Question.prototype, \"isFlowLayout\", {\n get: function () {\n return this.getLayoutType() === \"flow\";\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getLayoutType = function () {\n if (!!this.parent)\n return this.parent.getChildrenLayoutType();\n return \"row\";\n };\n Question.prototype.isLayoutTypeSupported = function (layoutType) {\n return layoutType !== \"flow\";\n };\n Object.defineProperty(Question.prototype, \"visible\", {\n /**\n * Use it to get/set the question visibility.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (val) {\n if (val == this.visible)\n return;\n this.setPropertyValue(\"visible\", val);\n this.onVisibleChanged();\n this.notifySurveyVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (this.isVisible && this.survey && this.survey.isClearValueOnHidden) {\n this.updateValueWithDefaults();\n }\n if (!this.isVisible && this.errors && this.errors.length > 0) {\n this.errors = [];\n }\n };\n Object.defineProperty(Question.prototype, \"useDisplayValuesInTitle\", {\n /**\n * Use it to choose how other question values will be rendered in title if referenced in {}.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"useDisplayValuesInTitle\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useDisplayValuesInTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"visibleIf\", {\n /**\n * An expression that returns true or false. If it returns true the Question becomes visible and if it returns false the Question becomes invisible. The library runs the expression on survey start and on changing a question value. If the property is empty then visible property is used.\n * @see visible\n */\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n this.runConditions();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isVisible\", {\n /**\n * Returns true if the question is visible or survey is in design mode right now.\n */\n get: function () {\n if (this.survey && this.survey.areEmptyElementsHidden && this.isEmpty())\n return false;\n return this.visible || this.areInvisibleElementsShowing;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"visibleIndex\", {\n /**\n * Returns the visible index of the question in the survey. It can be from 0 to all visible questions count - 1\n * The visibleIndex is -1 if the title is 'hidden' or hideNumber is true\n * @see titleLocation\n * @see hideNumber\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hideNumber\", {\n /**\n * Set hideNumber to true to stop showing the number for this question. The question will not be counter\n * @see visibleIndex\n * @see titleLocation\n */\n get: function () {\n return this.getPropertyValue(\"hideNumber\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideNumber\", val);\n this.notifySurveyVisibilityChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isAllowTitleLeft\", {\n /**\n * Returns true if the question may have a title located on the left\n */\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns the type of the object as a string as it represents in the json.\n */\n Question.prototype.getType = function () {\n return \"question\";\n };\n /**\n * Move question to a new container Page/Panel. Add as a last element if insertBefore parameter is not used or inserted into the given index,\n * if insert parameter is number, or before the given element, if the insertBefore parameter is a question or panel\n * @param container Page or Panel to where a question is relocated.\n * @param insertBefore Use it if you want to set the question to a specific position. You may use a number (use 0 to insert int the beginning) or element, if you want to insert before this element.\n */\n Question.prototype.moveTo = function (container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n return this.moveToBase(this.parent, container, insertBefore);\n };\n Question.prototype.getProgressInfo = function () {\n if (!this.hasInput)\n return _super.prototype.getProgressInfo.call(this);\n return {\n questionCount: 1,\n answeredQuestionCount: !this.isEmpty() ? 1 : 0,\n requiredQuestionCount: this.isRequired ? 1 : 0,\n requiredAnsweredQuestionCount: !this.isEmpty() && this.isRequired ? 1 : 0,\n };\n };\n Question.prototype.runConditions = function () {\n if (this.data && !this.isLoadingFromJson) {\n if (!this.isDesignMode) {\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n }\n this.locStrsChanged();\n }\n };\n Question.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (this.survey) {\n this.survey.questionCreated(this);\n }\n if (this.survey && this.survey.isDesignMode && !this.isDesignMode) {\n this.onVisibleChanged();\n }\n this.runConditions();\n };\n Question.prototype.getDataFilteredValues = function () {\n return !!this.data ? this.data.getFilteredValues() : null;\n };\n Question.prototype.getDataFilteredProperties = function () {\n var props = !!this.data ? this.data.getFilteredProperties() : {};\n props.question = this;\n return props;\n };\n Object.defineProperty(Question.prototype, \"parent\", {\n /**\n * A parent element. It can be panel or page.\n */\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n if (this.parent === val)\n return;\n this.delete();\n this.setPropertyValue(\"parent\", val);\n this.updateQuestionCss();\n this.onParentChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"parentQuestion\", {\n /**\n * A parent question. It can be a dynamic panel or dynamic/dropdown matrices. If the value is a matrix, it means that question is a cell question.\n * This property is null for a stand alone question.\n */\n get: function () {\n return this.parentQuestionValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setParentQuestion = function (val) {\n this.parentQuestionValue = val;\n this.onParentQuestionChanged();\n };\n Question.prototype.onParentQuestionChanged = function () { };\n Question.prototype.onParentChanged = function () { };\n Object.defineProperty(Question.prototype, \"hasTitle\", {\n /**\n * Returns false if the question doesn't have a title property, for example: QuestionHtmlModel, or titleLocation property equals to \"hidden\"\n * @see titleLocation\n */\n get: function () {\n return this.getTitleLocation() !== \"hidden\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"titleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for this panel/page.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see SurveyModel.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"titleLocation\");\n },\n set: function (value) {\n var isVisibilityChanged = this.titleLocation == \"hidden\" || value == \"hidden\";\n this.setPropertyValue(\"titleLocation\", value.toLowerCase());\n this.updateQuestionCss();\n if (isVisibilityChanged) {\n this.notifySurveyVisibilityChanged();\n }\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.notifySurveyVisibilityChanged = function () {\n if (!this.survey || this.isLoadingFromJson)\n return;\n this.survey.questionVisibilityChanged(this, this.isVisible);\n if (this.survey.isClearValueOnHidden && !this.visible) {\n this.clearValue();\n }\n };\n /**\n * Return the title location based on question titleLocation property and QuestionTitleLocation of it's parents\n * @see titleLocation\n * @see PanelModelBase.QuestionTitleLocation\n * @see SurveyModel.QuestionTitleLocation\n */\n Question.prototype.getTitleLocation = function () {\n if (this.isFlowLayout)\n return \"hidden\";\n var location = this.getTitleLocationCore();\n if (location === \"left\" && !this.isAllowTitleLeft)\n location = \"top\";\n return location;\n };\n Question.prototype.getTitleLocationCore = function () {\n if (this.titleLocation !== \"default\")\n return this.titleLocation;\n if (!!this.parent)\n return this.parent.getQuestionTitleLocation();\n if (!!this.survey)\n return this.survey.questionTitleLocation;\n return \"top\";\n };\n Object.defineProperty(Question.prototype, \"hasTitleOnLeft\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"left\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnTop\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnBottom\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnLeftTop\", {\n get: function () {\n if (!this.hasTitle)\n return false;\n var location = this.getTitleLocation();\n return location === \"left\" || location === \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"errorLocation\", {\n get: function () {\n return this.survey ? this.survey.questionErrorLocation : \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasInput\", {\n /**\n * Returns false if the question doesn't have an input element, for example: QuestionHtmlModel\n * @see hasSingleInput\n */\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasSingleInput\", {\n /**\n * Returns false if the question doesn't have an input element or have multiple inputs: matrices or panel dynamic\n * @see hasInput\n */\n get: function () {\n return this.hasInput;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"inputId\", {\n get: function () {\n return this.id + \"i\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"title\", {\n /**\n * Question title. Use survey questionTitleTemplate property to change the title question is rendered. If it is empty, then question name property is used.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.getLocalizableStringText(\"title\", this.name);\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"descriptionLocation\", {\n /**\n * Question description location. By default, value is \"default\" and it depends on survey questionDescriptionLocation property\n * You may change it to \"underInput\" to render it under question input or \"underTitle\" to rendered it under title.\n * @see description\n * @see Survey.questionDescriptionLocation\n */\n get: function () {\n return this.getPropertyValue(\"descriptionLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"descriptionLocation\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderTitle\", {\n get: function () {\n return this.getDescriptionLocation() == \"underTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderInput\", {\n get: function () {\n return this.getDescriptionLocation() == \"underInput\";\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getDescriptionLocation = function () {\n if (this.descriptionLocation !== \"default\")\n return this.descriptionLocation;\n return !!this.survey\n ? this.survey.questionDescriptionLocation\n : \"underTitle\";\n };\n Object.defineProperty(Question.prototype, \"clickTitleFunction\", {\n get: function () {\n if (this.hasInput) {\n var self = this;\n return function () {\n self.focus();\n return true;\n };\n }\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getLocalizableStringText(\"requiredErrorText\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"requiredErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"commentText\", {\n /**\n * Use it to get or set the comment value.\n */\n get: function () {\n return this.getLocalizableStringText(\"commentText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"commentText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locCommentText\", {\n get: function () {\n return this.getLocalizableString(\"commentText\");\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns a copy of question errors survey. For some questions like matrix and panel dynamic it includes the errors of nested questions.\n */\n Question.prototype.getAllErrors = function () {\n return this.errors.slice();\n };\n Question.prototype.getErrorByType = function (errorType) {\n for (var i = 0; i < this.errors.length; i++) {\n if (this.errors[i].getErrorType() === errorType)\n return this.errors[i];\n }\n return null;\n };\n Object.defineProperty(Question.prototype, \"customWidget\", {\n /**\n * The link to the custom widget.\n */\n get: function () {\n if (!this.isCustomWidgetRequested && !this.customWidgetValue) {\n this.isCustomWidgetRequested = true;\n this.updateCustomWidget();\n }\n return this.customWidgetValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.updateCustomWidget = function () {\n this.customWidgetValue = _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_8__[\"CustomWidgetCollection\"].Instance.getCustomWidget(this);\n };\n Object.defineProperty(Question.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.afterRenderQuestionElement = function (el) {\n if (!this.survey || !this.hasSingleInput)\n return;\n this.survey.afterRenderQuestionInput(this, el);\n };\n Question.prototype.afterRender = function (el) {\n if (!this.survey)\n return;\n this.survey.afterRenderQuestion(this, el);\n if (!!this.afterRenderQuestionCallback) {\n this.afterRenderQuestionCallback(this, el);\n }\n };\n Question.prototype.beforeDestroyQuestionElement = function (el) { };\n Object.defineProperty(Question.prototype, \"processedTitle\", {\n /**\n * Returns the rendred question title.\n */\n get: function () {\n var res = this.locProcessedTitle.textOrHtml;\n return res ? res : this.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"fullTitle\", {\n /**\n * Returns the title after processing the question template.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"titlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"requireNumTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numRequireTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.titlePattern == \"numTitleRequire\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"startWithNewLine\", {\n /**\n * The Question renders on the new line if the property is true. If the property is false, the question tries to render on the same line/row with a previous question/panel.\n */\n get: function () {\n return this.getPropertyValue(\"startWithNewLine\", true);\n },\n set: function (val) {\n if (this.startWithNewLine == val)\n return;\n this.setPropertyValue(\"startWithNewLine\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"cssClasses\", {\n /**\n * Returns all css classes that used for rendering the question. You may use survey.updateQuestionCssClasses event to override css classes for a question.\n * @see SurveyModel.updateQuestionCssClasses\n */\n get: function () {\n if (!this.survey)\n return this.calcCssClasses();\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n this.updateElementCssCore(this.cssClassesValue);\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.calcCssClasses = function () {\n var css = this.css;\n var classes = { error: {} };\n this.copyCssClasses(classes, css.question);\n this.copyCssClasses(classes.error, css.error);\n this.updateCssClasses(classes, css);\n if (this.survey) {\n this.survey.updateQuestionCssClasses(this, classes);\n }\n return classes;\n };\n Object.defineProperty(Question.prototype, \"cssRoot\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssRoot\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssRoot = function (val) {\n this.setPropertyValue(\"cssRoot\", val);\n };\n Question.prototype.getCssRoot = function (cssClasses) {\n var res = this.isFlowLayout && !this.isDesignMode\n ? cssClasses.flowRoot\n : cssClasses.mainRoot;\n if (!res)\n res = \"\";\n if (!this.isFlowLayout &&\n this.hasTitleOnLeft &&\n !!cssClasses.titleLeftRoot) {\n res += \" \" + cssClasses.titleLeftRoot;\n }\n if (this.errors.length > 0 && !!cssClasses.hasError) {\n res += \" \" + cssClasses.hasError;\n }\n if (cssClasses.small && !this.width) {\n res += \" \" + cssClasses.small;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssHeader\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssHeader\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssHeader = function (val) {\n this.setPropertyValue(\"cssHeader\", val);\n };\n Question.prototype.getCssHeader = function (cssClasses) {\n var res = cssClasses.header || \"\";\n if (this.hasTitleOnTop && !!cssClasses.headerTop) {\n res += \" \" + cssClasses.headerTop;\n }\n if (this.hasTitleOnLeft && !!cssClasses.headerLeft) {\n res += \" \" + cssClasses.headerLeft;\n }\n if (this.hasTitleOnBottom && !!cssClasses.headerBottom) {\n res += \" \" + cssClasses.headerBottom;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssContent\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssContent\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssContent = function (val) {\n this.setPropertyValue(\"cssContent\", val);\n };\n Question.prototype.getCssContent = function (cssClasses) {\n var res = cssClasses.content || \"\";\n if (this.hasTitleOnLeft && !!cssClasses.contentLeft) {\n res += \" \" + cssClasses.contentLeft;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssTitle\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssTitle\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssTitle = function (val) {\n this.setPropertyValue(\"cssTitle\", val);\n };\n Question.prototype.getCssTitle = function (cssClasses) {\n var result = cssClasses.title;\n if (this.isCollapsed || this.isExpanded) {\n result += \" \" + cssClasses.titleExpandable;\n }\n if (this.containsErrors) {\n if (!!cssClasses.titleOnError) {\n result += \" \" + cssClasses.titleOnError;\n }\n }\n else if (this.isAnswered && !!cssClasses.titleOnAnswer) {\n result += \" \" + cssClasses.titleOnAnswer;\n }\n return result;\n };\n Object.defineProperty(Question.prototype, \"cssError\", {\n get: function () {\n this.ensureElementCss();\n return this.getPropertyValue(\"cssError\", \"\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setCssError = function (val) {\n this.setPropertyValue(\"cssError\", val);\n };\n //TODO was not removed from other places\n Question.prototype.getCssError = function (cssClasses) {\n var res = cssClasses.error.root || \"\";\n if (this.errorLocation == \"top\") {\n if (!!cssClasses.error.locationTop) {\n res += \" \" + cssClasses.error.locationTop;\n }\n }\n else if (this.errorLocation === \"bottom\" &&\n !!cssClasses.error.locationBottom) {\n res += \" \" + cssClasses.error.locationBottom;\n }\n return res;\n };\n Question.prototype.updateElementCss = function (reNew) {\n this.cssClassesValue = undefined;\n if (reNew) {\n this.updateQuestionCss(true);\n }\n };\n Question.prototype.updateQuestionCss = function (reNew) {\n if (this.isLoadingFromJson ||\n !this.survey ||\n (reNew !== true && !this.cssClassesValue))\n return;\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses();\n }\n this.updateElementCssCore(this.cssClasses);\n };\n Question.prototype.ensureElementCss = function () {\n if (!this.cssClassesValue) {\n this.updateQuestionCss(true);\n }\n };\n Question.prototype.updateElementCssCore = function (cssClasses) {\n this.setCssRoot(this.getCssRoot(cssClasses));\n this.setCssHeader(this.getCssHeader(cssClasses));\n this.setCssContent(this.getCssContent(cssClasses));\n this.setCssTitle(this.getCssTitle(cssClasses));\n this.setCssError(this.getCssError(cssClasses));\n };\n Question.prototype.updateCssClasses = function (res, css) {\n if (!css.question)\n return;\n if (this.isRequired) {\n if (!!css.question.required) {\n res.root = (res.root ? res.root + \" \" : \"\") + objCss;\n }\n if (css.question.titleRequired) {\n res.title += \" \" + css.question.titleRequired;\n }\n }\n var objCss = css[this.getCssType()];\n if (objCss === undefined || objCss === null)\n return;\n if (typeof objCss === \"string\" || objCss instanceof String) {\n res.root = (res.root ? res.root + \" \" : \"\") + objCss;\n }\n else {\n for (var key in objCss) {\n res[key] = objCss[key];\n }\n }\n };\n Question.prototype.getCssType = function () {\n return this.getType();\n };\n Object.defineProperty(Question.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"width\", {\n /**\n * Use it to set the specific width to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"width\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"minWidth\", {\n /**\n * Use it to set the specific minWidth constraint to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"minWidth\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].minWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"maxWidth\", {\n /**\n * Use it to set the specific maxWidth constraint to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"maxWidth\", _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].maxWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"maxWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"renderWidth\", {\n /**\n * The rendered width of the question.\n */\n get: function () {\n return this.getPropertyValue(\"renderWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"indent\", {\n /**\n * Set it different from 0 to increase the left padding.\n */\n get: function () {\n return this.getPropertyValue(\"indent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"indent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"rightIndent\", {\n /**\n * Set it different from 0 to increase the right padding.\n */\n get: function () {\n return this.getPropertyValue(\"rightIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"rightIndent\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"paddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"paddintLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddintLeft\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"paddingRight\", {\n get: function () {\n return this.getPropertyValue(\"paddingRight\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingRight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onIndentChanged = function () {\n this.paddingLeft = this.getIndentSize(this.indent);\n this.paddingRight = this.getIndentSize(this.rightIndent);\n };\n Question.prototype.getIndentSize = function (indent) {\n if (indent < 1 || !this.getSurvey() || !this.cssClasses)\n return \"\";\n return indent * this.cssClasses.indent + \"px\";\n };\n /**\n * Move the focus to the input of this question.\n * @param onError set this parameter to true, to focus the input with the first error, other wise the first input will be focused.\n */\n Question.prototype.focus = function (onError) {\n if (onError === void 0) { onError = false; }\n if (this.isDesignMode)\n return;\n if (!!this.survey) {\n this.survey.scrollElementToTop(this, this, null, this.id);\n }\n var id = !onError\n ? this.getFirstInputElementId()\n : this.getFirstErrorInputElementId();\n if (_base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].FocusElement(id)) {\n this.fireCallback(this.focusCallback);\n }\n };\n Question.prototype.fireCallback = function (callback) {\n if (callback)\n callback();\n };\n Question.prototype.getOthersMaxLength = function () {\n if (!this.survey)\n return null;\n return this.survey.maxOthersLength > 0 ? this.survey.maxOthersLength : null;\n };\n Question.prototype.onCreating = function () { };\n Question.prototype.getFirstInputElementId = function () {\n return this.inputId;\n };\n Question.prototype.getFirstErrorInputElementId = function () {\n return this.getFirstInputElementId();\n };\n Question.prototype.getProcessedTextValue = function (textValue) {\n var name = textValue.name.toLocaleLowerCase();\n textValue.isExists =\n Object.keys(Question.TextPreprocessorValuesMap).indexOf(name) !== -1 ||\n this[textValue.name] !== undefined;\n textValue.value = this[Question.TextPreprocessorValuesMap[name] || textValue.name];\n };\n Question.prototype.supportComment = function () {\n return false;\n };\n Question.prototype.supportOther = function () {\n return false;\n };\n Object.defineProperty(Question.prototype, \"isRequired\", {\n /**\n * Set this property to true, to make the question a required. If a user doesn't answer the question then a validation error will be generated.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"isRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isRequired\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredIf\", {\n /**\n * An expression that returns true or false. If it returns true the Question becomes required and an end-user has to answer it.\n * If it returns false the Question then an end-user may not answer it the Question maybe empty.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then isRequired property is used.\n * Please note, this property is hidden for question without input, for example html question.\n * @see isRequired\n */\n get: function () {\n return this.getPropertyValue(\"requiredIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredIf\", val);\n this.runConditions();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasComment\", {\n /**\n * Set it to true, to add a comment for the question.\n */\n get: function () {\n return this.getPropertyValue(\"hasComment\", false);\n },\n set: function (val) {\n if (!this.supportComment())\n return;\n this.setPropertyValue(\"hasComment\", val);\n if (this.hasComment)\n this.hasOther = false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"id\", {\n /**\n * The unique identificator. It is generated automatically.\n */\n get: function () {\n return this.getPropertyValue(\"id\");\n },\n set: function (val) {\n this.setPropertyValue(\"id\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaTitleId\", {\n get: function () {\n return this.id + \"_ariaTitle\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaRole\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasOther\", {\n get: function () {\n return this.getPropertyValue(\"hasOther\", false);\n },\n set: function (val) {\n if (!this.supportOther() || this.hasOther == val)\n return;\n this.setPropertyValue(\"hasOther\", val);\n if (this.hasOther)\n this.hasComment = false;\n this.hasOtherChanged();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.hasOtherChanged = function () { };\n Object.defineProperty(Question.prototype, \"requireUpdateCommentValue\", {\n get: function () {\n return this.hasComment || this.hasOther;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isReadOnly\", {\n /**\n * Returns true if readOnly property is true or survey is in display mode or parent panel/page is readOnly.\n * @see SurveyModel.model\n * @see readOnly\n */\n get: function () {\n var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isInputReadOnly\", {\n get: function () {\n var isDesignModeV2 = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && this.isDesignMode;\n return this.isReadOnly || isDesignModeV2;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.onReadOnlyChanged = function () {\n this.setPropertyValue(\"isInputReadOnly\", this.isInputReadOnly);\n _super.prototype.onReadOnlyChanged.call(this);\n };\n Object.defineProperty(Question.prototype, \"enableIf\", {\n /**\n * An expression that returns true or false. If it returns false the Question becomes read only and an end-user will not able to answer on the qustion. The library runs the expression on survey start and on changing a question value. If the property is empty then readOnly property is used.\n * Please note, this property is hidden for question without input, for example html question.\n * @see readOnly\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n this.runConditions();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Run visibleIf and enableIf expressions. If visibleIf or/and enabledIf are not empty, then the results of performing the expression (true or false) set to the visible/readOnly properties.\n * @param values Typically survey results\n * @see visible\n * @see visibleIf\n * @see readOnly\n * @see enableIf\n */\n Question.prototype.runCondition = function (values, properties) {\n if (this.isDesignMode)\n return;\n if (!properties)\n properties = {};\n properties[\"question\"] = this;\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleIfCondition(values, properties);\n }\n this.runEnableIfCondition(values, properties);\n this.runRequiredIfCondition(values, properties);\n };\n Question.prototype.runVisibleIfCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n if (!this.conditionRunner)\n this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.visibleIf);\n this.conditionRunner.expression = this.visibleIf;\n this.conditionRunner.onRunComplete = function (res) {\n _this.visible = res;\n };\n this.conditionRunner.run(values, properties);\n };\n Question.prototype.runEnableIfCondition = function (values, properties) {\n var _this = this;\n if (!this.enableIf)\n return;\n if (!this.conditionEnabelRunner)\n this.conditionEnabelRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.enableIf);\n this.conditionEnabelRunner.expression = this.enableIf;\n this.conditionEnabelRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n this.conditionEnabelRunner.run(values, properties);\n };\n Question.prototype.runRequiredIfCondition = function (values, properties) {\n var _this = this;\n if (!this.requiredIf)\n return;\n if (!this.conditionRequiredRunner)\n this.conditionRequiredRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.requiredIf);\n this.conditionRequiredRunner.expression = this.requiredIf;\n this.conditionRequiredRunner.onRunComplete = function (res) {\n _this.isRequired = res;\n };\n this.conditionRequiredRunner.run(values, properties);\n };\n Object.defineProperty(Question.prototype, \"no\", {\n /**\n * The property returns the question number. If question is invisible then it returns empty string.\n * If visibleIndex is 1, then no is 2, or 'B' if survey.questionStartIndex is 'A'.\n * @see SurveyModel.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"no\");\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.calcNo = function () {\n if (!this.hasTitle || this.hideNumber)\n return \"\";\n var no = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getNumberByIndex(this.visibleIndex, this.getStartIndex());\n if (!!this.survey) {\n no = this.survey.getUpdatedQuestionNo(this, no);\n }\n return no;\n };\n Question.prototype.getStartIndex = function () {\n if (!!this.parent)\n return this.parent.getQuestionStartIndex();\n if (!!this.survey)\n return this.survey.questionStartIndex;\n return \"\";\n };\n Question.prototype.onSurveyLoad = function () {\n this.fireCallback(this.surveyLoadCallback);\n this.updateValueWithDefaults();\n };\n Question.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n this.initDataFromSurvey();\n this.onSurveyValueChanged(this.value);\n this.updateValueWithDefaults();\n this.onIndentChanged();\n this.updateQuestionCss();\n };\n Question.prototype.initDataFromSurvey = function () {\n if (!!this.data) {\n this.updateValueFromSurvey(this.data.getValue(this.getValueName()));\n this.initCommentFromSurvey();\n }\n };\n Question.prototype.initCommentFromSurvey = function () {\n if (!!this.data && this.requireUpdateCommentValue) {\n this.updateCommentFromSurvey(this.data.getComment(this.getValueName()));\n }\n else {\n this.updateCommentFromSurvey(\"\");\n }\n };\n Question.prototype.runExpression = function (expression) {\n if (!this.survey || !expression)\n return undefined;\n return this.survey.runExpression(expression);\n };\n Object.defineProperty(Question.prototype, \"questionValue\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (val) {\n this.setPropertyValue(\"value\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"questionComment\", {\n get: function () {\n return this.getPropertyValue(\"comment\");\n },\n set: function (val) {\n this.setPropertyValue(\"comment\", val);\n this.fireCallback(this.commentChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"value\", {\n /**\n * Get/Set the question value.\n * @see SurveyMode.setValue\n * @see SurveyMode.getValue\n */\n get: function () {\n return this.getValueCore();\n },\n set: function (newValue) {\n this.setNewValue(newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"valueForSurvey\", {\n get: function () {\n if (!!this.valueToDataCallback) {\n return this.valueToDataCallback(this.value);\n }\n return this.value;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clear the question value. It clears the question comment as well.\n */\n Question.prototype.clearValue = function () {\n this.value = null;\n this.comment = null;\n };\n Question.prototype.unbindValue = function () {\n this.clearValue();\n };\n Question.prototype.createValueCopy = function () {\n return this.getUnbindValue(this.value);\n };\n Question.prototype.isEditingSurveyElement = function (value) {\n return _base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"].isSurveyElement(value);\n };\n Question.prototype.getUnbindValue = function (value) {\n if (this.isEditingSurveyElement(value))\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n };\n Question.prototype.canClearValueAsInvisible = function () {\n if (this.isVisible && this.isParentVisible)\n return false;\n if (!!this.page && this.page.isStarted)\n return false;\n if (!this.survey || !this.valueName)\n return true;\n return !this.survey.hasVisibleQuestionByValueName(this.valueName);\n };\n Object.defineProperty(Question.prototype, \"isParentVisible\", {\n get: function () {\n var parent = this.parent;\n while (parent) {\n if (!parent.isVisible)\n return false;\n parent = parent.parent;\n }\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.clearValueIfInvisible = function () {\n if (this.canClearValueAsInvisible()) {\n this.clearValue();\n }\n };\n Object.defineProperty(Question.prototype, \"displayValue\", {\n get: function () {\n if (this.isLoadingFromJson)\n return \"\";\n return this.getDisplayValue(true);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Return the question value as a display text. For example, for dropdown, it would return the item text instead of item value.\n * @param keysAsText Set this value to true, to return key (in matrices questions) as display text as well.\n * @param value use this parameter, if you want to get display value for this value and not question.value. It is undefined by default.\n */\n Question.prototype.getDisplayValue = function (keysAsText, value) {\n if (value === void 0) { value = undefined; }\n if (this.customWidget) {\n var res = this.customWidget.getDisplayValue(this, value);\n if (res)\n return res;\n }\n value = value == undefined ? this.createValueCopy() : value;\n if (this.isValueEmpty(value))\n return \"\";\n return this.getDisplayValueCore(keysAsText, value);\n };\n Question.prototype.getDisplayValueCore = function (keyAsText, value) {\n return value;\n };\n Object.defineProperty(Question.prototype, \"defaultValue\", {\n /**\n * Set the default value to the question. It will be assign to the question on loading the survey from JSON or adding a question to the survey or on setting this property of the value is empty.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"defaultValue\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.defaultValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"defaultValue\", this.convertDefaultValue(val));\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"defaultValueExpression\", {\n get: function () {\n return this.getPropertyValue(\"defaultValueExpression\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueExpression\", val);\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns question answer data as a plain object: with question title, name, value and displayValue.\n * For complex questions (like matrix, etc.) isNode flag is set to true and data contains array of nested objects (rows)\n * set options.includeEmpty to false if you want to skip empty answers\n */\n Question.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n if (options.includeEmpty || !this.isEmpty()) {\n var questionPlainData = {\n name: this.name,\n title: this.locTitle.renderedHtml,\n value: this.value,\n displayValue: this.displayValue,\n isNode: false,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n };\n if (options.includeQuestionTypes === true) {\n questionPlainData.questionType = this.getType();\n }\n (options.calculations || []).forEach(function (calculation) {\n questionPlainData[calculation.propertyName] = _this[calculation.propertyName];\n });\n if (this.hasComment) {\n questionPlainData.isNode = true;\n questionPlainData.data = [\n {\n name: 0,\n isComment: true,\n title: \"Comment\",\n value: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].commentPrefix,\n displayValue: this.comment,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n },\n ];\n }\n return questionPlainData;\n }\n return undefined;\n };\n Object.defineProperty(Question.prototype, \"correctAnswer\", {\n /**\n * The correct answer on the question. Set this value if you are doing a quiz.\n * Please note, this property is hidden for question without input, for example html question.\n * @see SurveyModel.correctAnswers\n * @see SurveyModel.inCorrectAnswers\n */\n get: function () {\n return this.getPropertyValue(\"correctAnswer\");\n },\n set: function (val) {\n this.setPropertyValue(\"correctAnswer\", this.convertDefaultValue(val));\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.convertDefaultValue = function (val) {\n return val;\n };\n Object.defineProperty(Question.prototype, \"quizQuestionCount\", {\n /**\n * Returns questions count: 1 for the non-matrix questions and all inner visible questions that has input(s) widgets for question of matrix types.\n * @see getQuizQuestions\n */\n get: function () {\n if (this.isVisible &&\n this.hasInput &&\n !this.isValueEmpty(this.correctAnswer))\n return this.getQuizQuestionCount();\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"correctAnswerCount\", {\n get: function () {\n if (!this.isEmpty() && !this.isValueEmpty(this.correctAnswer))\n return this.getCorrectAnswerCount();\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getQuizQuestionCount = function () {\n return 1;\n };\n Question.prototype.getCorrectAnswerCount = function () {\n return this.isTwoValueEquals(this.value, this.correctAnswer, true, true)\n ? 1\n : 0;\n };\n Question.prototype.isAnswerCorrect = function () {\n return this.correctAnswerCount == this.quizQuestionCount;\n };\n Question.prototype.updateValueWithDefaults = function () {\n if (this.isLoadingFromJson ||\n (!this.isDesignMode && this.isDefaultValueEmpty()))\n return;\n if (!this.isDesignMode && !this.isEmpty())\n return;\n if (this.isEmpty() && this.isDefaultValueEmpty())\n return;\n if (!!this.survey && this.survey.isClearValueOnHidden && !this.isVisible)\n return;\n this.setDefaultValue();\n };\n Question.prototype.getQuestionFromArray = function (name, index) {\n return null;\n };\n Question.prototype.getDefaultValue = function () {\n return this.defaultValue;\n };\n Question.prototype.isDefaultValueEmpty = function () {\n return !this.defaultValueExpression && this.isValueEmpty(this.defaultValue);\n };\n Question.prototype.setDefaultValue = function () {\n var _this = this;\n this.setValueAndRunExpression(this.defaultValueExpression, this.getUnbindValue(this.defaultValue), function (val) {\n _this.value = val;\n });\n };\n Question.prototype.isValueExpression = function (val) {\n return !!val && typeof val == \"string\" && val.length > 0 && val[0] == \"=\";\n };\n Question.prototype.setValueAndRunExpression = function (expression, defaultValue, setFunc, values, properties) {\n var _this = this;\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n var func = function (val) {\n if (val instanceof Date) {\n val = val.toISOString().slice(0, 10);\n }\n setFunc(val);\n };\n if (!!expression && !!this.data) {\n if (!values)\n values = this.data.getFilteredValues();\n if (!properties)\n properties = this.data.getFilteredProperties();\n var runner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ExpressionRunner\"](expression);\n if (runner.canRun) {\n runner.onRunComplete = function (res) {\n if (res == undefined)\n res = _this.defaultValue;\n func(res);\n };\n runner.run(values, properties);\n }\n }\n else {\n func(defaultValue);\n }\n };\n Object.defineProperty(Question.prototype, \"comment\", {\n /**\n * The question comment value.\n */\n get: function () {\n return this.getQuestionComment();\n },\n set: function (newValue) {\n if (!!newValue) {\n newValue = newValue.toString().trim();\n }\n if (this.comment == newValue)\n return;\n this.setQuestionComment(newValue);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getQuestionComment = function () {\n return this.questionComment;\n };\n Question.prototype.setQuestionComment = function (newValue) {\n this.setNewComment(newValue);\n };\n /**\n * Returns true if the question value is empty\n */\n Question.prototype.isEmpty = function () {\n return this.isValueEmpty(this.value);\n };\n Object.defineProperty(Question.prototype, \"isAnswered\", {\n get: function () {\n return this.getPropertyValue(\"isAnswered\");\n },\n set: function (val) {\n this.setPropertyValue(\"isAnswered\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.updateIsAnswered = function () {\n this.setPropertyValue(\"isAnswered\", this.getIsAnswered());\n };\n Question.prototype.getIsAnswered = function () {\n return !this.isEmpty();\n };\n Object.defineProperty(Question.prototype, \"validators\", {\n /**\n * The list of question validators.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"validators\");\n },\n set: function (val) {\n this.setPropertyValue(\"validators\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getValidators = function () {\n return this.validators;\n };\n Question.prototype.getSupportedValidators = function () {\n var res = [];\n var className = this.getType();\n while (!!className) {\n var classValidators = _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportedValidators[className];\n if (!!classValidators) {\n for (var i = classValidators.length - 1; i >= 0; i--) {\n res.splice(0, 0, classValidators[i]);\n }\n }\n var classInfo = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(className);\n className = classInfo.parentName;\n }\n return res;\n };\n Question.prototype.addSupportedValidators = function (supportedValidators, classValidators) { };\n Question.prototype.addConditionObjectsByContext = function (objects, context) {\n objects.push({\n name: this.getValueName(),\n text: this.processedTitle,\n question: this,\n });\n };\n Question.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(this);\n json[\"type\"] = this.getType();\n return json;\n };\n /**\n * Returns true if there is a validation error(s) in the question.\n * @param fireCallback set it to true to show an error in UI.\n */\n Question.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var oldHasErrors = this.errors.length > 0;\n var errors = this.checkForErrors(!!rec && rec.isOnValueChanged === true);\n if (fireCallback) {\n if (!!this.survey) {\n this.survey.beforeSettingQuestionErrors(this, errors);\n }\n this.errors = errors;\n }\n this.updateContainsErrors();\n if (oldHasErrors != errors.length > 0) {\n this.updateQuestionCss();\n }\n if (this.isCollapsed && rec && fireCallback && errors.length > 0) {\n this.expand();\n }\n return errors.length > 0;\n };\n Object.defineProperty(Question.prototype, \"currentErrorCount\", {\n /**\n * Returns the validation errors count.\n */\n get: function () {\n return this.errors.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredText\", {\n /**\n * Returns the char/string for a required question.\n * @see SurveyModel.requiredText\n */\n get: function () {\n return this.survey != null && this.isRequired\n ? this.survey.requiredText\n : \"\";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add error into the question error list.\n * @param error\n */\n Question.prototype.addError = function (error) {\n if (!error)\n return;\n var newError = null;\n if (typeof error === \"string\" || error instanceof String) {\n newError = new _error__WEBPACK_IMPORTED_MODULE_4__[\"CustomError\"](error, this.survey);\n }\n else {\n newError = error;\n }\n this.errors.push(newError);\n };\n /**\n * Remove a particular error from the question error list.\n * @param error\n */\n Question.prototype.removeError = function (error) {\n var errors = this.errors;\n var index = errors.indexOf(error);\n if (index !== -1)\n errors.splice(index, 1);\n };\n Question.prototype.checkForErrors = function (isOnValueChanged) {\n var qErrors = new Array();\n if (this.isVisible && !this.isReadOnly) {\n this.collectErrors(qErrors, isOnValueChanged);\n }\n return qErrors;\n };\n Question.prototype.collectErrors = function (qErrors, isOnValueChanged) {\n this.onCheckForErrors(qErrors, isOnValueChanged);\n if (qErrors.length > 0 || !this.canRunValidators(isOnValueChanged))\n return;\n var errors = this.runValidators();\n if (errors.length > 0) {\n //validators may change the question value.\n qErrors.length = 0;\n for (var i = 0; i < errors.length; i++) {\n qErrors.push(errors[i]);\n }\n }\n if (this.survey && qErrors.length == 0) {\n var error = this.fireSurveyValidation();\n if (error) {\n qErrors.push(error);\n }\n }\n };\n Question.prototype.canRunValidators = function (isOnValueChanged) {\n return true;\n };\n Question.prototype.fireSurveyValidation = function () {\n if (this.validateValueCallback)\n return this.validateValueCallback();\n return this.survey ? this.survey.validateQuestion(this) : null;\n };\n Question.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n if (!isOnValueChanged && this.hasRequiredError()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"AnswerRequiredError\"](this.requiredErrorText, this));\n }\n };\n Question.prototype.hasRequiredError = function () {\n return this.isRequired && this.isEmpty();\n };\n Object.defineProperty(Question.prototype, \"isRunningValidators\", {\n get: function () {\n return this.getIsRunningValidators();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getIsRunningValidators = function () {\n return this.isRunningValidatorsValue;\n };\n Question.prototype.runValidators = function () {\n var _this = this;\n if (!!this.validatorRunner) {\n this.validatorRunner.onAsyncCompleted = null;\n }\n this.validatorRunner = new _validator__WEBPACK_IMPORTED_MODULE_5__[\"ValidatorRunner\"]();\n this.isRunningValidatorsValue = true;\n this.validatorRunner.onAsyncCompleted = function (errors) {\n _this.doOnAsyncCompleted(errors);\n };\n return this.validatorRunner.run(this);\n };\n Question.prototype.doOnAsyncCompleted = function (errors) {\n for (var i = 0; i < errors.length; i++) {\n this.errors.push(errors[i]);\n }\n this.isRunningValidatorsValue = false;\n this.raiseOnCompletedAsyncValidators();\n };\n Question.prototype.raiseOnCompletedAsyncValidators = function () {\n if (!!this.onCompletedAsyncValidators && !this.isRunningValidators) {\n this.onCompletedAsyncValidators(this.getAllErrors().length > 0);\n this.onCompletedAsyncValidators = null;\n }\n };\n Question.prototype.setNewValue = function (newValue) {\n var oldAnswered = this.isAnswered;\n this.setNewValueInData(newValue);\n this.allowNotifyValueChanged && this.onValueChanged();\n if (this.isAnswered != oldAnswered) {\n this.updateQuestionCss();\n }\n };\n Question.prototype.isTextValue = function () {\n return false;\n };\n Object.defineProperty(Question.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getDataLocNotification = function () {\n return this.isInputTextUpdate ? \"text\" : false;\n };\n Object.defineProperty(Question.prototype, \"isInputTextUpdate\", {\n get: function () {\n return this.isSurveyInputTextUpdate && this.isTextValue();\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.setNewValueInData = function (newValue) {\n newValue = this.valueToData(newValue);\n if (!this.isValueChangedInSurvey) {\n this.setValueCore(newValue);\n }\n };\n Question.prototype.getValueCore = function () {\n return this.questionValue;\n };\n Question.prototype.setValueCore = function (newValue) {\n this.setQuestionValue(newValue);\n if (this.data != null && this.canSetValueToSurvey()) {\n newValue = this.valueForSurvey;\n this.data.setValue(this.getValueName(), newValue, this.getDataLocNotification(), this.allowNotifyValueChanged);\n }\n };\n Question.prototype.canSetValueToSurvey = function () {\n return true;\n };\n Question.prototype.valueFromData = function (val) {\n return val;\n };\n Question.prototype.valueToData = function (val) {\n return val;\n };\n Question.prototype.onValueChanged = function () { };\n Question.prototype.setNewComment = function (newValue) {\n this.questionComment = newValue;\n if (this.data != null) {\n this.data.setComment(this.getValueName(), newValue, this.isSurveyInputTextUpdate ? \"text\" : false);\n }\n };\n Question.prototype.getValidName = function (name) {\n if (!name)\n return name;\n return name.trim().replace(/[\\{\\}]+/g, \"\");\n };\n //IQuestion\n Question.prototype.updateValueFromSurvey = function (newValue) {\n newValue = this.getUnbindValue(newValue);\n if (!!this.valueFromDataCallback) {\n newValue = this.valueFromDataCallback(newValue);\n }\n this.setQuestionValue(this.valueFromData(newValue));\n };\n Question.prototype.updateCommentFromSurvey = function (newValue) {\n this.questionComment = newValue;\n };\n Question.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n this.questionValue = newValue;\n this.allowNotifyValueChanged &&\n this.fireCallback(this.valueChangedCallback);\n if (updateIsAnswered)\n this.updateIsAnswered();\n };\n Question.prototype.onSurveyValueChanged = function (newValue) { };\n Question.prototype.setVisibleIndex = function (val) {\n if (!this.isVisible ||\n (!this.hasTitle && !_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].setQuestionVisibleIndexForHiddenTitle) ||\n (this.hideNumber && !_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].setQuestionVisibleIndexForHiddenNumber)) {\n val = -1;\n }\n this.setPropertyValue(\"visibleIndex\", val);\n this.setPropertyValue(\"no\", this.calcNo());\n return val < 0 ? 0 : 1;\n };\n Question.prototype.removeElement = function (element) {\n return false;\n };\n Question.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n Question.prototype.supportGoNextPageError = function () {\n return true;\n };\n /**\n * Call this function to remove values from the current question, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radigroup/dropdown/checkbox choices or matrix rows/columns.\n */\n Question.prototype.clearIncorrectValues = function () { };\n Question.prototype.clearOnDeletingContainer = function () { };\n /**\n * Call this function to clear all errors in the question\n */\n Question.prototype.clearErrors = function () {\n this.errors = [];\n };\n Question.prototype.clearUnusedValues = function () { };\n Question.prototype.onAnyValueChanged = function (name) { };\n Question.prototype.checkBindings = function (valueName, value) {\n if (this.bindings.isEmpty() || !this.data)\n return;\n var props = this.bindings.getPropertiesByValueName(valueName);\n for (var i = 0; i < props.length; i++) {\n this[props[i]] = value;\n }\n };\n /**\n * Returns the current survey locale\n * @see SurveyModel.locale\n */\n Question.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : this.locOwner\n ? this.locOwner.getLocale()\n : \"\";\n };\n Question.prototype.getMarkdownHtml = function (text, name) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text, name)\n : this.locOwner\n ? this.locOwner.getMarkdownHtml(text, name)\n : null;\n };\n Question.prototype.getRenderer = function (name) {\n return this.survey && typeof this.survey.getRendererForString === \"function\"\n ? this.survey.getRendererForString(this, name)\n : this.locOwner && typeof this.locOwner.getRenderer === \"function\"\n ? this.locOwner.getRenderer(name)\n : null;\n };\n Question.prototype.getProcessedText = function (text) {\n if (this.isLoadingFromJson)\n return text;\n if (this.textProcessor)\n return this.textProcessor.processText(text, this.useDisplayValuesInTitle);\n if (this.locOwner)\n return this.locOwner.getProcessedText(text);\n return text;\n };\n Question.prototype.getComponentName = function () {\n return _rendererFactory__WEBPACK_IMPORTED_MODULE_10__[\"RendererFactory\"].Instance.getRendererByQuestion(this);\n };\n Question.prototype.getTitleActions = function () {\n var titleActions = _super.prototype.getTitleActions.call(this);\n this.titleActions = this.survey.getUpdatedQuestionTitleActions(this, titleActions);\n return this.titleActions;\n };\n Question.prototype.isDefaultRendering = function () {\n return (!!this.customWidget ||\n this.renderAs === \"default\" ||\n this.getComponentName() === \"default\");\n };\n //ISurveyErrorOwner\n Question.prototype.getErrorCustomText = function (text, error) {\n if (!!this.survey)\n return this.survey.getErrorCustomText(text, error);\n return text;\n };\n //IValidatorOwner\n Question.prototype.getValidatorTitle = function () {\n return null;\n };\n Object.defineProperty(Question.prototype, \"validatedValue\", {\n get: function () {\n return this.value;\n },\n set: function (val) {\n this.value = val;\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : null;\n };\n Question.TextPreprocessorValuesMap = {\n title: \"processedTitle\",\n require: \"requiredText\",\n };\n Question.questionCounter = 100;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n ], Question.prototype, \"description\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Question.prototype, \"cssClassesValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"default\" })\n ], Question.prototype, \"renderAs\", void 0);\n return Question;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"question\", [\n \"!name\",\n {\n name: \"state\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\"],\n },\n { name: \"visible:switch\", default: true },\n { name: \"useDisplayValuesInTitle:boolean\", default: true, layout: \"row\" },\n \"visibleIf:condition\",\n { name: \"width\" },\n { name: \"minWidth\", default: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].minWidth },\n { name: \"maxWidth\", default: _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].maxWidth },\n { name: \"startWithNewLine:boolean\", default: true, layout: \"row\" },\n { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3], layout: \"row\" },\n {\n name: \"page\",\n isSerializable: false,\n visibleIf: function (obj) {\n var survey = obj ? obj.survey : null;\n return !survey || survey.pages.length > 1;\n },\n choices: function (obj) {\n var survey = obj ? obj.survey : null;\n return survey\n ? survey.pages.map(function (p) {\n return { value: p.name, text: p.title };\n })\n : [];\n },\n },\n { name: \"title:text\", serializationProperty: \"locTitle\", layout: \"row\" },\n {\n name: \"titleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n layout: \"row\",\n },\n {\n name: \"description:text\",\n serializationProperty: \"locDescription\",\n layout: \"row\",\n },\n {\n name: \"descriptionLocation\",\n default: \"default\",\n choices: [\"default\", \"underInput\", \"underTitle\"],\n },\n {\n name: \"hideNumber:boolean\",\n dependsOn: \"titleLocation\",\n visibleIf: function (obj) {\n if (!obj) {\n return true;\n }\n if (obj.titleLocation === \"hidden\") {\n return false;\n }\n var parent = obj ? obj.parent : null;\n var numberingAllowedByParent = !parent || parent.showQuestionNumbers !== \"off\";\n if (!numberingAllowedByParent) {\n return false;\n }\n var survey = obj ? obj.survey : null;\n return (!survey ||\n survey.showQuestionNumbers !== \"off\" ||\n (!!parent && parent.showQuestionNumbers === \"onpanel\"));\n },\n },\n \"valueName\",\n \"enableIf:condition\",\n \"defaultValue:value\",\n {\n name: \"defaultValueExpression:expression\",\n category: \"logic\",\n },\n \"correctAnswer:value\",\n \"isRequired:switch\",\n \"requiredIf:condition\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n \"readOnly:switch\",\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n {\n name: \"bindings:bindings\",\n serializationProperty: \"bindings\",\n visibleIf: function (obj) {\n return obj.bindings.getNames().length > 0;\n },\n },\n { name: \"renderAs\", default: \"default\", visible: false },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addAlterNativeClassName(\"question\", \"questionbase\");\n\n\n/***/ }),\n\n/***/ \"./src/questionCustomWidgets.ts\":\n/*!**************************************!*\\\n !*** ./src/questionCustomWidgets.ts ***!\n \\**************************************/\n/*! exports provided: QuestionCustomWidget, CustomWidgetCollection */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return QuestionCustomWidget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return CustomWidgetCollection; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n\nvar QuestionCustomWidget = /** @class */ (function () {\n function QuestionCustomWidget(name, widgetJson) {\n this.name = name;\n this.widgetJson = widgetJson;\n this.isFirstRender = true;\n this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : \"\";\n }\n QuestionCustomWidget.prototype.afterRender = function (question, el) {\n var _this = this;\n if (this.isFirstRender) {\n this.isFirstRender = false;\n question.survey.onLocaleChangedEvent.add(function () {\n _this.widgetJson.willUnmount(question, el);\n _this.widgetJson.afterRender(question, el);\n });\n }\n if (this.widgetJson.afterRender)\n this.widgetJson.afterRender(question, el);\n };\n QuestionCustomWidget.prototype.willUnmount = function (question, el) {\n if (this.widgetJson.willUnmount)\n this.widgetJson.willUnmount(question, el);\n };\n QuestionCustomWidget.prototype.getDisplayValue = function (question, value) {\n if (value === void 0) { value = undefined; }\n if (this.widgetJson.getDisplayValue)\n return this.widgetJson.getDisplayValue(question, value);\n return null;\n };\n QuestionCustomWidget.prototype.isFit = function (question) {\n if (this.isLibraryLoaded() && this.widgetJson.isFit)\n return this.widgetJson.isFit(question);\n return false;\n };\n Object.defineProperty(QuestionCustomWidget.prototype, \"canShowInToolbox\", {\n get: function () {\n if (this.widgetJson.showInToolbox === false)\n return false;\n if (CustomWidgetCollection.Instance.getActivatedBy(this.name) != \"customtype\")\n return false;\n return !this.widgetJson.widgetIsLoaded || this.widgetJson.widgetIsLoaded();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"showInToolbox\", {\n get: function () {\n return this.widgetJson.showInToolbox !== false;\n },\n set: function (val) {\n this.widgetJson.showInToolbox = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCustomWidget.prototype.init = function () {\n if (this.widgetJson.init) {\n this.widgetJson.init();\n }\n };\n QuestionCustomWidget.prototype.activatedByChanged = function (activatedBy) {\n if (this.isLibraryLoaded() && this.widgetJson.activatedByChanged) {\n this.widgetJson.activatedByChanged(activatedBy);\n }\n };\n QuestionCustomWidget.prototype.isLibraryLoaded = function () {\n if (this.widgetJson.widgetIsLoaded)\n return this.widgetJson.widgetIsLoaded() == true;\n return true;\n };\n Object.defineProperty(QuestionCustomWidget.prototype, \"isDefaultRender\", {\n get: function () {\n return this.widgetJson.isDefaultRender;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfQuestionType\", {\n get: function () {\n return this.widgetJson.pdfQuestionType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfRender\", {\n get: function () {\n return this.widgetJson.pdfRender;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionCustomWidget;\n}());\n\nvar CustomWidgetCollection = /** @class */ (function () {\n function CustomWidgetCollection() {\n this.widgetsValues = [];\n this.widgetsActivatedBy = {};\n this.onCustomWidgetAdded = new _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n }\n Object.defineProperty(CustomWidgetCollection.prototype, \"widgets\", {\n get: function () {\n return this.widgetsValues;\n },\n enumerable: false,\n configurable: true\n });\n CustomWidgetCollection.prototype.add = function (widgetJson, activatedBy) {\n if (activatedBy === void 0) { activatedBy = \"property\"; }\n this.addCustomWidget(widgetJson, activatedBy);\n };\n CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson, activatedBy) {\n if (activatedBy === void 0) { activatedBy = \"property\"; }\n var name = widgetJson.name;\n if (!name) {\n name = \"widget_\" + this.widgets.length + 1;\n }\n var customWidget = new QuestionCustomWidget(name, widgetJson);\n this.widgetsValues.push(customWidget);\n customWidget.init();\n this.widgetsActivatedBy[name] = activatedBy;\n customWidget.activatedByChanged(activatedBy);\n this.onCustomWidgetAdded.fire(customWidget, null);\n return customWidget;\n };\n /**\n * Returns the way the custom wiget is activated. It can be activated by a property (\"property\"), question type (\"type\") or by new/custom question type (\"customtype\").\n * @param widgetName the custom widget name\n * @see setActivatedBy\n */\n CustomWidgetCollection.prototype.getActivatedBy = function (widgetName) {\n var res = this.widgetsActivatedBy[widgetName];\n return res ? res : \"property\";\n };\n /**\n * Sets the way the custom wiget is activated. The activation types are: property (\"property\"), question type (\"type\") or new/custom question type (\"customtype\"). A custom wiget may support all or only some of this activation types.\n * @param widgetName\n * @param activatedBy there are three possible variants: \"property\", \"type\" and \"customtype\"\n */\n CustomWidgetCollection.prototype.setActivatedBy = function (widgetName, activatedBy) {\n if (!widgetName || !activatedBy)\n return;\n var widget = this.getCustomWidgetByName(widgetName);\n if (!widget)\n return;\n this.widgetsActivatedBy[widgetName] = activatedBy;\n widget.activatedByChanged(activatedBy);\n };\n CustomWidgetCollection.prototype.clear = function () {\n this.widgetsValues = [];\n };\n CustomWidgetCollection.prototype.getCustomWidgetByName = function (name) {\n for (var i = 0; i < this.widgets.length; i++) {\n if (this.widgets[i].name == name)\n return this.widgets[i];\n }\n return null;\n };\n CustomWidgetCollection.prototype.getCustomWidget = function (question) {\n for (var i = 0; i < this.widgetsValues.length; i++) {\n if (this.widgetsValues[i].isFit(question))\n return this.widgetsValues[i];\n }\n return null;\n };\n CustomWidgetCollection.Instance = new CustomWidgetCollection();\n return CustomWidgetCollection;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_baseselect.ts\":\n/*!************************************!*\\\n !*** ./src/question_baseselect.ts ***!\n \\************************************/\n/*! exports provided: QuestionSelectBase, QuestionCheckboxBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return QuestionSelectBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return QuestionCheckboxBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey */ \"./src/survey.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n/**\n * It is a base class for checkbox, dropdown and radiogroup questions.\n */\nvar QuestionSelectBase = /** @class */ (function (_super) {\n __extends(QuestionSelectBase, _super);\n function QuestionSelectBase(name) {\n var _this = _super.call(this, name) || this;\n _this.otherItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"other\");\n _this.dependedQuestions = [];\n _this.noneItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"none\");\n _this.isSettingDefaultValue = false;\n _this.isSettingComment = false;\n _this.isRunningChoices = false;\n _this.isFirstLoadChoicesFromUrl = true;\n _this.isUpdatingChoicesDependedQuestions = false;\n var noneItemText = _this.createLocalizableString(\"noneText\", _this, true);\n noneItemText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noneItemText\");\n };\n _this.noneItemValue.locOwner = _this;\n _this.noneItemValue.setLocText(noneItemText);\n _this.createItemValues(\"choices\");\n _this.registerFunctionOnPropertyValueChanged(\"choices\", function () {\n if (!_this.filterItems()) {\n _this.onVisibleChoicesChanged();\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"choicesFromQuestion\", \"choicesFromQuestionMode\", \"hasNone\"], function () {\n _this.onVisibleChoicesChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfChoicesEmpty\", function () {\n _this.updateVisibilityBasedOnChoices();\n });\n _this.createNewArray(\"visibleChoices\");\n _this.setNewRestfulProperty();\n var locOtherText = _this.createLocalizableString(\"otherText\", _this, true);\n _this.createLocalizableString(\"otherErrorText\", _this, true);\n _this.otherItemValue.locOwner = _this;\n _this.otherItemValue.setLocText(locOtherText);\n locOtherText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherItemText\");\n };\n _this.choicesByUrl.beforeSendRequestCallback = function () {\n _this.onBeforeSendRequest();\n };\n _this.choicesByUrl.getResultCallback = function (items) {\n _this.onLoadChoicesFromUrl(items);\n };\n _this.choicesByUrl.updateResultCallback = function (items, serverResult) {\n if (_this.survey) {\n return _this.survey.updateChoicesFromServer(_this, items, serverResult);\n }\n return items;\n };\n _this.createLocalizableString(\"otherPlaceHolder\", _this);\n return _this;\n }\n QuestionSelectBase.prototype.getType = function () {\n return \"selectbase\";\n };\n QuestionSelectBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n for (var i = 0; i < this.dependedQuestions.length; i++) {\n this.dependedQuestions[i].choicesFromQuestion = \"\";\n }\n this.removeFromDependedQuestion(this.getQuestionWithChoices());\n };\n QuestionSelectBase.prototype.supportGoNextPageError = function () {\n return !this.isOtherSelected || !!this.comment;\n };\n QuestionSelectBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n QuestionSelectBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n if (this.choicesOrder !== \"none\") {\n this.updateVisibleChoices();\n }\n };\n QuestionSelectBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (!!this.choicesFromUrl) {\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.choicesFromUrl);\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].locStrsChanged(this.visibleChoices);\n }\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"otherItem\", {\n /**\n * Returns the other item. By using this property, you may change programmatically it's value and text.\n * @see hasOther\n */\n get: function () {\n return this.otherItemValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"isOtherSelected\", {\n /**\n * Returns true if a user select the 'other' item.\n */\n get: function () {\n return this.hasOther && this.getHasOther(this.renderedValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hasNone\", {\n /**\n * Set this property to true, to show the \"None\" item on the bottom. If end-user checks this item, all other items would be unchecked.\n */\n get: function () {\n return this.getPropertyValue(\"hasNone\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hasNone\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"noneItem\", {\n /**\n * Returns the none item. By using this property, you may change programmatically it's value and text.\n * @see hasNone\n */\n get: function () {\n return this.noneItemValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"noneText\", {\n /**\n * Use this property to set the different text for none item.\n */\n get: function () {\n return this.getLocalizableStringText(\"noneText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noneItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"noneText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locNoneText\", {\n get: function () {\n return this.getLocalizableString(\"noneText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each choices item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see visibleIf\n * @see choicesEnableIf\n */\n get: function () {\n return this.getPropertyValue(\"choicesVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesVisibleIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesEnableIf\", {\n /**\n * An expression that returns true or false. It runs against each choices item and if for this item it returns true, then the item is enabled otherwise the item becomes disabled. Please use {item} to get the current item value in the expression.\n * @see choicesVisibleIf\n */\n get: function () {\n return this.getPropertyValue(\"choicesEnableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesEnableIf\", val);\n this.filterItems();\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runItemsEnableCondition(values, properties);\n this.runItemsCondition(values, properties);\n };\n QuestionSelectBase.prototype.isTextValue = function () {\n return true; //for comments and others\n };\n QuestionSelectBase.prototype.setDefaultValue = function () {\n this.isSettingDefaultValue =\n !this.isValueEmpty(this.defaultValue) &&\n this.hasUnknownValue(this.defaultValue);\n this.prevCommentValue = undefined;\n _super.prototype.setDefaultValue.call(this);\n this.isSettingDefaultValue = false;\n };\n QuestionSelectBase.prototype.getIsMultipleValue = function () {\n return false;\n };\n QuestionSelectBase.prototype.convertDefaultValue = function (val) {\n if (val == null || val == undefined)\n return val;\n if (this.getIsMultipleValue()) {\n if (!Array.isArray(val))\n return [val];\n }\n else {\n if (Array.isArray(val) && val.length > 0)\n return val[0];\n }\n return val;\n };\n QuestionSelectBase.prototype.filterItems = function () {\n if (this.isLoadingFromJson ||\n !this.data ||\n this.areInvisibleElementsShowing)\n return false;\n var values = this.getDataFilteredValues();\n var properties = this.getDataFilteredProperties();\n this.runItemsEnableCondition(values, properties);\n return this.runItemsCondition(values, properties);\n };\n QuestionSelectBase.prototype.runItemsCondition = function (values, properties) {\n this.setConditionalChoicesRunner();\n var hasChanges = this.runConditionsForItems(values, properties);\n if (!!this.filteredChoicesValue &&\n this.filteredChoicesValue.length === this.activeChoices.length) {\n this.filteredChoicesValue = undefined;\n }\n if (hasChanges) {\n this.onVisibleChoicesChanged();\n this.clearIncorrectValues();\n }\n return hasChanges;\n };\n QuestionSelectBase.prototype.runItemsEnableCondition = function (values, properties) {\n var _this = this;\n this.setConditionalEnableChoicesRunner();\n var hasChanged = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runEnabledConditionsForItems(this.activeChoices, this.conditionChoicesEnableIfRunner, values, properties, function (item) {\n return _this.onEnableItemCallBack(item);\n });\n if (hasChanged) {\n this.clearDisabledValues();\n }\n this.onAfterRunItemsEnableCondition();\n };\n QuestionSelectBase.prototype.onAfterRunItemsEnableCondition = function () { };\n QuestionSelectBase.prototype.onEnableItemCallBack = function (item) {\n return true;\n };\n QuestionSelectBase.prototype.setConditionalChoicesRunner = function () {\n if (this.choicesVisibleIf) {\n if (!this.conditionChoicesVisibleIfRunner) {\n this.conditionChoicesVisibleIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.choicesVisibleIf);\n }\n this.conditionChoicesVisibleIfRunner.expression = this.choicesVisibleIf;\n }\n else {\n this.conditionChoicesVisibleIfRunner = null;\n }\n };\n QuestionSelectBase.prototype.setConditionalEnableChoicesRunner = function () {\n if (this.choicesEnableIf) {\n if (!this.conditionChoicesEnableIfRunner) {\n this.conditionChoicesEnableIfRunner = new _conditions__WEBPACK_IMPORTED_MODULE_7__[\"ConditionRunner\"](this.choicesEnableIf);\n }\n this.conditionChoicesEnableIfRunner.expression = this.choicesEnableIf;\n }\n else {\n this.conditionChoicesEnableIfRunner = null;\n }\n };\n QuestionSelectBase.prototype.runConditionsForItems = function (values, properties) {\n this.filteredChoicesValue = [];\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].runConditionsForItems(this.activeChoices, this.getFilteredChoices(), this.areInvisibleElementsShowing\n ? null\n : this.conditionChoicesVisibleIfRunner, values, properties, !this.survey || !this.survey.areInvisibleElementsShowing);\n };\n QuestionSelectBase.prototype.getHasOther = function (val) {\n return val === this.otherItem.value;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"validatedValue\", {\n get: function () {\n return this.rendredValueToDataCore(this.value);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.createRestful = function () {\n return new _choicesRestful__WEBPACK_IMPORTED_MODULE_6__[\"ChoicesRestful\"]();\n };\n QuestionSelectBase.prototype.setNewRestfulProperty = function () {\n this.setPropertyValue(\"choicesByUrl\", this.createRestful());\n this.choicesByUrl.owner = this;\n this.choicesByUrl.loadingOwner = this;\n };\n QuestionSelectBase.prototype.getQuestionComment = function () {\n if (!!this.commentValue)\n return this.commentValue;\n if (this.hasComment || this.getStoreOthersAsComment())\n return _super.prototype.getQuestionComment.call(this);\n return this.commentValue;\n };\n QuestionSelectBase.prototype.setQuestionComment = function (newValue) {\n if (this.hasComment || this.getStoreOthersAsComment())\n _super.prototype.setQuestionComment.call(this, newValue);\n else {\n if (!this.isSettingComment && newValue != this.commentValue) {\n this.isSettingComment = true;\n this.commentValue = newValue;\n if (this.isOtherSelected && !this.isRenderedValueSetting) {\n this.value = this.rendredValueToData(this.renderedValue);\n }\n this.isSettingComment = false;\n }\n }\n };\n QuestionSelectBase.prototype.clearValue = function () {\n _super.prototype.clearValue.call(this);\n this.prevCommentValue = undefined;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"renderedValue\", {\n get: function () {\n return this.getPropertyValue(\"renderedValue\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"renderedValue\", val);\n this.value = this.rendredValueToData(val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.setQuestionValue = function (newValue, updateIsAnswered, updateComment) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n if (updateComment === void 0) { updateComment = true; }\n if (this.isLoadingFromJson ||\n _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, newValue))\n return;\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.setPropertyValue(\"renderedValue\", this.rendredValueFromData(newValue));\n if (this.hasComment || !updateComment)\n return;\n var isOtherSel = this.isOtherSelected;\n if (isOtherSel && !!this.prevCommentValue) {\n var oldComment = this.prevCommentValue;\n this.prevCommentValue = undefined;\n this.comment = oldComment;\n }\n if (!isOtherSel && !!this.comment) {\n if (this.getStoreOthersAsComment()) {\n this.prevCommentValue = this.comment;\n }\n this.comment = \"\";\n }\n };\n QuestionSelectBase.prototype.setNewValue = function (newValue) {\n newValue = this.valueFromData(newValue);\n if ((!this.choicesByUrl.isRunning &&\n !this.choicesByUrl.isWaitingForParameters) ||\n !this.isValueEmpty(newValue)) {\n this.cachedValueForUrlRequests = newValue;\n }\n _super.prototype.setNewValue.call(this, newValue);\n };\n QuestionSelectBase.prototype.valueFromData = function (val) {\n var choiceitem = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.activeChoices, val);\n if (!!choiceitem) {\n return choiceitem.value;\n }\n return _super.prototype.valueFromData.call(this, val);\n };\n QuestionSelectBase.prototype.rendredValueFromData = function (val) {\n if (this.getStoreOthersAsComment())\n return val;\n return this.renderedValueFromDataCore(val);\n };\n QuestionSelectBase.prototype.rendredValueToData = function (val) {\n if (this.getStoreOthersAsComment())\n return val;\n return this.rendredValueToDataCore(val);\n };\n QuestionSelectBase.prototype.renderedValueFromDataCore = function (val) {\n if (!this.hasUnknownValue(val, true, false))\n return this.valueFromData(val);\n this.comment = val;\n return this.otherItem.value;\n };\n QuestionSelectBase.prototype.rendredValueToDataCore = function (val) {\n if (val == this.otherItem.value && this.getQuestionComment()) {\n val = this.getQuestionComment();\n }\n return val;\n };\n QuestionSelectBase.prototype.hasUnknownValue = function (val, includeOther, isFilteredChoices) {\n if (includeOther === void 0) { includeOther = false; }\n if (isFilteredChoices === void 0) { isFilteredChoices = true; }\n if (this.isValueEmpty(val))\n return false;\n if (includeOther && val == this.otherItem.value)\n return false;\n if (this.hasNone && val == this.noneItem.value)\n return false;\n var choices = isFilteredChoices\n ? this.getFilteredChoices()\n : this.activeChoices;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(choices, val) == null;\n };\n QuestionSelectBase.prototype.isValueDisabled = function (val) {\n var itemValue = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(this.getFilteredChoices(), val);\n return !!itemValue && !itemValue.isEnabled;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesByUrl\", {\n /**\n * Use this property to fill the choices from a RESTful service.\n * @see choices\n * @see ChoicesRestful\n * @see [Example: RESTful Dropdown](https://surveyjs.io/Examples/Library/?id=questiontype-dropdownrestfull)\n * @see [Docs: Fill Choices from a RESTful Service](https://surveyjs.io/Documentation/Library/?id=LibraryOverview#fill-the-choices-from-a-restful-service)\n */\n get: function () {\n return this.getPropertyValue(\"choicesByUrl\");\n },\n set: function (val) {\n if (!val)\n return;\n this.setNewRestfulProperty();\n this.choicesByUrl.fromJSON(val.toJSON());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choices\", {\n /**\n * The list of items. Every item has value and text. If text is empty, the value is rendered. The item text supports markdown.\n * @see choicesByUrl\n * @see choicesFromQuestion\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"choices\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestion\", {\n /**\n * Set this property to get choices from the specified question instead of defining them in the current question. This avoids duplication of choices declaration in your survey definition.\n * By setting this property, the \"choices\", \"choicesVisibleIf\", \"choicesEnableIf\" and \"choicesOrder\" properties become invisible, because these question characteristics depend on actions in another (specified) question.\n * Use the `choicesFromQuestionMode` property to filter choices obtained from the specified question.\n * @see choices\n * @see choicesFromQuestionMode\n */\n get: function () {\n return this.getPropertyValue(\"choicesFromQuestion\");\n },\n set: function (val) {\n var question = this.getQuestionWithChoices();\n if (!!question) {\n question.removeFromDependedQuestion(this);\n }\n this.setPropertyValue(\"choicesFromQuestion\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.addIntoDependedQuestion = function (question) {\n if (!question || question.dependedQuestions.indexOf(this) > -1)\n return;\n question.dependedQuestions.push(this);\n };\n QuestionSelectBase.prototype.removeFromDependedQuestion = function (question) {\n if (!question)\n return;\n var index = question.dependedQuestions.indexOf(this);\n if (index > -1) {\n question.dependedQuestions.splice(index, 1);\n }\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesFromQuestionMode\", {\n /**\n * This property becomes visible when the `choicesFromQuestion` property is selected. The default value is \"all\" (all visible choices from another question are displayed as they are).\n * You can set this property to \"selected\" or \"unselected\" to display only selected or unselected choices from the specified question.\n * @see choicesFromQuestion\n */\n get: function () {\n return this.getPropertyValue(\"choicesFromQuestionMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesFromQuestionMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hideIfChoicesEmpty\", {\n /**\n * Set this property to true to hide the question if there is no visible choices.\n */\n get: function () {\n return this.getPropertyValue(\"hideIfChoicesEmpty\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideIfChoicesEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"keepIncorrectValues\", {\n get: function () {\n return this.getPropertyValue(\"keepIncorrectValues\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"keepIncorrectValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"storeOthersAsComment\", {\n /**\n * Please use survey.storeOthersAsComment to change the behavior on the survey level. This property is depricated and invisible in Survey Creator.\n * By default the entered text in the others input in the checkbox/radiogroup/dropdown are stored as \"question name \" + \"-Comment\". The value itself is \"question name\": \"others\". Set this property to false, to store the entered text directly in the \"question name\" key.\n * Possible values are: \"default\", true, false\n * @see SurveyModel.storeOthersAsComment\n */\n get: function () {\n return this.getPropertyValue(\"storeOthersAsComment\", \"default\");\n },\n set: function (val) {\n this.setPropertyValue(\"storeOthersAsComment\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.hasOtherChanged = function () {\n this.onVisibleChoicesChanged();\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesOrder\", {\n /**\n * Use this property to render items in a specific order: \"asc\", \"desc\", \"random\". Default value is \"none\".\n */\n get: function () {\n return this.getPropertyValue(\"choicesOrder\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == this.choicesOrder)\n return;\n this.setPropertyValue(\"choicesOrder\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherText\", {\n /**\n * Use this property to set the different text for other item.\n */\n get: function () {\n return this.getLocalizableStringText(\"otherText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherText\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherText\", {\n get: function () {\n return this.getLocalizableString(\"otherText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherPlaceHolder\", {\n /**\n * Use this property to set the place holder text for other or comment field .\n */\n get: function () {\n return this.getLocalizableStringText(\"otherPlaceHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherPlaceHolder\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"otherPlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherErrorText\", {\n /**\n * The text that shows when the other item is choosed by the other input is empty.\n */\n get: function () {\n return this.getLocalizableStringText(\"otherErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"otherRequiredError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherErrorText\", {\n get: function () {\n return this.getLocalizableString(\"otherErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"visibleChoices\", {\n /**\n * The list of items as they will be rendered. If needed items are sorted and the other item is added.\n * @see hasOther\n * @see choicesOrder\n * @see enabledChoices\n */\n get: function () {\n return this.getPropertyValue(\"visibleChoices\", []);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"enabledChoices\", {\n /**\n * The list of enabled items as they will be rendered. The disabled items are not included\n * @see hasOther\n * @see choicesOrder\n * @see visibleChoices\n */\n get: function () {\n var res = [];\n var items = this.visibleChoices;\n for (var i = 0; i < items.length; i++) {\n if (items[i].isEnabled)\n res.push(items[i]);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.updateVisibleChoices = function () {\n if (this.isLoadingFromJson)\n return;\n var newValue = new Array();\n var calcValue = this.calcVisibleChoices();\n if (!calcValue)\n calcValue = [];\n for (var i = 0; i < calcValue.length; i++) {\n newValue.push(calcValue[i]);\n }\n this.setPropertyValue(\"visibleChoices\", newValue);\n };\n QuestionSelectBase.prototype.calcVisibleChoices = function () {\n if (this.canUseFilteredChoices())\n return this.getFilteredChoices();\n var res = this.sortVisibleChoices(this.getFilteredChoices().slice());\n this.addToVisibleChoices(res, this.isAddDefaultItems);\n return res;\n };\n QuestionSelectBase.prototype.canUseFilteredChoices = function () {\n return (!this.isAddDefaultItems &&\n !this.hasNone &&\n !this.hasOther &&\n this.choicesOrder == \"none\");\n };\n QuestionSelectBase.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (isAddAll) {\n if (!this.newItemValue) {\n this.newItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"](\"newitem\"); //TODO\n }\n items.push(this.newItemValue);\n }\n if (this.supportOther() && (isAddAll || this.hasOther)) {\n items.push(this.otherItem);\n }\n if (this.supportNone() && (isAddAll || this.hasNone)) {\n items.push(this.noneItem);\n }\n };\n /**\n * For internal use in SurveyJS Creator V2.\n */\n QuestionSelectBase.prototype.isItemInList = function (item) {\n if (item === this.otherItem)\n return this.hasOther;\n if (item === this.noneItem)\n return this.hasNone;\n if (item === this.newItemValue)\n return false;\n return true;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"isAddDefaultItems\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].supportCreatorV2 && this.isDesignMode && !this.parentQuestion;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n var values = Array.isArray(this.value) ? this.value : [this.value];\n questionPlainData.isNode = true;\n questionPlainData.data = (questionPlainData.data || []).concat(values.map(function (dataValue, index) {\n var choice = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(_this.visibleChoices, dataValue);\n var choiceDataItem = {\n name: index,\n title: \"Choice\",\n value: dataValue,\n displayValue: _this.getChoicesDisplayValue(_this.visibleChoices, dataValue),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n if (!!choice) {\n (options.calculations || []).forEach(function (calculation) {\n choiceDataItem[calculation.propertyName] =\n choice[calculation.propertyName];\n });\n }\n if (_this.isOtherSelected && _this.otherItemValue === choice) {\n choiceDataItem.isOther = true;\n choiceDataItem.displayValue = _this.comment;\n }\n return choiceDataItem;\n }));\n }\n return questionPlainData;\n };\n /**\n * Returns the text for the current value. If the value is null then returns empty string. If 'other' is selected then returns the text for other value.\n */\n QuestionSelectBase.prototype.getDisplayValueCore = function (keysAsText, value) {\n return this.getChoicesDisplayValue(this.visibleChoices, value);\n };\n QuestionSelectBase.prototype.getChoicesDisplayValue = function (items, val) {\n if (val == this.otherItemValue.value)\n return this.comment ? this.comment : this.locOtherText.textOrHtml;\n var str = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(items, val);\n return str == \"\" && val ? val : str;\n };\n QuestionSelectBase.prototype.getFilteredChoices = function () {\n return this.filteredChoicesValue\n ? this.filteredChoicesValue\n : this.activeChoices;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"activeChoices\", {\n get: function () {\n var question = this.getQuestionWithChoices();\n if (!!question) {\n this.addIntoDependedQuestion(question);\n return this.getChoicesFromQuestion(question);\n }\n return this.choicesFromUrl ? this.choicesFromUrl : this.getChoices();\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.getQuestionWithChoices = function () {\n if (!this.choicesFromQuestion || !this.survey)\n return null;\n var res = this.survey.getQuestionByName(this.choicesFromQuestion);\n return !!res && !!res.visibleChoices && res !== this ? res : null;\n };\n QuestionSelectBase.prototype.getChoicesFromQuestion = function (question) {\n var res = [];\n var isSelected = this.choicesFromQuestionMode == \"selected\"\n ? true\n : this.choicesFromQuestionMode == \"unselected\"\n ? false\n : undefined;\n var choices = question.visibleChoices;\n for (var i = 0; i < choices.length; i++) {\n if (this.isBuiltInChoice(choices[i], question))\n continue;\n if (isSelected === undefined) {\n res.push(choices[i]);\n continue;\n }\n var itemsSelected = question.isItemSelected(choices[i]);\n if ((itemsSelected && isSelected) || (!itemsSelected && !isSelected)) {\n res.push(choices[i]);\n }\n }\n return res;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"hasActiveChoices\", {\n get: function () {\n var choices = this.visibleChoices;\n if (!choices || choices.length == 0) {\n this.onVisibleChoicesChanged();\n choices = this.visibleChoices;\n }\n for (var i = 0; i < choices.length; i++) {\n if (!this.isBuiltInChoice(choices[i], this))\n return true;\n }\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.isBuiltInChoice = function (item, question) {\n return (item === question.noneItem ||\n item === question.otherItem ||\n item === question.newItemValue);\n };\n QuestionSelectBase.prototype.getChoices = function () {\n return this.choices;\n };\n QuestionSelectBase.prototype.supportComment = function () {\n return true;\n };\n QuestionSelectBase.prototype.supportOther = function () {\n return true;\n };\n QuestionSelectBase.prototype.supportNone = function () {\n return true;\n };\n QuestionSelectBase.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!this.hasOther || !this.isOtherSelected || this.comment)\n return;\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_5__[\"OtherEmptyError\"](this.otherErrorText, this));\n };\n QuestionSelectBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.runChoicesByUrl();\n if (this.isAddDefaultItems) {\n this.updateVisibleChoices();\n }\n };\n QuestionSelectBase.prototype.setSurveyCore = function (value) {\n _super.prototype.setSurveyCore.call(this, value);\n if (!!value && !!this.choicesFromQuestion) {\n this.onVisibleChoicesChanged();\n }\n };\n QuestionSelectBase.prototype.getStoreOthersAsComment = function () {\n if (this.isSettingDefaultValue)\n return false;\n return (this.storeOthersAsComment === true ||\n (this.storeOthersAsComment == \"default\" &&\n (this.survey != null ? this.survey.storeOthersAsComment : true)) ||\n (!this.choicesByUrl.isEmpty && !this.choicesFromUrl));\n };\n QuestionSelectBase.prototype.onSurveyLoad = function () {\n this.runChoicesByUrl();\n this.onVisibleChoicesChanged();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionSelectBase.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (name != this.getValueName()) {\n this.runChoicesByUrl();\n }\n if (!!name && name == this.choicesFromQuestion) {\n this.onVisibleChoicesChanged();\n }\n };\n QuestionSelectBase.prototype.updateValueFromSurvey = function (newValue) {\n var newComment = \"\";\n if (this.hasOther &&\n !this.isRunningChoices &&\n !this.choicesByUrl.isRunning &&\n this.getStoreOthersAsComment()) {\n if (this.hasUnknownValue(newValue) && !this.getHasOther(newValue)) {\n newComment = this.getCommentFromValue(newValue);\n newValue = this.setOtherValueIntoValue(newValue);\n }\n else {\n newComment = this.data.getComment(this.getValueName());\n }\n }\n _super.prototype.updateValueFromSurvey.call(this, newValue);\n if (!!newComment) {\n this.setNewComment(newComment);\n }\n };\n QuestionSelectBase.prototype.getCommentFromValue = function (newValue) {\n return newValue;\n };\n QuestionSelectBase.prototype.setOtherValueIntoValue = function (newValue) {\n return this.otherItem.value;\n };\n QuestionSelectBase.prototype.runChoicesByUrl = function () {\n if (!this.choicesByUrl || this.isLoadingFromJson || this.isRunningChoices)\n return;\n var processor = this.surveyImpl\n ? this.surveyImpl.getTextProcessor()\n : this.textProcessor;\n if (!processor)\n processor = this.survey;\n if (!processor)\n return;\n this.isReadyValue = this.isChoicesLoaded || this.choicesByUrl.isEmpty;\n this.isRunningChoices = true;\n this.choicesByUrl.run(processor);\n this.isRunningChoices = false;\n };\n QuestionSelectBase.prototype.onBeforeSendRequest = function () {\n if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].disableOnGettingChoicesFromWeb === true && !this.isReadOnly) {\n this.enableOnLoadingChoices = true;\n this.readOnly = true;\n }\n };\n QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) {\n if (this.enableOnLoadingChoices) {\n this.readOnly = false;\n }\n if (!this.isReadOnly) {\n var errors = [];\n if (this.choicesByUrl && this.choicesByUrl.error) {\n errors.push(this.choicesByUrl.error);\n }\n this.errors = errors;\n }\n var newChoices = null;\n var checkCachedValuesOnExisting = true;\n if (this.isFirstLoadChoicesFromUrl &&\n !this.cachedValueForUrlRequests &&\n this.defaultValue) {\n this.cachedValueForUrlRequests = this.defaultValue;\n checkCachedValuesOnExisting = false;\n }\n if (this.isValueEmpty(this.cachedValueForUrlRequests)) {\n this.cachedValueForUrlRequests = this.value;\n }\n this.isFirstLoadChoicesFromUrl = false;\n var cachedValues = this.createCachedValueForUrlRequests(this.cachedValueForUrlRequests, checkCachedValuesOnExisting);\n if (array && array.length > 0) {\n newChoices = new Array();\n _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].setData(newChoices, array);\n }\n if (!!newChoices) {\n for (var i = 0; i < newChoices.length; i++) {\n newChoices[i].locOwner = this;\n }\n }\n this.choicesFromUrl = newChoices;\n this.filterItems();\n this.onVisibleChoicesChanged();\n if (newChoices) {\n var newValue = this.updateCachedValueForUrlRequests(cachedValues, newChoices);\n if (!!newValue && !this.isReadOnly) {\n var hasChanged = !_helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].isTwoValueEquals(this.value, newValue.value);\n try {\n if (!this.isValueEmpty(newValue.value)) {\n this.allowNotifyValueChanged = false;\n this.setQuestionValue(undefined, true, false);\n }\n this.allowNotifyValueChanged = hasChanged;\n if (hasChanged) {\n this.value = newValue.value;\n }\n else {\n this.setQuestionValue(newValue.value);\n }\n }\n finally {\n this.allowNotifyValueChanged = true;\n }\n }\n }\n this.choicesLoaded();\n };\n QuestionSelectBase.prototype.createCachedValueForUrlRequests = function (val, checkOnExisting) {\n if (this.isValueEmpty(val))\n return null;\n if (Array.isArray(val)) {\n var res = [];\n for (var i = 0; i < val.length; i++) {\n res.push(this.createCachedValueForUrlRequests(val[i], true));\n }\n return res;\n }\n var isExists = checkOnExisting ? !this.hasUnknownValue(val) : true;\n return { value: val, isExists: isExists };\n };\n QuestionSelectBase.prototype.updateCachedValueForUrlRequests = function (val, newChoices) {\n if (this.isValueEmpty(val))\n return null;\n if (Array.isArray(val)) {\n var res = [];\n for (var i = 0; i < val.length; i++) {\n var updatedValue = this.updateCachedValueForUrlRequests(val[i], newChoices);\n if (updatedValue && !this.isValueEmpty(updatedValue.value)) {\n var newValue = updatedValue.value;\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, updatedValue.value);\n if (!!item) {\n newValue = item.value;\n }\n res.push(newValue);\n }\n }\n return { value: res };\n }\n var value = val.isExists && this.hasUnknownValue(val.value) ? null : val.value;\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getItemByValue(newChoices, value);\n if (!!item) {\n value = item.value;\n }\n return { value: value };\n };\n QuestionSelectBase.prototype.updateChoicesDependedQuestions = function () {\n if (this.isUpdatingChoicesDependedQuestions)\n return;\n this.isUpdatingChoicesDependedQuestions = true;\n for (var i = 0; i < this.dependedQuestions.length; i++) {\n this.dependedQuestions[i].onVisibleChoicesChanged();\n this.dependedQuestions[i].updateChoicesDependedQuestions();\n }\n this.isUpdatingChoicesDependedQuestions = false;\n };\n QuestionSelectBase.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (this.isLoadingFromJson)\n return;\n this.updateChoicesDependedQuestions();\n };\n QuestionSelectBase.prototype.onVisibleChoicesChanged = function () {\n if (this.isLoadingFromJson)\n return;\n this.updateVisibleChoices();\n this.updateVisibilityBasedOnChoices();\n if (!!this.visibleChoicesChangedCallback) {\n this.visibleChoicesChangedCallback();\n }\n this.updateChoicesDependedQuestions();\n };\n QuestionSelectBase.prototype.updateVisibilityBasedOnChoices = function () {\n if (this.hideIfChoicesEmpty) {\n var filteredChoices = this.getFilteredChoices();\n this.visible = !filteredChoices || filteredChoices.length > 0;\n }\n };\n QuestionSelectBase.prototype.sortVisibleChoices = function (array) {\n var order = this.choicesOrder.toLowerCase();\n if (order == \"asc\")\n return this.sortArray(array, 1);\n if (order == \"desc\")\n return this.sortArray(array, -1);\n if (order == \"random\")\n return this.randomizeArray(array);\n return array;\n };\n QuestionSelectBase.prototype.sortArray = function (array, mult) {\n return array.sort(function (a, b) {\n if (a.calculatedText < b.calculatedText)\n return -1 * mult;\n if (a.calculatedText > b.calculatedText)\n return 1 * mult;\n return 0;\n });\n };\n QuestionSelectBase.prototype.randomizeArray = function (array) {\n return _helpers__WEBPACK_IMPORTED_MODULE_8__[\"Helpers\"].randomizeArray(array);\n };\n QuestionSelectBase.prototype.clearIncorrectValues = function () {\n if (this.keepIncorrectValues)\n return;\n if (!!this.survey &&\n this.survey.questionCountByValueName(this.getValueName()) > 1)\n return;\n if (!!this.choicesByUrl &&\n !this.choicesByUrl.isEmpty &&\n (!this.choicesFromUrl || this.choicesFromUrl.length == 0))\n return;\n if (this.clearIncorrectValuesCallback) {\n this.clearIncorrectValuesCallback();\n }\n else {\n this.clearIncorrectValuesCore();\n }\n };\n QuestionSelectBase.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n this.clearIncorrectValues();\n };\n /**\n * Returns true if item is selected\n * @param item checkbox or radio item value\n */\n QuestionSelectBase.prototype.isItemSelected = function (item) {\n return item.value === this.value;\n };\n QuestionSelectBase.prototype.clearDisabledValues = function () {\n if (!this.survey || !this.survey.clearValueOnDisableItems)\n return;\n this.clearDisabledValuesCore();\n };\n QuestionSelectBase.prototype.clearIncorrectValuesCore = function () {\n var val = this.value;\n if (this.canClearValueAnUnknow(val)) {\n this.clearValue();\n }\n };\n QuestionSelectBase.prototype.canClearValueAnUnknow = function (val) {\n if (!this.getStoreOthersAsComment() && this.isOtherSelected)\n return false;\n return this.hasUnknownValue(val, true);\n };\n QuestionSelectBase.prototype.clearDisabledValuesCore = function () {\n if (this.isValueDisabled(this.value)) {\n this.clearValue();\n }\n };\n QuestionSelectBase.prototype.clearUnusedValues = function () {\n _super.prototype.clearUnusedValues.call(this);\n if (!this.isOtherSelected && !this.hasComment) {\n this.comment = \"\";\n }\n };\n QuestionSelectBase.prototype.getColumnClass = function () {\n var columnClass = this.cssClasses.column;\n if (this.hasColumns) {\n columnClass += \" sv-q-column-\" + this.colCount;\n }\n return columnClass;\n };\n QuestionSelectBase.prototype.getItemIndex = function (item) {\n return this.visibleChoices.indexOf(item);\n };\n QuestionSelectBase.prototype.getItemClass = function (item) {\n var itemClass = this.cssClasses.item;\n var isDisabled = this.isReadOnly || !item.isEnabled;\n var isChecked = this.isItemSelected(item) ||\n (this.isOtherSelected && this.otherItem.value === item.value);\n var allowHover = !isDisabled && !isChecked;\n var isNone = item === this.noneItem;\n if (!this.hasColumns) {\n itemClass +=\n this.colCount === 0\n ? \" \" + this.cssClasses.itemInline\n : \" sv-q-col-\" + this.colCount;\n }\n if (isDisabled && !!this.cssClasses.itemDisabled)\n itemClass += \" \" + this.cssClasses.itemDisabled;\n if (isChecked && !!this.cssClasses.itemChecked)\n itemClass += \" \" + this.cssClasses.itemChecked;\n if (allowHover && !!this.cssClasses.itemHover)\n itemClass += \" \" + this.cssClasses.itemHover;\n if (isNone && !!this.cssClasses.itemNone)\n itemClass += \" \" + this.cssClasses.itemNone;\n return itemClass;\n };\n QuestionSelectBase.prototype.getLabelClass = function (item) {\n var labelClass = this.cssClasses.label;\n if (this.isItemSelected(item)) {\n labelClass += \" \" + this.cssClasses.labelChecked;\n }\n return labelClass;\n };\n QuestionSelectBase.prototype.getControlLabelClass = function (item) {\n var controlLabelClass = this.cssClasses.controlLabel;\n if (this.isItemSelected(item)) {\n controlLabelClass += \" \" + this.cssClasses.controlLabelChecked;\n }\n return controlLabelClass;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"columns\", {\n get: function () {\n var columns = [];\n var colCount = this.colCount;\n if (this.hasColumns && this.visibleChoices.length > 0) {\n if (_settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].showItemsInOrder == \"column\") {\n var prevIndex = 0;\n var leftElementsCount = this.visibleChoices.length % colCount;\n for (var i = 0; i < colCount; i++) {\n var column = [];\n for (var j = prevIndex; j < prevIndex + Math.floor(this.visibleChoices.length / colCount); j++) {\n column.push(this.visibleChoices[j]);\n }\n if (leftElementsCount > 0) {\n leftElementsCount--;\n column.push(this.visibleChoices[j]);\n j++;\n }\n prevIndex = j;\n columns.push(column);\n }\n }\n else {\n for (var i = 0; i < colCount; i++) {\n var column = [];\n for (var j = i; j < this.visibleChoices.length; j += colCount) {\n column.push(this.visibleChoices[j]);\n }\n columns.push(column);\n }\n }\n }\n return columns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hasColumns\", {\n get: function () {\n return this.colCount > 1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionSelectBase.prototype.choicesLoaded = function () {\n this.isChoicesLoaded = true;\n var oldIsReady = this.isReadyValue;\n this.isReadyValue = true;\n this.onReadyChanged &&\n this.onReadyChanged.fire(this, {\n question: this,\n isReady: true,\n oldIsReady: oldIsReady,\n });\n };\n QuestionSelectBase.prototype.getItemValueWrapperComponentName = function (item) {\n var survey = this.survey;\n if (survey) {\n return survey.getItemValueWrapperComponentName(item, this);\n }\n return _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].TemplateRendererComponentName;\n };\n QuestionSelectBase.prototype.getItemValueWrapperComponentData = function (item) {\n var survey = this.survey;\n if (survey) {\n return survey.getItemValueWrapperComponentData(item, this);\n }\n return item;\n };\n return QuestionSelectBase;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n/**\n * A base class for checkbox and radiogroup questions. It introduced a colCount property.\n */\nvar QuestionCheckboxBase = /** @class */ (function (_super) {\n __extends(QuestionCheckboxBase, _super);\n function QuestionCheckboxBase(name) {\n return _super.call(this, name) || this;\n }\n Object.defineProperty(QuestionCheckboxBase.prototype, \"colCount\", {\n /**\n * The number of columns for radiogroup and checkbox questions. Items are rendred in one line if the value is 0.\n */\n get: function () {\n return this.getPropertyValue(\"colCount\", this.isFlowLayout ? 0 : 1);\n },\n set: function (value) {\n if (value < 0 || value > 5 || this.isFlowLayout)\n return;\n this.setPropertyValue(\"colCount\", value);\n this.fireCallback(this.colCountChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxBase.prototype.onParentChanged = function () {\n _super.prototype.onParentChanged.call(this);\n if (this.isFlowLayout) {\n this.setPropertyValue(\"colCount\", null);\n }\n };\n QuestionCheckboxBase.prototype.onParentQuestionChanged = function () {\n this.onVisibleChoicesChanged();\n };\n QuestionCheckboxBase.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"choices\");\n };\n return QuestionCheckboxBase;\n}(QuestionSelectBase));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"selectbase\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n \"choicesFromQuestion:question_selectbase\",\n {\n name: \"choices:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"choices_Item\");\n },\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesFromQuestionMode\",\n default: \"all\",\n choices: [\"all\", \"selected\", \"unselected\"],\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !!obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesOrder\",\n default: \"none\",\n choices: [\"none\", \"asc\", \"desc\", \"random\"],\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesByUrl:restfull\",\n className: \"ChoicesRestful\",\n onGetValue: function (obj) {\n return obj.choicesByUrl.getData();\n },\n onSetValue: function (obj, value) {\n obj.choicesByUrl.setData(value);\n },\n },\n \"hideIfChoicesEmpty:boolean\",\n {\n name: \"choicesVisibleIf:condition\",\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n {\n name: \"choicesEnableIf:condition\",\n dependsOn: \"choicesFromQuestion\",\n visibleIf: function (obj) {\n return !obj.choicesFromQuestion;\n },\n },\n \"hasOther:boolean\",\n \"hasNone:boolean\",\n {\n name: \"otherPlaceHolder\",\n serializationProperty: \"locOtherPlaceHolder\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"noneText\",\n serializationProperty: \"locNoneText\",\n dependsOn: \"hasNone\",\n visibleIf: function (obj) {\n return obj.hasNone;\n },\n },\n {\n name: \"otherText\",\n serializationProperty: \"locOtherText\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"otherErrorText\",\n serializationProperty: \"locOtherErrorText\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"storeOthersAsComment\",\n default: \"default\",\n choices: [\"default\", true, false],\n visible: false,\n },\n], null, \"question\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkboxbase\", [\n {\n name: \"colCount:number\",\n default: 1,\n choices: [0, 1, 2, 3, 4, 5],\n layout: \"row\",\n },\n], null, \"selectbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_boolean.ts\":\n/*!*********************************!*\\\n !*** ./src/question_boolean.ts ***!\n \\*********************************/\n/*! exports provided: QuestionBooleanModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return QuestionBooleanModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n/**\n * A Model for a boolean question.\n */\nvar QuestionBooleanModel = /** @class */ (function (_super) {\n __extends(QuestionBooleanModel, _super);\n function QuestionBooleanModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"labelFalse\", _this, true);\n _this.createLocalizableString(\"labelTrue\", _this, true);\n _this.locLabelFalse.onGetTextCallback = function (text) {\n return !!text\n ? text\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"booleanUncheckedLabel\");\n };\n _this.locLabelTrue.onGetTextCallback = function (text) {\n return !!text\n ? text\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"booleanCheckedLabel\");\n };\n return _this;\n }\n QuestionBooleanModel.prototype.getType = function () {\n return \"boolean\";\n };\n QuestionBooleanModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"isIndeterminate\", {\n /**\n * Returns true if the question check will be rendered in indeterminate mode. value is empty.\n */\n get: function () {\n return this.isEmpty();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"hasTitle\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"checkedValue\", {\n /**\n * Get/set question value in 3 modes: indeterminate (value is empty), true (check is set) and false (check is unset).\n * @see valueTrue\n * @see valueFalse\n */\n get: function () {\n if (this.isEmpty())\n return null;\n return this.value == this.getValueTrue();\n },\n set: function (val) {\n if (this.isReadOnly) {\n return;\n }\n this.setCheckedValue(val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.setCheckedValue = function (val) {\n if (this.isValueEmpty(val)) {\n this.value = null;\n }\n else {\n this.value = val == true ? this.getValueTrue() : this.getValueFalse();\n }\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"defaultValue\", {\n /**\n * Set the default state of the check: \"indeterminate\" - default (value is empty/null), \"true\" - value equals valueTrue or true, \"false\" - value equals valueFalse or false.\n */\n get: function () {\n return this.getPropertyValue(\"defaultValue\");\n },\n set: function (val) {\n if (val === true)\n val = \"true\";\n if (val === false)\n val = \"false\";\n this.setPropertyValue(\"defaultValue\", val);\n this.updateValueWithDefaults();\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.getDefaultValue = function () {\n if (this.defaultValue == \"indeterminate\")\n return null;\n if (this.defaultValue === undefined)\n return null;\n return this.defaultValue == \"true\"\n ? this.getValueTrue()\n : this.getValueFalse();\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"locTitle\", {\n get: function () {\n return this.showTitle || this.isValueEmpty(this.locLabel.text)\n ? this.getLocalizableString(\"title\")\n : this.locLabel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locDisplayLabel\", {\n get: function () {\n if (this.locLabel.text)\n return this.locLabel;\n return this.showTitle ? this.locLabel : this.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"labelTrue\", {\n /**\n * Set this property, if you want to have a different label for state when check is set.\n */\n get: function () {\n return this.getLocalizableStringText(\"labelTrue\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"labelTrue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelTrue\", {\n get: function () {\n return this.getLocalizableString(\"labelTrue\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"labelFalse\", {\n /**\n * Set this property, if you want to have a different label for state when check is unset.\n */\n get: function () {\n return this.getLocalizableStringText(\"labelFalse\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"labelFalse\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelFalse\", {\n get: function () {\n return this.getLocalizableString(\"labelFalse\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionBooleanModel.prototype.getValueTrue = function () {\n return this.valueTrue ? this.valueTrue : true;\n };\n QuestionBooleanModel.prototype.getValueFalse = function () {\n return this.valueFalse ? this.valueFalse : false;\n };\n QuestionBooleanModel.prototype.setDefaultValue = function () {\n if (this.defaultValue == \"true\")\n this.setCheckedValue(true);\n if (this.defaultValue == \"false\")\n this.setCheckedValue(false);\n if (this.defaultValue == \"indeterminate\")\n this.setCheckedValue(null);\n };\n QuestionBooleanModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (value == this.getValueTrue())\n return this.locLabelTrue.textOrHtml;\n return this.locLabelFalse.textOrHtml;\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: true })\n ], QuestionBooleanModel.prototype, \"label\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"valueTrue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionBooleanModel.prototype, \"valueFalse\", void 0);\n return QuestionBooleanModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"boolean\", [\n { name: \"label:text\", serializationProperty: \"locLabel\" },\n {\n name: \"labelTrue:text\",\n serializationProperty: \"locLabelTrue\",\n },\n {\n name: \"labelFalse:text\",\n serializationProperty: \"locLabelFalse\",\n },\n \"showTitle:boolean\",\n \"valueTrue\",\n \"valueFalse\",\n { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n return new QuestionBooleanModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"boolean\", function (name) {\n return new QuestionBooleanModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_buttongroup.ts\":\n/*!*************************************!*\\\n !*** ./src/question_buttongroup.ts ***!\n \\*************************************/\n/*! exports provided: ButtonGroupItemValue, QuestionButtonGroupModel, ButtonGroupItemModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return ButtonGroupItemValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionButtonGroupModel\", function() { return QuestionButtonGroupModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return ButtonGroupItemModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar ButtonGroupItemValue = /** @class */ (function (_super) {\n __extends(ButtonGroupItemValue, _super);\n function ButtonGroupItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"buttongroupitemvalue\"; }\n var _this = _super.call(this, value, text, typeName) || this;\n _this.typeName = typeName;\n return _this;\n }\n ButtonGroupItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"buttongroupitemvalue\";\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"iconSize\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ButtonGroupItemValue.prototype, \"showCaption\", void 0);\n return ButtonGroupItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"]));\n\n/**\n * A Model for a button group question.\n */\nvar QuestionButtonGroupModel = /** @class */ (function (_super) {\n __extends(QuestionButtonGroupModel, _super);\n function QuestionButtonGroupModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionButtonGroupModel.prototype.getType = function () {\n return \"buttongroup\";\n };\n QuestionButtonGroupModel.prototype.getItemValueType = function () {\n return \"buttongroupitemvalue\";\n };\n QuestionButtonGroupModel.prototype.supportOther = function () {\n return false;\n };\n return QuestionButtonGroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroup\", [\n {\n name: \"choices:buttongroupitemvalue[]\",\n },\n], function () {\n return new QuestionButtonGroupModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"buttongroupitemvalue\", [\n { name: \"showCaption:boolean\", default: true },\n { name: \"iconName:text\" },\n { name: \"iconSize:number\" },\n], function (value) { return new ButtonGroupItemValue(value); }, \"itemvalue\");\n// QuestionFactory.Instance.registerQuestion(\"buttongroup\", name => {\n// var q = new QuestionButtonGroupModel(name);\n// q.choices = QuestionFactory.DefaultChoices;\n// return q;\n// });\nvar ButtonGroupItemModel = /** @class */ (function () {\n function ButtonGroupItemModel(question, item, index) {\n this.question = question;\n this.item = item;\n this.index = index;\n }\n Object.defineProperty(ButtonGroupItemModel.prototype, \"value\", {\n get: function () {\n return this.item.value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"iconName\", {\n get: function () {\n return this.item.iconName;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"iconSize\", {\n get: function () {\n return this.item.iconSize || 24;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"caption\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"showCaption\", {\n get: function () {\n return this.item.showCaption || this.item.showCaption === undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"isRequired\", {\n get: function () {\n return this.question.isRequired;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"selected\", {\n get: function () {\n return this.question.isItemSelected(this.item);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"readOnly\", {\n get: function () {\n return !this.item.isEnabled || this.question.isReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"name\", {\n get: function () {\n return this.question.name + \"_\" + this.question.id;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"id\", {\n get: function () {\n return this.question.inputId + \"_\" + this.index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"hasErrors\", {\n get: function () {\n return this.question.errors.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"describedBy\", {\n get: function () {\n return this.question.errors.length > 0\n ? this.question.id + \"_errors\"\n : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"labelClass\", {\n get: function () {\n var css = this.question.cssClasses.item;\n if (this.selected) {\n css += \" \" + this.question.cssClasses.itemSelected;\n }\n if (this.readOnly) {\n css += \" \" + this.question.cssClasses.itemDisabled;\n }\n return css;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ButtonGroupItemModel.prototype, \"css\", {\n get: function () {\n return {\n label: this.labelClass,\n icon: this.question.cssClasses.itemIcon,\n control: this.question.cssClasses.itemControl,\n caption: this.question.cssClasses.itemCaption,\n decorator: this.question.cssClasses.itemDecorator,\n };\n },\n enumerable: false,\n configurable: true\n });\n ButtonGroupItemModel.prototype.onChange = function () {\n this.question.renderedValue = this.item.value;\n };\n return ButtonGroupItemModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/question_checkbox.ts\":\n/*!**********************************!*\\\n !*** ./src/question_checkbox.ts ***!\n \\**********************************/\n/*! exports provided: QuestionCheckboxModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return QuestionCheckboxModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n/**\n * A Model for a checkbox question\n */\nvar QuestionCheckboxModel = /** @class */ (function (_super) {\n __extends(QuestionCheckboxModel, _super);\n function QuestionCheckboxModel(name) {\n var _this = _super.call(this, name) || this;\n _this.selectAllItemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"](\"selectall\");\n _this.invisibleOldValues = {};\n _this.isChangingValueOnClearIncorrect = false;\n var selectAllItemText = _this.createLocalizableString(\"selectAllText\", _this, true);\n selectAllItemText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"selectAllItemText\");\n };\n _this.selectAllItem.locOwner = _this;\n _this.selectAllItem.setLocText(selectAllItemText);\n _this.registerFunctionOnPropertiesValueChanged([\"hasSelectAll\", \"selectAllText\"], function () {\n _this.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionCheckboxModel.prototype, \"ariaRole\", {\n get: function () {\n return \"group\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxModel.prototype.getType = function () {\n return \"checkbox\";\n };\n QuestionCheckboxModel.prototype.onCreating = function () {\n _super.prototype.onCreating.call(this);\n this.createNewArray(\"renderedValue\");\n this.createNewArray(\"value\");\n };\n QuestionCheckboxModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllItem\", {\n /**\n * Returns the select all item. By using this property, you may change programmatically it's value and text.\n * @see hasSelectAll\n */\n get: function () {\n return this.selectAllItemValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllText\", {\n /**\n * Use this property to set the different text for Select All item.\n */\n get: function () {\n return this.getLocalizableStringText(\"selectAllText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"selectAllItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"selectAllText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"locSelectAllText\", {\n get: function () {\n return this.getLocalizableString(\"selectAllText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"hasSelectAll\", {\n /**\n * Set this property to true, to show the \"Select All\" item on the top. If end-user checks this item, then all items are checked.\n */\n get: function () {\n return this.getPropertyValue(\"hasSelectAll\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hasSelectAll\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"isAllSelected\", {\n /**\n * Returns true if all items are selected\n * @see toggleSelectAll\n */\n get: function () {\n var val = this.value;\n if (!val || !Array.isArray(val))\n return false;\n if (this.isItemSelected(this.noneItem))\n return false;\n var allItemCount = this.visibleChoices.length;\n if (this.hasOther)\n allItemCount--;\n if (this.hasNone)\n allItemCount--;\n if (this.hasSelectAll)\n allItemCount--;\n var selectedCount = val.length;\n if (this.isItemSelected(this.otherItem))\n selectedCount--;\n return selectedCount === allItemCount;\n },\n set: function (val) {\n if (val) {\n this.selectAll();\n }\n else {\n this.clearValue();\n }\n },\n enumerable: false,\n configurable: true\n });\n /**\n * It will select all items, except other and none. If all items have been already selected then it will clear the value\n * @see isAllSelected\n * @see selectAll\n */\n QuestionCheckboxModel.prototype.toggleSelectAll = function () {\n this.isAllSelected = !this.isAllSelected;\n };\n /**\n * Select all items, except other and none.\n */\n QuestionCheckboxModel.prototype.selectAll = function () {\n var val = [];\n for (var i = 0; i < this.visibleChoices.length; i++) {\n var item = this.visibleChoices[i];\n if (item === this.noneItem ||\n item === this.otherItem ||\n item === this.selectAllItem)\n continue;\n val.push(item.value);\n }\n this.value = val;\n };\n /**\n * Returns true if item is checked\n * @param item checkbox item value\n */\n QuestionCheckboxModel.prototype.isItemSelected = function (item) {\n if (item === this.selectAllItem)\n return this.isAllSelected;\n var val = this.renderedValue;\n if (!val || !Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"maxSelectedChoices\", {\n /**\n * Set this property different to 0 to limit the number of selected choices in the checkbox.\n */\n get: function () {\n return this.getPropertyValue(\"maxSelectedChoices\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n this.setPropertyValue(\"maxSelectedChoices\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxModel.prototype.onEnableItemCallBack = function (item) {\n if (!this.shouldCheckMaxSelectedChoices())\n return true;\n return this.isItemSelected(item);\n };\n QuestionCheckboxModel.prototype.onAfterRunItemsEnableCondition = function () {\n if (this.maxSelectedChoices < 1)\n return;\n if (this.hasSelectAll) {\n this.selectAllItem.setIsEnabled(this.maxSelectedChoices >= this.activeChoices.length);\n }\n if (this.hasOther) {\n this.otherItem.setIsEnabled(!this.shouldCheckMaxSelectedChoices() || this.isOtherSelected);\n }\n };\n QuestionCheckboxModel.prototype.shouldCheckMaxSelectedChoices = function () {\n if (this.maxSelectedChoices < 1)\n return false;\n var val = this.value;\n var len = !Array.isArray(val) ? 0 : val.length;\n return len >= this.maxSelectedChoices;\n };\n QuestionCheckboxModel.prototype.getItemClass = function (item) {\n var val = this.value; //trigger dependencies from koValue for knockout\n var itemClass = _super.prototype.getItemClass.call(this, item);\n var isSelectAll = item === this.selectAllItem;\n if (isSelectAll && !!this.cssClasses.itemSelectAll)\n itemClass += \" \" + this.cssClasses.itemSelectAll;\n return itemClass;\n };\n QuestionCheckboxModel.prototype.setNewValue = function (newValue) {\n if (!this.isChangingValueOnClearIncorrect) {\n this.invisibleOldValues = [];\n }\n newValue = this.valueFromData(newValue);\n var value = this.value;\n if (!newValue)\n newValue = [];\n if (!value)\n value = [];\n if (_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(value, newValue))\n return;\n if (this.hasNone) {\n var prevNoneIndex = this.noneIndexInArray(value);\n var newNoneIndex = this.noneIndexInArray(newValue);\n if (prevNoneIndex > -1) {\n if (newNoneIndex > -1 && newValue.length > 1) {\n newValue.splice(newNoneIndex, 1);\n }\n }\n else {\n if (newNoneIndex > -1) {\n newValue.splice(0, newValue.length);\n newValue.push(this.noneItem.value);\n }\n }\n }\n _super.prototype.setNewValue.call(this, this.rendredValueToData(newValue));\n };\n QuestionCheckboxModel.prototype.getIsMultipleValue = function () {\n return true;\n };\n QuestionCheckboxModel.prototype.getCommentFromValue = function (newValue) {\n var ind = this.getFirstUnknownIndex(newValue);\n if (ind < 0)\n return \"\";\n return newValue[ind];\n };\n QuestionCheckboxModel.prototype.setOtherValueIntoValue = function (newValue) {\n var ind = this.getFirstUnknownIndex(newValue);\n if (ind < 0)\n return newValue;\n newValue.splice(ind, 1, this.otherItem.value);\n return newValue;\n };\n QuestionCheckboxModel.prototype.getFirstUnknownIndex = function (newValue) {\n if (!Array.isArray(newValue))\n return -1;\n for (var i = 0; i < newValue.length; i++) {\n if (this.hasUnknownValue(newValue[i]))\n return i;\n }\n return -1;\n };\n QuestionCheckboxModel.prototype.noneIndexInArray = function (val) {\n if (!val || !Array.isArray(val))\n return -1;\n var noneValue = this.noneItem.value;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == noneValue)\n return i;\n }\n return -1;\n };\n QuestionCheckboxModel.prototype.canUseFilteredChoices = function () {\n return !this.hasSelectAll && _super.prototype.canUseFilteredChoices.call(this);\n };\n QuestionCheckboxModel.prototype.supportSelectAll = function () {\n return true;\n };\n QuestionCheckboxModel.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (this.supportSelectAll() && (isAddAll || this.hasSelectAll)) {\n items.unshift(this.selectAllItem);\n }\n _super.prototype.addToVisibleChoices.call(this, items, isAddAll);\n };\n QuestionCheckboxModel.prototype.isBuiltInChoice = function (item, question) {\n return (item === question.selectAllItem ||\n _super.prototype.isBuiltInChoice.call(this, item, question));\n };\n /**\n * For internal use in SurveyJS Creator V2.\n */\n QuestionCheckboxModel.prototype.isItemInList = function (item) {\n if (item == this.selectAllItem)\n return this.hasSelectAll;\n return _super.prototype.isItemInList.call(this, item);\n };\n QuestionCheckboxModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!Array.isArray(value))\n return _super.prototype.getDisplayValueCore.call(this, keysAsText, value);\n var items = this.visibleChoices;\n var str = \"\";\n for (var i = 0; i < value.length; i++) {\n var valStr = this.getChoicesDisplayValue(items, value[i]);\n if (valStr) {\n if (str)\n str += \", \";\n str += valStr;\n }\n }\n return str;\n };\n QuestionCheckboxModel.prototype.clearIncorrectValuesCore = function () {\n this.clearIncorrectAndDisabledValues(false);\n };\n QuestionCheckboxModel.prototype.clearDisabledValuesCore = function () {\n this.clearIncorrectAndDisabledValues(true);\n };\n QuestionCheckboxModel.prototype.clearIncorrectAndDisabledValues = function (clearDisabled) {\n var val = this.value;\n var hasChanged = false;\n var restoredValues = this.restoreValuesFromInvisible();\n if (!val && restoredValues.length == 0)\n return;\n if (!Array.isArray(val) || val.length == 0) {\n this.isChangingValueOnClearIncorrect = true;\n if (!clearDisabled) {\n if (this.hasComment) {\n this.value = null;\n }\n else {\n this.clearValue();\n }\n }\n this.isChangingValueOnClearIncorrect = false;\n if (restoredValues.length == 0)\n return;\n val = [];\n }\n var newValue = [];\n for (var i = 0; i < val.length; i++) {\n var isUnkown = this.canClearValueAnUnknow(val[i]);\n if ((!clearDisabled && !isUnkown) ||\n (clearDisabled && !this.isValueDisabled(val[i]))) {\n newValue.push(val[i]);\n }\n else {\n hasChanged = true;\n if (isUnkown) {\n this.invisibleOldValues[val[i]] = true;\n }\n }\n }\n for (var i = 0; i < restoredValues.length; i++) {\n newValue.push(restoredValues[i]);\n hasChanged = true;\n }\n if (!hasChanged)\n return;\n this.isChangingValueOnClearIncorrect = true;\n if (newValue.length == 0) {\n this.clearValue();\n }\n else {\n this.value = newValue;\n }\n this.isChangingValueOnClearIncorrect = false;\n };\n QuestionCheckboxModel.prototype.restoreValuesFromInvisible = function () {\n var res = [];\n var visItems = this.visibleChoices;\n for (var i = 0; i < visItems.length; i++) {\n var val = visItems[i].value;\n if (this.invisibleOldValues[val]) {\n res.push(val);\n delete this.invisibleOldValues[val];\n }\n }\n return res;\n };\n QuestionCheckboxModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n var json = _super.prototype.getConditionJson.call(this);\n if (operator == \"contains\" || operator == \"notcontains\") {\n json[\"type\"] = \"radiogroup\";\n }\n return json;\n };\n QuestionCheckboxModel.prototype.isAnswerCorrect = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isArrayContainsEqual(this.value, this.correctAnswer);\n };\n QuestionCheckboxModel.prototype.setDefaultValueWithOthers = function () {\n this.value = this.renderedValueFromDataCore(this.defaultValue);\n };\n QuestionCheckboxModel.prototype.getHasOther = function (val) {\n if (!val || !Array.isArray(val))\n return false;\n return val.indexOf(this.otherItem.value) >= 0;\n };\n QuestionCheckboxModel.prototype.valueFromData = function (val) {\n if (!val)\n return val;\n if (!Array.isArray(val))\n return [_super.prototype.valueFromData.call(this, val)];\n var value = [];\n for (var i = 0; i < val.length; i++) {\n var choiceitem = _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.activeChoices, val[i]);\n if (!!choiceitem) {\n value.push(choiceitem.value);\n }\n else {\n value.push(val[i]);\n }\n }\n return value;\n };\n QuestionCheckboxModel.prototype.renderedValueFromDataCore = function (val) {\n if (!val || !Array.isArray(val))\n val = [];\n if (!this.hasActiveChoices)\n return val;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == this.otherItem.value)\n return val;\n if (this.hasUnknownValue(val[i], true, false)) {\n this.comment = val[i];\n var newVal = val.slice();\n newVal[i] = this.otherItem.value;\n return newVal;\n }\n }\n return val;\n };\n QuestionCheckboxModel.prototype.rendredValueToDataCore = function (val) {\n if (!val || !val.length)\n return val;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == this.otherItem.value) {\n if (this.getQuestionComment()) {\n var newVal = val.slice();\n newVal[i] = this.getQuestionComment();\n return newVal;\n }\n }\n }\n return val;\n };\n return QuestionCheckboxModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"checkbox\", [\n \"hasSelectAll:boolean\",\n { name: \"maxSelectedChoices:number\", default: 0 },\n { name: \"selectAllText\", serializationProperty: \"locSelectAllText\" },\n], function () {\n return new QuestionCheckboxModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"checkbox\", function (name) {\n var q = new QuestionCheckboxModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_comment.ts\":\n/*!*********************************!*\\\n !*** ./src/question_comment.ts ***!\n \\*********************************/\n/*! exports provided: QuestionCommentModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return QuestionCommentModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n/**\n * A Model for a comment question\n */\nvar QuestionCommentModel = /** @class */ (function (_super) {\n __extends(QuestionCommentModel, _super);\n function QuestionCommentModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"placeHolder\", _this);\n return _this;\n }\n QuestionCommentModel.prototype.isTextValue = function () {\n return true;\n };\n Object.defineProperty(QuestionCommentModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCommentModel.prototype.getMaxLength = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionCommentModel.prototype, \"placeHolder\", {\n /**\n * Use this property to set the input place holder.\n */\n get: function () {\n return this.getLocalizableStringText(\"placeHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"placeHolder\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"rows\", {\n /**\n * The html rows attribute.\n */\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n set: function (val) {\n this.setPropertyValue(\"rows\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"cols\", {\n /**\n * The html cols attribute.\n */\n get: function () {\n return this.getPropertyValue(\"cols\");\n },\n set: function (val) {\n this.setPropertyValue(\"cols\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCommentModel.prototype.getType = function () {\n return \"comment\";\n };\n QuestionCommentModel.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n Object.defineProperty(QuestionCommentModel.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the question updates it's value.\n *\n * The following options are available:\n * - `default` - get the value from survey.textUpdateMode\n * - `onBlur` - the value is updated after an input loses the focus.\n * - `onTyping` - update the value of text questions, \"text\" and \"comment\", on every key press.\n *\n * Note, that setting to \"onTyping\" may lead to a performance degradation, in case you have many expressions in the survey.\n * @see survey.textUpdateMode\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n if (this.textUpdateMode == \"default\")\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\n configurable: true\n });\n return QuestionCommentModel;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"comment\", [\n { name: \"maxLength:number\", default: -1 },\n { name: \"cols:number\", default: 50 },\n { name: \"rows:number\", default: 4 },\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n {\n name: \"textUpdateMode\",\n default: \"default\",\n choices: [\"default\", \"onBlur\", \"onTyping\"],\n },\n], function () {\n return new QuestionCommentModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"comment\", function (name) {\n return new QuestionCommentModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_custom.ts\":\n/*!********************************!*\\\n !*** ./src/question_custom.ts ***!\n \\********************************/\n/*! exports provided: ComponentQuestionJSON, ComponentCollection, QuestionCustomModelBase, QuestionCustomModel, QuestionCompositeModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return ComponentQuestionJSON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return ComponentCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModelBase\", function() { return QuestionCustomModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return QuestionCustomModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return QuestionCompositeModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar ComponentQuestionJSON = /** @class */ (function () {\n function ComponentQuestionJSON(name, json) {\n this.name = name;\n this.json = json;\n var self = this;\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(name, [], function (json) {\n return ComponentCollection.Instance.createQuestion(!!json ? json.name : \"\", self);\n }, \"question\");\n this.onInit();\n }\n ComponentQuestionJSON.prototype.onInit = function () {\n if (!this.json.onInit)\n return;\n this.json.onInit();\n };\n ComponentQuestionJSON.prototype.onCreated = function (question) {\n if (!this.json.onCreated)\n return;\n this.json.onCreated(question);\n };\n ComponentQuestionJSON.prototype.onLoaded = function (question) {\n if (!this.json.onLoaded)\n return;\n this.json.onLoaded(question);\n };\n ComponentQuestionJSON.prototype.onAfterRender = function (question, htmlElement) {\n if (!this.json.onAfterRender)\n return;\n this.json.onAfterRender(question, htmlElement);\n };\n ComponentQuestionJSON.prototype.onAfterRenderContentElement = function (question, element, htmlElement) {\n if (!this.json.onAfterRenderContentElement)\n return;\n this.json.onAfterRenderContentElement(question, element, htmlElement);\n };\n ComponentQuestionJSON.prototype.onPropertyChanged = function (question, propertyName, newValue) {\n if (!this.json.onPropertyChanged)\n return;\n this.json.onPropertyChanged(question, propertyName, newValue);\n };\n ComponentQuestionJSON.prototype.onValueChanged = function (question, name, newValue) {\n if (!this.json.onValueChanged)\n return;\n this.json.onValueChanged(question, name, newValue);\n };\n ComponentQuestionJSON.prototype.onItemValuePropertyChanged = function (question, item, propertyName, name, newValue) {\n if (!this.json.onItemValuePropertyChanged)\n return;\n this.json.onItemValuePropertyChanged(question, {\n obj: item,\n propertyName: propertyName,\n name: name,\n newValue: newValue,\n });\n };\n Object.defineProperty(ComponentQuestionJSON.prototype, \"isComposite\", {\n get: function () {\n return !!this.json.elementsJSON || !!this.json.createElements;\n },\n enumerable: false,\n configurable: true\n });\n return ComponentQuestionJSON;\n}());\n\nvar ComponentCollection = /** @class */ (function () {\n function ComponentCollection() {\n this.customQuestionValues = [];\n }\n ComponentCollection.prototype.add = function (json) {\n if (!json)\n return;\n var name = json.name;\n if (!name) {\n throw \"Attribute name is missed\";\n }\n name = name.toLowerCase();\n if (!!this.getCustomQuestionByName(name)) {\n throw \"There is already registered custom question with name '\" +\n name +\n \"'\";\n }\n if (!!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(name)) {\n throw \"There is already class with name '\" + name + \"'\";\n }\n var customQuestion = new ComponentQuestionJSON(name, json);\n if (!!this.onAddingJson)\n this.onAddingJson(name, customQuestion.isComposite);\n this.customQuestionValues.push(customQuestion);\n };\n Object.defineProperty(ComponentCollection.prototype, \"items\", {\n get: function () {\n return this.customQuestionValues;\n },\n enumerable: false,\n configurable: true\n });\n ComponentCollection.prototype.getCustomQuestionByName = function (name) {\n for (var i = 0; i < this.customQuestionValues.length; i++) {\n if (this.customQuestionValues[i].name == name)\n return this.customQuestionValues[i];\n }\n return null;\n };\n ComponentCollection.prototype.clear = function () {\n for (var i = 0; i < this.customQuestionValues.length; i++) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].removeClass(this.customQuestionValues[i].name);\n }\n this.customQuestionValues = [];\n };\n ComponentCollection.prototype.createQuestion = function (name, questionJSON) {\n if (!!questionJSON.isComposite)\n return this.createCompositeModel(name, questionJSON);\n return this.createCustomModel(name, questionJSON);\n };\n ComponentCollection.prototype.createCompositeModel = function (name, questionJSON) {\n if (!!this.onCreateComposite)\n return this.onCreateComposite(name, questionJSON);\n return new QuestionCompositeModel(name, questionJSON);\n };\n ComponentCollection.prototype.createCustomModel = function (name, questionJSON) {\n if (!!this.onCreateCustom)\n return this.onCreateCustom(name, questionJSON);\n return new QuestionCustomModel(name, questionJSON);\n };\n ComponentCollection.Instance = new ComponentCollection();\n return ComponentCollection;\n}());\n\nvar QuestionCustomModelBase = /** @class */ (function (_super) {\n __extends(QuestionCustomModelBase, _super);\n function QuestionCustomModelBase(name, customQuestion) {\n var _this = _super.call(this, name) || this;\n _this.customQuestion = customQuestion;\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"CustomPropertiesCollection\"].createProperties(_this);\n _base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = true;\n _this.createWrapper();\n _base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = false;\n if (!!_this.customQuestion) {\n _this.customQuestion.onCreated(_this);\n }\n return _this;\n }\n QuestionCustomModelBase.prototype.getType = function () {\n return !!this.customQuestion ? this.customQuestion.name : \"custom\";\n };\n QuestionCustomModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (!!this.getElement()) {\n this.getElement().locStrsChanged();\n }\n };\n QuestionCustomModelBase.prototype.createWrapper = function () { };\n QuestionCustomModelBase.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (!!this.customQuestion && !this.isLoadingFromJson) {\n this.customQuestion.onPropertyChanged(this, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n if (!!this.customQuestion && !this.isLoadingFromJson) {\n this.customQuestion.onItemValuePropertyChanged(this, item, item.ownerPropertyName, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.onFirstRendering = function () {\n var el = this.getElement();\n if (!!el) {\n el.onFirstRendering();\n }\n _super.prototype.onFirstRendering.call(this);\n };\n QuestionCustomModelBase.prototype.initElement = function (el) {\n if (!el)\n return;\n el.setSurveyImpl(this);\n el.disableDesignActions = true;\n };\n QuestionCustomModelBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.initElement(this.getElement());\n };\n QuestionCustomModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n if (!!this.getElement()) {\n this.getElement().onSurveyLoad();\n this.customQuestion.onLoaded(this);\n }\n };\n QuestionCustomModelBase.prototype.afterRenderQuestionElement = function (el) {\n //Do nothing\n };\n QuestionCustomModelBase.prototype.afterRender = function (el) {\n _super.prototype.afterRender.call(this, el);\n if (!!this.customQuestion) {\n this.customQuestion.onAfterRender(this, el);\n }\n };\n QuestionCustomModelBase.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.updateElementCss();\n };\n QuestionCustomModelBase.prototype.setNewValue = function (newValue) {\n _super.prototype.setNewValue.call(this, newValue);\n this.updateElementCss();\n };\n //ISurveyImpl\n QuestionCustomModelBase.prototype.getSurveyData = function () {\n return this;\n };\n // getSurvey(): ISurvey {\n // return this.survey;\n // }\n QuestionCustomModelBase.prototype.getTextProcessor = function () {\n return this.textProcessor;\n };\n //ISurveyData\n QuestionCustomModelBase.prototype.getValue = function (name) {\n return this.value;\n };\n QuestionCustomModelBase.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n if (!this.data)\n return;\n var newName = this.convertDataName(name);\n this.data.setValue(newName, this.convertDataValue(name, newValue), locNotification, allowNotifyValueChanged);\n this.updateIsAnswered();\n this.updateElementCss();\n if (!!this.customQuestion) {\n this.customQuestion.onValueChanged(this, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.convertDataName = function (name) {\n return this.getValueName();\n };\n QuestionCustomModelBase.prototype.convertDataValue = function (name, newValue) {\n return newValue;\n };\n QuestionCustomModelBase.prototype.getVariable = function (name) {\n return !!this.data ? this.data.getVariable(name) : null;\n };\n QuestionCustomModelBase.prototype.setVariable = function (name, newValue) {\n if (!this.data)\n return;\n this.data.setVariable(name, newValue);\n };\n QuestionCustomModelBase.prototype.getComment = function (name) {\n return !!this.data ? this.data.getComment(this.getValueName()) : \"\";\n };\n QuestionCustomModelBase.prototype.setComment = function (name, newValue, locNotification) {\n if (!this.data)\n return;\n this.data.setComment(this.getValueName(), newValue, locNotification);\n };\n QuestionCustomModelBase.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : {};\n };\n QuestionCustomModelBase.prototype.getFilteredValues = function () {\n return !!this.data ? this.data.getFilteredValues() : {};\n };\n QuestionCustomModelBase.prototype.getFilteredProperties = function () {\n return !!this.data ? this.data.getFilteredProperties() : {};\n };\n //IPanel\n QuestionCustomModelBase.prototype.addElement = function (element, index) { };\n QuestionCustomModelBase.prototype.removeElement = function (element) {\n return false;\n };\n QuestionCustomModelBase.prototype.getQuestionTitleLocation = function () {\n return \"left\";\n };\n QuestionCustomModelBase.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n QuestionCustomModelBase.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n QuestionCustomModelBase.prototype.elementWidthChanged = function (el) { };\n Object.defineProperty(QuestionCustomModelBase.prototype, \"elements\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n QuestionCustomModelBase.prototype.indexOf = function (el) {\n return -1;\n };\n QuestionCustomModelBase.prototype.ensureRowsVisibility = function () {\n // do nothing\n };\n return QuestionCustomModelBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\nvar QuestionCustomModel = /** @class */ (function (_super) {\n __extends(QuestionCustomModel, _super);\n function QuestionCustomModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionCustomModel.prototype.getTemplate = function () {\n return \"custom\";\n };\n QuestionCustomModel.prototype.createWrapper = function () {\n this.questionWrapper = this.createQuestion();\n };\n QuestionCustomModel.prototype.getElement = function () {\n return this.contentQuestion;\n };\n QuestionCustomModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (!!this.contentQuestion) {\n this.contentQuestion.onAnyValueChanged(name);\n }\n };\n QuestionCustomModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n if (!this.contentQuestion)\n return false;\n var res = this.contentQuestion.hasErrors(fireCallback, rec);\n this.errors = [];\n for (var i = 0; i < this.contentQuestion.errors.length; i++) {\n this.errors.push(this.contentQuestion.errors[i]);\n }\n if (!res) {\n res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n }\n this.updateElementCss();\n return res;\n };\n QuestionCustomModel.prototype.focus = function (onError) {\n if (onError === void 0) { onError = false; }\n if (!!this.contentQuestion) {\n this.contentQuestion.focus(onError);\n }\n else {\n _super.prototype.focus.call(this, onError);\n }\n };\n Object.defineProperty(QuestionCustomModel.prototype, \"contentQuestion\", {\n get: function () {\n return this.questionWrapper;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCustomModel.prototype.createQuestion = function () {\n var json = this.customQuestion.json;\n var res = null;\n if (!!json.questionJSON) {\n var qType = json.questionJSON.type;\n if (!qType || !_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].findClass(qType))\n throw \"type attribute in questionJSON is empty or incorrect\";\n res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(qType);\n this.initElement(res);\n res.fromJSON(json.questionJSON);\n }\n else {\n if (!!json.createQuestion) {\n res = json.createQuestion();\n this.initElement(res);\n }\n }\n if (!!res && !res.name) {\n res.name = \"question\";\n }\n return res;\n };\n QuestionCustomModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n if (!this.contentQuestion)\n return;\n if (this.isEmpty() && !this.contentQuestion.isEmpty()) {\n this.value = this.contentQuestion.value;\n }\n };\n QuestionCustomModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.contentQuestion) {\n this.contentQuestion.runCondition(values, properties);\n }\n };\n QuestionCustomModel.prototype.convertDataName = function (name) {\n if (!this.contentQuestion)\n return _super.prototype.convertDataName.call(this, name);\n var newName = name.replace(this.contentQuestion.getValueName(), this.getValueName());\n return newName.indexOf(this.getValueName()) == 0\n ? newName\n : _super.prototype.convertDataName.call(this, name);\n };\n QuestionCustomModel.prototype.convertDataValue = function (name, newValue) {\n return this.convertDataName(name) == _super.prototype.convertDataName.call(this, name)\n ? this.contentQuestion.value\n : newValue;\n };\n QuestionCustomModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n if (!!this.contentQuestion &&\n !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(this.contentQuestion.value, newValue)) {\n this.contentQuestion.value = newValue;\n }\n };\n QuestionCustomModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (!!this.contentQuestion) {\n this.contentQuestion.onSurveyValueChanged(newValue);\n }\n };\n QuestionCustomModel.prototype.getValueCore = function () {\n if (!!this.contentQuestion)\n return this.contentQuestion.value;\n return _super.prototype.getValueCore.call(this);\n };\n QuestionCustomModel.prototype.initElement = function (el) {\n var _this = this;\n _super.prototype.initElement.call(this, el);\n if (!!el) {\n el.parent = this;\n el.afterRenderQuestionCallback = function (question, element) {\n if (!!_this.customQuestion) {\n _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n }\n };\n }\n };\n QuestionCustomModel.prototype.updateElementCssCore = function (cssClasses) {\n if (!!this.contentQuestion) {\n cssClasses = this.contentQuestion.cssClasses;\n }\n _super.prototype.updateElementCssCore.call(this, cssClasses);\n };\n QuestionCustomModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n return !!this.contentQuestion\n ? this.contentQuestion.getDisplayValue(keyAsText, value)\n : _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n };\n return QuestionCustomModel;\n}(QuestionCustomModelBase));\n\nvar QuestionCompositeTextProcessor = /** @class */ (function (_super) {\n __extends(QuestionCompositeTextProcessor, _super);\n function QuestionCompositeTextProcessor(composite, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.composite = composite;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.composite.survey;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCompositeTextProcessor.prototype, \"panel\", {\n get: function () {\n return this.composite.contentPanel;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionCompositeTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__[\"QuestionTextProcessor\"]));\nvar QuestionCompositeModel = /** @class */ (function (_super) {\n __extends(QuestionCompositeModel, _super);\n function QuestionCompositeModel(name, customQuestion) {\n var _this = _super.call(this, name, customQuestion) || this;\n _this.customQuestion = customQuestion;\n _this.settingNewValue = false;\n _this.textProcessing = new QuestionCompositeTextProcessor(_this, QuestionCompositeModel.ItemVariableName);\n return _this;\n }\n QuestionCompositeModel.prototype.createWrapper = function () {\n this.panelWrapper = this.createPanel();\n };\n QuestionCompositeModel.prototype.getTemplate = function () {\n return \"composite\";\n };\n QuestionCompositeModel.prototype.getCssType = function () {\n return \"composite\";\n };\n QuestionCompositeModel.prototype.getElement = function () {\n return this.contentPanel;\n };\n Object.defineProperty(QuestionCompositeModel.prototype, \"contentPanel\", {\n get: function () {\n return this.panelWrapper;\n },\n enumerable: false,\n configurable: true\n });\n QuestionCompositeModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n if (!this.contentPanel)\n return res;\n return this.contentPanel.hasErrors(fireCallback, false, rec) || res;\n };\n QuestionCompositeModel.prototype.updateElementCss = function (reNew) {\n _super.prototype.updateElementCss.call(this, reNew);\n if (this.contentPanel) {\n this.contentPanel.updateElementCss(reNew);\n }\n };\n QuestionCompositeModel.prototype.getTextProcessor = function () {\n return this.textProcessing;\n };\n QuestionCompositeModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValueIfInvisible();\n }\n };\n QuestionCompositeModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onAnyValueChanged(name);\n }\n };\n QuestionCompositeModel.prototype.createPanel = function () {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n res.showQuestionNumbers = \"off\";\n res.renderWidth = \"100%\";\n var json = this.customQuestion.json;\n if (!!json.elementsJSON) {\n res.fromJSON({ elements: json.elementsJSON });\n }\n if (!!json.createElements) {\n json.createElements(res, this);\n }\n this.initElement(res);\n res.readOnly = this.isReadOnly;\n this.setAfterRenderCallbacks(res);\n return res;\n };\n QuestionCompositeModel.prototype.onReadOnlyChanged = function () {\n if (!!this.contentPanel) {\n this.contentPanel.readOnly = this.isReadOnly;\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n QuestionCompositeModel.prototype.onSurveyLoad = function () {\n if (!!this.contentPanel) {\n this.contentPanel.readOnly = this.isReadOnly;\n this.setIsContentElement(this.contentPanel);\n }\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionCompositeModel.prototype.setIsContentElement = function (panel) {\n panel.isContentElement = true;\n var elements = panel.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el.isPanel) {\n this.setIsContentElement(el);\n }\n else {\n el.isContentElement = true;\n }\n }\n };\n QuestionCompositeModel.prototype.setVisibleIndex = function (val) {\n var res = _super.prototype.setVisibleIndex.call(this, val);\n if (this.isVisible && !!this.contentPanel) {\n res += this.contentPanel.setVisibleIndex(val);\n }\n return res;\n };\n QuestionCompositeModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.contentPanel) {\n var oldComposite = values[QuestionCompositeModel.ItemVariableName];\n values[QuestionCompositeModel.ItemVariableName] = this.contentPanel.getValue();\n this.contentPanel.runCondition(values, properties);\n delete values[QuestionCompositeModel.ItemVariableName];\n if (!!oldComposite) {\n values[QuestionCompositeModel.ItemVariableName] = oldComposite;\n }\n }\n };\n QuestionCompositeModel.prototype.getValue = function (name) {\n var val = this.value;\n return !!val ? val[name] : null;\n };\n QuestionCompositeModel.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n if (this.settingNewValue)\n return;\n _super.prototype.setValue.call(this, name, newValue, locNotification, allowNotifyValueChanged);\n if (!this.contentPanel)\n return;\n var q = this.contentPanel.getQuestionByName(name);\n if (!!q && !_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isTwoValueEquals(newValue, q.value)) {\n this.settingNewValue = true;\n q.value = newValue;\n this.settingNewValue = false;\n }\n };\n QuestionCompositeModel.prototype.addConditionObjectsByContext = function (objects, context) {\n if (!this.contentPanel)\n return;\n var questions = this.contentPanel.questions;\n var prefixName = this.name;\n var prefixText = this.title;\n for (var i = 0; i < questions.length; i++) {\n objects.push({\n name: prefixName + \".\" + questions[i].name,\n text: prefixText + \".\" + questions[i].title,\n question: questions[i],\n });\n }\n };\n QuestionCompositeModel.prototype.convertDataValue = function (name, newValue) {\n var val = this.value;\n if (!val)\n val = {};\n if (this.isValueEmpty(newValue) && !this.isEditingSurveyElement(val)) {\n delete val[name];\n }\n else {\n val[name] = newValue;\n }\n return val;\n };\n QuestionCompositeModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.settingNewValue = true;\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n var key = questions[i].getValueName();\n questions[i].value = !!newValue ? newValue[key] : undefined;\n }\n this.settingNewValue = false;\n };\n QuestionCompositeModel.prototype.getDisplayValueCore = function (keyAsText, value) {\n return !!this.contentPanel\n ? this.contentPanel.getDisplayValue(keyAsText)\n : _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n };\n QuestionCompositeModel.prototype.setAfterRenderCallbacks = function (panel) {\n var _this = this;\n if (!panel || !this.customQuestion)\n return;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].afterRenderQuestionCallback = function (question, element) {\n _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n };\n }\n };\n QuestionCompositeModel.ItemVariableName = \"composite\";\n return QuestionCompositeModel;\n}(QuestionCustomModelBase));\n\n\n\n/***/ }),\n\n/***/ \"./src/question_dropdown.ts\":\n/*!**********************************!*\\\n !*** ./src/question_dropdown.ts ***!\n \\**********************************/\n/*! exports provided: QuestionDropdownModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return QuestionDropdownModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a dropdown question\n */\nvar QuestionDropdownModel = /** @class */ (function (_super) {\n __extends(QuestionDropdownModel, _super);\n function QuestionDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.minMaxChoices = [];\n _this.createLocalizableString(\"optionsCaption\", _this);\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"choicesMin\", \"choicesMax\", \"choicesStep\"], function () {\n self.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionDropdownModel.prototype, \"showOptionsCaption\", {\n /**\n * This flag controls whether to show options caption item ('Choose...').\n */\n get: function () {\n return this.getPropertyValue(\"showOptionsCaption\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showOptionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"optionsCaption\", {\n /**\n * Use this property to set the options caption different from the default value. The default value is taken from localization strings.\n */\n get: function () {\n return this.getLocalizableStringText(\"optionsCaption\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionDropdownModel.prototype.getType = function () {\n return \"dropdown\";\n };\n Object.defineProperty(QuestionDropdownModel.prototype, \"selectedItem\", {\n get: function () {\n if (this.isEmpty())\n return null;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: false,\n configurable: true\n });\n QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionDropdownModel.prototype.getChoices = function () {\n var items = _super.prototype.getChoices.call(this);\n if (this.choicesMax <= this.choicesMin)\n return items;\n var res = [];\n for (var i = 0; i < items.length; i++) {\n res.push(items[i]);\n }\n if (this.minMaxChoices.length === 0 ||\n this.minMaxChoices.length !==\n (this.choicesMax - this.choicesMin) / this.choicesStep + 1) {\n this.minMaxChoices = [];\n for (var i = this.choicesMin; i <= this.choicesMax; i += this.choicesStep) {\n this.minMaxChoices.push(new _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"](i));\n }\n }\n res = res.concat(this.minMaxChoices);\n return res;\n };\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMin\", {\n /**\n * Use this and choicesMax property to automatically add choices. For example choicesMin = 1 and choicesMax = 10 will generate ten additional choices from 1 to 10.\n * @see choicesMax\n * @see choicesStep\n */\n get: function () {\n return this.getPropertyValue(\"choicesMin\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"choicesMin\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMax\", {\n /**\n * Use this and choicesMax property to automatically add choices. For example choicesMin = 1 and choicesMax = 10 will generate ten additional choices from 1 to 10.\n * @see choicesMin\n * @see choicesStep\n */\n get: function () {\n return this.getPropertyValue(\"choicesMax\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"choicesMax\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesStep\", {\n /**\n * The default value is 1. It tells the value of the iterator between choicesMin and choicesMax properties.\n * If choicesMin = 10, choicesMax = 30 and choicesStep = 10 then you will have only three additional choices: [10, 20, 30].\n * @see choicesMin\n * @see choicesMax\n */\n get: function () {\n return this.getPropertyValue(\"choicesStep\", 1);\n },\n set: function (val) {\n if (val < 1)\n val = 1;\n this.setPropertyValue(\"choicesStep\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"autoComplete\", {\n /**\n * Dropdown auto complete\n */\n get: function () {\n return this.getPropertyValue(\"autoComplete\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n return QuestionDropdownModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionSelectBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"dropdown\", [\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n { name: \"showOptionsCaption:boolean\", default: true },\n { name: \"choicesMin:number\", default: 0 },\n { name: \"choicesMax:number\", default: 0 },\n { name: \"choicesStep:number\", default: 1, minValue: 1 },\n {\n name: \"autoComplete\",\n dataList: [\n \"name\",\n \"honorific-prefix\",\n \"given-name\",\n \"additional-name\",\n \"family-name\",\n \"honorific-suffix\",\n \"nickname\",\n \"organization-title\",\n \"username\",\n \"new-password\",\n \"current-password\",\n \"organization\",\n \"street-address\",\n \"address-line1\",\n \"address-line2\",\n \"address-line3\",\n \"address-level4\",\n \"address-level3\",\n \"address-level2\",\n \"address-level1\",\n \"country\",\n \"country-name\",\n \"postal-code\",\n \"cc-name\",\n \"cc-given-name\",\n \"cc-additional-name\",\n \"cc-family-name\",\n \"cc-number\",\n \"cc-exp\",\n \"cc-exp-month\",\n \"cc-exp-year\",\n \"cc-csc\",\n \"cc-type\",\n \"transaction-currency\",\n \"transaction-amount\",\n \"language\",\n \"bday\",\n \"bday-day\",\n \"bday-month\",\n \"bday-year\",\n \"sex\",\n \"url\",\n \"photo\",\n \"tel\",\n \"tel-country-code\",\n \"tel-national\",\n \"tel-area-code\",\n \"tel-local\",\n \"tel-local-prefix\",\n \"tel-local-suffix\",\n \"tel-extension\",\n \"email\",\n \"impp\",\n ],\n },\n], function () {\n return new QuestionDropdownModel(\"\");\n}, \"selectbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"dropdown\", function (name) {\n var q = new QuestionDropdownModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_empty.ts\":\n/*!*******************************!*\\\n !*** ./src/question_empty.ts ***!\n \\*******************************/\n/*! exports provided: QuestionEmptyModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return QuestionEmptyModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for an question that renders empty \"div\" tag. It used as a base class for some custom widgets\n */\nvar QuestionEmptyModel = /** @class */ (function (_super) {\n __extends(QuestionEmptyModel, _super);\n function QuestionEmptyModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionEmptyModel.prototype.getType = function () {\n return \"empty\";\n };\n return QuestionEmptyModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"empty\", [], function () {\n return new QuestionEmptyModel(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/question_expression.ts\":\n/*!************************************!*\\\n !*** ./src/question_expression.ts ***!\n \\************************************/\n/*! exports provided: QuestionExpressionModel, getCurrecyCodes */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return QuestionExpressionModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCurrecyCodes\", function() { return getCurrecyCodes; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for expression question. It is a read-only question. It calculates value based on epxression property.\n */\nvar QuestionExpressionModel = /** @class */ (function (_super) {\n __extends(QuestionExpressionModel, _super);\n function QuestionExpressionModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"format\", _this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n if (self.expressionRunner) {\n self.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ExpressionRunner\"](self.expression);\n }\n });\n return _this;\n }\n QuestionExpressionModel.prototype.getType = function () {\n return \"expression\";\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"hasInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"format\", {\n /**\n * Use this property to display the value in your own format. Make sure you have \"{0}\" substring in your string, to display the actual value.\n */\n get: function () {\n return this.getLocalizableStringText(\"format\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"format\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"locFormat\", {\n get: function () {\n return this.getLocalizableString(\"format\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"expression\", {\n /**\n * The Expression that used to calculate the question value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n *
Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.locCalculation = function () {\n this.expressionIsRunning = true;\n };\n QuestionExpressionModel.prototype.unlocCalculation = function () {\n this.expressionIsRunning = false;\n };\n QuestionExpressionModel.prototype.runCondition = function (values, properties) {\n var _this = this;\n _super.prototype.runCondition.call(this, values, properties);\n if (!this.expression ||\n this.expressionIsRunning ||\n (this.survey && this.survey.isDisplayMode))\n return;\n this.locCalculation();\n if (!this.expressionRunner) {\n this.expressionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ExpressionRunner\"](this.expression);\n }\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, _this.value)) {\n _this.value = newValue;\n }\n _this.unlocCalculation();\n };\n this.expressionRunner.run(values, properties);\n };\n QuestionExpressionModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n return false;\n };\n QuestionExpressionModel.prototype.getAllErrors = function () {\n return [];\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"maximumFractionDigits\", {\n /**\n * The maximum number of fraction digits to use if displayStyle is not \"none\". Possible values are from 0 to 20. The default value is -1 and it means that this property is not used.\n */\n get: function () {\n return this.getPropertyValue(\"maximumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"maximumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"minimumFractionDigits\", {\n /**\n * The minimum number of fraction digits to use if displayStyle is not \"none\". Possible values are from 0 to 20. The default value is -1 and it means that this property is not used.\n */\n get: function () {\n return this.getPropertyValue(\"minimumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"minimumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var val = this.isValueEmpty(value) ? this.defaultValue : value;\n if (this.isValueEmpty(val))\n return \"\";\n var str = this.getValueAsStr(val);\n if (!this.format)\n return str;\n return this.format[\"format\"](str);\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"displayStyle\", {\n /**\n * You may set this property to \"decimal\", \"currency\", \"percent\" or \"date\". If you set it to \"currency\", you may use the currency property to display the value in currency different from USD.\n * @see currency\n */\n get: function () {\n return this.getPropertyValue(\"displayStyle\");\n },\n set: function (val) {\n this.setPropertyValue(\"displayStyle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"currency\", {\n /**\n * Use it to display the value in the currency differen from USD. The displayStype should be set to \"currency\".\n * @see displayStyle\n */\n get: function () {\n return this.getPropertyValue(\"currency\");\n },\n set: function (val) {\n if (getCurrecyCodes().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"currency\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"useGrouping\", {\n /**\n * \tDetermines whether to display grouping separators. The default value is true.\n */\n get: function () {\n return this.getPropertyValue(\"useGrouping\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useGrouping\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionExpressionModel.prototype.getValueAsStr = function (val) {\n if (this.displayStyle == \"date\") {\n var d = new Date(val);\n if (!!d && !!d.toLocaleDateString)\n return d.toLocaleDateString();\n }\n if (this.displayStyle != \"none\" && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val)) {\n var locale = this.getLocale();\n if (!locale)\n locale = \"en\";\n var options = {\n style: this.displayStyle,\n currency: this.currency,\n useGrouping: this.useGrouping,\n };\n if (this.maximumFractionDigits > -1) {\n options[\"maximumFractionDigits\"] = this.maximumFractionDigits;\n }\n if (this.minimumFractionDigits > -1) {\n options[\"minimumFractionDigits\"] = this.minimumFractionDigits;\n }\n return val.toLocaleString(locale, options);\n }\n return val.toString();\n };\n return QuestionExpressionModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\nfunction getCurrecyCodes() {\n return [\n \"AED\",\n \"AFN\",\n \"ALL\",\n \"AMD\",\n \"ANG\",\n \"AOA\",\n \"ARS\",\n \"AUD\",\n \"AWG\",\n \"AZN\",\n \"BAM\",\n \"BBD\",\n \"BDT\",\n \"BGN\",\n \"BHD\",\n \"BIF\",\n \"BMD\",\n \"BND\",\n \"BOB\",\n \"BOV\",\n \"BRL\",\n \"BSD\",\n \"BTN\",\n \"BWP\",\n \"BYN\",\n \"BZD\",\n \"CAD\",\n \"CDF\",\n \"CHE\",\n \"CHF\",\n \"CHW\",\n \"CLF\",\n \"CLP\",\n \"CNY\",\n \"COP\",\n \"COU\",\n \"CRC\",\n \"CUC\",\n \"CUP\",\n \"CVE\",\n \"CZK\",\n \"DJF\",\n \"DKK\",\n \"DOP\",\n \"DZD\",\n \"EGP\",\n \"ERN\",\n \"ETB\",\n \"EUR\",\n \"FJD\",\n \"FKP\",\n \"GBP\",\n \"GEL\",\n \"GHS\",\n \"GIP\",\n \"GMD\",\n \"GNF\",\n \"GTQ\",\n \"GYD\",\n \"HKD\",\n \"HNL\",\n \"HRK\",\n \"HTG\",\n \"HUF\",\n \"IDR\",\n \"ILS\",\n \"INR\",\n \"IQD\",\n \"IRR\",\n \"ISK\",\n \"JMD\",\n \"JOD\",\n \"JPY\",\n \"KES\",\n \"KGS\",\n \"KHR\",\n \"KMF\",\n \"KPW\",\n \"KRW\",\n \"KWD\",\n \"KYD\",\n \"KZT\",\n \"LAK\",\n \"LBP\",\n \"LKR\",\n \"LRD\",\n \"LSL\",\n \"LYD\",\n \"MAD\",\n \"MDL\",\n \"MGA\",\n \"MKD\",\n \"MMK\",\n \"MNT\",\n \"MOP\",\n \"MRO\",\n \"MUR\",\n \"MVR\",\n \"MWK\",\n \"MXN\",\n \"MXV\",\n \"MYR\",\n \"MZN\",\n \"NAD\",\n \"NGN\",\n \"NIO\",\n \"NOK\",\n \"NPR\",\n \"NZD\",\n \"OMR\",\n \"PAB\",\n \"PEN\",\n \"PGK\",\n \"PHP\",\n \"PKR\",\n \"PLN\",\n \"PYG\",\n \"QAR\",\n \"RON\",\n \"RSD\",\n \"RUB\",\n \"RWF\",\n \"SAR\",\n \"SBD\",\n \"SCR\",\n \"SDG\",\n \"SEK\",\n \"SGD\",\n \"SHP\",\n \"SLL\",\n \"SOS\",\n \"SRD\",\n \"SSP\",\n \"STD\",\n \"SVC\",\n \"SYP\",\n \"SZL\",\n \"THB\",\n \"TJS\",\n \"TMT\",\n \"TND\",\n \"TOP\",\n \"TRY\",\n \"TTD\",\n \"TWD\",\n \"TZS\",\n \"UAH\",\n \"UGX\",\n \"USD\",\n \"USN\",\n \"UYI\",\n \"UYU\",\n \"UZS\",\n \"VEF\",\n \"VND\",\n \"VUV\",\n \"WST\",\n \"XAF\",\n \"XAG\",\n \"XAU\",\n \"XBA\",\n \"XBB\",\n \"XBC\",\n \"XBD\",\n \"XCD\",\n \"XDR\",\n \"XOF\",\n \"XPD\",\n \"XPF\",\n \"XPT\",\n \"XSU\",\n \"XTS\",\n \"XUA\",\n \"XXX\",\n \"YER\",\n \"ZAR\",\n \"ZMW\",\n \"ZWL\",\n ];\n}\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"expression\", [\n \"expression:expression\",\n { name: \"format\", serializationProperty: \"locFormat\" },\n {\n name: \"displayStyle\",\n default: \"none\",\n choices: [\"none\", \"decimal\", \"currency\", \"percent\", \"date\"],\n },\n {\n name: \"currency\",\n choices: function () {\n return getCurrecyCodes();\n },\n default: \"USD\",\n },\n { name: \"maximumFractionDigits:number\", default: -1 },\n { name: \"minimumFractionDigits:number\", default: -1 },\n { name: \"useGrouping:boolean\", default: true },\n { name: \"enableIf\", visible: false },\n { name: \"isRequired\", visible: false },\n { name: \"readOnly\", visible: false },\n { name: \"requiredErrorText\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"requiredIf\", visible: false },\n], function () {\n return new QuestionExpressionModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"expression\", function (name) {\n return new QuestionExpressionModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_file.ts\":\n/*!******************************!*\\\n !*** ./src/question_file.ts ***!\n \\******************************/\n/*! exports provided: QuestionFileModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return QuestionFileModel; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a file question\n */\nvar QuestionFileModel = /** @class */ (function (_super) {\n __extends(QuestionFileModel, _super);\n function QuestionFileModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isUploading = false;\n /**\n * The event is fired after question state has been changed.\n *
sender the question object that fires the event\n *
options.state new question state value.\n */\n _this.onStateChanged = _this.addEvent();\n _this.previewValue = [];\n _this.currentState = \"empty\";\n return _this;\n }\n QuestionFileModel.prototype.getType = function () {\n return \"file\";\n };\n QuestionFileModel.prototype.clearOnDeletingContainer = function () {\n this.survey.clearFiles(this, this.name, this.value, null, function () { });\n };\n Object.defineProperty(QuestionFileModel.prototype, \"showPreview\", {\n /**\n * Set it to true, to show the preview for the image files.\n */\n get: function () {\n return this.getPropertyValue(\"showPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreview\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"allowMultiple\", {\n /**\n * Set it to true, to allow select multiple files.\n */\n get: function () {\n return this.getPropertyValue(\"allowMultiple\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowMultiple\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"acceptedTypes\", {\n /**\n * Accepted file types. Passed to the 'accept' attribute of the file input tag. See https://www.w3schools.com/tags/att_input_accept.asp for more details.\n */\n get: function () {\n return this.getPropertyValue(\"acceptedTypes\");\n },\n set: function (val) {\n this.setPropertyValue(\"acceptedTypes\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"storeDataAsText\", {\n /**\n * Set it to false if you do not want to serialize file content as text in the survey.data.\n * In this case, you have to write the code onUploadFiles event to store the file content.\n * @see SurveyModel.onUploadFiles\n */\n get: function () {\n return this.getPropertyValue(\"storeDataAsText\");\n },\n set: function (val) {\n this.setPropertyValue(\"storeDataAsText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"waitForUpload\", {\n /**\n * Set it to true if you want to wait until files will be uploaded to your server.\n */\n get: function () {\n return this.getPropertyValue(\"waitForUpload\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"waitForUpload\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"allowImagesPreview\", {\n /**\n * Set it to false if you want to disable images preview.\n */\n get: function () {\n return this.getPropertyValue(\"allowImagesPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowImagesPreview\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"maxSize\", {\n /**\n * Use this property to setup the maximum allowed file size.\n */\n get: function () {\n return this.getPropertyValue(\"maxSize\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxSize\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"needConfirmRemoveFile\", {\n /**\n * Use this property to setup confirmation to remove file.\n */\n get: function () {\n return this.getPropertyValue(\"needConfirmRemoveFile\");\n },\n set: function (val) {\n this.setPropertyValue(\"needConfirmRemoveFile\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * The remove file confirmation message.\n */\n QuestionFileModel.prototype.getConfirmRemoveMessage = function (fileName) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"]\n .getString(\"confirmRemoveFile\")[\"format\"](fileName);\n };\n Object.defineProperty(QuestionFileModel.prototype, \"confirmRemoveAllMessage\", {\n /**\n * The remove all files confirmation message.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"confirmRemoveAllFiles\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"noFileChosenCaption\", {\n /**\n * The no file chosen caption for modern theme.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"noFileChosen\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"chooseButtonCaption\", {\n /**\n * The choose files button caption for modern theme.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"chooseFileCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"cleanButtonCaption\", {\n /**\n * The clean files button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"cleanCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"removeFileCaption\", {\n /**\n * The remove file button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"removeFileCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"inputTitle\", {\n /**\n * The input title value.\n */\n get: function () {\n if (this.isUploading)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"loadingFile\");\n if (this.isEmpty())\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"chooseFile\");\n return \" \";\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clear value programmatically.\n */\n QuestionFileModel.prototype.clear = function (doneCallback) {\n var _this = this;\n this.survey.clearFiles(this, this.name, this.value, null, function (status, data) {\n if (status === \"success\") {\n _this.value = undefined;\n _this.errors = [];\n !!doneCallback && doneCallback();\n }\n });\n };\n /**\n * Remove file item programmatically.\n */\n QuestionFileModel.prototype.removeFile = function (content) {\n var _this = this;\n this.survey.clearFiles(this, this.name, this.value, content.name, function (status, data) {\n if (status === \"success\") {\n var oldValue = _this.value;\n if (Array.isArray(oldValue)) {\n _this.value = oldValue.filter(function (f) { return f.name !== content.name; });\n }\n else {\n _this.value = undefined;\n }\n }\n });\n };\n /**\n * Load multiple files programmatically.\n * @param files\n */\n QuestionFileModel.prototype.loadFiles = function (files) {\n var _this = this;\n if (!this.survey) {\n return;\n }\n this.errors = [];\n if (!this.allFilesOk(files)) {\n return;\n }\n this.stateChanged(\"loading\");\n var loadFilesProc = function () {\n var content = [];\n if (_this.storeDataAsText) {\n files.forEach(function (file) {\n var fileReader = new FileReader();\n fileReader.onload = function (e) {\n content = content.concat([\n { name: file.name, type: file.type, content: fileReader.result },\n ]);\n if (content.length === files.length) {\n _this.value = (_this.value || []).concat(content);\n }\n };\n fileReader.readAsDataURL(file);\n });\n }\n else {\n _this.survey.uploadFiles(_this, _this.name, files, function (status, data) {\n if (status === \"error\") {\n _this.stateChanged(\"error\");\n }\n if (status === \"success\") {\n _this.value = (_this.value || []).concat(data.map(function (r) {\n return {\n name: r.file.name,\n type: r.file.type,\n content: r.content,\n };\n }));\n }\n });\n }\n };\n if (this.allowMultiple) {\n loadFilesProc();\n }\n else {\n this.clear(loadFilesProc);\n }\n };\n QuestionFileModel.prototype.canPreviewImage = function (fileItem) {\n return this.allowImagesPreview && !!fileItem && this.isFileImage(fileItem);\n };\n QuestionFileModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n var _this = this;\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.previewValue = [];\n var state = (!Array.isArray(newValue) && !!newValue) ||\n (Array.isArray(newValue) && newValue.length > 0)\n ? this.showPreview\n ? \"loading\"\n : \"loaded\"\n : \"empty\";\n this.stateChanged(state);\n if (!this.showPreview || !newValue)\n return;\n var newValues = Array.isArray(newValue)\n ? newValue\n : !!newValue\n ? [newValue]\n : [];\n if (this.storeDataAsText) {\n newValues.forEach(function (value) {\n var content = value.content || value;\n _this.previewValue = _this.previewValue.concat([\n {\n name: value.name,\n type: value.type,\n content: content,\n },\n ]);\n });\n if (state === \"loading\")\n this.stateChanged(\"loaded\");\n }\n else {\n newValues.forEach(function (value) {\n var content = value.content || value;\n _this.survey.downloadFile(_this.name, value, function (status, data) {\n if (status === \"success\") {\n _this.previewValue = _this.previewValue.concat([\n {\n content: data,\n name: value.name,\n type: value.type,\n },\n ]);\n if (_this.previewValue.length === newValues.length) {\n _this.stateChanged(\"loaded\");\n }\n }\n else {\n _this.stateChanged(\"error\");\n }\n });\n });\n }\n };\n QuestionFileModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (this.isUploading && this.waitForUpload) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_3__[\"UploadingFileError\"](_surveyStrings__WEBPACK_IMPORTED_MODULE_4__[\"surveyLocalization\"].getString(\"uploadingFile\"), this));\n }\n };\n QuestionFileModel.prototype.stateChanged = function (state) {\n if (state === \"loading\") {\n this.isUploading = true;\n }\n if (state === \"loaded\") {\n this.isUploading = false;\n }\n if (state === \"error\") {\n this.isUploading = false;\n }\n this.currentState = state;\n this.onStateChanged.fire(this, { state: state });\n };\n QuestionFileModel.prototype.allFilesOk = function (files) {\n var _this = this;\n var errorLength = this.errors ? this.errors.length : 0;\n (files || []).forEach(function (file) {\n if (_this.maxSize > 0 && file.size > _this.maxSize) {\n _this.errors.push(new _error__WEBPACK_IMPORTED_MODULE_3__[\"ExceedSizeError\"](_this.maxSize, _this));\n }\n });\n return errorLength === this.errors.length;\n };\n QuestionFileModel.prototype.isFileImage = function (file) {\n if (!file)\n return false;\n var imagePrefix = \"data:image\";\n var subStr = file.content && file.content.substr(0, imagePrefix.length);\n subStr = subStr && subStr.toLowerCase();\n var result = subStr === imagePrefix ||\n (!!file.type && file.type.toLowerCase().indexOf(\"image/\") === 0);\n return result;\n };\n QuestionFileModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData && !this.isEmpty()) {\n questionPlainData.isNode = false;\n var values = Array.isArray(this.value) ? this.value : [this.value];\n questionPlainData.data = values.map(function (dataValue, index) {\n return {\n name: index,\n title: \"File\",\n value: (dataValue.content && dataValue.content) || dataValue,\n displayValue: (dataValue.name && dataValue.name) || dataValue,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n });\n }\n return questionPlainData;\n };\n QuestionFileModel.prototype.supportComment = function () {\n return true;\n };\n return QuestionFileModel;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"file\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n { name: \"showPreview:boolean\", default: true },\n \"allowMultiple:boolean\",\n { name: \"allowImagesPreview:boolean\", default: true },\n \"imageHeight\",\n \"imageWidth\",\n \"acceptedTypes\",\n { name: \"storeDataAsText:boolean\", default: true },\n { name: \"waitForUpload:boolean\", default: false },\n \"maxSize:number\",\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"needConfirmRemoveFile:boolean\", visible: true, default: false },\n], function () {\n return new QuestionFileModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"file\", function (name) {\n return new QuestionFileModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_html.ts\":\n/*!******************************!*\\\n !*** ./src/question_html.ts ***!\n \\******************************/\n/*! exports provided: QuestionHtmlModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return QuestionHtmlModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Model for html question. Unlike other questions it doesn't have value and title.\n */\nvar QuestionHtmlModel = /** @class */ (function (_super) {\n __extends(QuestionHtmlModel, _super);\n function QuestionHtmlModel(name) {\n var _this = _super.call(this, name) || this;\n var locHtml = _this.createLocalizableString(\"html\", _this);\n locHtml.onGetTextCallback = function (str) {\n return !!_this.survey && !_this.ignoreHtmlProgressing\n ? _this.survey.processHtml(str)\n : str;\n };\n return _this;\n }\n QuestionHtmlModel.prototype.getType = function () {\n return \"html\";\n };\n Object.defineProperty(QuestionHtmlModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionHtmlModel.prototype.getProcessedText = function (text) {\n if (this.ignoreHtmlProgressing)\n return text;\n return _super.prototype.getProcessedText.call(this, text);\n };\n Object.defineProperty(QuestionHtmlModel.prototype, \"html\", {\n /**\n * Set html to display it\n */\n get: function () {\n return this.getLocalizableStringText(\"html\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"html\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"processedHtml\", {\n get: function () {\n return this.survey ? this.survey.processHtml(this.html) : this.html;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionHtmlModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"html\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new QuestionHtmlModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"html\", function (name) {\n return new QuestionHtmlModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_image.ts\":\n/*!*******************************!*\\\n !*** ./src/question_image.ts ***!\n \\*******************************/\n/*! exports provided: QuestionImageModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return QuestionImageModel; });\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n/**\n * A Model for image question. This question hasn't any functionality and can be used to improve the appearance of the survey.\n */\nvar QuestionImageModel = /** @class */ (function (_super) {\n __extends(QuestionImageModel, _super);\n function QuestionImageModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"imageLink\", _this, false);\n _this.createLocalizableString(\"text\", _this, false);\n return _this;\n }\n QuestionImageModel.prototype.getType = function () {\n return \"image\";\n };\n Object.defineProperty(QuestionImageModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageLink\", {\n /**\n * The image URL.\n */\n get: function () {\n return this.getLocalizableStringText(\"imageLink\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"imageLink\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"locImageLink\", {\n get: function () {\n return this.getLocalizableString(\"imageLink\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"text\", {\n /**\n * The image alt text.\n */\n get: function () {\n return this.getLocalizableStringText(\"text\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"text\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageFit\", {\n /**\n * The image fit mode.\n */\n get: function () {\n return this.getPropertyValue(\"imageFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageFit\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"contentMode\", {\n /**\n * The content mode.\n */\n get: function () {\n return this.getPropertyValue(\"contentMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"contentMode\", val);\n if (val === \"video\") {\n this.showLabel = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n return QuestionImageModel;\n}(_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__[\"QuestionNonValue\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"image\", [\n { name: \"imageLink\", serializationProperty: \"locImageLink\" },\n { name: \"text\", serializationProperty: \"locText\" },\n {\n name: \"contentMode\",\n default: \"image\",\n choices: [\"image\", \"video\"],\n },\n {\n name: \"imageFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n { name: \"imageHeight:number\", default: 150, minValue: 0 },\n { name: \"imageWidth:number\", default: 200, minValue: 0 },\n], function () {\n return new QuestionImageModel(\"\");\n}, \"nonvalue\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"image\", function (name) {\n return new QuestionImageModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_imagepicker.ts\":\n/*!*************************************!*\\\n !*** ./src/question_imagepicker.ts ***!\n \\*************************************/\n/*! exports provided: ImageItemValue, QuestionImagePickerModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return ImageItemValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return QuestionImagePickerModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar ImageItemValue = /** @class */ (function (_super) {\n __extends(ImageItemValue, _super);\n function ImageItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"imageitemvalue\"; }\n var _this = _super.call(this, value, text, typeName) || this;\n _this.typeName = typeName;\n _this.createLocalizableString(\"imageLink\", _this, false);\n return _this;\n }\n ImageItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"itemvalue\";\n };\n Object.defineProperty(ImageItemValue.prototype, \"imageLink\", {\n /**\n * The image or video link property.\n */\n get: function () {\n return this.getLocalizableStringText(\"imageLink\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"imageLink\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ImageItemValue.prototype, \"locImageLink\", {\n get: function () {\n return this.getLocalizableString(\"imageLink\");\n },\n enumerable: false,\n configurable: true\n });\n ImageItemValue.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ImageItemValue.prototype.getMarkdownHtml = function (text, name) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text, name) : text;\n };\n ImageItemValue.prototype.getRenderer = function (name) {\n return !!this.locOwner ? this.locOwner.getRenderer(name) : null;\n };\n ImageItemValue.prototype.getProcessedText = function (text) {\n return !!this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ImageItemValue;\n}(_itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"]));\n\n/**\n * A Model for a select image question.\n */\nvar QuestionImagePickerModel = /** @class */ (function (_super) {\n __extends(QuestionImagePickerModel, _super);\n function QuestionImagePickerModel(name) {\n var _this = _super.call(this, name) || this;\n _this.colCount = 0;\n _this.choicesByUrl.createItemValue = function (value) {\n return new ImageItemValue(value);\n };\n return _this;\n }\n QuestionImagePickerModel.prototype.getType = function () {\n return \"imagepicker\";\n };\n QuestionImagePickerModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.getItemValueType = function () {\n return \"imageitemvalue\";\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.supportOther = function () {\n return false;\n };\n QuestionImagePickerModel.prototype.supportNone = function () {\n return false;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"multiSelect\", {\n /**\n * Multi select option. If set to true, then allows to select multiple images.\n */\n get: function () {\n return this.getPropertyValue(\"multiSelect\", false);\n },\n set: function (newValue) {\n this.setPropertyValue(\"multiSelect\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns true if item is checked\n * @param item image picker item value\n */\n QuestionImagePickerModel.prototype.isItemSelected = function (item) {\n var val = this.value;\n if (this.isValueEmpty(val))\n return false;\n if (!this.multiSelect)\n return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(val, item.value);\n if (!Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n QuestionImagePickerModel.prototype.clearIncorrectValues = function () {\n if (this.multiSelect) {\n var val = this.value;\n if (!val)\n return;\n if (!Array.isArray(val) || val.length == 0) {\n this.clearValue();\n return;\n }\n var newValue = [];\n for (var i = 0; i < val.length; i++) {\n if (!this.hasUnknownValue(val[i], true)) {\n newValue.push(val[i]);\n }\n }\n if (newValue.length == val.length)\n return;\n if (newValue.length == 0) {\n this.clearValue();\n }\n else {\n this.value = newValue;\n }\n }\n else {\n _super.prototype.clearIncorrectValues.call(this);\n }\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"showLabel\", {\n /**\n * Show label under the image.\n */\n get: function () {\n return this.getPropertyValue(\"showLabel\", false);\n },\n set: function (newValue) {\n this.setPropertyValue(\"showLabel\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.isDesignMode && this.multiSelect) {\n this.createNewArray(\"renderedValue\");\n this.createNewArray(\"value\");\n }\n };\n QuestionImagePickerModel.prototype.getValueCore = function () {\n var value = _super.prototype.getValueCore.call(this);\n if (value !== undefined) {\n return value;\n }\n if (this.multiSelect) {\n return [];\n }\n return value;\n };\n QuestionImagePickerModel.prototype.convertValToArrayForMultSelect = function (val) {\n if (!this.multiSelect)\n return val;\n if (this.isValueEmpty(val) || Array.isArray(val))\n return val;\n return [val];\n };\n QuestionImagePickerModel.prototype.renderedValueFromDataCore = function (val) {\n return this.convertValToArrayForMultSelect(val);\n };\n QuestionImagePickerModel.prototype.rendredValueToDataCore = function (val) {\n return this.convertValToArrayForMultSelect(val);\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageFit\", {\n /**\n * The image fit mode.\n */\n get: function () {\n return this.getPropertyValue(\"imageFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageFit\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"contentMode\", {\n /**\n * The content mode.\n */\n get: function () {\n return this.getPropertyValue(\"contentMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"contentMode\", val);\n if (val === \"video\") {\n this.showLabel = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n QuestionImagePickerModel.prototype.convertDefaultValue = function (val) {\n return val;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"hasColumns\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionImagePickerModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imageitemvalue\", [], function (value) { return new ImageItemValue(value); }, \"itemvalue\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imageitemvalue\", {\n name: \"imageLink\",\n serializationProperty: \"locImageLink\",\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"imagepicker\", [\n { name: \"hasOther\", visible: false },\n { name: \"otherText\", visible: false },\n { name: \"hasNone\", visible: false },\n { name: \"noneText\", visible: false },\n { name: \"optionsCaption\", visible: false },\n { name: \"otherErrorText\", visible: false },\n { name: \"storeOthersAsComment\", visible: false },\n {\n name: \"contentMode\",\n default: \"image\",\n choices: [\"image\", \"video\"],\n },\n {\n name: \"imageFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n { name: \"imageHeight:number\", default: 150, minValue: 0 },\n { name: \"imageWidth:number\", default: 200, minValue: 0 },\n], function () {\n return new QuestionImagePickerModel(\"\");\n}, \"checkboxbase\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"showLabel:boolean\",\n default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"colCount:number\",\n default: 0,\n choices: [0, 1, 2, 3, 4, 5],\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"multiSelect:boolean\",\n default: false,\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addProperty(\"imagepicker\", {\n name: \"choices:imageitemvalue[]\",\n});\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"imagepicker\", function (name) {\n var q = new QuestionImagePickerModel(name);\n //q.choices = QuestionFactory.DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrix.ts\":\n/*!********************************!*\\\n !*** ./src/question_matrix.ts ***!\n \\********************************/\n/*! exports provided: MatrixRowModel, MatrixCells, QuestionMatrixModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return MatrixRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return MatrixCells; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return QuestionMatrixModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_dropdown */ \"./src/question_dropdown.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixRowModel = /** @class */ (function (_super) {\n __extends(MatrixRowModel, _super);\n function MatrixRowModel(item, fullName, data, value) {\n var _this = _super.call(this) || this;\n _this.fullName = fullName;\n _this.item = item;\n _this.data = data;\n _this.value = value;\n _this.cellClick = function (column) {\n _this.value = column.value;\n };\n _this.registerFunctionOnPropertyValueChanged(\"value\", function () {\n if (_this.data)\n _this.data.onMatrixRowChanged(_this);\n });\n return _this;\n }\n Object.defineProperty(MatrixRowModel.prototype, \"name\", {\n get: function () {\n return this.item.value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (newValue) {\n newValue = this.data.getCorrectedRowValue(newValue);\n this.setPropertyValue(\"value\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"rowClasses\", {\n get: function () {\n var cssClasses = this.data.cssClasses;\n var rowClass = !!cssClasses.row ? cssClasses.row : \"\";\n var rowErrorClass = !!cssClasses.rowError ? cssClasses.rowError : \"\";\n var hasError = !!this.data.getErrorByType(\"requiredinallrowserror\");\n var classes = rowClass;\n if (!!rowErrorClass && hasError && this.isValueEmpty(this.value)) {\n if (!!classes)\n classes += \" \";\n classes += rowErrorClass;\n }\n return classes;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixRowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"Base\"]));\n\nvar MatrixCells = /** @class */ (function () {\n function MatrixCells(cellsOwner) {\n this.cellsOwner = cellsOwner;\n this.values = {};\n }\n Object.defineProperty(MatrixCells.prototype, \"isEmpty\", {\n get: function () {\n return Object.keys(this.values).length == 0;\n },\n enumerable: false,\n configurable: true\n });\n MatrixCells.prototype.setCellText = function (row, column, val) {\n row = this.getCellRowColumnValue(row, this.rows);\n column = this.getCellRowColumnValue(column, this.columns);\n if (!row || !column)\n return;\n if (val) {\n if (!this.values[row])\n this.values[row] = {};\n if (!this.values[row][column])\n this.values[row][column] = this.createString();\n this.values[row][column].text = val;\n }\n else {\n if (this.values[row] && this.values[row][column]) {\n var loc = this.values[row][column];\n loc.text = \"\";\n if (loc.isEmpty) {\n delete this.values[row][column];\n if (Object.keys(this.values[row]).length == 0) {\n delete this.values[row];\n }\n }\n }\n }\n };\n MatrixCells.prototype.setDefaultCellText = function (column, val) {\n this.setCellText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column, val);\n };\n MatrixCells.prototype.getCellLocText = function (row, column) {\n row = this.getCellRowColumnValue(row, this.rows);\n column = this.getCellRowColumnValue(column, this.columns);\n if (!row || !column)\n return null;\n if (!this.values[row])\n return null;\n if (!this.values[row][column])\n return null;\n return this.values[row][column];\n };\n MatrixCells.prototype.getDefaultCellLocText = function (column, val) {\n return this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n };\n MatrixCells.prototype.getCellDisplayLocText = function (row, column) {\n var cellText = this.getCellLocText(row, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n cellText = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n if (typeof column == \"number\") {\n column =\n column >= 0 && column < this.columns.length\n ? this.columns[column]\n : null;\n }\n if (column && column.locText)\n return column.locText;\n return null;\n };\n MatrixCells.prototype.getCellText = function (row, column) {\n var loc = this.getCellLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n MatrixCells.prototype.getDefaultCellText = function (column) {\n var loc = this.getCellLocText(_settings__WEBPACK_IMPORTED_MODULE_10__[\"settings\"].matrixDefaultRowName, column);\n return loc ? loc.calculatedText : null;\n };\n MatrixCells.prototype.getCellDisplayText = function (row, column) {\n var loc = this.getCellDisplayLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n Object.defineProperty(MatrixCells.prototype, \"rows\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getRows() : [];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixCells.prototype, \"columns\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getColumns() : [];\n },\n enumerable: false,\n configurable: true\n });\n MatrixCells.prototype.getCellRowColumnValue = function (val, values) {\n if (val === null || val === undefined)\n return null;\n if (typeof val == \"number\") {\n if (val < 0 || val >= values.length)\n return null;\n val = values[val].value;\n }\n if (val.value)\n return val.value;\n return val;\n };\n MatrixCells.prototype.getJson = function () {\n if (this.isEmpty)\n return null;\n var res = {};\n for (var row in this.values) {\n var resRow = {};\n var rowValues = this.values[row];\n for (var col in rowValues) {\n resRow[col] = rowValues[col].getJson();\n }\n res[row] = resRow;\n }\n return res;\n };\n MatrixCells.prototype.setJson = function (value) {\n this.values = {};\n if (!value)\n return;\n for (var row in value) {\n if (row == \"pos\")\n continue;\n var rowValues = value[row];\n this.values[row] = {};\n for (var col in rowValues) {\n if (col == \"pos\")\n continue;\n var loc = this.createString();\n loc.setJson(rowValues[col]);\n this.values[row][col] = loc;\n }\n }\n };\n MatrixCells.prototype.createString = function () {\n return new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](this.cellsOwner, true);\n };\n return MatrixCells;\n}());\n\n/**\n * A Model for a simple matrix question.\n */\nvar QuestionMatrixModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixModel, _super);\n function QuestionMatrixModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isRowChanging = false;\n _this.emptyLocalizableString = new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](_this);\n _this.cellsValue = new MatrixCells(_this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function () {\n self.onColumnsChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n if (!self.filterItems()) {\n self.onRowsChanged();\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfRowsEmpty\", function () {\n self.updateVisibilityBasedOnRows();\n });\n return _this;\n }\n QuestionMatrixModel.prototype.getType = function () {\n return \"matrix\";\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"isAllRowRequired\", {\n /**\n * Set this property to true, if you want a user to answer all rows.\n */\n get: function () {\n return this.getPropertyValue(\"isAllRowRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isAllRowRequired\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasRows\", {\n /**\n * Returns true, if there is at least one row.\n */\n get: function () {\n return this.rows.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"rowsOrder\", {\n /**\n * Use this property to render items in a specific order: \"random\" or \"initial\". Default is \"initial\".\n */\n get: function () {\n return this.getPropertyValue(\"rowsOrder\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == this.rowsOrder)\n return;\n this.setPropertyValue(\"rowsOrder\", val);\n this.onRowsChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hideIfRowsEmpty\", {\n /**\n * Set this property to true to hide the question if there is no visible rows in the matrix.\n */\n get: function () {\n return this.getPropertyValue(\"hideIfRowsEmpty\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideIfRowsEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.getRows = function () {\n return this.rows;\n };\n QuestionMatrixModel.prototype.getColumns = function () {\n return this.visibleColumns;\n };\n QuestionMatrixModel.prototype.getItemClass = function (row, column) {\n var isChecked = row.value == column.value;\n var isDisabled = this.isReadOnly;\n var allowHover = !isChecked && !isDisabled;\n var cellDisabledClass = this.hasCellText\n ? this.cssClasses.cellTextDisabled\n : this.cssClasses.itemDisabled;\n var cellSelectedClass = this.hasCellText\n ? this.cssClasses.cellTextSelected\n : this.cssClasses.itemChecked;\n var itemHoverClass = !this.hasCellText ? this.cssClasses.itemHover : \"\";\n var cellClass = this.hasCellText\n ? this.cssClasses.cellText\n : this.cssClasses.label;\n var itemClass = this.hasCellText && !!this.cssClasses.cell\n ? this.cssClasses.cell + \" \"\n : \"\";\n itemClass +=\n cellClass +\n (isChecked ? \" \" + cellSelectedClass : \"\") +\n (isDisabled ? \" \" + cellDisabledClass : \"\") +\n (allowHover ? \" \" + itemHoverClass : \"\");\n return itemClass;\n };\n QuestionMatrixModel.prototype.getQuizQuestionCount = function () {\n var res = 0;\n for (var i = 0; i < this.rows.length; i++) {\n if (!this.isValueEmpty(this.correctAnswer[this.rows[i].value]))\n res++;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getCorrectAnswerCount = function () {\n var res = 0;\n var value = this.value;\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i].value;\n if (!this.isValueEmpty(value[row]) &&\n _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(this.correctAnswer[row], value[row]))\n res++;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getVisibleRows = function () {\n var result = new Array();\n var val = this.value;\n if (!val)\n val = {};\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (this.isValueEmpty(row.value))\n continue;\n result.push(this.createMatrixRow(row, this.id + \"_\" + row.value.toString().replace(/\\s/g, \"_\"), val[row.value]));\n }\n if (result.length == 0 && !this.filteredRows) {\n result.push(this.createMatrixRow(new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](null), this.name.replace(/\\s/g, \"_\"), val));\n }\n this.generatedVisibleRows = result;\n return result;\n };\n QuestionMatrixModel.prototype.sortVisibleRows = function (array) {\n var order = this.rowsOrder.toLowerCase();\n if (order === \"random\")\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].randomizeArray(array);\n return array;\n };\n QuestionMatrixModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.rows = this.sortVisibleRows(this.rows);\n this.updateVisibilityBasedOnRows();\n };\n QuestionMatrixModel.prototype.processRowsOnSet = function (newRows) {\n return this.sortVisibleRows(newRows);\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"visibleRows\", {\n /**\n * Returns the list of visible rows as model objects.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getVisibleRows();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"cells\", {\n get: function () {\n return this.cellsValue;\n },\n set: function (value) {\n this.cells.setJson(value && value.getJson ? value.getJson() : null);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasCellText\", {\n get: function () {\n return !this.cells.isEmpty;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.setCellText = function (row, column, val) {\n this.cells.setCellText(row, column, val);\n };\n QuestionMatrixModel.prototype.getCellText = function (row, column) {\n return this.cells.getCellText(row, column);\n };\n QuestionMatrixModel.prototype.setDefaultCellText = function (column, val) {\n this.cells.setDefaultCellText(column, val);\n };\n QuestionMatrixModel.prototype.getDefaultCellText = function (column) {\n return this.cells.getDefaultCellText(column);\n };\n QuestionMatrixModel.prototype.getCellDisplayText = function (row, column) {\n return this.cells.getCellDisplayText(row, column);\n };\n QuestionMatrixModel.prototype.getCellDisplayLocText = function (row, column) {\n var loc = this.cells.getCellDisplayLocText(row, column);\n return loc ? loc : this.emptyLocalizableString;\n };\n QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () {\n return this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if ((!isOnValueChanged || this.errors.length > 0) &&\n this.hasErrorInRows()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"RequiredInAllRowsError\"](null, this));\n }\n };\n QuestionMatrixModel.prototype.hasErrorInRows = function () {\n if (!this.isAllRowRequired)\n return false;\n return !this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.hasValuesInAllRows = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (!rows)\n return true;\n for (var i = 0; i < rows.length; i++) {\n if (this.isValueEmpty(rows[i].value))\n return false;\n }\n return true;\n };\n QuestionMatrixModel.prototype.getIsAnswered = function () {\n return _super.prototype.getIsAnswered.call(this) && this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.createMatrixRow = function (item, fullName, value) {\n var row = new MatrixRowModel(item, fullName, this, value);\n this.onMatrixRowCreated(row);\n return row;\n };\n QuestionMatrixModel.prototype.onMatrixRowCreated = function (row) { };\n QuestionMatrixModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, this.isRowChanging || updateIsAnswered);\n if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n return;\n this.isRowChanging = true;\n var val = this.value;\n if (!val)\n val = {};\n if (this.rows.length == 0) {\n this.generatedVisibleRows[0].value = val;\n }\n else {\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n var rowVal = val[row.name];\n if (this.isValueEmpty(rowVal))\n rowVal = null;\n this.generatedVisibleRows[i].value = rowVal;\n }\n }\n this.updateIsAnswered();\n this.isRowChanging = false;\n };\n QuestionMatrixModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = {};\n for (var key in value) {\n var newKey = keysAsText\n ? _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, key)\n : key;\n if (!newKey)\n newKey = key;\n var newValue = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(this.columns, value[key]);\n if (!newValue)\n newValue = value[key];\n res[newKey] = newValue;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n var values = this.createValueCopy();\n questionPlainData.isNode = true;\n questionPlainData.data = Object.keys(values || {}).map(function (rowName) {\n var row = _this.rows.filter(function (r) { return r.value === rowName; })[0];\n var rowDataItem = {\n name: rowName,\n title: !!row ? row.text : \"row\",\n value: values[rowName],\n displayValue: _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getTextOrHtmlByValue(_this.visibleColumns, values[rowName]),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"].getItemByValue(_this.visibleColumns, values[rowName]);\n if (!!item) {\n (options.calculations || []).forEach(function (calculation) {\n rowDataItem[calculation.propertyName] =\n item[calculation.propertyName];\n });\n }\n return rowDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionMatrixModel.prototype.addConditionObjectsByContext = function (objects, context) {\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i];\n if (!!row.value) {\n objects.push({\n name: this.getValueName() + \".\" + row.value,\n text: this.processedTitle + \".\" + row.calculatedText,\n question: this,\n });\n }\n }\n };\n QuestionMatrixModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var question = new _question_dropdown__WEBPACK_IMPORTED_MODULE_9__[\"QuestionDropdownModel\"](path);\n question.choices = this.columns;\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"JsonObject\"]().toJsonObject(question);\n json[\"type\"] = question.getType();\n return json;\n };\n QuestionMatrixModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n if (this.hasRows) {\n this.clearInvisibleValuesInRows();\n }\n };\n QuestionMatrixModel.prototype.getFirstInputElementId = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (rows.length > 0 && this.visibleColumns.length > 0) {\n return this.inputId + \"_\" + rows[0].name + \"_\" + 0;\n }\n return _super.prototype.getFirstInputElementId.call(this);\n };\n QuestionMatrixModel.prototype.onRowsChanged = function () {\n this.updateVisibilityBasedOnRows();\n _super.prototype.onRowsChanged.call(this);\n };\n QuestionMatrixModel.prototype.updateVisibilityBasedOnRows = function () {\n if (this.hideIfRowsEmpty) {\n this.visible =\n this.rows.length > 0 &&\n (!this.filteredRows || this.filteredRows.length > 0);\n }\n };\n //IMatrixData\n QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) {\n if (this.isRowChanging)\n return;\n this.isRowChanging = true;\n if (!this.hasRows) {\n this.setNewValue(row.value);\n }\n else {\n var newValue = this.value;\n if (!newValue) {\n newValue = {};\n }\n newValue[row.name] = row.value;\n this.setNewValue(newValue);\n }\n this.isRowChanging = false;\n };\n QuestionMatrixModel.prototype.getCorrectedRowValue = function (value) {\n for (var i = 0; i < this.columns.length; i++) {\n if (value === this.columns[i].value)\n return value;\n }\n for (var i = 0; i < this.columns.length; i++) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(value, this.columns[i].value))\n return this.columns[i].value;\n }\n return value;\n };\n QuestionMatrixModel.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"columns\");\n keys.push(\"rows\");\n };\n return QuestionMatrixModel;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"matrix\", [\n {\n name: \"columns:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_column\");\n },\n },\n {\n name: \"rows:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"matrix_row\");\n },\n },\n { name: \"cells:cells\", serializationProperty: \"cells\" },\n {\n name: \"rowsOrder\",\n default: \"initial\",\n choices: [\"initial\", \"random\"],\n },\n \"isAllRowRequired:boolean\",\n \"hideIfRowsEmpty:boolean\",\n], function () {\n return new QuestionMatrixModel(\"\");\n}, \"matrixbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].Instance.registerQuestion(\"matrix\", function (name) {\n var q = new QuestionMatrixModel(name);\n q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultRows;\n q.columns = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultColums;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdown.ts\":\n/*!****************************************!*\\\n !*** ./src/question_matrixdropdown.ts ***!\n \\****************************************/\n/*! exports provided: MatrixDropdownRowModel, QuestionMatrixDropdownModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return MatrixDropdownRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return QuestionMatrixDropdownModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar MatrixDropdownRowModel = /** @class */ (function (_super) {\n __extends(MatrixDropdownRowModel, _super);\n function MatrixDropdownRowModel(name, item, data, value) {\n var _this = _super.call(this, data, value) || this;\n _this.name = name;\n _this.item = item;\n _this.buildCells(value);\n return _this;\n }\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"rowName\", {\n get: function () {\n return this.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixDropdownRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]));\n\n/**\n * A Model for a matrix dropdown question. You may use a dropdown, checkbox, radiogroup, text and comment questions as a cell editors.\n */\nvar QuestionMatrixDropdownModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownModel, _super);\n function QuestionMatrixDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"totalText\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n self.clearGeneratedRows();\n self.resetRenderedTable();\n self.filterItems();\n });\n return _this;\n }\n QuestionMatrixDropdownModel.prototype.getType = function () {\n return \"matrixdropdown\";\n };\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"totalText\", {\n /**\n * Set this property to show it on the first column for the total row.\n */\n get: function () {\n return this.getLocalizableStringText(\"totalText\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"totalText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"locTotalText\", {\n get: function () {\n return this.getLocalizableString(\"totalText\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getFooterText = function () {\n return this.locTotalText;\n };\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"rowTitleWidth\", {\n /**\n * The column width for the first column, row title column.\n */\n get: function () {\n return this.getPropertyValue(\"rowTitleWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowTitleWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getRowTitleWidth = function () {\n return this.rowTitleWidth;\n };\n QuestionMatrixDropdownModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value)\n return value;\n var rows = this.visibleRows;\n var res = {};\n for (var i = 0; i < rows.length; i++) {\n var rowValue = this.rows[i].value;\n var val = value[rowValue];\n if (!val)\n continue;\n if (keysAsText) {\n var displayRowValue = _itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getTextOrHtmlByValue(this.rows, rowValue);\n if (!!displayRowValue) {\n rowValue = displayRowValue;\n }\n }\n res[rowValue] = this.getRowDisplayValue(keysAsText, rows[i], val);\n }\n return res;\n };\n QuestionMatrixDropdownModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context ? this.columns.indexOf(context) > -1 : false;\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i];\n if (!row.value)\n continue;\n var prefixName = this.getValueName() + \".\" + row.value + \".\";\n var prefixTitle = this.processedTitle + \".\" + row.calculatedText + \".\";\n for (var j = 0; j < this.columns.length; j++) {\n var column = this.columns[j];\n objects.push({\n name: prefixName + column.name,\n text: prefixTitle + column.fullTitle,\n question: this,\n });\n }\n }\n if (hasContext) {\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column == context)\n continue;\n objects.push({\n name: \"row.\" + column.name,\n text: \"row.\" + column.fullTitle,\n question: this,\n });\n }\n }\n };\n QuestionMatrixDropdownModel.prototype.clearIncorrectValues = function () {\n var val = this.value;\n if (!val)\n return;\n var newVal = null;\n var isChanged = false;\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n for (var key in val) {\n if (_itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"].getItemByValue(rows, key)) {\n if (newVal == null)\n newVal = {};\n newVal[key] = val[key];\n }\n else {\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newVal;\n }\n _super.prototype.clearIncorrectValues.call(this);\n };\n QuestionMatrixDropdownModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n this.clearInvisibleValuesInRows();\n };\n QuestionMatrixDropdownModel.prototype.generateRows = function () {\n var result = new Array();\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n if (!rows || rows.length === 0)\n return result;\n var val = this.value;\n if (!val)\n val = {};\n for (var i = 0; i < rows.length; i++) {\n if (!rows[i].value)\n continue;\n result.push(this.createMatrixRow(rows[i], val[rows[i].value]));\n }\n return result;\n };\n QuestionMatrixDropdownModel.prototype.createMatrixRow = function (item, value) {\n return new MatrixDropdownRowModel(item.value, item, this, value);\n };\n QuestionMatrixDropdownModel.prototype.getSearchableItemValueKeys = function (keys) {\n keys.push(\"rows\");\n };\n return QuestionMatrixDropdownModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"matrixdropdown\", [\n {\n name: \"rows:itemvalue[]\",\n },\n \"rowsVisibleIf:condition\",\n \"rowTitleWidth\",\n { name: \"totalText\", serializationProperty: \"locTotalText\" },\n], function () {\n return new QuestionMatrixDropdownModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdropdown\", function (name) {\n var q = new QuestionMatrixDropdownModel(name);\n q.choices = [1, 2, 3, 4, 5];\n q.rows = _questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].DefaultRows;\n _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdownbase.ts\":\n/*!********************************************!*\\\n !*** ./src/question_matrixdropdownbase.ts ***!\n \\********************************************/\n/*! exports provided: matrixDropdownColumnTypes, MatrixDropdownColumn, MatrixDropdownCell, MatrixDropdownTotalCell, MatrixDropdownRowModelBase, MatrixDropdownTotalRowModel, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, QuestionMatrixDropdownModelBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return matrixDropdownColumnTypes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return MatrixDropdownColumn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return MatrixDropdownCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownTotalCell\", function() { return MatrixDropdownTotalCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return MatrixDropdownRowModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownTotalRowModel\", function() { return MatrixDropdownTotalRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return QuestionMatrixDropdownRenderedCell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return QuestionMatrixDropdownRenderedRow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return QuestionMatrixDropdownRenderedTable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return QuestionMatrixDropdownModelBase; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _martixBase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./martixBase */ \"./src/martixBase.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_expression */ \"./src/question_expression.ts\");\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _action_bar__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./action-bar */ \"./src/action-bar.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data) {\n cellQuestion.storeOthersAsComment = !!question\n ? question.storeOthersAsComment\n : false;\n if ((!cellQuestion.choices || cellQuestion.choices.length == 0) &&\n cellQuestion.choicesByUrl.isEmpty) {\n cellQuestion.choices = question.choices;\n }\n if (!cellQuestion.choicesByUrl.isEmpty) {\n cellQuestion.choicesByUrl.run(data.getTextProcessor());\n }\n}\nvar matrixDropdownColumnTypes = {\n dropdown: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"optionsCaption\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n if (!!cellQuestion.locOptionsCaption &&\n cellQuestion.locOptionsCaption.isEmpty &&\n !question.locOptionsCaption.isEmpty) {\n cellQuestion.optionsCaption = question.optionsCaption;\n }\n },\n },\n checkbox: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"otherText\",\n \"choicesVisibleIf\",\n \"hasSelectAll\",\n \"hasNone\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n cellQuestion.colCount =\n column.colCount > -1 ? column.colCount : question.columnColCount;\n },\n },\n radiogroup: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n cellQuestion.colCount =\n column.colCount > -1 ? column.colCount : question.columnColCount;\n },\n },\n text: {\n properties: [\"placeHolder\", \"inputType\", \"maxLength\", \"min\", \"max\", \"step\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n comment: {\n properties: [\"placeHolder\", \"rows\", \"maxLength\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n boolean: {\n properties: [\"renderAs\", \"defaultValue\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n cellQuestion.showTitle = true;\n cellQuestion.renderAs = column.renderAs;\n },\n },\n expression: {\n properties: [\"expression\", \"displayStyle\", \"currency\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n rating: {\n properties: [\"rateValues\"],\n },\n};\nvar MatrixDropdownColumn = /** @class */ (function (_super) {\n __extends(MatrixDropdownColumn, _super);\n function MatrixDropdownColumn(name, title) {\n if (title === void 0) { title = null; }\n var _this = _super.call(this) || this;\n _this.colOwnerValue = null;\n _this.indexValue = -1;\n _this._isVisible = true;\n _this._hasVisibleCell = true;\n var self = _this;\n _this.createLocalizableString(\"totalFormat\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"showInMultipleColumns\", function () {\n self.doShowInMultipleColumnsChanged();\n });\n _this.updateTemplateQuestion();\n _this.name = name;\n if (title)\n _this.title = title;\n return _this;\n }\n MatrixDropdownColumn.getColumnTypes = function () {\n var res = [];\n for (var key in matrixDropdownColumnTypes) {\n res.push(key);\n }\n return res;\n };\n MatrixDropdownColumn.prototype.getOriginalObj = function () {\n return this.templateQuestion;\n };\n MatrixDropdownColumn.prototype.getClassNameProperty = function () {\n return \"cellType\";\n };\n MatrixDropdownColumn.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.colOwner ? this.colOwner.survey : null;\n };\n MatrixDropdownColumn.prototype.endLoadingFromJson = function () {\n var _this = this;\n _super.prototype.endLoadingFromJson.call(this);\n this.templateQuestion.endLoadingFromJson();\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\n };\n MatrixDropdownColumn.prototype.getDynamicPropertyName = function () {\n return \"cellType\";\n };\n MatrixDropdownColumn.prototype.getDynamicType = function () {\n return this.calcCellQuestionType();\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"colOwner\", {\n get: function () {\n return this.colOwnerValue;\n },\n set: function (value) {\n this.colOwnerValue = value;\n if (!!value) {\n this.updateTemplateQuestion();\n }\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.locTitle.strChanged();\n };\n MatrixDropdownColumn.prototype.addUsedLocales = function (locales) {\n _super.prototype.addUsedLocales.call(this, locales);\n this.templateQuestion.addUsedLocales(locales);\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"index\", {\n get: function () {\n return this.indexValue;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.setIndex = function (val) {\n this.indexValue = val;\n };\n MatrixDropdownColumn.prototype.getType = function () {\n return \"matrixdropdowncolumn\";\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"cellType\", {\n get: function () {\n return this.getPropertyValue(\"cellType\");\n },\n set: function (val) {\n val = val.toLocaleLowerCase();\n this.setPropertyValue(\"cellType\", val);\n this.updateTemplateQuestion();\n if (!!this.colOwner) {\n this.colOwner.onColumnCellTypeChanged(this);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"templateQuestion\", {\n get: function () {\n return this.templateQuestionValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"value\", {\n get: function () {\n return this.templateQuestion.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isVisible\", {\n get: function () {\n return this._isVisible;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.setIsVisible = function (newVal) {\n this._isVisible = newVal;\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasVisibleCell\", {\n get: function () {\n return this._hasVisibleCell;\n },\n set: function (newVal) {\n this._hasVisibleCell = newVal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"name\", {\n get: function () {\n return this.templateQuestion.name;\n },\n set: function (val) {\n this.templateQuestion.name = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"title\", {\n get: function () {\n return this.templateQuestion.title;\n },\n set: function (val) {\n this.templateQuestion.title = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTitle\", {\n get: function () {\n return this.templateQuestion.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"fullTitle\", {\n get: function () {\n return this.locTitle.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isRequired\", {\n get: function () {\n return this.templateQuestion.isRequired;\n },\n set: function (val) {\n this.templateQuestion.isRequired = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredText\", {\n get: function () {\n return this.templateQuestion.requiredText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredErrorText\", {\n get: function () {\n return this.templateQuestion.requiredErrorText;\n },\n set: function (val) {\n this.templateQuestion.requiredErrorText = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.templateQuestion.locRequiredErrorText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"readOnly\", {\n get: function () {\n return this.templateQuestion.readOnly;\n },\n set: function (val) {\n this.templateQuestion.readOnly = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasOther\", {\n get: function () {\n return this.templateQuestion.hasOther;\n },\n set: function (val) {\n this.templateQuestion.hasOther = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"visibleIf\", {\n get: function () {\n return this.templateQuestion.visibleIf;\n },\n set: function (val) {\n this.templateQuestion.visibleIf = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"enableIf\", {\n get: function () {\n return this.templateQuestion.enableIf;\n },\n set: function (val) {\n this.templateQuestion.enableIf = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredIf\", {\n get: function () {\n return this.templateQuestion.requiredIf;\n },\n set: function (val) {\n this.templateQuestion.requiredIf = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isUnique\", {\n get: function () {\n return this.getPropertyValue(\"isUnique\");\n },\n set: function (val) {\n this.setPropertyValue(\"isUnique\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"showInMultipleColumns\", {\n get: function () {\n return this.getPropertyValue(\"showInMultipleColumns\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showInMultipleColumns\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isSupportMultipleColumns\", {\n get: function () {\n return [\"checkbox\", \"radiogroup\"].indexOf(this.cellType) > -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isShowInMultipleColumns\", {\n get: function () {\n return this.showInMultipleColumns && this.isSupportMultipleColumns;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"validators\", {\n get: function () {\n return this.templateQuestion.validators;\n },\n set: function (val) {\n this.templateQuestion.validators = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalType\", {\n get: function () {\n return this.getPropertyValue(\"totalType\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalType\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalExpression\", {\n get: function () {\n return this.getPropertyValue(\"totalExpression\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasTotal\", {\n get: function () {\n return this.totalType != \"none\" || !!this.totalExpression;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalFormat\", {\n get: function () {\n return this.getLocalizableStringText(\"totalFormat\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"totalFormat\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTotalFormat\", {\n get: function () {\n return this.getLocalizableString(\"totalFormat\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"renderAs\", {\n get: function () {\n return this.getPropertyValue(\"renderAs\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderAs\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMaximumFractionDigits\", {\n get: function () {\n return this.getPropertyValue(\"totalMaximumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"totalMaximumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMinimumFractionDigits\", {\n get: function () {\n return this.getPropertyValue(\"totalMinimumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"totalMinimumFractionDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalDisplayStyle\", {\n get: function () {\n return this.getPropertyValue(\"totalDisplayStyle\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalDisplayStyle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalCurrency\", {\n get: function () {\n return this.getPropertyValue(\"totalCurrency\");\n },\n set: function (val) {\n if (Object(_question_expression__WEBPACK_IMPORTED_MODULE_9__[\"getCurrecyCodes\"])().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"totalCurrency\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"minWidth\", {\n get: function () {\n return this.getPropertyValue(\"minWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"width\", {\n get: function () {\n return this.getPropertyValue(\"width\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"colCount\", {\n get: function () {\n return this.getPropertyValue(\"colCount\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 4)\n return;\n this.setPropertyValue(\"colCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownColumn.prototype.getLocale = function () {\n return this.colOwner ? this.colOwner.getLocale() : \"\";\n };\n MatrixDropdownColumn.prototype.getMarkdownHtml = function (text, name) {\n return this.colOwner ? this.colOwner.getMarkdownHtml(text, name) : null;\n };\n MatrixDropdownColumn.prototype.getRenderer = function (name) {\n return !!this.colOwner ? this.colOwner.getRenderer(name) : null;\n };\n MatrixDropdownColumn.prototype.getProcessedText = function (text) {\n return this.colOwner ? this.colOwner.getProcessedText(text) : text;\n };\n MatrixDropdownColumn.prototype.createCellQuestion = function (data) {\n var qType = this.calcCellQuestionType();\n var cellQuestion = this.createNewQuestion(qType);\n this.callOnCellQuestionUpdate(cellQuestion, data);\n return cellQuestion;\n };\n MatrixDropdownColumn.prototype.updateCellQuestion = function (cellQuestion, data, onUpdateJson) {\n if (onUpdateJson === void 0) { onUpdateJson = null; }\n this.setQuestionProperties(cellQuestion, onUpdateJson);\n this.callOnCellQuestionUpdate(cellQuestion, data);\n };\n MatrixDropdownColumn.prototype.callOnCellQuestionUpdate = function (cellQuestion, data) {\n var qType = cellQuestion.getType();\n var qDefinition = matrixDropdownColumnTypes[qType];\n if (qDefinition && qDefinition[\"onCellQuestionUpdate\"]) {\n qDefinition[\"onCellQuestionUpdate\"](cellQuestion, this, this.colOwner, data);\n }\n };\n MatrixDropdownColumn.prototype.defaultCellTypeChanged = function () {\n this.updateTemplateQuestion();\n };\n MatrixDropdownColumn.prototype.calcCellQuestionType = function () {\n if (this.cellType !== \"default\")\n return this.cellType;\n if (this.colOwner)\n return this.colOwner.getCellType();\n return _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType;\n };\n MatrixDropdownColumn.prototype.updateTemplateQuestion = function () {\n var _this = this;\n var prevCellType = this.templateQuestion\n ? this.templateQuestion.getType()\n : \"\";\n var curCellType = this.calcCellQuestionType();\n if (curCellType === prevCellType)\n return;\n if (this.templateQuestion) {\n this.removeProperties(prevCellType);\n }\n this.templateQuestionValue = this.createNewQuestion(curCellType);\n this.templateQuestion.locOwner = this;\n this.addProperties(curCellType);\n var self = this;\n this.templateQuestion.onPropertyChanged.add(function (sender, options) {\n self.propertyValueChanged(options.name, options.oldValue, options.newValue);\n });\n this.templateQuestion.isContentElement = true;\n if (!this.isLoadingFromJson) {\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\n }\n };\n MatrixDropdownColumn.prototype.createNewQuestion = function (cellType) {\n var question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(cellType);\n if (!question) {\n question = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"text\");\n }\n question.loadingOwner = this;\n this.setQuestionProperties(question);\n return question;\n };\n MatrixDropdownColumn.prototype.setQuestionProperties = function (question, onUpdateJson) {\n if (onUpdateJson === void 0) { onUpdateJson = null; }\n if (this.templateQuestion) {\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toJsonObject(this.templateQuestion, true);\n if (onUpdateJson) {\n onUpdateJson(json);\n }\n json.type = question.getType();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, question);\n }\n };\n MatrixDropdownColumn.prototype.propertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.propertyValueChanged.call(this, name, oldValue, newValue);\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(this, name))\n return;\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnPropertyChanged(this, name, newValue);\n }\n };\n MatrixDropdownColumn.prototype.doShowInMultipleColumnsChanged = function () {\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onShowInMultipleColumnsChanged(this);\n }\n };\n MatrixDropdownColumn.prototype.getProperties = function (curCellType) {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getDynamicPropertiesByObj(this, curCellType);\n };\n MatrixDropdownColumn.prototype.removeProperties = function (curCellType) {\n var properties = this.getProperties(curCellType);\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n delete this[prop.name];\n if (prop.serializationProperty) {\n delete this[prop.serializationProperty];\n }\n }\n };\n MatrixDropdownColumn.prototype.addProperties = function (curCellType) {\n var question = this.templateQuestion;\n var properties = this.getProperties(curCellType);\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n this.addProperty(question, prop.name, false);\n if (prop.serializationProperty) {\n this.addProperty(question, prop.serializationProperty, true);\n }\n }\n };\n MatrixDropdownColumn.prototype.addProperty = function (question, propName, isReadOnly) {\n var desc = {\n configurable: true,\n get: function () {\n return question[propName];\n },\n };\n if (!isReadOnly) {\n desc[\"set\"] = function (v) {\n question[propName] = v;\n };\n }\n Object.defineProperty(this, propName, desc);\n };\n return MatrixDropdownColumn;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\nvar MatrixDropdownCell = /** @class */ (function () {\n function MatrixDropdownCell(column, row, data) {\n this.column = column;\n this.row = row;\n this.data = data;\n this.questionValue = this.createQuestion(column, row, data);\n this.questionValue.updateCustomWidget();\n }\n MatrixDropdownCell.prototype.locStrsChanged = function () {\n this.question.locStrsChanged();\n };\n MatrixDropdownCell.prototype.createQuestion = function (column, row, data) {\n var res = data.createQuestion(this.row, this.column);\n res.validateValueCallback = function () {\n return data.validateCell(row, column.name, row.value);\n };\n _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"CustomPropertiesCollection\"].getProperties(column.getType()).forEach(function (property) {\n var propertyName = property.name;\n if (column[propertyName] !== undefined) {\n res[propertyName] = column[propertyName];\n }\n });\n return res;\n };\n Object.defineProperty(MatrixDropdownCell.prototype, \"question\", {\n get: function () {\n return this.questionValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownCell.prototype, \"value\", {\n get: function () {\n return this.question.value;\n },\n set: function (value) {\n this.question.value = value;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownCell.prototype.runCondition = function (values, properties) {\n this.question.runCondition(values, properties);\n };\n return MatrixDropdownCell;\n}());\n\nvar MatrixDropdownTotalCell = /** @class */ (function (_super) {\n __extends(MatrixDropdownTotalCell, _super);\n function MatrixDropdownTotalCell(column, row, data) {\n var _this = _super.call(this, column, row, data) || this;\n _this.column = column;\n _this.row = row;\n _this.data = data;\n _this.updateCellQuestion();\n return _this;\n }\n MatrixDropdownTotalCell.prototype.createQuestion = function (column, row, data) {\n var res = _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"expression\");\n res.setSurveyImpl(row);\n return res;\n };\n MatrixDropdownTotalCell.prototype.locStrsChanged = function () {\n this.updateCellQuestion();\n _super.prototype.locStrsChanged.call(this);\n };\n MatrixDropdownTotalCell.prototype.updateCellQuestion = function () {\n this.question.locCalculation();\n this.column.updateCellQuestion(this.question, null, function (json) {\n delete json[\"defaultValue\"];\n });\n this.question.expression = this.getTotalExpression();\n this.question.format = this.column.totalFormat;\n this.question.currency = this.column.totalCurrency;\n this.question.displayStyle = this.column.totalDisplayStyle;\n this.question.maximumFractionDigits = this.column.totalMaximumFractionDigits;\n this.question.minimumFractionDigits = this.column.totalMinimumFractionDigits;\n this.question.unlocCalculation();\n };\n MatrixDropdownTotalCell.prototype.getTotalExpression = function () {\n if (!!this.column.totalExpression)\n return this.column.totalExpression;\n if (this.column.totalType == \"none\")\n return \"\";\n var funName = this.column.totalType + \"InArray\";\n if (!_functionsfactory__WEBPACK_IMPORTED_MODULE_10__[\"FunctionFactory\"].Instance.hasFunction(funName))\n return \"\";\n return funName + \"({self}, '\" + this.column.name + \"')\";\n };\n return MatrixDropdownTotalCell;\n}(MatrixDropdownCell));\n\nvar MatrixDropdownRowTextProcessor = /** @class */ (function (_super) {\n __extends(MatrixDropdownRowTextProcessor, _super);\n function MatrixDropdownRowTextProcessor(row, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.row = row;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(MatrixDropdownRowTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.row.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowTextProcessor.prototype.getValues = function () {\n return this.row.value;\n };\n MatrixDropdownRowTextProcessor.prototype.getQuestionByName = function (name) {\n return this.row.getQuestionByName(name);\n };\n MatrixDropdownRowTextProcessor.prototype.onCustomProcessText = function (textValue) {\n if (textValue.name == MatrixDropdownRowModelBase.IndexVariableName) {\n textValue.isExists = true;\n textValue.value = this.row.rowIndex;\n return true;\n }\n if (textValue.name == MatrixDropdownRowModelBase.RowValueVariableName) {\n textValue.isExists = true;\n textValue.value = this.row.rowName;\n return true;\n }\n return false;\n };\n return MatrixDropdownRowTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__[\"QuestionTextProcessor\"]));\nvar MatrixDropdownRowModelBase = /** @class */ (function () {\n function MatrixDropdownRowModelBase(data, value) {\n var _this = this;\n this.isSettingValue = false;\n this.detailPanelValue = null;\n this.cells = [];\n this.isCreatingDetailPanel = false;\n this.data = data;\n this.subscribeToChanges(value);\n this.textPreProcessor = new MatrixDropdownRowTextProcessor(this, MatrixDropdownRowModelBase.RowVariableName);\n this.showHideDetailPanelClick = function () {\n _this.showHideDetailPanel();\n };\n this.idValue = MatrixDropdownRowModelBase.getId();\n }\n MatrixDropdownRowModelBase.getId = function () {\n return \"srow_\" + MatrixDropdownRowModelBase.idCounter++;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowName\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"value\", {\n get: function () {\n var result = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n if (!question.isEmpty()) {\n result[question.getValueName()] = question.value;\n }\n if (!!question.comment &&\n !!this.getSurvey() &&\n this.getSurvey().storeOthersAsComment) {\n result[question.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix] =\n question.comment;\n }\n }\n return result;\n },\n set: function (value) {\n this.isSettingValue = true;\n this.subscribeToChanges(value);\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n var val = this.getCellValue(value, question.getValueName());\n var oldComment = question.comment;\n var comment = !!value\n ? value[question.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix]\n : \"\";\n if (comment == undefined)\n comment = \"\";\n question.updateValueFromSurvey(val);\n if (!!comment || _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(oldComment, question.comment)) {\n question.updateCommentFromSurvey(comment);\n }\n question.onSurveyValueChanged(val);\n }\n this.isSettingValue = false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"locText\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"hasPanel\", {\n get: function () {\n if (!this.data)\n return false;\n return this.data.hasDetailPanel(this);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanel\", {\n get: function () {\n return this.detailPanelValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"detailPanelId\", {\n get: function () {\n return !!this.detailPanel ? this.detailPanel.id : \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isDetailPanelShowing\", {\n get: function () {\n return !!this.data ? this.data.getIsDetailPanelShowing(this) : false;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.setIsDetailPanelShowing = function (val) {\n if (!!this.data) {\n this.data.setIsDetailPanelShowing(this, val);\n }\n };\n MatrixDropdownRowModelBase.prototype.showHideDetailPanel = function () {\n if (this.isDetailPanelShowing) {\n this.hideDetailPanel();\n }\n else {\n this.showDetailPanel();\n }\n };\n MatrixDropdownRowModelBase.prototype.showDetailPanel = function () {\n this.ensureDetailPanel();\n if (!this.detailPanelValue)\n return;\n this.setIsDetailPanelShowing(true);\n };\n MatrixDropdownRowModelBase.prototype.hideDetailPanel = function (destroyPanel) {\n if (destroyPanel === void 0) { destroyPanel = false; }\n this.setIsDetailPanelShowing(false);\n if (destroyPanel) {\n this.detailPanelValue = null;\n }\n };\n MatrixDropdownRowModelBase.prototype.ensureDetailPanel = function () {\n if (this.isCreatingDetailPanel)\n return;\n if (!!this.detailPanelValue || !this.hasPanel || !this.data)\n return;\n this.isCreatingDetailPanel = true;\n this.detailPanelValue = this.data.createRowDetailPanel(this);\n var questions = this.detailPanelValue.questions;\n var value = this.data.getRowValue(this.data.getRowIndex(this));\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value)) {\n for (var i = 0; i < questions.length; i++) {\n var key = questions[i].getValueName();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[key])) {\n questions[i].value = value[key];\n }\n }\n }\n this.detailPanelValue.setSurveyImpl(this);\n this.isCreatingDetailPanel = false;\n };\n MatrixDropdownRowModelBase.prototype.getAllValues = function () {\n return this.value;\n };\n MatrixDropdownRowModelBase.prototype.getFilteredValues = function () {\n var allValues = this.getAllValues();\n var values = { row: allValues };\n for (var key in allValues) {\n values[key] = allValues[key];\n }\n return values;\n };\n MatrixDropdownRowModelBase.prototype.getFilteredProperties = function () {\n return { survey: this.getSurvey(), row: this };\n };\n MatrixDropdownRowModelBase.prototype.runCondition = function (values, properties) {\n if (!!this.data) {\n values[MatrixDropdownRowModelBase.OwnerVariableName] = this.data.value;\n }\n values[MatrixDropdownRowModelBase.IndexVariableName] = this.rowIndex;\n values[MatrixDropdownRowModelBase.RowValueVariableName] = this.rowName;\n if (!properties)\n properties = {};\n properties[MatrixDropdownRowModelBase.RowVariableName] = this;\n for (var i = 0; i < this.cells.length; i++) {\n values[MatrixDropdownRowModelBase.RowVariableName] = this.value;\n this.cells[i].runCondition(values, properties);\n }\n if (!!this.detailPanel) {\n this.detailPanel.runCondition(values, properties);\n }\n };\n MatrixDropdownRowModelBase.prototype.clearValue = function () {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValue();\n }\n };\n MatrixDropdownRowModelBase.prototype.onAnyValueChanged = function (name) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onAnyValueChanged(name);\n }\n };\n MatrixDropdownRowModelBase.prototype.getDataValueCore = function (valuesHash, key) {\n var survey = this.getSurvey();\n if (!!survey) {\n return survey.getDataValueCore(valuesHash, key);\n }\n else {\n return valuesHash[key];\n }\n };\n MatrixDropdownRowModelBase.prototype.getValue = function (name) {\n var question = this.getQuestionByName(name);\n return !!question ? question.value : null;\n };\n MatrixDropdownRowModelBase.prototype.setValue = function (name, newColumnValue) {\n this.setValueCore(name, newColumnValue, false);\n };\n MatrixDropdownRowModelBase.prototype.getVariable = function (name) {\n return undefined;\n };\n MatrixDropdownRowModelBase.prototype.setVariable = function (name, newValue) { };\n MatrixDropdownRowModelBase.prototype.getComment = function (name) {\n var question = this.getQuestionByName(name);\n return !!question ? question.comment : \"\";\n };\n MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue, locNotification) {\n this.setValueCore(name, newValue, true);\n };\n MatrixDropdownRowModelBase.prototype.setValueCore = function (name, newColumnValue, isComment) {\n if (this.isSettingValue)\n return;\n var newValue = this.value;\n var changedName = isComment ? name + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix : name;\n var changedValue = isComment ? this.getComment(name) : this.getValue(name);\n var changedQuestion = this.getQuestionByName(name);\n var changingValue = this.data.onRowChanging(this, changedName, newValue);\n if (!!changedQuestion &&\n !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(changingValue, changedValue)) {\n if (isComment) {\n changedQuestion.comment = changingValue;\n }\n else {\n changedQuestion.value = changingValue;\n }\n }\n else {\n if (this.data.isValidateOnValueChanging &&\n this.hasQuestonError(changedQuestion))\n return;\n this.data.onRowChanged(this, changedName, newValue, newColumnValue == null && !changedQuestion);\n this.onAnyValueChanged(MatrixDropdownRowModelBase.RowVariableName);\n }\n };\n MatrixDropdownRowModelBase.prototype.hasQuestonError = function (question) {\n if (!question)\n return false;\n if (question.hasErrors(true, {\n isOnValueChanged: !this.data.isValidateOnValueChanging,\n }))\n return true;\n if (question.isEmpty())\n return false;\n var cell = this.getCellByColumnName(question.name);\n if (!cell || !cell.column || !cell.column.isUnique)\n return false;\n return this.data.checkIfValueInRowDuplicated(this, question);\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isEmpty\", {\n get: function () {\n var val = this.value;\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val))\n return true;\n for (var key in val) {\n if (val[key] !== undefined && val[key] !== null)\n return false;\n }\n return true;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByColumn = function (column) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column == column)\n return this.cells[i].question;\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getCellByColumnName = function (columnName) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column.name == columnName)\n return this.cells[i];\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionByColumnName = function (columnName) {\n var cell = this.getCellByColumnName(columnName);\n return !!cell ? cell.question : null;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"questions\", {\n get: function () {\n var res = [];\n for (var i = 0; i < this.cells.length; i++) {\n res.push(this.cells[i].question);\n }\n var detailQuestions = !!this.detailPanel ? this.detailPanel.questions : [];\n for (var i = 0; i < detailQuestions.length; i++) {\n res.push(detailQuestions[i]);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByName = function (name) {\n var res = this.getQuestionByColumnName(name);\n if (!!res)\n return res;\n return !!this.detailPanel ? this.detailPanel.getQuestionByName(name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionsByName = function (name) {\n var res = [];\n var q = this.getQuestionByColumnName(name);\n if (!!q)\n res.push(q);\n if (!!this.detailPanel) {\n q = this.detailPanel.getQuestionByName(name);\n if (!!q)\n res.push(q);\n }\n return res;\n };\n MatrixDropdownRowModelBase.prototype.getSharedQuestionByName = function (columnName) {\n return !!this.data\n ? this.data.getSharedQuestionByName(columnName, this)\n : null;\n };\n MatrixDropdownRowModelBase.prototype.clearIncorrectValues = function (val) {\n for (var key in val) {\n var question = this.getQuestionByName(key);\n if (question) {\n var qVal = question.value;\n question.clearIncorrectValues();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(qVal, question.value)) {\n this.setValue(key, question.value);\n }\n }\n else {\n if (!this.getSharedQuestionByName(key) &&\n key.indexOf(_settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixTotalValuePostFix) < 0) {\n this.setValue(key, null);\n }\n }\n }\n };\n MatrixDropdownRowModelBase.prototype.getLocale = function () {\n return this.data ? this.data.getLocale() : \"\";\n };\n MatrixDropdownRowModelBase.prototype.getMarkdownHtml = function (text, name) {\n return this.data ? this.data.getMarkdownHtml(text, name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getRenderer = function (name) {\n return this.data ? this.data.getRenderer(name) : null;\n };\n MatrixDropdownRowModelBase.prototype.getProcessedText = function (text) {\n return this.data ? this.data.getProcessedText(text) : text;\n };\n MatrixDropdownRowModelBase.prototype.locStrsChanged = function () {\n for (var i = 0; i < this.cells.length; i++) {\n this.cells[i].locStrsChanged();\n }\n if (!!this.detailPanel) {\n this.detailPanel.locStrsChanged();\n }\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnChanged = function (column, name, newValue) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column === column) {\n this.updateCellOnColumnChanged(this.cells[i], name, newValue);\n return;\n }\n }\n };\n MatrixDropdownRowModelBase.prototype.onQuestionReadOnlyChanged = function (parentIsReadOnly) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].readOnly = parentIsReadOnly;\n }\n };\n MatrixDropdownRowModelBase.prototype.hasErrors = function (fireCallback, rec, raiseOnCompletedAsyncValidators) {\n var res = false;\n var cells = this.cells;\n if (!cells)\n return res;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (!question || !question.visible)\n continue;\n question.onCompletedAsyncValidators = function (hasErrors) {\n raiseOnCompletedAsyncValidators();\n };\n if (!!rec && rec.isOnValueChanged === true && question.isEmpty())\n continue;\n res = question.hasErrors(fireCallback, rec) || res;\n }\n if (this.hasPanel) {\n this.ensureDetailPanel();\n var panelHasError = this.detailPanel.hasErrors(fireCallback, false, rec);\n if (!rec.hideErroredPanel && panelHasError && fireCallback) {\n if (rec.isSingleDetailPanel) {\n rec.hideErroredPanel = true;\n }\n this.showDetailPanel();\n }\n res = panelHasError || res;\n }\n return res;\n };\n MatrixDropdownRowModelBase.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.question[name] = newValue;\n };\n MatrixDropdownRowModelBase.prototype.buildCells = function (value) {\n this.isSettingValue = true;\n var columns = this.data.columns;\n for (var i = 0; i < columns.length; i++) {\n var column = columns[i];\n if (!column.isVisible)\n continue;\n var cell = this.createCell(column);\n this.cells.push(cell);\n var cellValue = this.getCellValue(value, column.name);\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(cellValue)) {\n cell.question.value = cellValue;\n var commentKey = column.name + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].commentPrefix;\n if (!!value && !_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(value[commentKey])) {\n cell.question.comment = value[commentKey];\n }\n }\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.prototype.getCellValue = function (value, name) {\n if (!!this.editingObj)\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].getObjPropertyValue(this.editingObj, name);\n return !!value ? value[name] : undefined;\n };\n MatrixDropdownRowModelBase.prototype.createCell = function (column) {\n return new MatrixDropdownCell(column, this, this.data);\n };\n MatrixDropdownRowModelBase.prototype.getSurveyData = function () {\n return this;\n };\n MatrixDropdownRowModelBase.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n MatrixDropdownRowModelBase.prototype.getTextProcessor = function () {\n return this.textPreProcessor;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowIndex\", {\n get: function () {\n return !!this.data ? this.data.getRowIndex(this) + 1 : -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"editingObj\", {\n get: function () {\n return this.editingObjValue;\n },\n enumerable: false,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.dispose = function () {\n if (!!this.editingObj) {\n this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n this.editingObjValue = null;\n }\n };\n MatrixDropdownRowModelBase.prototype.subscribeToChanges = function (value) {\n var _this = this;\n if (!value || !value.getType || !value.onPropertyChanged)\n return;\n if (value === this.editingObj)\n return;\n this.editingObjValue = value;\n this.onEditingObjPropertyChanged = function (sender, options) {\n _this.updateOnSetValue(options.name, options.newValue);\n };\n this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n };\n MatrixDropdownRowModelBase.prototype.updateOnSetValue = function (name, newValue) {\n this.isSettingValue = true;\n var questions = this.getQuestionsByName(name);\n for (var i = 0; i < questions.length; i++) {\n questions[i].value = newValue;\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.RowVariableName = \"row\";\n MatrixDropdownRowModelBase.OwnerVariableName = \"self\";\n MatrixDropdownRowModelBase.IndexVariableName = \"rowIndex\";\n MatrixDropdownRowModelBase.RowValueVariableName = \"rowValue\";\n MatrixDropdownRowModelBase.idCounter = 1;\n return MatrixDropdownRowModelBase;\n}());\n\nvar MatrixDropdownTotalRowModel = /** @class */ (function (_super) {\n __extends(MatrixDropdownTotalRowModel, _super);\n function MatrixDropdownTotalRowModel(data) {\n var _this = _super.call(this, data, null) || this;\n _this.buildCells(null);\n return _this;\n }\n MatrixDropdownTotalRowModel.prototype.createCell = function (column) {\n return new MatrixDropdownTotalCell(column, this, this.data);\n };\n MatrixDropdownTotalRowModel.prototype.setValue = function (name, newValue) {\n if (!!this.data && !this.isSettingValue) {\n this.data.onTotalValueChanged();\n }\n };\n MatrixDropdownTotalRowModel.prototype.runCondition = function (values, properties) {\n var counter = 0;\n var prevValue;\n do {\n prevValue = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.value);\n _super.prototype.runCondition.call(this, values, properties);\n counter++;\n } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(prevValue, this.value) && counter < 3);\n };\n MatrixDropdownTotalRowModel.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.updateCellQuestion();\n };\n return MatrixDropdownTotalRowModel;\n}(MatrixDropdownRowModelBase));\n\nvar QuestionMatrixDropdownRenderedCell = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedCell() {\n this.minWidth = \"\";\n this.width = \"\";\n this.colSpans = 1;\n this.isActionsCell = false;\n this.className = \"\";\n this.idValue = QuestionMatrixDropdownRenderedCell.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasQuestion\", {\n get: function () {\n return !!this.question;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasTitle\", {\n get: function () {\n return !!this.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasPanel\", {\n get: function () {\n return !!this.panel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnTop\", {\n get: function () {\n return this.showErrorOnCore(\"top\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnBottom\", {\n get: function () {\n return this.showErrorOnCore(\"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.prototype.showErrorOnCore = function (location) {\n return (this.getShowErrorLocation() == location &&\n (!this.isChoice || this.isFirstChoice));\n };\n QuestionMatrixDropdownRenderedCell.prototype.getShowErrorLocation = function () {\n return this.hasQuestion ? this.question.survey.questionErrorLocation : \"\";\n };\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"item\", {\n get: function () {\n return this.itemValue;\n },\n set: function (val) {\n this.itemValue = val;\n if (!!val) {\n val.hideCaption = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isChoice\", {\n get: function () {\n return !!this.item;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"choiceValue\", {\n get: function () {\n return this.isChoice ? this.item.value : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isCheckbox\", {\n get: function () {\n return this.isChoice && this.question.getType() == \"checkbox\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isFirstChoice\", {\n get: function () {\n return this.choiceIndex === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"css\", {\n get: function () {\n return (this.className +\n (this.question.errors.length > 0 ? \" \" + this.question.cssError : \"\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"headers\", {\n get: function () {\n if (this.cell &&\n this.cell.column &&\n this.cell.column.isShowInMultipleColumns) {\n return this.item.locText.renderedHtml;\n }\n if (this.question && this.question.isVisible) {\n return this.question.locTitle.renderedHtml;\n }\n if (this.hasTitle) {\n return this.locTitle.renderedHtml || \"\";\n }\n return \"\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.prototype.calculateFinalClassName = function (matrixCssClasses) {\n var questionCss = this.cell.question.cssClasses;\n var className = \"\";\n if (!!questionCss) {\n className = \"\";\n if (!!questionCss.itemValue) {\n className += \" \" + questionCss.itemValue;\n }\n if (!!questionCss.asCell) {\n if (!!className)\n className += \"\";\n className += questionCss.asCell;\n }\n }\n if (!className && !!matrixCssClasses) {\n className = matrixCssClasses.cell;\n }\n className +=\n this.question.errors.length > 0 ? \" \" + questionCss.hasError : \"\";\n if (this.isChoice) {\n className += \" \" + matrixCssClasses.choiceCell;\n }\n //'text-align': $data.isChoice ? 'center': ''\n return className;\n };\n QuestionMatrixDropdownRenderedCell.counter = 1;\n return QuestionMatrixDropdownRenderedCell;\n}());\n\nvar QuestionMatrixDropdownRenderedRow = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedRow() {\n this.isDetailRow = false;\n this.cells = [];\n this.className = \"\";\n this.idValue = QuestionMatrixDropdownRenderedRow.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedRow.counter = 1;\n return QuestionMatrixDropdownRenderedRow;\n}());\n\nvar QuestionMatrixDropdownRenderedTable = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownRenderedTable, _super);\n function QuestionMatrixDropdownRenderedTable(matrix) {\n var _this = _super.call(this) || this;\n _this.matrix = matrix;\n _this.hasActionCellInRowsValues = {};\n _this.createNewArray(\"rows\");\n _this.build();\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showTable\", {\n get: function () {\n return this.getPropertyValue(\"showTable\", true);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showHeader\", {\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnTop\", {\n get: function () {\n return this.getPropertyValue(\"showAddRowOnTop\", false);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showAddRowOnBottom\", {\n get: function () {\n return this.getPropertyValue(\"showAddRowOnBottom\", false);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showFooter\", {\n get: function () {\n return this.matrix.hasFooter && this.matrix.isColumnLayoutHorizontal;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasFooter\", {\n get: function () {\n return !!this.footerRow;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasRemoveRows\", {\n get: function () {\n return this.hasRemoveRowsValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedTable.prototype.isRequireReset = function () {\n return (this.hasRemoveRows != this.matrix.canRemoveRows ||\n !this.matrix.isColumnLayoutHorizontal);\n };\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"headerRow\", {\n get: function () {\n return this.headerRowValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"footerRow\", {\n get: function () {\n return this.footerRowValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedTable.prototype.build = function () {\n this.hasRemoveRowsValue = this.matrix.canRemoveRows;\n //build rows now\n var rows = this.matrix.visibleRows;\n this.cssClasses = this.matrix.cssClasses;\n this.buildRowsActions();\n this.buildHeader();\n this.buildRows();\n this.buildFooter();\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.updateShowTableAndAddRow = function () {\n var showTable = this.rows.length > 0 ||\n this.matrix.isDesignMode ||\n !this.matrix.getShowColumnsIfEmpty();\n this.setPropertyValue(\"showTable\", showTable);\n var showAddRow = this.matrix.canAddRow && showTable;\n var showAddRowOnTop = showAddRow;\n var showAddRowOnBottom = showAddRow;\n if (showAddRowOnTop) {\n if (this.matrix.getAddRowLocation() === \"default\") {\n showAddRowOnTop = this.matrix.columnLayout === \"vertical\";\n }\n else {\n showAddRowOnTop = this.matrix.getAddRowLocation() !== \"bottom\";\n }\n }\n if (showAddRowOnBottom && this.matrix.getAddRowLocation() !== \"topBottom\") {\n showAddRowOnBottom = !showAddRowOnTop;\n }\n this.setPropertyValue(\"showAddRowOnTop\", showAddRowOnTop);\n this.setPropertyValue(\"showAddRowOnBottom\", showAddRowOnBottom);\n };\n QuestionMatrixDropdownRenderedTable.prototype.onAddedRow = function () {\n if (this.getRenderedDataRowCount() >= this.matrix.visibleRows.length)\n return;\n var row = this.matrix.visibleRows[this.matrix.visibleRows.length - 1];\n this.rowsActions.push(this.buildRowActions(row));\n this.addHorizontalRow(this.rows, row, this.matrix.visibleRows.length == 1 && !this.matrix.showHeader);\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRenderedDataRowCount = function () {\n var res = 0;\n for (var i = 0; i < this.rows.length; i++) {\n if (!this.rows[i].isDetailRow)\n res++;\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.onRemovedRow = function (row) {\n var rowIndex = this.getRenderedRowIndex(row);\n if (rowIndex < 0)\n return;\n this.rowsActions.splice(rowIndex, 1);\n var removeCount = 1;\n if (rowIndex < this.rows.length - 1 &&\n this.rows[rowIndex + 1].isDetailRow) {\n removeCount++;\n }\n this.rows.splice(rowIndex, removeCount);\n this.updateShowTableAndAddRow();\n };\n QuestionMatrixDropdownRenderedTable.prototype.onDetailPanelChangeVisibility = function (row, isShowing) {\n var rowIndex = this.getRenderedRowIndex(row);\n if (rowIndex < 0)\n return;\n var panelRowIndex = rowIndex < this.rows.length - 1 && this.rows[rowIndex + 1].isDetailRow\n ? rowIndex + 1\n : -1;\n if ((isShowing && panelRowIndex > -1) || (!isShowing && panelRowIndex < 0))\n return;\n if (isShowing) {\n var detailRow = this.createDetailPanelRow(row, this.rows[rowIndex]);\n this.rows.splice(rowIndex + 1, 0, detailRow);\n }\n else {\n this.rows.splice(panelRowIndex, 1);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRenderedRowIndex = function (row) {\n for (var i = 0; i < this.rows.length; i++) {\n if (this.rows[i].row == row)\n return i;\n }\n return -1;\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRowsActions = function () {\n this.rowsActions = [];\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n this.rowsActions.push(this.buildRowActions(rows[i]));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildHeader = function () {\n var colHeaders = this.matrix.isColumnLayoutHorizontal && this.matrix.showHeader;\n var isShown = colHeaders ||\n (this.matrix.hasRowText && !this.matrix.isColumnLayoutHorizontal);\n this.setPropertyValue(\"showHeader\", isShown);\n if (!isShown)\n return;\n this.headerRowValue = new QuestionMatrixDropdownRenderedRow();\n if (this.hasActionCellInRows(\"start\")) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.hasRowText && this.matrix.showHeader) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.isColumnLayoutHorizontal) {\n for (var i = 0; i < this.matrix.visibleColumns.length; i++) {\n var column = this.matrix.visibleColumns[i];\n if (!column.hasVisibleCell)\n continue;\n if (column.isShowInMultipleColumns) {\n this.createMutlipleColumnsHeader(column);\n }\n else {\n this.headerRow.cells.push(this.createHeaderCell(column));\n }\n }\n }\n else {\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n this.headerRow.cells.push(this.createTextCell(rows[i].locText));\n }\n if (this.matrix.hasFooter) {\n this.headerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n }\n }\n if (this.hasActionCellInRows(\"end\")) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildFooter = function () {\n if (!this.showFooter)\n return;\n this.footerRowValue = new QuestionMatrixDropdownRenderedRow();\n if (this.hasActionCellInRows(\"start\")) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.hasRowText) {\n this.footerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n }\n var cells = this.matrix.visibleTotalRow.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (!cell.column.hasVisibleCell)\n continue;\n if (cell.column.isShowInMultipleColumns) {\n this.createMutlipleColumnsFooter(this.footerRow, cell);\n }\n else {\n this.footerRow.cells.push(this.createEditCell(cell));\n }\n }\n if (this.hasActionCellInRows(\"end\")) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRows = function () {\n var rows = this.matrix.isColumnLayoutHorizontal\n ? this.buildHorizontalRows()\n : this.buildVerticalRows();\n this.setPropertyValue(\"rows\", rows);\n };\n QuestionMatrixDropdownRenderedTable.prototype.hasActionCellInRows = function (location) {\n if (this.hasActionCellInRowsValues[location] === undefined) {\n var rows = this.matrix.visibleRows;\n this.hasActionCellInRowsValues[location] = false;\n for (var i = 0; i < rows.length; i++) {\n if (!this.isValueEmpty(this.getRowActions(i, location))) {\n this.hasActionCellInRowsValues[location] = true;\n break;\n }\n }\n }\n return this.hasActionCellInRowsValues[location];\n };\n QuestionMatrixDropdownRenderedTable.prototype.canRemoveRow = function (row) {\n return this.matrix.canRemoveRow(row);\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildHorizontalRows = function () {\n var rows = this.matrix.visibleRows;\n var renderedRows = [];\n for (var i = 0; i < rows.length; i++) {\n this.addHorizontalRow(renderedRows, rows[i], i == 0 && !this.matrix.showHeader);\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.addHorizontalRow = function (renderedRows, row, useAsHeader) {\n var renderedRow = this.createHorizontalRow(row, useAsHeader);\n renderedRow.row = row;\n renderedRows.push(renderedRow);\n if (row.isDetailPanelShowing) {\n renderedRows.push(this.createDetailPanelRow(row, renderedRow));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRowActionsCell = function (rowIndex, location) {\n var rowActions = this.getRowActions(rowIndex, location);\n if (!this.isValueEmpty(rowActions)) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n var itemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_5__[\"ItemValue\"](rowActions);\n cell.item = itemValue;\n cell.isActionsCell = true;\n cell.className = this.cssClasses.actionsCell;\n cell.row = this.matrix.visibleRows[rowIndex];\n return cell;\n }\n return null;\n };\n QuestionMatrixDropdownRenderedTable.prototype.getRowActions = function (rowIndex, location) {\n var actions = this.rowsActions[rowIndex];\n if (!Array.isArray(actions))\n return [];\n return actions.filter(function (action) {\n if (!action.location) {\n action.location = \"start\";\n }\n return action.location === location;\n });\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRowActions = function (row) {\n var actions = [];\n this.setDefaultRowActions(row, actions);\n if (!!this.matrix.survey) {\n actions = this.matrix.survey.getUpdatedMatrixRowActions(this.matrix, row, actions);\n }\n return actions;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n if (this.hasRemoveRows && this.canRemoveRow(row)) {\n actions.push(new _action_bar__WEBPACK_IMPORTED_MODULE_13__[\"ActionBarItem\"]({\n id: \"remove-row\",\n location: \"end\",\n enabled: !this.matrix.isInputReadOnly,\n component: \"sv-matrix-remove-button\",\n data: { row: row, question: this.matrix },\n }));\n }\n if (row.hasPanel) {\n actions.push(new _action_bar__WEBPACK_IMPORTED_MODULE_13__[\"ActionBarItem\"]({\n id: \"show-detail\",\n location: \"start\",\n component: \"sv-matrix-detail-button\",\n data: { row: row, question: this.matrix },\n }));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHorizontalRow = function (row, useAsHeader) {\n var res = new QuestionMatrixDropdownRenderedRow();\n this.addRowActionsCell(row, res, \"start\");\n if (this.matrix.hasRowText) {\n var renderedCell = this.createTextCell(row.locText);\n renderedCell.row = row;\n res.cells.push(renderedCell);\n if (useAsHeader) {\n this.setHeaderCellWidth(null, renderedCell);\n }\n if (row.hasPanel && !!this.cssClasses.detailRowText) {\n if (!!renderedCell.className)\n renderedCell.className += \" \";\n renderedCell.className += this.cssClasses.detailRowText;\n }\n }\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (!cell.column.hasVisibleCell)\n continue;\n if (cell.column.isShowInMultipleColumns) {\n this.createMutlipleEditCells(res, cell);\n }\n else {\n var renderedCell = this.createEditCell(cell);\n res.cells.push(renderedCell);\n if (useAsHeader) {\n this.setHeaderCellWidth(cell.column, renderedCell);\n }\n }\n }\n this.addRowActionsCell(row, res, \"end\");\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.addRowActionsCell = function (row, renderedRow, location) {\n var rowIndex = this.matrix.visibleRows.indexOf(row);\n var actions = this.getRowActionsCell(rowIndex, location);\n if (this.hasActionCellInRows(location)) {\n if (!!actions)\n renderedRow.cells.push(actions);\n else {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.isEmpty = true;\n renderedRow.cells.push(cell);\n }\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createDetailPanelRow = function (row, renderedRow) {\n var res = new QuestionMatrixDropdownRenderedRow();\n res.row = row;\n res.className += this.cssClasses.detailRow;\n res.isDetailRow = true;\n var buttonCell = new QuestionMatrixDropdownRenderedCell();\n if (this.matrix.hasRowText) {\n buttonCell.colSpans = 2;\n }\n buttonCell.isEmpty = true;\n res.cells.push(buttonCell);\n var actionsCell = null;\n if (this.hasActionCellInRows(\"end\")) {\n actionsCell = new QuestionMatrixDropdownRenderedCell();\n actionsCell.isEmpty = true;\n }\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.panel = row.detailPanel;\n cell.colSpans =\n renderedRow.cells.length -\n buttonCell.colSpans -\n (!!actionsCell ? actionsCell.colSpans : 0);\n cell.className = this.cssClasses.detailPanelCell;\n res.cells.push(cell);\n if (!!actionsCell) {\n res.cells.push(actionsCell);\n }\n if (typeof this.matrix.onCreateDetailPanelRenderedRowCallback === \"function\") {\n this.matrix.onCreateDetailPanelRenderedRowCallback(res);\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildVerticalRows = function () {\n var columns = this.matrix.columns;\n var renderedRows = [];\n for (var i = 0; i < columns.length; i++) {\n var col = columns[i];\n if (col.isVisible && col.hasVisibleCell) {\n if (col.isShowInMultipleColumns) {\n this.createMutlipleVerticalRows(renderedRows, col, i);\n }\n else {\n renderedRows.push(this.createVerticalRow(col, i));\n }\n }\n }\n if (this.hasActionCellInRows(\"end\")) {\n renderedRows.push(this.createEndVerticalActionRow());\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleVerticalRows = function (renderedRows, column, index) {\n var choices = this.getMultipleColumnChoices(column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n renderedRows.push(this.createVerticalRow(column, index, choices[i], i));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createVerticalRow = function (column, index, choice, choiceIndex) {\n if (choice === void 0) { choice = null; }\n if (choiceIndex === void 0) { choiceIndex = -1; }\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.showHeader) {\n var lTitle = !!choice ? choice.locText : column.locTitle;\n var hCell = this.createTextCell(lTitle);\n hCell.column = column;\n if (!choice) {\n this.setRequriedToHeaderCell(column, hCell);\n }\n res.cells.push(hCell);\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n var rChoice = choice;\n var rChoiceIndex = choiceIndex >= 0 ? choiceIndex : i;\n var cell = rows[i].cells[index];\n var visChoices = !!choice ? cell.question.visibleChoices : undefined;\n if (!!visChoices && rChoiceIndex < visChoices.length) {\n rChoice = visChoices[rChoiceIndex];\n }\n var rCell = this.createEditCell(cell, rChoice);\n rCell.item = rChoice;\n rCell.choiceIndex = rChoiceIndex;\n res.cells.push(rCell);\n }\n if (this.matrix.hasTotal) {\n res.cells.push(this.createEditCell(this.matrix.visibleTotalRow.cells[index]));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createEndVerticalActionRow = function () {\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.showHeader) {\n res.cells.push(this.createTextCell(null));\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n res.cells.push(this.getRowActionsCell(i, \"end\"));\n }\n if (this.matrix.hasTotal) {\n res.cells.push(this.createTextCell(null));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleEditCells = function (rRow, cell, isFooter) {\n if (isFooter === void 0) { isFooter = false; }\n var choices = isFooter\n ? this.getMultipleColumnChoices(cell.column)\n : cell.question.visibleChoices;\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var rCell = this.createEditCell(cell, !isFooter ? choices[i] : undefined);\n if (!isFooter) {\n //rCell.item = choices[i];\n rCell.choiceIndex = i;\n }\n rRow.cells.push(rCell);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createEditCell = function (cell, choiceItem) {\n if (choiceItem === void 0) { choiceItem = undefined; }\n var res = new QuestionMatrixDropdownRenderedCell();\n res.cell = cell;\n res.row = cell.row;\n res.question = cell.question;\n res.matrix = this.matrix;\n res.item = choiceItem;\n res.className = res.calculateFinalClassName(this.cssClasses);\n //res.css = res.calcCss(this.cssClasses.cell);\n // var questionCss = cell.question.cssClasses;\n // var className = \"\";\n // if (!!questionCss) {\n // className = \"\";\n // if (!!questionCss.itemValue) {\n // className += \" \" + questionCss.itemValue;\n // }\n // if (!!questionCss.asCell) {\n // if (!!className) className += \"\";\n // className += questionCss.asCell;\n // }\n // }\n // if (!className && !!this.cssClasses.cell) {\n // className = this.cssClasses.cell;\n // }\n //res.className = className;\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsFooter = function (rRow, cell) {\n this.createMutlipleEditCells(rRow, cell, true);\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsHeader = function (column) {\n var choices = this.getMultipleColumnChoices(column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var cell = this.createTextCell(choices[i].locText);\n this.setHeaderCell(column, cell);\n this.headerRow.cells.push(cell);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getMultipleColumnChoices = function (column) {\n var choices = column.templateQuestion.choices;\n if (!!choices && Array.isArray(choices) && choices.length == 0)\n return this.matrix.choices;\n choices = column.templateQuestion.visibleChoices;\n if (!choices || !Array.isArray(choices))\n return null;\n return choices;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHeaderCell = function (column) {\n var cell = this.createTextCell(!!column ? column.locTitle : null);\n cell.column = column;\n this.setHeaderCell(column, cell);\n if (this.cssClasses.headerCell) {\n cell.className = this.cssClasses.headerCell;\n }\n return cell;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCell = function (column, cell) {\n this.setHeaderCellWidth(column, cell);\n this.setRequriedToHeaderCell(column, cell);\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCellWidth = function (column, cell) {\n cell.minWidth = column != null ? this.matrix.getColumnWidth(column) : \"\";\n cell.width = column != null ? column.width : this.matrix.getRowTitleWidth();\n };\n QuestionMatrixDropdownRenderedTable.prototype.setRequriedToHeaderCell = function (column, cell) {\n if (!!column && column.isRequired && this.matrix.survey) {\n cell.requiredText = this.matrix.survey.requiredText;\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createRemoveRowCell = function (row) {\n var res = new QuestionMatrixDropdownRenderedCell();\n res.row = row;\n res.isRemoveRow = this.canRemoveRow(row);\n if (!!this.cssClasses.cell) {\n res.className = this.cssClasses.cell;\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createTextCell = function (locTitle) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.locTitle = !!locTitle\n ? locTitle\n : new _localizablestring__WEBPACK_IMPORTED_MODULE_8__[\"LocalizableString\"](this.matrix, false);\n if (!!this.cssClasses.cell) {\n cell.className = this.cssClasses.cell;\n }\n return cell;\n };\n return QuestionMatrixDropdownRenderedTable;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"Base\"]));\n\n/**\n * A base class for matrix dropdown and matrix dynamic questions.\n */\nvar QuestionMatrixDropdownModelBase = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownModelBase, _super);\n function QuestionMatrixDropdownModelBase(name) {\n var _this = _super.call(this, name) || this;\n _this.isRowChanging = false;\n _this.lockResetRenderedTable = false;\n _this.isDoingonAnyValueChanged = false;\n _this.createItemValues(\"choices\");\n _this.createLocalizableString(\"optionsCaption\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.detailPanelValue = _this.createNewDetailPanel();\n _this.detailPanel.selectedElementInDesign = _this;\n _this.detailPanel.renderWidth = \"100%\";\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function (newColumns) {\n _this.updateColumnsIndexes(newColumns);\n _this.generatedTotalRow = null;\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertyValueChanged(\"cellType\", function () {\n _this.updateColumnsCellType();\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"optionsCaption\", \"columnColCount\", \"rowTitleWidth\", \"choices\"], function () {\n _this.clearRowsAndResetRenderedTable();\n });\n _this.registerFunctionOnPropertiesValueChanged([\n \"columnLayout\",\n \"addRowLocation\",\n \"hideColumnsIfEmpty\",\n \"showHeader\",\n \"minRowCount\",\n \"isReadOnly\",\n \"rowCount\",\n \"hasFooter\",\n \"detailPanelMode\",\n ], function () {\n _this.resetRenderedTable();\n });\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownModelBase, \"defaultCellType\", {\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType = val;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) {\n var colNames = _questionfactory__WEBPACK_IMPORTED_MODULE_7__[\"QuestionFactory\"].DefaultColums;\n for (var i = 0; i < colNames.length; i++)\n matrix.addColumn(colNames[i]);\n };\n QuestionMatrixDropdownModelBase.prototype.createColumnValues = function () {\n var _this = this;\n return this.createNewArray(\"columns\", function (item) {\n item.colOwner = _this;\n }, function (item) {\n item.colOwner = null;\n });\n };\n QuestionMatrixDropdownModelBase.prototype.getType = function () {\n return \"matrixdropdownbase\";\n };\n QuestionMatrixDropdownModelBase.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.clearGeneratedRows();\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isRowsDynamic\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n if (item.ownerPropertyName === \"choices\") {\n this.clearRowsAndResetRenderedTable();\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnLayout\", {\n /**\n * Set columnLayout to 'vertical' to place columns vertically and rows horizontally. It makes sense when we have many columns and few rows.\n * @see columns\n * @see rowCount\n */\n get: function () {\n return this.getPropertyValue(\"columnLayout\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnLayout\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnsLocation\", {\n get: function () {\n return this.columnLayout;\n },\n set: function (val) {\n this.columnLayout = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isColumnLayoutHorizontal\", {\n /**\n * Returns true if columns are located horizontally\n * @see columnLayout\n */\n get: function () {\n return this.columnLayout != \"vertical\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanelMode\", {\n /**\n * Set the value to \"underRow\" to show the detailPanel under the row.\n */\n get: function () {\n return this.getPropertyValue(\"detailPanelMode\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"detailPanelMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailPanel\", {\n /**\n * The detail template Panel. This panel is used as a template on creating detail panel for a row.\n * @see detailElements\n * @see detailPanelMode\n */\n get: function () {\n return this.detailPanelValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getPanel = function () {\n return this.detailPanel;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"detailElements\", {\n /**\n * The template Panel elements, questions and panels.\n * @see detailPanel\n * @see detailPanelMode\n */\n get: function () {\n return this.detailPanel.elements;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.createNewDetailPanel = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(\"panel\");\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasRowText\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getFooterText = function () {\n return null;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canAddRow\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canRemoveRows\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.canRemoveRow = function (row) {\n return true;\n };\n QuestionMatrixDropdownModelBase.prototype.onRowsChanged = function () {\n this.resetRenderedTable();\n _super.prototype.onRowsChanged.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.onStartRowAddingRemoving = function () {\n this.lockResetRenderedTable = true;\n };\n QuestionMatrixDropdownModelBase.prototype.onEndRowAdding = function () {\n this.lockResetRenderedTable = false;\n if (!this.renderedTable)\n return;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n this.renderedTable.onAddedRow();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onEndRowRemoving = function (row) {\n this.lockResetRenderedTable = false;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n if (!!row) {\n this.renderedTable.onRemovedRow(row);\n }\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTableValue\", {\n get: function () {\n return this.getPropertyValue(\"renderedTable\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"renderedTable\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.clearRowsAndResetRenderedTable = function () {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n this.fireCallback(this.columnsChangedCallback);\n };\n QuestionMatrixDropdownModelBase.prototype.resetRenderedTable = function () {\n if (this.lockResetRenderedTable || this.isLoadingFromJson)\n return;\n this.renderedTableValue = null;\n this.fireCallback(this.onRenderedTableResetCallback);\n };\n QuestionMatrixDropdownModelBase.prototype.clearGeneratedRows = function () {\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].dispose();\n }\n _super.prototype.clearGeneratedRows.call(this);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTable\", {\n get: function () {\n if (!this.renderedTableValue) {\n this.renderedTableValue = this.createRenderedTable();\n if (!!this.onRenderedTableCreatedCallback) {\n this.onRenderedTableCreatedCallback(this.renderedTableValue);\n }\n }\n return this.renderedTableValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.createRenderedTable = function () {\n return new QuestionMatrixDropdownRenderedTable(this);\n };\n QuestionMatrixDropdownModelBase.prototype.onMatrixRowCreated = function (row) {\n if (!this.survey)\n return;\n var options = {\n rowValue: row.value,\n row: row,\n column: null,\n columnName: null,\n cell: null,\n cellQuestion: null,\n value: null,\n };\n for (var i = 0; i < this.visibleColumns.length; i++) {\n options.column = this.visibleColumns[i];\n options.columnName = options.column.name;\n var cell = row.cells[i];\n options.cell = cell;\n options.cellQuestion = cell.question;\n options.value = cell.value;\n if (!!this.onCellCreatedCallback) {\n this.onCellCreatedCallback(options);\n }\n this.survey.matrixCellCreated(this, options);\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"cellType\", {\n /**\n * Use this property to change the default cell type.\n */\n get: function () {\n return this.getPropertyValue(\"cellType\", _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixDefaultCellType);\n },\n set: function (val) {\n val = val.toLowerCase();\n this.setPropertyValue(\"cellType\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.updateColumnsCellType = function () {\n for (var i = 0; i < this.columns.length; i++) {\n this.columns[i].defaultCellTypeChanged();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.updateColumnsIndexes = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n cols[i].setIndex(i);\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnColCount\", {\n /**\n * The default column count for radiogroup and checkbox cell types.\n */\n get: function () {\n return this.getPropertyValue(\"columnColCount\", 0);\n },\n set: function (value) {\n if (value < 0 || value > 4)\n return;\n this.setPropertyValue(\"columnColCount\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnMinWidth\", {\n /**\n * Use this property to set the minimum column width.\n */\n get: function () {\n return this.getPropertyValue(\"columnMinWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnMinWidth\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"horizontalScroll\", {\n /**\n * Set this property to true to show the horizontal scroll.\n */\n get: function () {\n return this.getPropertyValue(\"horizontalScroll\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"horizontalScroll\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getRequiredText = function () {\n return this.survey ? this.survey.requiredText : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnPropertyChanged = function (column, name, newValue) {\n this.updateHasFooter();\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].updateCellQuestionOnColumnChanged(column, name, newValue);\n }\n if (!!this.generatedTotalRow) {\n this.generatedTotalRow.updateCellQuestionOnColumnChanged(column, name, newValue);\n }\n this.onColumnsChanged();\n if (name == \"isRequired\") {\n this.resetRenderedTable();\n }\n if (column.isShowInMultipleColumns) {\n this.onShowInMultipleColumnsChanged(column);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onShowInMultipleColumnsChanged = function (column) {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnCellTypeChanged = function (column) {\n this.clearGeneratedRows();\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.getRowTitleWidth = function () {\n return \"\";\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasFooter\", {\n get: function () {\n return this.getPropertyValue(\"hasFooter\", false);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getAddRowLocation = function () {\n return \"default\";\n };\n QuestionMatrixDropdownModelBase.prototype.getShowColumnsIfEmpty = function () {\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.updateShowTableAndAddRow = function () {\n if (!!this.renderedTable) {\n this.renderedTable.updateShowTableAndAddRow();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.updateHasFooter = function () {\n this.setPropertyValue(\"hasFooter\", this.hasTotal);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasTotal\", {\n get: function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].hasTotal)\n return true;\n }\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getCellType = function () {\n return this.cellType;\n };\n QuestionMatrixDropdownModelBase.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var columnName = \"\";\n for (var i = path.length - 1; i >= 0; i--) {\n if (path[i] == \".\")\n break;\n columnName = path[i] + columnName;\n }\n var column = this.getColumnByName(columnName);\n if (!column)\n return null;\n var question = column.createCellQuestion(null);\n if (!question)\n return null;\n return question.getConditionJson(operator);\n };\n QuestionMatrixDropdownModelBase.prototype.clearIncorrectValues = function () {\n var rows = this.visibleRows;\n if (!rows)\n return;\n for (var i = 0; i < rows.length; i++) {\n rows[i].clearIncorrectValues(this.getRowValue(i));\n }\n };\n QuestionMatrixDropdownModelBase.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n if (!!this.generatedVisibleRows) {\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n for (var j = 0; j < row.cells.length; j++) {\n row.cells[j].question.clearErrors();\n }\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n var counter = 0;\n var prevTotalValue;\n do {\n prevTotalValue = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getUnbindValue(this.totalValue);\n this.runCellsCondition(values, properties);\n this.runTotalsCondition(values, properties);\n counter++;\n } while (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(prevTotalValue, this.totalValue) &&\n counter < 3);\n };\n QuestionMatrixDropdownModelBase.prototype.shouldRunColumnExpression = function () {\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.runCellsCondition = function (values, properties) {\n if (!this.generatedVisibleRows)\n return;\n var newValues = this.getRowConditionValues(values);\n var rows = this.generatedVisibleRows;\n for (var i = 0; i < rows.length; i++) {\n rows[i].runCondition(newValues, properties);\n }\n this.checkColumnsVisibility();\n };\n QuestionMatrixDropdownModelBase.prototype.checkColumnsVisibility = function () {\n var hasChanged = false;\n for (var i = 0; i < this.visibleColumns.length; i++) {\n if (!this.visibleColumns[i].visibleIf)\n continue;\n hasChanged =\n this.isColumnVisibilityChanged(this.visibleColumns[i]) || hasChanged;\n }\n if (hasChanged) {\n this.resetRenderedTable();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.isColumnVisibilityChanged = function (column) {\n var curVis = column.hasVisibleCell;\n var hasVisCell = false;\n var rows = this.generatedVisibleRows;\n for (var i = 0; i < rows.length; i++) {\n var cell = rows[i].cells[column.index];\n if (!!cell && !!cell.question && cell.question.isVisible) {\n hasVisCell = true;\n break;\n }\n }\n if (curVis != hasVisCell) {\n column.hasVisibleCell = hasVisCell;\n }\n return curVis != hasVisCell;\n };\n QuestionMatrixDropdownModelBase.prototype.runTotalsCondition = function (values, properties) {\n if (!this.generatedTotalRow)\n return;\n this.generatedTotalRow.runCondition(this.getRowConditionValues(values), properties);\n };\n QuestionMatrixDropdownModelBase.prototype.getRowConditionValues = function (values) {\n var newValues = values;\n if (!newValues)\n newValues = {};\n /*\n var newValues: { [index: string]: any } = {};\n if (values && values instanceof Object) {\n newValues = JSON.parse(JSON.stringify(values));\n }\n */\n var totalRow = {};\n if (!this.isValueEmpty(this.totalValue)) {\n totalRow = JSON.parse(JSON.stringify(this.totalValue));\n }\n newValues[\"row\"] = {};\n newValues[\"totalRow\"] = totalRow;\n return newValues;\n };\n QuestionMatrixDropdownModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n var columns = this.columns;\n for (var i = 0; i < columns.length; i++) {\n columns[i].locStrsChanged();\n }\n var rows = this.generatedVisibleRows;\n if (!rows)\n return;\n for (var i = 0; i < rows.length; i++) {\n rows[i].locStrsChanged();\n }\n if (!!this.generatedTotalRow) {\n this.generatedTotalRow.locStrsChanged();\n }\n };\n /**\n * Returns the column by it's name. Returns null if a column with this name doesn't exist.\n * @param column\n */\n QuestionMatrixDropdownModelBase.prototype.getColumnByName = function (columnName) {\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].name == columnName)\n return this.columns[i];\n }\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnName = function (columnName) {\n return this.getColumnByName(columnName);\n };\n /**\n * Returns the column width.\n * @param column\n */\n QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) {\n return column.minWidth ? column.minWidth : this.columnMinWidth;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"choices\", {\n /**\n * The default choices for dropdown, checkbox and radiogroup cell types.\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (val) {\n this.setPropertyValue(\"choices\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"optionsCaption\", {\n /**\n * The default options caption for dropdown cell type.\n */\n get: function () {\n return this.getLocalizableStringText(\"optionsCaption\", _surveyStrings__WEBPACK_IMPORTED_MODULE_6__[\"surveyLocalization\"].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see MatrixDropdownColumn.isUnique\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", _surveyStrings__WEBPACK_IMPORTED_MODULE_6__[\"surveyLocalization\"].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"storeOthersAsComment\", {\n get: function () {\n return !!this.survey ? this.survey.storeOthersAsComment : false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) {\n if (title === void 0) { title = null; }\n var column = new MatrixDropdownColumn(name, title);\n this.columns.push(column);\n return column;\n };\n QuestionMatrixDropdownModelBase.prototype.getVisibleRows = function () {\n var _this = this;\n if (this.isLoadingFromJson)\n return null;\n if (!this.generatedVisibleRows) {\n this.generatedVisibleRows = this.generateRows();\n this.generatedVisibleRows.forEach(function (row) { return _this.onMatrixRowCreated(row); });\n if (this.data) {\n this.runCellsCondition(this.data.getFilteredValues(), this.data.getFilteredProperties());\n }\n this.updateValueOnRowsGeneration(this.generatedVisibleRows);\n this.updateIsAnswered();\n }\n return this.generatedVisibleRows;\n };\n QuestionMatrixDropdownModelBase.prototype.updateValueOnRowsGeneration = function (rows) {\n var oldValue = this.createNewValue(true);\n var newValue = this.createNewValue();\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (!!row.editingObj)\n continue;\n var rowValue = this.getRowValue(i);\n var rValue = row.value;\n if (this.isTwoValueEquals(rowValue, rValue))\n continue;\n newValue = this.getNewValueOnRowChanged(row, \"\", rValue, false, newValue)\n .value;\n }\n if (this.isTwoValueEquals(oldValue, newValue))\n return;\n this.isRowChanging = true;\n this.setNewValue(newValue);\n this.isRowChanging = false;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"totalValue\", {\n get: function () {\n if (!this.hasTotal || !this.visibleTotalRow)\n return {};\n return this.visibleTotalRow.value;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getVisibleTotalRow = function () {\n if (this.isLoadingFromJson)\n return null;\n if (this.hasTotal) {\n if (!this.generatedTotalRow) {\n this.generatedTotalRow = this.generateTotalRow();\n if (this.data) {\n var properties = { survey: this.survey };\n this.runTotalsCondition(this.data.getAllValues(), properties);\n }\n }\n }\n else {\n this.generatedTotalRow = null;\n }\n return this.generatedTotalRow;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"visibleTotalRow\", {\n get: function () {\n return this.getVisibleTotalRow();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.updateColumnsIndexes(this.columns);\n this.clearGeneratedRows();\n this.generatedTotalRow = null;\n this.updateHasFooter();\n };\n /**\n * Returns the row value. If the row value is empty, the object is empty: {}.\n * @param rowIndex row index from 0 to visible row count - 1.\n */\n QuestionMatrixDropdownModelBase.prototype.getRowValue = function (rowIndex) {\n if (rowIndex < 0)\n return null;\n var visRows = this.visibleRows;\n if (rowIndex >= visRows.length)\n return null;\n var newValue = this.createNewValue();\n return this.getRowValueCore(visRows[rowIndex], newValue);\n };\n QuestionMatrixDropdownModelBase.prototype.checkIfValueInRowDuplicated = function (checkedRow, cellQuestion) {\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n if (checkedRow === row)\n continue;\n if (row.getValue(cellQuestion.name) == cellQuestion.value) {\n res = true;\n break;\n }\n }\n if (res) {\n this.addDuplicationError(cellQuestion);\n }\n else {\n cellQuestion.clearErrors();\n }\n return res;\n };\n /**\n * Set the row value.\n * @param rowIndex row index from 0 to visible row count - 1.\n * @param rowValue an object {\"column name\": columnValue,... }\n */\n QuestionMatrixDropdownModelBase.prototype.setRowValue = function (rowIndex, rowValue) {\n if (rowIndex < 0)\n return null;\n var visRows = this.visibleRows;\n if (rowIndex >= visRows.length)\n return null;\n visRows[rowIndex].value = rowValue;\n this.onRowChanged(visRows[rowIndex], \"\", rowValue, false);\n };\n QuestionMatrixDropdownModelBase.prototype.generateRows = function () {\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.generateTotalRow = function () {\n return new MatrixDropdownTotalRowModel(this);\n };\n QuestionMatrixDropdownModelBase.prototype.createNewValue = function (nullOnEmpty) {\n if (nullOnEmpty === void 0) { nullOnEmpty = false; }\n var res = !this.value ? {} : this.createValueCopy();\n if (nullOnEmpty && this.isMatrixValueEmpty(res))\n return null;\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowValueCore = function (row, questionValue, create) {\n if (create === void 0) { create = false; }\n var result = !!questionValue && !!questionValue[row.rowName]\n ? questionValue[row.rowName]\n : null;\n if (!result && create) {\n result = {};\n if (!!questionValue) {\n questionValue[row.rowName] = result;\n }\n }\n return result;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowObj = function (row) {\n var obj = this.getRowValueCore(row, this.value);\n return !!obj && !!obj.getType ? obj : null;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowDisplayValue = function (keysAsText, row, rowValue) {\n if (!rowValue)\n return rowValue;\n if (!!row.editingObj)\n return rowValue;\n var keys = Object.keys(rowValue);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var question = row.getQuestionByName(key);\n if (!question) {\n question = this.getSharedQuestionByName(key, row);\n }\n if (!!question) {\n var displayvalue = question.getDisplayValue(keysAsText, rowValue[key]);\n if (keysAsText && !!question.title && question.title !== key) {\n rowValue[question.title] = displayvalue;\n delete rowValue[key];\n }\n else {\n rowValue[key] = displayvalue;\n }\n }\n }\n return rowValue;\n };\n QuestionMatrixDropdownModelBase.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n questionPlainData.isNode = true;\n questionPlainData.data = this.visibleRows.map(function (row) {\n var rowDataItem = {\n name: row.rowName,\n title: row.rowName,\n value: row.value,\n displayValue: _this.getRowDisplayValue(false, row, row.value),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: true,\n data: row.cells\n .map(function (cell) {\n return cell.question.getPlainData(options);\n })\n .filter(function (d) { return !!d; }),\n };\n (options.calculations || []).forEach(function (calculation) {\n rowDataItem[calculation.propertyName] = row[calculation.propertyName];\n });\n return rowDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionMatrixDropdownModelBase.prototype.getProgressInfo = function () {\n return _base__WEBPACK_IMPORTED_MODULE_3__[\"SurveyElement\"].getProgressInfoByElements(this.getCellQuestions(), this.isRequired);\n };\n QuestionMatrixDropdownModelBase.prototype.getCellQuestions = function () {\n var rows = this.visibleRows;\n if (!rows)\n return [];\n var questions = [];\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n questions.push(row.cells[j].question);\n }\n }\n return questions;\n };\n QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { };\n QuestionMatrixDropdownModelBase.prototype.onSetQuestionValue = function () {\n if (this.isRowChanging)\n return;\n this.onBeforeValueChanged(this.value);\n if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n return;\n this.isRowChanging = true;\n var val = this.createNewValue();\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n this.generatedVisibleRows[i].value = this.getRowValueCore(row, val);\n }\n this.isRowChanging = false;\n };\n QuestionMatrixDropdownModelBase.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n this.onSetQuestionValue();\n this.updateIsAnswered();\n };\n QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (!rows)\n return true;\n for (var i = 0; i < rows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n var question = cells[colIndex].question;\n if (question &&\n (!question.supportGoNextPageAutomatic() || !question.value))\n return false;\n }\n }\n return true;\n };\n QuestionMatrixDropdownModelBase.prototype.getContainsErrors = function () {\n return (_super.prototype.getContainsErrors.call(this) ||\n this.checkForAnswersOrErrors(function (question) { return question.containsErrors; }, false));\n };\n QuestionMatrixDropdownModelBase.prototype.getIsAnswered = function () {\n return (_super.prototype.getIsAnswered.call(this) &&\n this.checkForAnswersOrErrors(function (question) { return question.isAnswered; }, true));\n };\n QuestionMatrixDropdownModelBase.prototype.checkForAnswersOrErrors = function (predicate, every) {\n if (every === void 0) { every = false; }\n var rows = this.generatedVisibleRows;\n if (!rows)\n return false;\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (question && question.isVisible)\n if (predicate(question)) {\n if (!every)\n return true;\n }\n else {\n if (every)\n return false;\n }\n }\n }\n return every ? true : false;\n };\n QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var errosInRows = this.hasErrorInRows(fireCallback, rec);\n var isDuplicated = this.isValueDuplicated();\n return _super.prototype.hasErrors.call(this, fireCallback, rec) || errosInRows || isDuplicated;\n };\n QuestionMatrixDropdownModelBase.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n if (!this.generatedVisibleRows)\n return false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (!!question && question.isRunningValidators)\n return true;\n }\n }\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n var rows = this.generatedVisibleRows;\n if (rows === null)\n return result;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var errors = row.cells[j].question.getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n }\n return result;\n };\n QuestionMatrixDropdownModelBase.prototype.hasErrorInRows = function (fireCallback, rec) {\n var _this = this;\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n if (!rec)\n rec = {};\n rec.isSingleDetailPanel = this.detailPanelMode === \"underRowSingle\";\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n res =\n this.generatedVisibleRows[i].hasErrors(fireCallback, rec, function () {\n _this.raiseOnCompletedAsyncValidators();\n }) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueDuplicated = function () {\n if (!this.generatedVisibleRows)\n return false;\n var columns = this.getUniqueColumns();\n var res = false;\n for (var i = 0; i < columns.length; i++) {\n res = this.isValueInColumnDuplicated(columns[i]) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueInColumnDuplicated = function (column) {\n var keyValues = [];\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n res =\n this.isValueDuplicatedInRow(this.generatedVisibleRows[i], column, keyValues) || res;\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.getUniqueColumns = function () {\n var res = new Array();\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].isUnique) {\n res.push(this.columns[i]);\n }\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.isValueDuplicatedInRow = function (row, column, keyValues) {\n var question = row.getQuestionByColumn(column);\n if (!question || question.isEmpty())\n return false;\n var value = question.value;\n for (var i = 0; i < keyValues.length; i++) {\n if (value == keyValues[i]) {\n this.addDuplicationError(question);\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.addDuplicationError = function (question) {\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_12__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () {\n var question = this.getFirstCellQuestion(false);\n return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () {\n var question = this.getFirstCellQuestion(true);\n return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) {\n if (!this.generatedVisibleRows)\n return null;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!onError)\n return cells[colIndex].question;\n if (cells[colIndex].question.currentErrorCount > 0)\n return cells[colIndex].question;\n }\n }\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.onReadOnlyChanged = function () {\n _super.prototype.onReadOnlyChanged.call(this);\n if (!this.generateRows)\n return;\n for (var i = 0; i < this.visibleRows.length; i++) {\n this.visibleRows[i].onQuestionReadOnlyChanged(this.isReadOnly);\n }\n };\n //IMatrixDropdownData\n QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) {\n return this.createQuestionCore(row, column);\n };\n QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) {\n var question = column.createCellQuestion(row);\n if (this.isReadOnly) {\n question.readOnly = true;\n }\n question.setSurveyImpl(row);\n question.setParentQuestion(this);\n return question;\n };\n QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) {\n if (!newValue)\n return newValue;\n delete newValue[row.rowName];\n return this.isObject(newValue) && Object.keys(newValue).length == 0\n ? null\n : newValue;\n };\n QuestionMatrixDropdownModelBase.prototype.onAnyValueChanged = function (name) {\n if (this.isLoadingFromJson ||\n this.isDoingonAnyValueChanged ||\n !this.generatedVisibleRows)\n return;\n this.isDoingonAnyValueChanged = true;\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n rows[i].onAnyValueChanged(name);\n }\n var totalRow = this.visibleTotalRow;\n if (!!totalRow) {\n totalRow.onAnyValueChanged(name);\n }\n this.isDoingonAnyValueChanged = false;\n };\n QuestionMatrixDropdownModelBase.prototype.isObject = function (value) {\n return value !== null && typeof value === \"object\";\n };\n QuestionMatrixDropdownModelBase.prototype.getOnCellValueChangedOptions = function (row, columnName, rowValue) {\n var getQuestion = function (colName) {\n for (var i = 0; i < row.cells.length; i++) {\n var col = row.cells[i].column;\n if (!!col && col.name === colName) {\n return row.cells[i].question;\n }\n }\n return null;\n };\n return {\n row: row,\n columnName: columnName,\n rowValue: rowValue,\n value: !!rowValue ? rowValue[columnName] : null,\n getCellQuestion: getQuestion,\n };\n };\n QuestionMatrixDropdownModelBase.prototype.onCellValueChanged = function (row, columnName, rowValue) {\n if (!this.survey)\n return;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n if (!!this.onCellValueChangedCallback) {\n this.onCellValueChangedCallback(options);\n }\n this.survey.matrixCellValueChanged(this, options);\n };\n QuestionMatrixDropdownModelBase.prototype.validateCell = function (row, columnName, rowValue) {\n if (!this.survey)\n return;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n return this.survey.matrixCellValidate(this, options);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isValidateOnValueChanging\", {\n get: function () {\n return !!this.survey ? this.survey.isValidateOnValueChanging : false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.onRowChanging = function (row, columnName, rowValue) {\n if (!this.survey)\n return !!rowValue ? rowValue[columnName] : null;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n var oldRowValue = this.getRowValueCore(row, this.createNewValue(), true);\n options.oldValue = !!oldRowValue ? oldRowValue[columnName] : null;\n this.survey.matrixCellValueChanging(this, options);\n return options.value;\n };\n QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, columnName, newRowValue, isDeletingValue) {\n var rowObj = !!columnName ? this.getRowObj(row) : null;\n if (!!rowObj) {\n var columnValue = null;\n if (!!newRowValue && !isDeletingValue) {\n columnValue = newRowValue[columnName];\n }\n this.isRowChanging = true;\n rowObj[columnName] = columnValue;\n this.isRowChanging = false;\n this.onCellValueChanged(row, columnName, rowObj);\n }\n else {\n var oldValue = this.createNewValue(true);\n var combine = this.getNewValueOnRowChanged(row, columnName, newRowValue, isDeletingValue, this.createNewValue());\n if (this.isTwoValueEquals(oldValue, combine.value))\n return;\n this.isRowChanging = true;\n this.setNewValue(combine.value);\n this.isRowChanging = false;\n if (columnName) {\n this.onCellValueChanged(row, columnName, combine.rowValue);\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getNewValueOnRowChanged = function (row, columnName, newRowValue, isDeletingValue, newValue) {\n var rowValue = this.getRowValueCore(row, newValue, true);\n if (isDeletingValue) {\n delete rowValue[columnName];\n }\n for (var i = 0; i < row.cells.length; i++) {\n var key = row.cells[i].question.getValueName();\n delete rowValue[key];\n }\n if (newRowValue) {\n newRowValue = JSON.parse(JSON.stringify(newRowValue));\n for (var key in newRowValue) {\n if (!this.isValueEmpty(newRowValue[key])) {\n rowValue[key] = newRowValue[key];\n }\n }\n }\n if (this.isObject(rowValue) && Object.keys(rowValue).length === 0) {\n newValue = this.deleteRowValue(newValue, row);\n }\n return { value: newValue, rowValue: rowValue };\n };\n QuestionMatrixDropdownModelBase.prototype.getRowIndex = function (row) {\n if (!this.generatedVisibleRows)\n return -1;\n return this.visibleRows.indexOf(row);\n };\n QuestionMatrixDropdownModelBase.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n if (this.detailPanelMode == \"none\")\n return _super.prototype.getElementsInDesign.call(this, includeHidden);\n return includeHidden ? [this.detailPanel] : this.detailElements;\n };\n QuestionMatrixDropdownModelBase.prototype.hasDetailPanel = function (row) {\n if (this.detailPanelMode == \"none\")\n return false;\n if (this.isDesignMode)\n return true;\n if (!!this.onHasDetailPanelCallback)\n return this.onHasDetailPanelCallback(row);\n return this.detailElements.length > 0;\n };\n QuestionMatrixDropdownModelBase.prototype.getIsDetailPanelShowing = function (row) {\n if (this.detailPanelMode == \"none\")\n return false;\n if (this.isDesignMode) {\n var res = this.visibleRows.indexOf(row) == 0;\n if (res) {\n if (!row.detailPanel) {\n row.showDetailPanel();\n }\n }\n return res;\n }\n return this.getPropertyValue(\"isRowShowing\" + row.id, false);\n };\n QuestionMatrixDropdownModelBase.prototype.setIsDetailPanelShowing = function (row, val) {\n if (val == this.getIsDetailPanelShowing(row))\n return;\n this.setPropertyValue(\"isRowShowing\" + row.id, val);\n this.updateDetailPanelButtonCss(row);\n if (!!this.renderedTable) {\n this.renderedTable.onDetailPanelChangeVisibility(row, val);\n }\n if (val && this.detailPanelMode === \"underRowSingle\") {\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].id !== row.id && rows[i].isDetailPanelShowing) {\n rows[i].hideDetailPanel();\n }\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelButtonCss = function (row) {\n var res = this.getPropertyValue(\"detailButtonCss\" + row.id);\n if (!!res)\n return res;\n var res = this.cssClasses.detailButton;\n return !!res ? res : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelIconCss = function (row) {\n var res = this.getPropertyValue(\"detailIconCss\" + row.id);\n if (!!res)\n return res;\n var res = this.cssClasses.detailIcon;\n return !!res ? res : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.updateDetailPanelButtonCss = function (row) {\n var classes = this.cssClasses;\n var icon = classes.detailIcon;\n if (!icon)\n icon = \"\";\n var button = classes.detailButton;\n if (!button)\n button = \"\";\n if (this.getIsDetailPanelShowing(row)) {\n if (!!classes.detailIconExpanded)\n icon += \" \" + classes.detailIconExpanded;\n if (!!classes.detailButtonExpanded)\n button += \" \" + classes.detailButtonExpanded;\n }\n this.setPropertyValue(\"detailIconCss\" + row.id, icon);\n this.setPropertyValue(\"detailButtonCss\" + row.id, button);\n };\n QuestionMatrixDropdownModelBase.prototype.createRowDetailPanel = function (row) {\n if (this.isDesignMode)\n return this.detailPanel;\n var panel = this.createNewDetailPanel();\n var json = this.detailPanel.toJSON();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"JsonObject\"]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n if (!!this.onCreateDetailPanelCallback) {\n this.onCreateDetailPanelCallback(row, panel);\n }\n return panel;\n };\n QuestionMatrixDropdownModelBase.prototype.getSharedQuestionByName = function (columnName, row) {\n if (!this.survey || !this.valueName)\n return null;\n var index = this.getRowIndex(row);\n if (index < 0)\n return null;\n return (this.survey.getQuestionByValueNameFromArray(this.valueName, columnName, index));\n };\n QuestionMatrixDropdownModelBase.prototype.onTotalValueChanged = function () {\n if (!!this.data &&\n !!this.visibleTotalRow &&\n !this.isLoadingFromJson &&\n !this.isSett) {\n this.data.setValue(this.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_11__[\"settings\"].matrixTotalValuePostFix, this.totalValue, false);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getQuestionFromArray = function (name, index) {\n if (index >= this.visibleRows.length)\n return null;\n return this.visibleRows[index].getQuestionByName(name);\n };\n QuestionMatrixDropdownModelBase.prototype.isMatrixValueEmpty = function (val) {\n if (!val)\n return;\n if (Array.isArray(val)) {\n for (var i = 0; i < val.length; i++) {\n if (this.isObject(val[i]) && Object.keys(val[i]).length > 0)\n return false;\n }\n return true;\n }\n return Object.keys(val).length == 0;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"SurveyModel\", {\n get: function () {\n return this.survey;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getCellTemplateData = function (cell) {\n // return cell.cell.column.templateQuestion;\n return this.SurveyModel.getMatrixCellTemplateData(cell);\n };\n QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"cell\");\n };\n QuestionMatrixDropdownModelBase.prototype.getCellWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"cell\");\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"column-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"column-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName(cell, \"row-header\");\n };\n QuestionMatrixDropdownModelBase.prototype.getRowHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData(cell, \"row-header\");\n };\n return QuestionMatrixDropdownModelBase;\n}(_martixBase__WEBPACK_IMPORTED_MODULE_1__[\"QuestionMatrixBaseModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdowncolumn\", [\n { name: \"!name\", isUnique: true },\n { name: \"title\", serializationProperty: \"locTitle\" },\n {\n name: \"cellType\",\n default: \"default\",\n choices: function () {\n var res = MatrixDropdownColumn.getColumnTypes();\n res.splice(0, 0, \"default\");\n return res;\n },\n },\n { name: \"colCount\", default: -1, choices: [-1, 0, 1, 2, 3, 4] },\n \"isRequired:boolean\",\n \"isUnique:boolean\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n \"readOnly:boolean\",\n \"minWidth\",\n \"width\",\n \"visibleIf:condition\",\n \"enableIf:condition\",\n \"requiredIf:condition\",\n {\n name: \"showInMultipleColumns:boolean\",\n dependsOn: \"cellType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isSupportMultipleColumns;\n },\n },\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n {\n name: \"totalType\",\n default: \"none\",\n choices: [\"none\", \"sum\", \"count\", \"min\", \"max\", \"avg\"],\n },\n \"totalExpression:expression\",\n { name: \"totalFormat\", serializationProperty: \"locTotalFormat\" },\n {\n name: \"totalDisplayStyle\",\n default: \"none\",\n choices: [\"none\", \"decimal\", \"currency\", \"percent\"],\n },\n {\n name: \"totalCurrency\",\n choices: function () {\n return Object(_question_expression__WEBPACK_IMPORTED_MODULE_9__[\"getCurrecyCodes\"])();\n },\n default: \"USD\",\n },\n { name: \"totalMaximumFractionDigits:number\", default: -1 },\n { name: \"totalMinimumFractionDigits:number\", default: -1 },\n { name: \"renderAs\", default: \"default\", visible: false },\n], function () {\n return new MatrixDropdownColumn(\"\");\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"matrixdropdownbase\", [\n {\n name: \"columns:matrixdropdowncolumns\",\n className: \"matrixdropdowncolumn\",\n },\n {\n name: \"columnLayout\",\n alternativeName: \"columnsLocation\",\n default: \"horizontal\",\n choices: [\"horizontal\", \"vertical\"],\n },\n {\n name: \"detailElements\",\n visible: false,\n isLightSerializable: false,\n },\n {\n name: \"detailPanelMode\",\n choices: [\"none\", \"underRow\", \"underRowSingle\"],\n default: \"none\",\n },\n \"horizontalScroll:boolean\",\n {\n name: \"choices:itemvalue[]\",\n },\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\n {\n name: \"cellType\",\n default: \"dropdown\",\n choices: function () {\n return MatrixDropdownColumn.getColumnTypes();\n },\n },\n { name: \"columnColCount\", default: 0, choices: [0, 1, 2, 3, 4] },\n \"columnMinWidth\",\n], function () {\n return new QuestionMatrixDropdownModelBase(\"\");\n}, \"matrixbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdynamic.ts\":\n/*!***************************************!*\\\n !*** ./src/question_matrixdynamic.ts ***!\n \\***************************************/\n/*! exports provided: MatrixDynamicRowModel, QuestionMatrixDynamicModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return MatrixDynamicRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return QuestionMatrixDynamicModel; });\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\nvar MatrixDynamicRowModel = /** @class */ (function (_super) {\n __extends(MatrixDynamicRowModel, _super);\n function MatrixDynamicRowModel(index, data, value) {\n var _this = _super.call(this, data, value) || this;\n _this.index = index;\n _this.buildCells(value);\n return _this;\n }\n Object.defineProperty(MatrixDynamicRowModel.prototype, \"rowName\", {\n get: function () {\n return this.id;\n },\n enumerable: false,\n configurable: true\n });\n return MatrixDynamicRowModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdownRowModelBase\"]));\n\n/**\n * A Model for a matrix dymanic question. You may use a dropdown, checkbox, radiogroup, text and comment questions as a cell editors.\n * An end-user may dynamically add/remove rows, unlike in matrix dropdown question.\n */\nvar QuestionMatrixDynamicModel = /** @class */ (function (_super) {\n __extends(QuestionMatrixDynamicModel, _super);\n function QuestionMatrixDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.rowCounter = 0;\n _this.initialRowCount = 2;\n _this.setRowCountValueFromData = false;\n void (_this.createLocalizableString(\"confirmDeleteText\", _this));\n var locAddRowText = _this.createLocalizableString(\"addRowText\", _this);\n locAddRowText.onGetTextCallback = function (text) {\n return !!text ? text : _this.defaultAddRowText;\n };\n var locRemoveRowText = _this.createLocalizableString(\"removeRowText\", _this);\n locRemoveRowText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"removeRow\");\n };\n var locEmptyRowsText = (_this.createLocalizableString(\"emptyRowsText\", _this));\n locEmptyRowsText.onGetTextCallback = function (text) {\n return !!text ? text : _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"emptyRowsText\");\n };\n _this.registerFunctionOnPropertiesValueChanged([\"hideColumnsIfEmpty\", \"allowAddRows\"], function () {\n _this.updateShowTableAndAddRow();\n });\n return _this;\n }\n QuestionMatrixDynamicModel.prototype.getType = function () {\n return \"matrixdynamic\";\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isRowsDynamic\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDelete\", {\n /**\n * Set it to true, to show a confirmation dialog on removing a row\n * @see ConfirmDeleteText\n */\n get: function () {\n return this.getPropertyValue(\"confirmDelete\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"confirmDelete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"keyName\", {\n /**\n * Set it to a column name and the library shows duplication error, if there are same values in different rows in the column.\n * @see keyDuplicationError\n */\n get: function () {\n return this.getPropertyValue(\"keyName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"keyName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultRowValue\", {\n /**\n * If it is not empty, then this value is set to every new row, including rows created initially, unless the defaultValue is not empty\n * @see defaultValue\n * @see defaultValueFromLastRow\n */\n get: function () {\n return this.getPropertyValue(\"defaultRowValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultRowValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultValueFromLastRow\", {\n /**\n * Set it to true to copy the value into new added row from the last row. If defaultRowValue is set and this property equals to true,\n * then the value for new added row is merging.\n * @see defaultValue\n * @see defaultRowValue\n */\n get: function () {\n return this.getPropertyValue(\"defaultValueFromLastRow\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueFromLastRow\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));\n };\n QuestionMatrixDynamicModel.prototype.valueFromData = function (val) {\n if (this.minRowCount < 1)\n return _super.prototype.valueFromData.call(this, val);\n if (!Array.isArray(val))\n val = [];\n for (var i = val.length; i < this.minRowCount; i++)\n val.push({});\n return val;\n };\n QuestionMatrixDynamicModel.prototype.setDefaultValue = function () {\n if (this.isValueEmpty(this.defaultRowValue) ||\n !this.isValueEmpty(this.defaultValue)) {\n _super.prototype.setDefaultValue.call(this);\n return;\n }\n if (!this.isEmpty() || this.rowCount == 0)\n return;\n var newValue = [];\n for (var i = 0; i < this.rowCount; i++) {\n newValue.push(this.defaultRowValue);\n }\n this.value = newValue;\n };\n QuestionMatrixDynamicModel.prototype.isEditingSurveyElement = function (value) {\n if (!!this.survey && this.survey.isEditingSurveyElement)\n return true;\n return _super.prototype.isEditingSurveyElement.call(this, value);\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCount\", {\n /**\n * The number of rows in the matrix.\n * @see minRowCount\n * @see maxRowCount\n */\n get: function () {\n return this.rowCountValue;\n },\n set: function (val) {\n if (val < 0 || val > _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount)\n return;\n this.setRowCountValueFromData = false;\n var prevValue = this.rowCountValue;\n this.rowCountValue = val;\n if (this.value && this.value.length > val) {\n var qVal = this.value;\n qVal.splice(val);\n this.value = qVal;\n }\n if (this.isLoadingFromJson) {\n this.initialRowCount = val;\n return;\n }\n if (this.generatedVisibleRows || prevValue == 0) {\n if (!this.generatedVisibleRows) {\n this.generatedVisibleRows = [];\n }\n this.generatedVisibleRows.splice(val);\n for (var i = prevValue; i < val; i++) {\n var newRow = this.createMatrixRow(this.getValueForNewRow());\n this.generatedVisibleRows.push(newRow);\n this.onMatrixRowCreated(newRow);\n }\n }\n this.onRowsChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCountValue\", {\n get: function () {\n return this.getPropertyValue(\"rowCount\", 2);\n },\n set: function (val) {\n this.setPropertyValue(\"rowCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getValueForNewRow = function () {\n var res = null;\n if (!!this.onGetValueForNewRowCallBack) {\n res = this.onGetValueForNewRowCallBack(this);\n }\n return res;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"minRowCount\", {\n /**\n * The minimum row count. A user could not delete a row if the rowCount equals to minRowCount\n * @see rowCount\n * @see maxRowCount\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"minRowCount\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n this.setPropertyValue(\"minRowCount\", val);\n if (val > this.maxRowCount)\n this.maxRowCount = val;\n if (this.rowCount < val)\n this.rowCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"maxRowCount\", {\n /**\n * The maximum row count. A user could not add a row if the rowCount equals to maxRowCount\n * @see rowCount\n * @see minRowCount\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"maxRowCount\", _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount;\n if (val == this.maxRowCount)\n return;\n this.setPropertyValue(\"maxRowCount\", val);\n if (val < this.minRowCount)\n this.minRowCount = val;\n if (this.rowCount > val)\n this.rowCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowAddRows\", {\n /**\n * Set this property to false to disable ability to add new rows. \"Add new Row\" button becomes invsible in UI\n * @see canAddRow\n * @see allowRemoveRows\n */\n get: function () {\n return this.getPropertyValue(\"allowAddRows\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowAddRows\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRemoveRows\", {\n /**\n * Set this property to false to disable ability to remove rows. \"Remove\" row buttons become invsible in UI\n * @see canRemoveRows\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"allowRemoveRows\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemoveRows\", val);\n if (!this.isLoadingFromJson) {\n this.resetRenderedTable();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canAddRow\", {\n /**\n * Returns true, if a new row can be added.\n * @see allowAddRows\n * @see maxRowCount\n * @see canRemoveRows\n * @see rowCount\n */\n get: function () {\n return (this.allowAddRows && !this.isReadOnly && this.rowCount < this.maxRowCount);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canRemoveRows\", {\n /**\n * Returns true, if row can be removed.\n * @see minRowCount\n * @see canAddRow\n * @see rowCount\n */\n get: function () {\n return (this.allowRemoveRows &&\n !this.isReadOnly &&\n this.rowCount > this.minRowCount);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.canRemoveRow = function (row) {\n if (!this.survey)\n return true;\n return this.survey.matrixAllowRemoveRow(this, row.index, row);\n };\n /**\n * Creates and add a new row.\n */\n QuestionMatrixDynamicModel.prototype.addRow = function () {\n var options = { question: this, canAddRow: this.canAddRow };\n if (!!this.survey) {\n this.survey.matrixBeforeRowAdded(options);\n }\n if (!options.canAddRow)\n return;\n this.onStartRowAddingRemoving();\n this.addRowCore();\n this.onEndRowAdding();\n };\n QuestionMatrixDynamicModel.prototype.hasRowsAsItems = function () {\n return false;\n };\n QuestionMatrixDynamicModel.prototype.unbindValue = function () {\n this.clearGeneratedRows();\n this.clearPropertyValue(\"value\");\n this.rowCountValue = 0;\n _super.prototype.unbindValue.call(this);\n };\n QuestionMatrixDynamicModel.prototype.addRowCore = function () {\n var prevRowCount = this.rowCount;\n this.rowCount = this.rowCount + 1;\n var defaultValue = this.getDefaultRowValue(true);\n var newValue = null;\n if (!this.isValueEmpty(defaultValue)) {\n newValue = this.createNewValue();\n if (newValue.length == this.rowCount) {\n newValue[newValue.length - 1] = defaultValue;\n this.value = newValue;\n }\n }\n if (this.data) {\n this.runCellsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n var row = this.visibleRows[this.rowCount - 1];\n if (!this.isValueEmpty(row.value)) {\n if (!newValue) {\n newValue = this.createNewValue();\n }\n if (!this.isEditingSurveyElement(newValue) &&\n !_helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].isTwoValueEquals(newValue[newValue.length - 1], row.value)) {\n newValue[newValue.length - 1] = row.value;\n this.value = newValue;\n }\n }\n }\n if (this.survey) {\n if (prevRowCount + 1 == this.rowCount) {\n this.survey.matrixRowAdded(this, this.visibleRows[this.visibleRows.length - 1]);\n this.onRowsChanged();\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.getDefaultRowValue = function (isRowAdded) {\n var res = null;\n for (var i = 0; i < this.columns.length; i++) {\n var q = this.columns[i].templateQuestion;\n if (!!q && !this.isValueEmpty(q.getDefaultValue())) {\n res = res || {};\n res[this.columns[i].name] = q.getDefaultValue();\n }\n }\n if (!this.isValueEmpty(this.defaultRowValue)) {\n for (var key in this.defaultRowValue) {\n res = res || {};\n res[key] = this.defaultRowValue[key];\n }\n }\n if (isRowAdded && this.defaultValueFromLastRow) {\n var val = this.value;\n if (!!val && Array.isArray(val) && val.length >= this.rowCount - 1) {\n var rowValue = val[this.rowCount - 2];\n for (var key in rowValue) {\n res = res || {};\n res[key] = rowValue[key];\n }\n }\n }\n return res;\n };\n /**\n * Removes a row by it's index. If confirmDelete is true, show a confirmation dialog\n * @param index a row index, from 0 to rowCount - 1\n * @see removeRow\n * @see confirmDelete\n */\n QuestionMatrixDynamicModel.prototype.removeRowUI = function (value) {\n if (!!value && !!value.rowName) {\n var index = this.visibleRows.indexOf(value);\n if (index < 0)\n return;\n value = index;\n }\n if (!this.isRequireConfirmOnRowDelete(value) ||\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_7__[\"confirmAction\"])(this.confirmDeleteText)) {\n this.removeRow(value);\n }\n };\n QuestionMatrixDynamicModel.prototype.isRequireConfirmOnRowDelete = function (index) {\n if (!this.confirmDelete)\n return false;\n if (index < 0 || index >= this.rowCount)\n return false;\n var value = this.createNewValue();\n if (this.isValueEmpty(value) || !Array.isArray(value))\n return false;\n if (index >= value.length)\n return false;\n return !this.isValueEmpty(value[index]);\n };\n /**\n * Removes a row by it's index.\n * @param index a row index, from 0 to rowCount - 1\n */\n QuestionMatrixDynamicModel.prototype.removeRow = function (index) {\n if (!this.canRemoveRows)\n return;\n if (index < 0 || index >= this.rowCount)\n return;\n var row = !!this.visibleRows && index < this.visibleRows.length\n ? this.visibleRows[index]\n : null;\n if (!!row &&\n !!this.survey &&\n !this.survey.matrixRowRemoving(this, index, row))\n return;\n this.onStartRowAddingRemoving();\n this.removeRowCore(index);\n this.onEndRowRemoving(row);\n };\n QuestionMatrixDynamicModel.prototype.removeRowCore = function (index) {\n var row = this.generatedVisibleRows\n ? this.generatedVisibleRows[index]\n : null;\n if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) {\n this.generatedVisibleRows.splice(index, 1);\n }\n this.rowCountValue--;\n if (this.value) {\n var val = [];\n if (Array.isArray(this.value) && index < this.value.length) {\n val = this.createValueCopy();\n }\n else {\n val = this.createNewValue();\n }\n val.splice(index, 1);\n val = this.deleteRowValue(val, null);\n this.isRowChanging = true;\n this.value = val;\n this.isRowChanging = false;\n }\n this.onRowsChanged();\n if (this.survey) {\n this.survey.matrixRowRemoved(this, index, row);\n }\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDeleteText\", {\n /**\n * Use this property to change the default text showing in the confirmation delete dialog on removing a row.\n */\n get: function () {\n return this.getLocalizableStringText(\"confirmDeleteText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowText\", {\n /**\n * Use this property to change the default value of add row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"addRowText\", this.defaultAddRowText);\n },\n set: function (val) {\n this.setLocalizableStringText(\"addRowText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locAddRowText\", {\n get: function () {\n return this.getLocalizableString(\"addRowText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultAddRowText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(this.isColumnLayoutHorizontal ? \"addRow\" : \"addColumn\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowLocation\", {\n /**\n * By default the 'Add Row' button is shown on bottom if columnLayout is horizontal and on top if columnLayout is vertical.
\n * You may set it to \"top\", \"bottom\" or \"topBottom\" (to show on top and bottom).\n * @see columnLayout\n */\n get: function () {\n return this.getPropertyValue(\"addRowLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"addRowLocation\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getAddRowLocation = function () {\n return this.addRowLocation;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hideColumnsIfEmpty\", {\n /**\n * Set this property to true to hide matrix columns when there is no any row.\n */\n get: function () {\n return this.getPropertyValue(\"hideColumnsIfEmpty\");\n },\n set: function (val) {\n this.setPropertyValue(\"hideColumnsIfEmpty\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getShowColumnsIfEmpty = function () {\n return this.hideColumnsIfEmpty;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"removeRowText\", {\n /**\n * Use this property to change the default value of remove row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"removeRowText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"removeRow\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"removeRowText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locRemoveRowText\", {\n get: function () {\n return this.getLocalizableString(\"removeRowText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"emptyRowsText\", {\n /**\n * Use this property to change the default value of remove row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"emptyRowsText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"emptyRowsText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"emptyRowsText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locEmptyRowsText\", {\n get: function () {\n return this.getLocalizableString(\"emptyRowsText\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value || !Array.isArray(value))\n return value;\n var values = this.getUnbindValue(value);\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length && i < values.length; i++) {\n var val = values[i];\n if (!val)\n continue;\n values[i] = this.getRowDisplayValue(keysAsText, rows[i], val);\n }\n return values;\n };\n QuestionMatrixDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context ? this.columns.indexOf(context) > -1 : false;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n this.addColumnIntoaddConditionObjectsByContext(objects, 0, column);\n if (hasContext && column != context) {\n this.addColumnIntoaddConditionObjectsByContext(objects, -1, column);\n }\n for (var j = 1; j < Math.min(_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaxRowCountInCondition, this.rowCount); j++) {\n this.addColumnIntoaddConditionObjectsByContext(objects, j, column);\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.addColumnIntoaddConditionObjectsByContext = function (objects, rowIndex, column) {\n var rowName = rowIndex > -1 ? \"[\" + rowIndex.toString() + \"].\" : \"row.\";\n objects.push({\n name: (rowIndex > -1 ? this.getValueName() + rowName : rowName) + column.name,\n text: (rowIndex > -1 ? this.processedTitle + rowName : rowName) +\n column.fullTitle,\n question: this,\n });\n };\n QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hasRowText\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!isOnValueChanged && this.hasErrorInMinRows()) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_4__[\"MinRowCountError\"](this.minRowCount, this));\n }\n };\n QuestionMatrixDynamicModel.prototype.hasErrorInMinRows = function () {\n if (this.minRowCount <= 0 || !this.isRequired || !this.generatedVisibleRows)\n return false;\n var setRowCount = 0;\n for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) {\n var row = this.generatedVisibleRows[rowIndex];\n if (!row.isEmpty)\n setRowCount++;\n }\n return setRowCount < this.minRowCount;\n };\n QuestionMatrixDynamicModel.prototype.getUniqueColumns = function () {\n var res = _super.prototype.getUniqueColumns.call(this);\n if (!!this.keyName) {\n var column = this.getColumnByName(this.keyName);\n if (!!column && res.indexOf(column) < 0) {\n res.push(column);\n }\n }\n return res;\n };\n QuestionMatrixDynamicModel.prototype.generateRows = function () {\n var result = new Array();\n if (this.rowCount === 0)\n return result;\n var val = this.createNewValue();\n for (var i = 0; i < this.rowCount; i++) {\n result.push(this.createMatrixRow(this.getRowValueByIndex(val, i)));\n }\n if (!this.isValueEmpty(this.getDefaultRowValue(false))) {\n this.value = val;\n }\n return result;\n };\n QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) {\n return new MatrixDynamicRowModel(this.rowCounter++, this, value);\n };\n QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) {\n if (!val || !Array.isArray(val))\n return;\n var newRowCount = val.length;\n if (newRowCount == this.rowCount)\n return;\n if (!this.setRowCountValueFromData && newRowCount < this.initialRowCount)\n return;\n this.setRowCountValueFromData = true;\n this.rowCountValue = newRowCount;\n if (this.generatedVisibleRows) {\n this.clearGeneratedRows();\n this.generatedVisibleRows = this.visibleRows;\n this.onRowsChanged();\n }\n };\n QuestionMatrixDynamicModel.prototype.createNewValue = function () {\n var result = this.createValueCopy();\n if (!result || !Array.isArray(result))\n result = [];\n if (result.length > this.rowCount)\n result.splice(this.rowCount);\n var rowValue = this.getDefaultRowValue(false);\n rowValue = rowValue || {};\n for (var i = result.length; i < this.rowCount; i++) {\n result.push(this.getUnbindValue(rowValue));\n }\n return result;\n };\n QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) {\n var isEmpty = true;\n for (var i = 0; i < newValue.length; i++) {\n if (this.isObject(newValue[i]) && Object.keys(newValue[i]).length > 0) {\n isEmpty = false;\n break;\n }\n }\n return isEmpty ? null : newValue;\n };\n QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) {\n return Array.isArray(questionValue) &&\n index >= 0 &&\n index < questionValue.length\n ? questionValue[index]\n : null;\n };\n QuestionMatrixDynamicModel.prototype.getRowValueCore = function (row, questionValue, create) {\n if (create === void 0) { create = false; }\n if (!this.generatedVisibleRows)\n return {};\n var res = this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row));\n if (!res && create)\n res = {};\n return res;\n };\n return QuestionMatrixDynamicModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"matrixdynamic\", [\n { name: \"rowsVisibleIf:condition\", visible: false },\n { name: \"allowAddRows:boolean\", default: true },\n { name: \"allowRemoveRows:boolean\", default: true },\n { name: \"rowCount:number\", default: 2, minValue: 0, isBindable: true },\n { name: \"minRowCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxRowCount:number\",\n default: _settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].matrixMaximumRowCount,\n },\n { name: \"keyName\" },\n \"defaultRowValue:rowvalue\",\n \"defaultValueFromLastRow:boolean\",\n { name: \"confirmDelete:boolean\" },\n {\n name: \"confirmDeleteText\",\n dependsOn: \"confirmDelete\",\n visibleIf: function (obj) {\n return !obj || obj.confirmDelete;\n },\n serializationProperty: \"locConfirmDeleteText\",\n },\n {\n name: \"addRowLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"topBottom\"],\n },\n { name: \"addRowText\", serializationProperty: \"locAddRowText\" },\n { name: \"removeRowText\", serializationProperty: \"locRemoveRowText\" },\n \"hideColumnsIfEmpty:boolean\",\n {\n name: \"emptyRowsText:text\",\n serializationProperty: \"locEmptyRowsText\",\n dependsOn: \"hideColumnsIfEmpty\",\n visibleIf: function (obj) {\n return !obj || obj.hideColumnsIfEmpty;\n },\n },\n], function () {\n return new QuestionMatrixDynamicModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"matrixdynamic\", function (name) {\n var q = new QuestionMatrixDynamicModel(name);\n q.choices = [1, 2, 3, 4, 5];\n _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_0__[\"QuestionMatrixDropdownModelBase\"].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_multipletext.ts\":\n/*!**************************************!*\\\n !*** ./src/question_multipletext.ts ***!\n \\**************************************/\n/*! exports provided: MultipleTextItemModel, QuestionMultipleTextModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return MultipleTextItemModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return QuestionMultipleTextModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_text */ \"./src/question_text.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\nvar MultipleTextItemModel = /** @class */ (function (_super) {\n __extends(MultipleTextItemModel, _super);\n function MultipleTextItemModel(name, title) {\n if (name === void 0) { name = null; }\n if (title === void 0) { title = null; }\n var _this = _super.call(this) || this;\n _this.editorValue = _this.createEditor(name);\n _this.editor.questionTitleTemplateCallback = function () {\n return \"\";\n };\n _this.editor.titleLocation = \"left\";\n if (title) {\n _this.title = title;\n }\n return _this;\n }\n MultipleTextItemModel.prototype.getType = function () {\n return \"multipletextitem\";\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"id\", {\n get: function () {\n return this.editor.id;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getOriginalObj = function () {\n return this.editor;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"name\", {\n /**\n * The item name.\n */\n get: function () {\n return this.editor.name;\n },\n set: function (val) {\n this.editor.name = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"question\", {\n get: function () {\n return this.data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"editor\", {\n get: function () {\n return this.editorValue;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.createEditor = function (name) {\n return new _question_text__WEBPACK_IMPORTED_MODULE_2__[\"QuestionTextModel\"](name);\n };\n MultipleTextItemModel.prototype.addUsedLocales = function (locales) {\n _super.prototype.addUsedLocales.call(this, locales);\n this.editor.addUsedLocales(locales);\n };\n MultipleTextItemModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.editor.locStrsChanged();\n };\n MultipleTextItemModel.prototype.setData = function (data) {\n this.data = data;\n if (!!data) {\n this.editor.defaultValue = data.getItemDefaultValue(this.name);\n this.editor.setSurveyImpl(this);\n this.editor.parent = data;\n }\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"isRequired\", {\n /**\n * Set this property to true, to make the item a required. If a user doesn't fill the item then a validation error will be generated.\n */\n get: function () {\n return this.editor.isRequired;\n },\n set: function (val) {\n this.editor.isRequired = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"inputType\", {\n /**\n * Use this property to change the default input type.\n */\n get: function () {\n return this.editor.inputType;\n },\n set: function (val) {\n this.editor.inputType = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"title\", {\n /**\n * Item title. If it is empty, the item name is rendered as title. This property supports markdown.\n * @see name\n */\n get: function () {\n return this.editor.title;\n },\n set: function (val) {\n this.editor.title = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locTitle\", {\n get: function () {\n return this.editor.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"fullTitle\", {\n /**\n * Returns the text or html for rendering the title.\n */\n get: function () {\n return this.editor.fullTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.editor.maxLength;\n },\n set: function (val) {\n this.editor.maxLength = val;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getMaxLength = function () {\n var survey = this.getSurvey();\n return _helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].getMaxLength(this.maxLength, survey ? survey.maxTextLength : -1);\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"placeHolder\", {\n /**\n * The input place holder.\n */\n get: function () {\n return this.editor.placeHolder;\n },\n set: function (val) {\n this.editor.placeHolder = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.editor.locPlaceHolder;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n */\n get: function () {\n return this.editor.requiredErrorText;\n },\n set: function (val) {\n this.editor.requiredErrorText = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.editor.locRequiredErrorText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"size\", {\n /**\n * The input size.\n */\n get: function () {\n return this.editor.size;\n },\n set: function (val) {\n this.editor.size = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"validators\", {\n /**\n * The list of question validators.\n */\n get: function () {\n return this.editor.validators;\n },\n set: function (val) {\n this.editor.validators = val;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getValidators = function () {\n return this.validators;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"value\", {\n /**\n * The item value.\n */\n get: function () {\n return this.data ? this.data.getMultipleTextValue(this.name) : null;\n },\n set: function (value) {\n if (this.data != null) {\n this.data.setMultipleTextValue(this.name, value);\n }\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.isEmpty = function () {\n return this.editor.isEmpty();\n };\n MultipleTextItemModel.prototype.onValueChanged = function (newValue) {\n if (this.valueChangedCallback)\n this.valueChangedCallback(newValue);\n };\n //ISurveyImpl\n MultipleTextItemModel.prototype.getSurveyData = function () {\n return this;\n };\n MultipleTextItemModel.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n MultipleTextItemModel.prototype.getTextProcessor = function () {\n return this.data ? this.data.getTextProcessor() : null;\n };\n //ISurveyData\n MultipleTextItemModel.prototype.getValue = function (name) {\n if (!this.data)\n return null;\n return this.data.getMultipleTextValue(name);\n };\n MultipleTextItemModel.prototype.setValue = function (name, value) {\n if (this.data) {\n this.data.setMultipleTextValue(name, value);\n }\n };\n MultipleTextItemModel.prototype.getVariable = function (name) {\n return undefined;\n };\n MultipleTextItemModel.prototype.setVariable = function (name, newValue) { };\n MultipleTextItemModel.prototype.getComment = function (name) {\n return null;\n };\n MultipleTextItemModel.prototype.setComment = function (name, newValue) { };\n MultipleTextItemModel.prototype.getAllValues = function () {\n if (this.data)\n return this.data.getAllValues();\n return this.value;\n };\n MultipleTextItemModel.prototype.getFilteredValues = function () {\n return this.getAllValues();\n };\n MultipleTextItemModel.prototype.getFilteredProperties = function () {\n return { survey: this.getSurvey() };\n };\n //IValidatorOwner\n MultipleTextItemModel.prototype.getValidatorTitle = function () {\n return this.title;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"validatedValue\", {\n get: function () {\n return this.value;\n },\n set: function (val) {\n this.value = val;\n },\n enumerable: false,\n configurable: true\n });\n MultipleTextItemModel.prototype.getDataFilteredValues = function () {\n return this.getFilteredValues();\n };\n MultipleTextItemModel.prototype.getDataFilteredProperties = function () {\n return this.getFilteredProperties();\n };\n return MultipleTextItemModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n/**\n * A Model for a multiple text question.\n */\nvar QuestionMultipleTextModel = /** @class */ (function (_super) {\n __extends(QuestionMultipleTextModel, _super);\n function QuestionMultipleTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.isMultipleItemValueChanging = false;\n _this.createNewArray(\"items\", function (item) {\n item.setData(_this);\n });\n _this.registerFunctionOnPropertyValueChanged(\"items\", function () {\n _this.fireCallback(_this.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"colCount\", function () {\n _this.fireCallback(_this.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"itemSize\", function () {\n _this.updateItemsSize();\n });\n return _this;\n }\n QuestionMultipleTextModel.addDefaultItems = function (question) {\n var names = _questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].DefaultMutlipleTextItems;\n for (var i = 0; i < names.length; i++)\n question.addItem(names[i]);\n };\n QuestionMultipleTextModel.prototype.getType = function () {\n return \"multipletext\";\n };\n QuestionMultipleTextModel.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].setData(this);\n }\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.onSurveyLoad = function () {\n this.editorsOnSurveyLoad();\n _super.prototype.onSurveyLoad.call(this);\n this.fireCallback(this.colCountChangedCallback);\n };\n QuestionMultipleTextModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.performForEveryEditor(function (item) {\n item.editor.updateValueFromSurvey(item.value);\n });\n this.updateIsAnswered();\n };\n QuestionMultipleTextModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n this.performForEveryEditor(function (item) {\n item.editor.onSurveyValueChanged(item.value);\n });\n };\n QuestionMultipleTextModel.prototype.updateItemsSize = function () {\n this.performForEveryEditor(function (item) {\n item.editor.updateInputSize();\n });\n };\n QuestionMultipleTextModel.prototype.editorsOnSurveyLoad = function () {\n this.performForEveryEditor(function (item) {\n item.editor.onSurveyLoad();\n });\n };\n QuestionMultipleTextModel.prototype.performForEveryEditor = function (func) {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.editor) {\n func(item);\n }\n }\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"items\", {\n /**\n * The list of input items.\n */\n get: function () {\n return this.getPropertyValue(\"items\");\n },\n set: function (val) {\n this.setPropertyValue(\"items\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add a new text item.\n * @param name a item name\n * @param title a item title (optional)\n */\n QuestionMultipleTextModel.prototype.addItem = function (name, title) {\n if (title === void 0) { title = null; }\n var item = this.createTextItem(name, title);\n this.items.push(item);\n return item;\n };\n QuestionMultipleTextModel.prototype.getItemByName = function (name) {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].name == name)\n return this.items[i];\n }\n return null;\n };\n QuestionMultipleTextModel.prototype.addConditionObjectsByContext = function (objects, context) {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n objects.push({\n name: this.getValueName() + \".\" + item.name,\n text: this.processedTitle + \".\" + item.fullTitle,\n question: this,\n });\n }\n };\n QuestionMultipleTextModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var item = this.getItemByName(path);\n if (!item)\n return null;\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"JsonObject\"]().toJsonObject(item);\n json[\"type\"] = \"text\";\n return json;\n };\n QuestionMultipleTextModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].locStrsChanged();\n }\n };\n QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEmpty())\n return false;\n }\n return true;\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"colCount\", {\n /**\n * The number of columns. Items are rendred in one line if the value is 0.\n */\n get: function () {\n return this.getPropertyValue(\"colCount\");\n },\n set: function (val) {\n if (val < 1 || val > 5)\n return;\n this.setPropertyValue(\"colCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"itemSize\", {\n /**\n * The default text input size.\n */\n get: function () {\n return this.getPropertyValue(\"itemSize\");\n },\n set: function (val) {\n this.setPropertyValue(\"itemSize\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns the list of rendered rows.\n */\n QuestionMultipleTextModel.prototype.getRows = function () {\n var colCount = this.colCount;\n var items = this.items;\n var rows = [];\n var index = 0;\n for (var i = 0; i < items.length; i++) {\n if (index == 0) {\n rows.push([]);\n }\n rows[rows.length - 1].push(items[i]);\n index++;\n if (index >= colCount) {\n index = 0;\n }\n }\n return rows;\n };\n QuestionMultipleTextModel.prototype.onValueChanged = function () {\n _super.prototype.onValueChanged.call(this);\n this.onItemValueChanged();\n };\n QuestionMultipleTextModel.prototype.createTextItem = function (name, title) {\n return new MultipleTextItemModel(name, title);\n };\n QuestionMultipleTextModel.prototype.onItemValueChanged = function () {\n if (this.isMultipleItemValueChanging)\n return;\n for (var i = 0; i < this.items.length; i++) {\n var itemValue = null;\n if (this.value && this.items[i].name in this.value) {\n itemValue = this.value[this.items[i].name];\n }\n this.items[i].onValueChanged(itemValue);\n }\n };\n QuestionMultipleTextModel.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].editor.isRunningValidators)\n return true;\n }\n return false;\n };\n QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback, rec) {\n var _this = this;\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var res = false;\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].editor.onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n if (!!rec &&\n rec.isOnValueChanged === true &&\n this.items[i].editor.isEmpty())\n continue;\n res = this.items[i].editor.hasErrors(fireCallback, rec) || res;\n }\n return _super.prototype.hasErrors.call(this, fireCallback) || res;\n };\n QuestionMultipleTextModel.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n for (var i = 0; i < this.items.length; i++) {\n var errors = this.items[i].editor.getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n return result;\n };\n QuestionMultipleTextModel.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].editor.clearErrors();\n }\n };\n QuestionMultipleTextModel.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n if (items[i].editor.containsErrors)\n return true;\n }\n return false;\n };\n QuestionMultipleTextModel.prototype.getIsAnswered = function () {\n if (!_super.prototype.getIsAnswered.call(this))\n return false;\n for (var i = 0; i < this.items.length; i++) {\n var editor = this.items[i].editor;\n if (editor.isVisible && !editor.isAnswered)\n return false;\n }\n return true;\n };\n QuestionMultipleTextModel.prototype.getProgressInfo = function () {\n var elements = [];\n for (var i = 0; i < this.items.length; i++) {\n elements.push(this.items[i].editor);\n }\n return _base__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElement\"].getProgressInfoByElements(elements, this.isRequired);\n };\n QuestionMultipleTextModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!value)\n return value;\n var res = {};\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var val = value[item.name];\n if (_helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].isValueEmpty(val))\n continue;\n var itemName = item.name;\n if (keysAsText && !!item.title) {\n itemName = item.title;\n }\n res[itemName] = item.editor.getDisplayValue(keysAsText, val);\n }\n return res;\n };\n //IMultipleTextData\n QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) {\n if (!this.value)\n return null;\n return this.value[name];\n };\n QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) {\n this.isMultipleItemValueChanging = true;\n if (this.isValueEmpty(value)) {\n value = undefined;\n }\n var newValue = this.value;\n if (!newValue) {\n newValue = {};\n }\n newValue[name] = value;\n this.setNewValue(newValue);\n this.isMultipleItemValueChanging = false;\n };\n QuestionMultipleTextModel.prototype.getItemDefaultValue = function (name) {\n return !!this.defaultValue ? this.defaultValue[name] : null;\n };\n QuestionMultipleTextModel.prototype.getTextProcessor = function () {\n return this.textProcessor;\n };\n QuestionMultipleTextModel.prototype.getAllValues = function () {\n return this.data ? this.data.getAllValues() : null;\n };\n QuestionMultipleTextModel.prototype.getIsRequiredText = function () {\n return this.survey ? this.survey.requiredText : \"\";\n };\n //IPanel\n QuestionMultipleTextModel.prototype.addElement = function (element, index) { };\n QuestionMultipleTextModel.prototype.removeElement = function (element) {\n return false;\n };\n QuestionMultipleTextModel.prototype.getQuestionTitleLocation = function () {\n return \"left\";\n };\n QuestionMultipleTextModel.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n QuestionMultipleTextModel.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n QuestionMultipleTextModel.prototype.elementWidthChanged = function (el) { };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"elements\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.indexOf = function (el) {\n return -1;\n };\n QuestionMultipleTextModel.prototype.ensureRowsVisibility = function () {\n // do nothing\n };\n return QuestionMultipleTextModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"multipletextitem\", [\n \"name\",\n \"isRequired:boolean\",\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n {\n name: \"inputType\",\n default: \"text\",\n choices: [\n \"color\",\n \"date\",\n \"datetime\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"range\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n ],\n },\n { name: \"title\", serializationProperty: \"locTitle\" },\n { name: \"maxLength:number\", default: -1 },\n { name: \"size:number\", minValue: 0 },\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n], function () {\n return new MultipleTextItemModel(\"\");\n});\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"multipletext\", [\n { name: \"!items:textitems\", className: \"multipletextitem\" },\n { name: \"itemSize:number\", minValue: 0 },\n { name: \"colCount:number\", default: 1, choices: [1, 2, 3, 4, 5] },\n], function () {\n return new QuestionMultipleTextModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].Instance.registerQuestion(\"multipletext\", function (name) {\n var q = new QuestionMultipleTextModel(name);\n QuestionMultipleTextModel.addDefaultItems(q);\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_paneldynamic.ts\":\n/*!**************************************!*\\\n !*** ./src/question_paneldynamic.ts ***!\n \\**************************************/\n/*! exports provided: QuestionPanelDynamicItem, QuestionPanelDynamicTemplateSurveyImpl, QuestionPanelDynamicModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return QuestionPanelDynamicItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicTemplateSurveyImpl\", function() { return QuestionPanelDynamicTemplateSurveyImpl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return QuestionPanelDynamicModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\n\n\n\n\n\n\n\n\n\n\nvar QuestionPanelDynamicItemTextProcessor = /** @class */ (function (_super) {\n __extends(QuestionPanelDynamicItemTextProcessor, _super);\n function QuestionPanelDynamicItemTextProcessor(data, panelItem, variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.data = data;\n _this.panelItem = panelItem;\n _this.variableName = variableName;\n return _this;\n }\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"survey\", {\n get: function () {\n return this.panelItem.getSurvey();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panel\", {\n get: function () {\n return this.panelItem.panel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicItemTextProcessor.prototype, \"panelIndex\", {\n get: function () {\n return !!this.data ? this.data.getItemIndex(this.panelItem) : -1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicItemTextProcessor.prototype.getValues = function () {\n return this.panelItem.getAllValues();\n };\n QuestionPanelDynamicItemTextProcessor.prototype.getQuestionByName = function (name) {\n var res = _super.prototype.getQuestionByName.call(this, name);\n if (!!res)\n return res;\n var index = this.panelIndex;\n return index > -1\n ? this.data.getSharedQuestionFromArray(name, index)\n : null;\n };\n QuestionPanelDynamicItemTextProcessor.prototype.onCustomProcessText = function (textValue) {\n if (textValue.name == QuestionPanelDynamicItem.IndexVariableName) {\n var index = this.panelIndex;\n if (index > -1) {\n textValue.isExists = true;\n textValue.value = index + 1;\n return true;\n }\n }\n if (textValue.name.indexOf(QuestionPanelDynamicItem.ParentItemVariableName + \".\") == 0) {\n var q = this.data;\n if (!!q && !!q.parentQuestion && !!q.parent) {\n var data = q.parent.data;\n var processor = new QuestionPanelDynamicItemTextProcessor(q.parentQuestion, data, QuestionPanelDynamicItem.ItemVariableName);\n var text = textValue.name.replace(QuestionPanelDynamicItem.ParentItemVariableName, QuestionPanelDynamicItem.ItemVariableName);\n var res = processor.processValue(text, textValue.returnDisplayValue);\n textValue.isExists = res.isExists;\n textValue.value = res.value;\n }\n return true;\n }\n return false;\n };\n return QuestionPanelDynamicItemTextProcessor;\n}(_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__[\"QuestionTextProcessor\"]));\nvar QuestionPanelDynamicItem = /** @class */ (function () {\n function QuestionPanelDynamicItem(data, panel) {\n this.data = data;\n this.panelValue = panel;\n this.textPreProcessor = new QuestionPanelDynamicItemTextProcessor(data, this, QuestionPanelDynamicItem.ItemVariableName);\n this.setSurveyImpl();\n }\n Object.defineProperty(QuestionPanelDynamicItem.prototype, \"panel\", {\n get: function () {\n return this.panelValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicItem.prototype.setSurveyImpl = function () {\n this.panel.setSurveyImpl(this);\n };\n QuestionPanelDynamicItem.prototype.getValue = function (name) {\n var values = this.getAllValues();\n return values[name];\n };\n QuestionPanelDynamicItem.prototype.setValue = function (name, newValue) {\n this.data.setPanelItemData(this, name, newValue);\n };\n QuestionPanelDynamicItem.prototype.getVariable = function (name) {\n return undefined;\n };\n QuestionPanelDynamicItem.prototype.setVariable = function (name, newValue) { };\n QuestionPanelDynamicItem.prototype.getComment = function (name) {\n var result = this.getValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix);\n return result ? result : \"\";\n };\n QuestionPanelDynamicItem.prototype.setComment = function (name, newValue, locNotification) {\n this.setValue(name + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix, newValue);\n };\n QuestionPanelDynamicItem.prototype.getAllValues = function () {\n return this.data.getPanelItemData(this);\n };\n QuestionPanelDynamicItem.prototype.getFilteredValues = function () {\n var values = {};\n var surveyValues = !!this.data && !!this.data.getRootData()\n ? this.data.getRootData().getFilteredValues()\n : {};\n for (var key in surveyValues) {\n values[key] = surveyValues[key];\n }\n values[QuestionPanelDynamicItem.ItemVariableName] = this.getAllValues();\n if (!!this.data) {\n values[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = this.data.getItemIndex(this);\n }\n return values;\n };\n QuestionPanelDynamicItem.prototype.getFilteredProperties = function () {\n if (!!this.data && !!this.data.getRootData())\n return this.data.getRootData().getFilteredProperties();\n return { survey: this.getSurvey() };\n };\n QuestionPanelDynamicItem.prototype.getSurveyData = function () {\n return this;\n };\n QuestionPanelDynamicItem.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n QuestionPanelDynamicItem.prototype.getTextProcessor = function () {\n return this.textPreProcessor;\n };\n QuestionPanelDynamicItem.ItemVariableName = \"panel\";\n QuestionPanelDynamicItem.ParentItemVariableName = \"parentPanel\";\n QuestionPanelDynamicItem.IndexVariableName = \"panelIndex\";\n return QuestionPanelDynamicItem;\n}());\n\nvar QuestionPanelDynamicTemplateSurveyImpl = /** @class */ (function () {\n function QuestionPanelDynamicTemplateSurveyImpl(data) {\n this.data = data;\n }\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurveyData = function () {\n return null;\n };\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurvey = function () {\n return this.data.getSurvey();\n };\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getTextProcessor = function () {\n return null;\n };\n return QuestionPanelDynamicTemplateSurveyImpl;\n}());\n\n/**\n * A Model for a panel dymanic question. You setup the template panel, but adding elements (any question or a panel) and assign a text to it's title, and this panel will be used as a template on creating dynamic panels. The number of panels is defined by panelCount property.\n * An end-user may dynamically add/remove panels, unless you forbidden this.\n */\nvar QuestionPanelDynamicModel = /** @class */ (function (_super) {\n __extends(QuestionPanelDynamicModel, _super);\n function QuestionPanelDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.loadingPanelCount = 0;\n _this.currentIndexValue = -1;\n _this.isAddingNewPanels = false;\n _this.createNewArray(\"panels\");\n _this.templateValue = _this.createAndSetupNewPanelObject();\n _this.template.renderWidth = \"100%\";\n _this.template.selectedElementInDesign = _this;\n var self = _this;\n _this.template.addElementCallback = function (element) {\n self.addOnPropertyChangedCallback(element);\n self.rebuildPanels();\n };\n _this.template.removeElementCallback = function (element) {\n self.rebuildPanels();\n };\n _this.createLocalizableString(\"confirmDeleteText\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.createLocalizableString(\"panelAddText\", _this);\n _this.createLocalizableString(\"panelRemoveText\", _this);\n _this.createLocalizableString(\"panelPrevText\", _this);\n _this.createLocalizableString(\"panelNextText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"panelsState\", function () {\n self.setPanelsState();\n });\n return _this;\n }\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.setTemplatePanelSurveyImpl();\n this.setPanelsSurveyImpl();\n };\n QuestionPanelDynamicModel.prototype.assignOnPropertyChangedToTemplate = function () {\n var elements = this.template.elements;\n for (var i = 0; i < elements.length; i++) {\n this.addOnPropertyChangedCallback(elements[i]);\n }\n };\n QuestionPanelDynamicModel.prototype.addOnPropertyChangedCallback = function (element) {\n var self = this;\n element.onPropertyChanged.add(function (element, options) {\n self.onTemplateElementPropertyChanged(element, options);\n });\n if (element.isPanel) {\n element.addElementCallback = function (element) {\n self.addOnPropertyChangedCallback(element);\n };\n }\n };\n QuestionPanelDynamicModel.prototype.onTemplateElementPropertyChanged = function (element, options) {\n if (this.isLoadingFromJson || this.isDesignMode || this.panels.length == 0)\n return;\n var property = _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].findProperty(element.getType(), options.name);\n if (!property)\n return;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n var question = panels[i].getQuestionByName(element.name);\n if (!!question && question[options.name] !== options.newValue) {\n question[options.name] = options.newValue;\n }\n }\n };\n QuestionPanelDynamicModel.prototype.getType = function () {\n return \"paneldynamic\";\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.clearOnDeletingContainer = function () {\n this.panels.forEach(function (panel) {\n panel.clearOnDeletingContainer();\n });\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.removeElement = function (element) {\n return this.template.removeElement(element);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"template\", {\n /**\n * The template Panel. This panel is used as a template on creatign dynamic panels\n * @see templateElements\n * @see templateTitle\n * @see panelCount\n */\n get: function () {\n return this.templateValue;\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getPanel = function () {\n return this.template;\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateElements\", {\n /**\n * The template Panel elements, questions and panels.\n * @see templateElements\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.template.elements;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitle\", {\n /**\n * The template Panel title property.\n * @see templateElements\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.template.title;\n },\n set: function (newValue) {\n this.template.title = newValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateTitle\", {\n get: function () {\n return this.template.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateDescription\", {\n /**\n * The template Panel description property.\n * @see templateElements\n * @see template\n * @see panelCount\n * @see templateTitle\n */\n get: function () {\n return this.template.description;\n },\n set: function (newValue) {\n this.template.description = newValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateDescription\", {\n get: function () {\n return this.template.locDescription;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"items\", {\n get: function () {\n var res = [];\n for (var i = 0; i < this.panels.length; i++) {\n res.push(this.panels[i].data);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panels\", {\n /**\n * The array of dynamic panels created based on panel template\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.getPropertyValue(\"panels\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentIndex\", {\n /**\n * The index of current active dynamical panel when the renderMode is not \"list\". If there is no dymamic panel (panelCount = 0) or renderMode equals \"list\" it returns -1, otherwise it returns a value from 0 to panelCount - 1.\n * @see currentPanel\n * @see panels\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n if (this.isRenderModeList)\n return -1;\n if (this.isDesignMode)\n return 0;\n if (this.currentIndexValue < 0 && this.panelCount > 0) {\n this.currentIndexValue = 0;\n }\n if (this.currentIndexValue >= this.panelCount) {\n this.currentIndexValue = this.panelCount - 1;\n }\n return this.currentIndexValue;\n },\n set: function (val) {\n if (this.currentIndexValue !== val) {\n if (val >= this.panelCount)\n val = this.panelCount - 1;\n this.currentIndexValue = val;\n this.fireCallback(this.currentIndexChangedCallback);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentPanel\", {\n /**\n * The current active dynamical panel when the renderMode is not \"list\". If there is no dymamic panel (panelCount = 0) or renderMode equals \"list\" it returns null.\n * @see currenIndex\n * @see panels\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n var index = this.currentIndex;\n if (index < 0 || index >= this.panels.length)\n return null;\n return this.panels[index];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDelete\", {\n /**\n * Set it to true, to show a confirmation dialog on removing a panel\n * @see ConfirmDeleteText\n */\n get: function () {\n return this.getPropertyValue(\"confirmDelete\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"confirmDelete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyName\", {\n /**\n * Set it to a question name used in the template panel and the library shows duplication error, if there are same values in different panels of this question.\n * @see keyDuplicationError\n */\n get: function () {\n return this.getPropertyValue(\"keyName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"keyName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDeleteText\", {\n /**\n * Use this property to change the default text showing in the confirmation delete dialog on removing a panel.\n */\n get: function () {\n return this.getLocalizableStringText(\"confirmDeleteText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see keyName\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelPrevText\", {\n /**\n * Use this property to change the default previous button text. Previous button shows the previous panel, change the currentPanel, when the renderMode doesn't equal to \"list\".\n * @see currentPanel\n * @see currentIndex\n * @see renderMode\n */\n get: function () {\n return this.getLocalizableStringText(\"panelPrevText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"pagePrevText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelPrevText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelPrevText\", {\n get: function () {\n return this.getLocalizableString(\"panelPrevText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelNextText\", {\n /**\n * Use this property to change the default next button text. Next button shows the next panel, change the currentPanel, when the renderMode doesn't equal to \"list\".\n * @see currentPanel\n * @see currentIndex\n * @see renderMode\n */\n get: function () {\n return this.getLocalizableStringText(\"panelNextText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"pageNextText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelNextText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelNextText\", {\n get: function () {\n return this.getLocalizableString(\"panelNextText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelAddText\", {\n /**\n * Use this property to change the default value of add panel button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"panelAddText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"addPanel\"));\n },\n set: function (value) {\n this.setLocalizableStringText(\"panelAddText\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelAddText\", {\n get: function () {\n return this.getLocalizableString(\"panelAddText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveText\", {\n /**\n * Use this property to change the default value of remove panel button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"panelRemoveText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"removePanel\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelRemoveText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelRemoveText\", {\n get: function () {\n return this.getLocalizableString(\"panelRemoveText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressTopShowing\", {\n /**\n * Returns true when the renderMode equals to \"progressTop\" or \"progressTopBottom\"\n */\n get: function () {\n return (this.renderMode == \"progressTop\" || this.renderMode == \"progressTopBottom\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressBottomShowing\", {\n /**\n * Returns true when the renderMode equals to \"progressBottom\" or \"progressTopBottom\"\n */\n get: function () {\n return (this.renderMode == \"progressBottom\" ||\n this.renderMode == \"progressTopBottom\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isPrevButtonShowing\", {\n /**\n * Returns true when currentIndex is more than 0.\n * @see currenIndex\n * @see currenPanel\n */\n get: function () {\n return this.currentIndex > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isNextButtonShowing\", {\n /**\n * Returns true when currentIndex is more than or equal 0 and less than panelCount - 1.\n * @see currenIndex\n * @see currenPanel\n * @see panelCount\n */\n get: function () {\n return this.currentIndex >= 0 && this.currentIndex < this.panelCount - 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRangeShowing\", {\n /**\n * Returns true when showRangeInProgress equals to true, renderMode doesn't equal to \"list\" and panelCount is >= 2.\n */\n get: function () {\n return (this.showRangeInProgress && this.currentIndex >= 0 && this.panelCount > 1);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return includeHidden ? [this.template] : this.templateElements;\n };\n QuestionPanelDynamicModel.prototype.prepareValueForPanelCreating = function () {\n this.addingNewPanelsValue = this.value;\n this.isAddingNewPanels = true;\n this.isNewPanelsValueChanged = false;\n };\n QuestionPanelDynamicModel.prototype.setValueAfterPanelsCreating = function () {\n this.isAddingNewPanels = false;\n if (this.isNewPanelsValueChanged) {\n this.isValueChangingInternally = true;\n this.value = this.addingNewPanelsValue;\n this.isValueChangingInternally = false;\n }\n };\n QuestionPanelDynamicModel.prototype.getValueCore = function () {\n return this.isAddingNewPanels\n ? this.addingNewPanelsValue\n : _super.prototype.getValueCore.call(this);\n };\n QuestionPanelDynamicModel.prototype.setValueCore = function (newValue) {\n if (this.isAddingNewPanels) {\n this.isNewPanelsValueChanged = true;\n this.addingNewPanelsValue = newValue;\n }\n else {\n _super.prototype.setValueCore.call(this, newValue);\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelCount\", {\n /**\n * Use this property to get/set the number of dynamic panels.\n * @see template\n * @see minPanelCount\n * @see maxPanelCount\n * @see addPanel\n * @see removePanel\n * @see removePanelUI\n */\n get: function () {\n return this.isLoadingFromJson || this.isDesignMode\n ? this.loadingPanelCount\n : this.panels.length;\n },\n set: function (val) {\n if (val < 0)\n return;\n if (this.isLoadingFromJson || this.isDesignMode) {\n this.loadingPanelCount = val;\n return;\n }\n if (val == this.panels.length || this.isDesignMode)\n return;\n this.updateBindings(\"panelCount\", val);\n this.prepareValueForPanelCreating();\n for (var i = this.panelCount; i < val; i++) {\n var panel = this.createNewPanel();\n this.panels.push(panel);\n if (this.renderMode == \"list\" && this.panelsState != \"default\") {\n if (this.panelsState === \"expand\") {\n panel.expand();\n }\n else {\n if (!!panel.title) {\n panel.collapse();\n }\n }\n }\n }\n if (val < this.panelCount)\n this.panels.splice(val, this.panelCount - val);\n this.setValueAfterPanelsCreating();\n this.setValueBasedOnPanelCount();\n this.reRunCondition();\n this.fireCallback(this.panelCountChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelsState\", {\n /**\n * Use this property to allow the end-user to collapse/expand the panels. It works only if the renderMode property equals to \"list\" and templateTitle property is not empty. The following values are available:\n *
default - the default value. User can't collapse/expand panels\n *
expanded - User can collapse/expand panels and all panels are expanded by default\n *
collapsed - User can collapse/expand panels and all panels are collapsed by default\n *
firstExpanded - User can collapse/expand panels. The first panel is expanded and others are collapsed\n * @see renderMode\n * @see templateTitle\n */\n get: function () {\n return this.getPropertyValue(\"panelsState\");\n },\n set: function (val) {\n this.setPropertyValue(\"panelsState\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setTemplatePanelSurveyImpl = function () {\n this.template.setSurveyImpl(this.isDesignMode\n ? this.surveyImpl\n : new QuestionPanelDynamicTemplateSurveyImpl(this));\n };\n QuestionPanelDynamicModel.prototype.setPanelsSurveyImpl = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var panel = this.panels[i];\n if (panel == this.template)\n continue;\n panel.setSurveyImpl(panel.data);\n }\n };\n QuestionPanelDynamicModel.prototype.setPanelsState = function () {\n if (this.isDesignMode || this.renderMode != \"list\" || !this.templateTitle)\n return;\n for (var i = 0; i < this.panels.length; i++) {\n var state = this.panelsState;\n if (state === \"firstExpanded\") {\n state = i === 0 ? \"expanded\" : \"collapsed\";\n }\n this.panels[i].state = state;\n }\n };\n QuestionPanelDynamicModel.prototype.setValueBasedOnPanelCount = function () {\n var value = this.value;\n if (!value || !Array.isArray(value))\n value = [];\n if (value.length == this.panelCount)\n return;\n for (var i = value.length; i < this.panelCount; i++)\n value.push({});\n if (value.length > this.panelCount) {\n value.splice(this.panelCount, value.length - this.panelCount);\n }\n this.isValueChangingInternally = true;\n this.value = value;\n this.isValueChangingInternally = false;\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"minPanelCount\", {\n /**\n * The minimum panel count. A user could not delete a panel if the panelCount equals to minPanelCount\n * @see panelCount\n * @see maxPanelCount\n */\n get: function () {\n return this.getPropertyValue(\"minPanelCount\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n if (val == this.minPanelCount)\n return;\n this.setPropertyValue(\"minPanelCount\", val);\n if (val > this.maxPanelCount)\n this.maxPanelCount = val;\n if (this.panelCount < val)\n this.panelCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"maxPanelCount\", {\n /**\n * The maximum panel count. A user could not add a panel if the panelCount equals to maxPanelCount\n * @see panelCount\n * @see minPanelCount\n */\n get: function () {\n return this.getPropertyValue(\"maxPanelCount\", _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount;\n if (val == this.maxPanelCount)\n return;\n this.setPropertyValue(\"maxPanelCount\", val);\n if (val < this.minPanelCount)\n this.minPanelCount = val;\n if (this.panelCount > val)\n this.panelCount = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowAddPanel\", {\n /**\n * Set this property to false to hide the 'Add New' button\n * @see allowRemovePanel\n */\n get: function () {\n return this.getPropertyValue(\"allowAddPanel\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowAddPanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowRemovePanel\", {\n /**\n * Set this property to false to hide the 'Remove' button\n * @see allowAddPanel\n */\n get: function () {\n return this.getPropertyValue(\"allowRemovePanel\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemovePanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for the template questions.\n * @see SurveyModel.questionTitleLocation\n * @see PanelModelBase.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"templateTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"templateTitleLocation\", value.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showQuestionNumbers\", {\n /**\n * Use this property to show/hide the numbers in titles in questions inside a dynamic panel.\n * By default the value is \"off\". You may set it to \"onPanel\" and the first question inside a dynamic panel will start with 1 or \"onSurvey\" to include nested questions in dymamic panels into global survey question numbering.\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\");\n },\n set: function (val) {\n this.setPropertyValue(\"showQuestionNumbers\", val);\n if (!this.isLoadingFromJson && this.survey) {\n this.survey.questionVisibilityChanged(this, this.visible);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveButtonLocation\", {\n /**\n * Use this property to change the location of the remove button relative to the panel.\n * By default the value is \"bottom\". You may set it to \"right\" and remove button will appear to the right of the panel.\n */\n get: function () {\n return this.getPropertyValue(\"panelRemoveButtonLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"panelRemoveButtonLocation\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showRangeInProgress\", {\n /**\n * Shows the range from 1 to panelCount when renderMode doesn't equal to \"list\". Set to false to hide this element.\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n return this.getPropertyValue(\"showRangeInProgress\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showRangeInProgress\", val);\n this.fireCallback(this.currentIndexChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"renderMode\", {\n /**\n * By default the property equals to \"list\" and all dynamic panels are rendered one by one on the page. You may change it to: \"progressTop\", \"progressBottom\" or \"progressTopBottom\" to render only one dynamic panel at once. The progress and navigation elements can be rendred on top, bottom or both.\n */\n get: function () {\n return this.getPropertyValue(\"renderMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderMode\", val);\n this.fireCallback(this.renderModeChangedCallback);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRenderModeList\", {\n /**\n * Returns true when renderMode equals to \"list\".\n * @see renderMode\n */\n get: function () {\n return this.renderMode == \"list\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setVisibleIndex = function (value) {\n if (!this.isVisible)\n return 0;\n var startIndex = this.showQuestionNumbers == \"onSurvey\" ? value : 0;\n for (var i = 0; i < this.panels.length; i++) {\n var counter = this.setPanelVisibleIndex(this.panels[i], startIndex, this.showQuestionNumbers != \"off\");\n if (this.showQuestionNumbers == \"onSurvey\") {\n startIndex += counter;\n }\n }\n _super.prototype.setVisibleIndex.call(this, this.showQuestionNumbers != \"onSurvey\" ? value : -1);\n return this.showQuestionNumbers != \"onSurvey\" ? 1 : startIndex - value;\n };\n QuestionPanelDynamicModel.prototype.setPanelVisibleIndex = function (panel, index, showIndex) {\n if (!showIndex) {\n panel.setVisibleIndex(-1);\n return 0;\n }\n return panel.setVisibleIndex(index);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canAddPanel\", {\n /**\n * Returns true when an end user may add a new panel. The question is not read only and panelCount less than maxPanelCount\n * @see isReadOnly\n * @see panelCount\n * @see maxPanelCount\n */\n get: function () {\n if (this.survey && this.survey.isDesignMode)\n return false;\n return (this.allowAddPanel &&\n !this.isReadOnly &&\n this.panelCount < this.maxPanelCount);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canRemovePanel\", {\n /**\n * Returns true when an end user may remove a panel. The question is not read only and panelCount is more than minPanelCount\n * @see isReadOnly\n * @see panelCount\n * @see minPanelCount\n */\n get: function () {\n if (this.survey && this.survey.isDesignMode)\n return false;\n return (this.allowRemovePanel &&\n !this.isReadOnly &&\n this.panelCount > this.minPanelCount);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.rebuildPanels = function () {\n var _a;\n if (this.isLoadingFromJson)\n return;\n this.prepareValueForPanelCreating();\n var panels = [];\n if (this.isDesignMode) {\n new QuestionPanelDynamicItem(this, this.template);\n panels.push(this.template);\n }\n else {\n for (var i = 0; i < this.panelCount; i++) {\n panels.push(this.createNewPanel());\n }\n }\n (_a = this.panels).splice.apply(_a, __spreadArray([0, this.panels.length], panels));\n this.setValueAfterPanelsCreating();\n this.setPanelsState();\n this.reRunCondition();\n this.fireCallback(this.panelCountChangedCallback);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultPanelValue\", {\n /**\n * If it is not empty, then this value is set to every new panel, including panels created initially, unless the defaultValue is not empty\n * @see defaultValue\n * @see defaultValueFromLastRow\n */\n get: function () {\n return this.getPropertyValue(\"defaultPanelValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultPanelValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultValueFromLastPanel\", {\n /**\n * Set it to true to copy the value into new added panel from the last panel. If defaultPanelValue is set and this property equals to true,\n * then the value for new added panel is merging.\n * @see defaultValue\n * @see defaultPanelValue\n */\n get: function () {\n return this.getPropertyValue(\"defaultValueFromLastPanel\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueFromLastPanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultPanelValue));\n };\n QuestionPanelDynamicModel.prototype.setDefaultValue = function () {\n if (this.isValueEmpty(this.defaultPanelValue) ||\n !this.isValueEmpty(this.defaultValue)) {\n _super.prototype.setDefaultValue.call(this);\n return;\n }\n if (!this.isEmpty() || this.panelCount == 0)\n return;\n var newValue = [];\n for (var i = 0; i < this.panelCount; i++) {\n newValue.push(this.defaultPanelValue);\n }\n this.value = newValue;\n };\n QuestionPanelDynamicModel.prototype.isEmpty = function () {\n var val = this.value;\n if (!val || !Array.isArray(val))\n return true;\n for (var i = 0; i < val.length; i++) {\n if (!this.isRowEmpty(val[i]))\n return false;\n }\n return true;\n };\n QuestionPanelDynamicModel.prototype.getProgressInfo = function () {\n return _base__WEBPACK_IMPORTED_MODULE_1__[\"SurveyElement\"].getProgressInfoByElements(this.panels, this.isRequired);\n };\n QuestionPanelDynamicModel.prototype.isRowEmpty = function (val) {\n for (var prop in val) {\n if (val.hasOwnProperty(prop))\n return false;\n }\n return true;\n };\n /**\n * Add a new dynamic panel based on the template Panel. It checks if canAddPanel returns true and then calls addPanel method.\n * @see template\n * @see panelCount\n * @see panels\n * @see canAddPanel\n */\n QuestionPanelDynamicModel.prototype.addPanelUI = function () {\n if (!this.canAddPanel)\n return null;\n var newPanel = this.addPanel();\n if (this.renderMode === \"list\" && this.panelsState !== \"default\") {\n newPanel.expand();\n }\n return newPanel;\n };\n /**\n * Add a new dynamic panel based on the template Panel.\n * @see template\n * @see panelCount\n * @see panels\n */\n QuestionPanelDynamicModel.prototype.addPanel = function () {\n this.panelCount++;\n if (!this.isRenderModeList) {\n this.currentIndex = this.panelCount - 1;\n }\n var newValue = this.value;\n var hasModified = false;\n if (!this.isValueEmpty(this.defaultPanelValue)) {\n if (!!newValue &&\n Array.isArray(newValue) &&\n newValue.length == this.panelCount) {\n hasModified = true;\n this.copyValue(newValue[newValue.length - 1], this.defaultPanelValue);\n }\n }\n if (this.defaultValueFromLastPanel &&\n !!newValue &&\n Array.isArray(newValue) &&\n newValue.length > 1 &&\n newValue.length == this.panelCount) {\n hasModified = true;\n this.copyValue(newValue[newValue.length - 1], newValue[newValue.length - 2]);\n }\n if (hasModified) {\n this.value = newValue;\n }\n if (this.survey)\n this.survey.dynamicPanelAdded(this);\n return this.panels[this.panelCount - 1];\n };\n QuestionPanelDynamicModel.prototype.copyValue = function (src, dest) {\n for (var key in dest) {\n src[key] = dest[key];\n }\n };\n /**\n * Call removePanel function. Do nothing is canRemovePanel returns false. If confirmDelete set to true, it shows the confirmation dialog first.\n * @param value a panel or panel index\n * @see removePanel\n * @see confirmDelete\n * @see confirmDeleteText\n * @see canRemovePanel\n *\n */\n QuestionPanelDynamicModel.prototype.removePanelUI = function (value) {\n if (!this.canRemovePanel)\n return;\n if (!this.confirmDelete || Object(_utils_utils__WEBPACK_IMPORTED_MODULE_9__[\"confirmAction\"])(this.confirmDeleteText)) {\n this.removePanel(value);\n }\n };\n /**\n * Goes to the next panel in the PanelDynamic\n *\n */\n QuestionPanelDynamicModel.prototype.goToNextPanel = function () {\n if (this.renderMode !== \"list\" && this.currentPanel.hasErrors())\n return;\n this.currentIndex++;\n };\n /**\n * Goes to the previous panel in the PanelDynamic\n *\n */\n QuestionPanelDynamicModel.prototype.goToPrevPanel = function () {\n this.currentIndex--;\n };\n /**\n * Removes a dynamic panel from the panels array.\n * @param value a panel or panel index\n * @see panels\n * @see template\n */\n QuestionPanelDynamicModel.prototype.removePanel = function (value) {\n var index = this.getPanelIndex(value);\n if (index < 0 || index >= this.panelCount)\n return;\n var panel = this.panels[index];\n this.panels.splice(index, 1);\n this.updateBindings(\"panelCount\", this.panelCount);\n var value = this.value;\n if (!value || !Array.isArray(value) || index >= value.length)\n return;\n this.isValueChangingInternally = true;\n value.splice(index, 1);\n this.value = value;\n this.fireCallback(this.panelCountChangedCallback);\n if (this.survey)\n this.survey.dynamicPanelRemoved(this, index, panel);\n this.isValueChangingInternally = false;\n };\n QuestionPanelDynamicModel.prototype.getPanelIndex = function (val) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(val))\n return val;\n var items = this.items;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i] === val || items[i] === val)\n return i;\n }\n return -1;\n };\n QuestionPanelDynamicModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n panels[i].locStrsChanged();\n }\n };\n QuestionPanelDynamicModel.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.panels.length; i++) {\n this.clearIncorrectValuesInPanel(i);\n }\n };\n QuestionPanelDynamicModel.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].clearErrors();\n }\n };\n QuestionPanelDynamicModel.prototype.getQuestionFromArray = function (name, index) {\n if (index >= this.panelCount)\n return null;\n return this.panels[index].getQuestionByName(name);\n };\n QuestionPanelDynamicModel.prototype.clearIncorrectValuesInPanel = function (index) {\n var panel = this.panels[index];\n panel.clearIncorrectValues();\n var val = this.value;\n var values = !!val && index < val.length ? val[index] : null;\n if (!values)\n return;\n var isChanged = false;\n for (var key in values) {\n if (this.getSharedQuestionFromArray(key, index))\n continue;\n var q = panel.getQuestionByName(key);\n if (!!q)\n continue;\n if (this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix) ||\n this.iscorrectValueWithPostPrefix(panel, key, _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].matrixTotalValuePostFix))\n continue;\n delete values[key];\n isChanged = true;\n }\n if (isChanged) {\n val[index] = values;\n this.value = val;\n }\n };\n QuestionPanelDynamicModel.prototype.iscorrectValueWithPostPrefix = function (panel, key, postPrefix) {\n if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n return false;\n return !!panel.getQuestionByName(key.substr(0, key.indexOf(postPrefix)));\n };\n QuestionPanelDynamicModel.prototype.getSharedQuestionFromArray = function (name, panelIndex) {\n return !!this.survey && !!this.valueName\n ? (this.survey.getQuestionByValueNameFromArray(this.valueName, name, panelIndex))\n : null;\n };\n QuestionPanelDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context\n ? this.template.questions.indexOf(context) > -1\n : false;\n var prefixName = this.getValueName() + \"[0].\";\n var prefixText = this.processedTitle + \"[0].\";\n var panelObjs = new Array();\n var questions = this.template.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].addConditionObjectsByContext(panelObjs, context);\n }\n for (var i = 0; i < panelObjs.length; i++) {\n objects.push({\n name: prefixName + panelObjs[i].name,\n text: prefixText + panelObjs[i].text,\n question: panelObjs[i].question,\n });\n }\n if (hasContext) {\n for (var i = 0; i < panelObjs.length; i++) {\n if (panelObjs[i].question == context)\n continue;\n objects.push({\n name: \"panel.\" + panelObjs[i].name,\n text: \"panel.\" + panelObjs[i].text,\n question: panelObjs[i].question,\n });\n }\n }\n };\n QuestionPanelDynamicModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this, operator, path);\n var questionName = path;\n var pos = path.indexOf(\".\");\n if (pos > -1) {\n questionName = path.substr(0, pos);\n path = path.substr(pos + 1);\n }\n var question = this.template.getQuestionByName(questionName);\n if (!question)\n return null;\n return question.getConditionJson(operator, path);\n };\n QuestionPanelDynamicModel.prototype.onReadOnlyChanged = function () {\n var readOnly = this.isReadOnly;\n this.template.readOnly = readOnly;\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].readOnly = readOnly;\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n QuestionPanelDynamicModel.prototype.onSurveyLoad = function () {\n this.template.readOnly = this.isReadOnly;\n this.template.onSurveyLoad();\n if (this.loadingPanelCount > 0) {\n this.panelCount = this.loadingPanelCount;\n }\n if (this.isDesignMode) {\n this.rebuildPanels();\n }\n this.setPanelsSurveyImpl();\n this.setPanelsState();\n this.assignOnPropertyChangedToTemplate();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionPanelDynamicModel.prototype.onFirstRendering = function () {\n this.template.onFirstRendering();\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].onFirstRendering();\n }\n _super.prototype.onFirstRendering.call(this);\n };\n QuestionPanelDynamicModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runPanelsCondition(values, properties);\n };\n QuestionPanelDynamicModel.prototype.reRunCondition = function () {\n if (!this.data)\n return;\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n };\n QuestionPanelDynamicModel.prototype.runPanelsCondition = function (values, properties) {\n var cachedValues = {};\n if (values && values instanceof Object) {\n cachedValues = JSON.parse(JSON.stringify(values));\n }\n for (var i = 0; i < this.panels.length; i++) {\n var panelValues = this.getPanelItemData(this.panels[i].data);\n //Should be unique for every panel due async expression support\n var newValues = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(cachedValues);\n newValues[QuestionPanelDynamicItem.ItemVariableName.toLowerCase()] = panelValues;\n newValues[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = i;\n this.panels[i].runCondition(newValues, properties);\n }\n };\n QuestionPanelDynamicModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].onAnyValueChanged(name);\n this.panels[i].onAnyValueChanged(QuestionPanelDynamicItem.ItemVariableName);\n }\n };\n QuestionPanelDynamicModel.prototype.hasKeysDuplicated = function (fireCallback, rec) {\n if (rec === void 0) { rec = null; }\n var keyValues = [];\n var res;\n for (var i = 0; i < this.panels.length; i++) {\n res =\n this.isValueDuplicated(this.panels[i], keyValues, rec, fireCallback) ||\n res;\n }\n return res;\n };\n QuestionPanelDynamicModel.prototype.updatePanelsContainsErrors = function () {\n var question = this.changingValueQuestion;\n var parent = question.parent;\n while (!!parent) {\n parent.updateContainsErrors();\n parent = parent.parent;\n }\n this.updateContainsErrors();\n };\n QuestionPanelDynamicModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n if (this.isValueChangingInternally)\n return false;\n var res = false;\n if (!!this.changingValueQuestion) {\n var res = this.changingValueQuestion.hasErrors(fireCallback, rec);\n res = this.hasKeysDuplicated(fireCallback, rec) || res;\n this.updatePanelsContainsErrors();\n return res;\n }\n else {\n var errosInPanels = this.hasErrorInPanels(fireCallback, rec);\n return _super.prototype.hasErrors.call(this, fireCallback) || errosInPanels;\n }\n };\n QuestionPanelDynamicModel.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n if (panels[i].containsErrors)\n return true;\n }\n return false;\n };\n QuestionPanelDynamicModel.prototype.getIsAnswered = function () {\n if (!_super.prototype.getIsAnswered.call(this))\n return false;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n var visibleQuestions = [];\n panels[i].addQuestionsToList(visibleQuestions, true);\n for (var j = 0; j < visibleQuestions.length; j++) {\n if (!visibleQuestions[j].isAnswered)\n return false;\n }\n }\n return true;\n };\n QuestionPanelDynamicModel.prototype.clearValueIfInvisible = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n questions[j].clearValueIfInvisible();\n }\n }\n _super.prototype.clearValueIfInvisible.call(this);\n };\n QuestionPanelDynamicModel.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n if (questions[j].isRunningValidators)\n return true;\n }\n }\n return false;\n };\n QuestionPanelDynamicModel.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n var errors = questions[j].getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n }\n return result;\n };\n QuestionPanelDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var values = this.getUnbindValue(value);\n if (!values || !Array.isArray(values))\n return values;\n for (var i = 0; i < this.panels.length && i < values.length; i++) {\n var val = values[i];\n if (!val)\n continue;\n values[i] = this.getPanelDisplayValue(i, val, keysAsText);\n }\n return values;\n };\n QuestionPanelDynamicModel.prototype.getPanelDisplayValue = function (panelIndex, val, keysAsText) {\n if (!val)\n return val;\n var panel = this.panels[panelIndex];\n var keys = Object.keys(val);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var question = panel.getQuestionByValueName(key);\n if (!question) {\n question = this.getSharedQuestionFromArray(key, panelIndex);\n }\n if (!!question) {\n var qValue = question.getDisplayValue(keysAsText, val[key]);\n val[key] = qValue;\n if (keysAsText && !!question.title && question.title !== key) {\n val[question.title] = qValue;\n delete val[key];\n }\n }\n }\n return val;\n };\n QuestionPanelDynamicModel.prototype.hasErrorInPanels = function (fireCallback, rec) {\n var res = false;\n var panels = this.panels;\n var keyValues = [];\n for (var i = 0; i < panels.length; i++) {\n this.setOnCompleteAsyncInPanel(panels[i]);\n }\n for (var i = 0; i < panels.length; i++) {\n var pnlError = panels[i].hasErrors(fireCallback, !!rec && rec.focuseOnFirstError, rec);\n pnlError = this.isValueDuplicated(panels[i], keyValues, rec) || pnlError;\n if (!this.isRenderModeList && pnlError && !res) {\n this.currentIndex = i;\n }\n res = pnlError || res;\n }\n return res;\n };\n QuestionPanelDynamicModel.prototype.setOnCompleteAsyncInPanel = function (panel) {\n var _this = this;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n }\n };\n QuestionPanelDynamicModel.prototype.isValueDuplicated = function (panel, keyValues, rec, fireCallback) {\n if (!this.keyName)\n return false;\n var question = panel.getQuestionByValueName(this.keyName);\n if (!question || question.isEmpty())\n return false;\n var value = question.value;\n if (!!this.changingValueQuestion &&\n question != this.changingValueQuestion) {\n question.hasErrors(fireCallback, rec);\n }\n for (var i = 0; i < keyValues.length; i++) {\n if (value == keyValues[i]) {\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_7__[\"KeyDuplicationError\"](this.keyDuplicationError, this));\n if (!!rec && !rec.firstErrorQuestion) {\n rec.firstErrorQuestion = question;\n }\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionPanelDynamicModel.prototype.createNewPanel = function () {\n var panel = this.createAndSetupNewPanelObject();\n var json = this.template.toJSON();\n new _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"JsonObject\"]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n new QuestionPanelDynamicItem(this, panel);\n panel.onFirstRendering();\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].setParentQuestion(this);\n }\n return panel;\n };\n QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {\n var panel = this.createNewPanelObject();\n var self = this;\n panel.onGetQuestionTitleLocation = function () {\n return self.getTemplateQuestionTitleLocation();\n };\n return panel;\n };\n QuestionPanelDynamicModel.prototype.getTemplateQuestionTitleLocation = function () {\n return this.templateTitleLocation != \"default\"\n ? this.templateTitleLocation\n : this.getTitleLocationCore();\n };\n QuestionPanelDynamicModel.prototype.createNewPanelObject = function () {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].createClass(\"panel\");\n };\n QuestionPanelDynamicModel.prototype.setPanelCountBasedOnValue = function () {\n if (this.isValueChangingInternally || this.isDesignMode)\n return;\n var val = this.value;\n var newPanelCount = val && Array.isArray(val) ? val.length : 0;\n if (newPanelCount == 0 && this.loadingPanelCount > 0) {\n newPanelCount = this.loadingPanelCount;\n }\n this.panelCount = newPanelCount;\n };\n QuestionPanelDynamicModel.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n this.setPanelCountBasedOnValue();\n for (var i = 0; i < this.panels.length; i++) {\n this.panelUpdateValueFromSurvey(this.panels[i]);\n }\n this.updateIsAnswered();\n };\n QuestionPanelDynamicModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n for (var i = 0; i < this.panels.length; i++) {\n this.panelSurveyValueChanged(this.panels[i]);\n }\n if (newValue === undefined) {\n this.setValueBasedOnPanelCount();\n }\n };\n QuestionPanelDynamicModel.prototype.panelUpdateValueFromSurvey = function (panel) {\n var questions = panel.questions;\n var values = this.getPanelItemData(panel.data);\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n q.updateValueFromSurvey(values[q.getValueName()]);\n q.updateCommentFromSurvey(values[q.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].commentPrefix]);\n }\n };\n QuestionPanelDynamicModel.prototype.panelSurveyValueChanged = function (panel) {\n var questions = panel.questions;\n var values = this.getPanelItemData(panel.data);\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n q.onSurveyValueChanged(values[q.getValueName()]);\n }\n };\n QuestionPanelDynamicModel.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n if (this.isDesignMode) {\n this.setTemplatePanelSurveyImpl();\n this.rebuildPanels();\n }\n };\n //IQuestionPanelDynamicData\n QuestionPanelDynamicModel.prototype.getItemIndex = function (item) {\n var res = this.items.indexOf(item);\n return res > -1 ? res : this.items.length;\n };\n QuestionPanelDynamicModel.prototype.getPanelItemData = function (item) {\n var items = this.items;\n var index = items.indexOf(item);\n var qValue = this.value;\n if (index < 0 && Array.isArray(qValue) && qValue.length > items.length) {\n index = items.length;\n }\n if (index < 0)\n return {};\n if (!qValue || !Array.isArray(qValue) || qValue.length <= index)\n return {};\n return qValue[index];\n };\n QuestionPanelDynamicModel.prototype.setPanelItemData = function (item, name, val) {\n if (this.isSetPanelItemData && this.isSetPanelItemData.indexOf(name) > -1)\n return;\n if (!this.isSetPanelItemData)\n this.isSetPanelItemData = [];\n this.isSetPanelItemData.push(name);\n var items = this.items;\n var index = items.indexOf(item);\n if (index < 0)\n index = items.length;\n var qValue = this.getUnbindValue(this.value);\n if (!qValue || !Array.isArray(qValue)) {\n qValue = [];\n }\n if (qValue.length <= index) {\n for (var i = qValue.length; i <= index; i++) {\n qValue.push({});\n }\n }\n if (!qValue[index])\n qValue[index] = {};\n if (!this.isValueEmpty(val)) {\n qValue[index][name] = val;\n }\n else {\n delete qValue[index][name];\n }\n if (index >= 0 && index < this.panels.length) {\n this.changingValueQuestion = this.panels[index].getQuestionByValueName(name);\n }\n this.value = qValue;\n this.changingValueQuestion = null;\n if (this.survey) {\n var options = {\n question: this,\n panel: item.panel,\n name: name,\n itemIndex: index,\n itemValue: qValue[index],\n value: val,\n };\n this.survey.dynamicPanelItemValueChanged(this, options);\n }\n var index = this.isSetPanelItemData.indexOf(name);\n if (index > -1) {\n this.isSetPanelItemData.splice(index, 1);\n }\n };\n QuestionPanelDynamicModel.prototype.getRootData = function () {\n return this.data;\n };\n QuestionPanelDynamicModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n questionPlainData.isNode = true;\n questionPlainData.data = this.panels.map(function (panel, index) {\n var panelDataItem = {\n name: panel.name || index,\n title: panel.title || \"Panel\",\n value: panel.getValue(),\n displayValue: panel.getValue(),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: true,\n data: panel.questions\n .map(function (question) { return question.getPlainData(options); })\n .filter(function (d) { return !!d; }),\n };\n (options.calculations || []).forEach(function (calculation) {\n panelDataItem[calculation.propertyName] = panel[calculation.propertyName];\n });\n return panelDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionPanelDynamicModel.prototype.updateElementCss = function (reNew) {\n _super.prototype.updateElementCss.call(this, reNew);\n for (var i = 0; i < this.panels.length; i++) {\n var el = this.panels[i];\n el.updateElementCss(reNew);\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"progressText\", {\n get: function () {\n var rangeMax = this.panelCount;\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"panelDynamicProgressText\")[\"format\"](this.currentIndex + 1, rangeMax);\n },\n enumerable: false,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getPanelWrapperCss = function () {\n var cssClasses = this.cssClasses.panelWrapper;\n if (this.panelRemoveButtonLocation === \"right\") {\n cssClasses += \" \" + this.cssClasses.panelWrapperInRow;\n }\n return cssClasses;\n };\n QuestionPanelDynamicModel.prototype.getPanelRemoveButtonCss = function () {\n var cssClasses = this.cssClasses.button + \" \" + this.cssClasses.buttonRemove;\n if (this.panelRemoveButtonLocation === \"right\") {\n cssClasses += \" \" + this.cssClasses.buttonRemoveRight;\n }\n return cssClasses;\n };\n return QuestionPanelDynamicModel;\n}(_question__WEBPACK_IMPORTED_MODULE_4__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_5__[\"Serializer\"].addClass(\"paneldynamic\", [\n {\n name: \"templateElements\",\n alternativeName: \"questions\",\n visible: false,\n isLightSerializable: false,\n },\n { name: \"templateTitle:text\", serializationProperty: \"locTemplateTitle\" },\n {\n name: \"templateDescription:text\",\n serializationProperty: \"locTemplateDescription\",\n },\n { name: \"allowAddPanel:boolean\", default: true },\n { name: \"allowRemovePanel:boolean\", default: true },\n {\n name: \"panelCount:number\",\n isBindable: true,\n default: 0,\n choices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n },\n { name: \"minPanelCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxPanelCount:number\",\n default: _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].panelMaximumPanelCount,\n },\n \"defaultPanelValue:panelvalue\",\n \"defaultValueFromLastPanel:boolean\",\n {\n name: \"panelsState\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\", \"firstExpanded\"],\n },\n { name: \"keyName\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\n { name: \"confirmDelete:boolean\" },\n {\n name: \"confirmDeleteText\",\n serializationProperty: \"locConfirmDeleteText\",\n },\n { name: \"panelAddText\", serializationProperty: \"locPanelAddText\" },\n { name: \"panelRemoveText\", serializationProperty: \"locPanelRemoveText\" },\n { name: \"panelPrevText\", serializationProperty: \"locPanelPrevText\" },\n { name: \"panelNextText\", serializationProperty: \"locPanelNextText\" },\n {\n name: \"showQuestionNumbers\",\n default: \"off\",\n choices: [\"off\", \"onPanel\", \"onSurvey\"],\n },\n { name: \"showRangeInProgress:boolean\", default: true },\n {\n name: \"renderMode\",\n default: \"list\",\n choices: [\"list\", \"progressTop\", \"progressBottom\", \"progressTopBottom\"],\n },\n {\n name: \"templateTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\"],\n },\n {\n name: \"panelRemoveButtonLocation\",\n default: \"bottom\",\n choices: [\"bottom\", \"right\"],\n },\n], function () {\n return new QuestionPanelDynamicModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"QuestionFactory\"].Instance.registerQuestion(\"paneldynamic\", function (name) {\n return new QuestionPanelDynamicModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_radiogroup.ts\":\n/*!************************************!*\\\n !*** ./src/question_radiogroup.ts ***!\n \\************************************/\n/*! exports provided: QuestionRadiogroupModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return QuestionRadiogroupModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_baseselect */ \"./src/question_baseselect.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n/**\n * A Model for a radiogroup question.\n */\nvar QuestionRadiogroupModel = /** @class */ (function (_super) {\n __extends(QuestionRadiogroupModel, _super);\n function QuestionRadiogroupModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionRadiogroupModel.prototype.getType = function () {\n return \"radiogroup\";\n };\n QuestionRadiogroupModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"selectedItem\", {\n get: function () {\n if (this.isEmpty())\n return null;\n return _itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"showClearButton\", {\n /**\n * Show \"clear button\" flag.\n */\n get: function () {\n return this.getPropertyValue(\"showClearButton\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showClearButton\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"canShowClearButton\", {\n get: function () {\n return this.showClearButton && !this.isReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"clearButtonCaption\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n return QuestionRadiogroupModel;\n}(_question_baseselect__WEBPACK_IMPORTED_MODULE_2__[\"QuestionCheckboxBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"radiogroup\", [{ name: \"showClearButton:boolean\", default: false }], function () {\n return new QuestionRadiogroupModel(\"\");\n}, \"checkboxbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].Instance.registerQuestion(\"radiogroup\", function (name) {\n var q = new QuestionRadiogroupModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_ranking.ts\":\n/*!*********************************!*\\\n !*** ./src/question_ranking.ts ***!\n \\*********************************/\n/*! exports provided: QuestionRankingModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRankingModel\", function() { return QuestionRankingModel; });\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/is-mobile */ \"./src/utils/is-mobile.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar Sortable = sortablejs__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/**\n * A Model for a ranking question\n */\nvar QuestionRankingModel = /** @class */ (function (_super) {\n __extends(QuestionRankingModel, _super);\n function QuestionRankingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.domNode = null;\n _this.sortableInst = null;\n _this.handleKeydown = function (event) {\n var key = event.key;\n var array = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n var index = [].indexOf.call(array, event.target);\n if (key === \"ArrowUp\" && index) {\n _this.handleArrowUp(index);\n }\n if (key === \"ArrowDown\" && index !== array.length - 1) {\n _this.handleArrowDown(index);\n }\n };\n _this.handleArrowUp = function (index) {\n var array = _this.sortableInst.toArray();\n _this.moveArrayItemBack(array, index);\n _this.sortableInst.sort(array);\n _this.syncNumbers();\n _this.setValueFromUI();\n _this.focusItem(index - 1);\n };\n _this.handleArrowDown = function (index) {\n var array = _this.sortableInst.toArray();\n _this.moveArrayItemForward(array, index);\n _this.sortableInst.sort(array);\n _this.syncNumbers();\n _this.setValueFromUI();\n _this.focusItem(index + 1);\n };\n _this.moveArrayItemBack = function (array, index) {\n var _a;\n _a = [array[index - 1], array[index]], array[index] = _a[0], array[index - 1] = _a[1];\n };\n _this.moveArrayItemForward = function (array, index) {\n var _a;\n _a = [array[index + 1], array[index]], array[index] = _a[0], array[index + 1] = _a[1];\n };\n _this.focusItem = function (index) {\n var itemsNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n itemsNodes[index].focus();\n };\n _this.setValueFromUI = function () {\n var value = [];\n var textNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.controlLabel);\n textNodes.forEach(function (textNode, index) {\n var innerText = textNode.innerText;\n _this.visibleChoices.forEach(function (visibleChoice) {\n if (innerText === visibleChoice.text) {\n value.push(visibleChoice.value);\n }\n });\n });\n _this.value = value;\n };\n _this.syncNumbers = function () {\n if (!_this.domNode)\n return;\n var selector = \".\" +\n _this.cssClasses.item +\n \":not(.\" +\n _this.cssClasses.itemDragMod +\n \")\" +\n \" .\" +\n _this.cssClasses.itemIndex;\n var indexNodes = _this.domNode.querySelectorAll(selector);\n indexNodes.forEach(function (indexNode, index) {\n indexNode.innerText = _this.getNumberByIndex(index);\n });\n };\n _this.setGhostText = function (text) {\n var indexNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.itemIndex);\n var ghostNode = indexNodes[indexNodes.length - 1];\n ghostNode.innerText = text;\n };\n return _this;\n }\n QuestionRankingModel.prototype.getType = function () {\n return \"ranking\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"isIndeterminate\", {\n get: function () {\n return !this.value || this.value.length === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRankingModel.prototype, \"rootClass\", {\n get: function () {\n var css = this.cssClasses;\n if (_utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"IsMobile\"])\n return css.root + \" \" + css.rootMobileMod;\n return css.root;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.getNumberByIndex = function (index) {\n return this.isIndeterminate ? \"\\u2013\" : index + 1 + \"\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"rankingChoices\", {\n get: function () {\n var result = [];\n var value = this.value;\n var visibleChoices = this.removeOtherChoiceFromChoices(this.visibleChoices);\n if (this.isIndeterminate) {\n result = visibleChoices;\n }\n else {\n result = this.mergeValueAndVisibleChoices(value, visibleChoices);\n }\n // ranking question with only one choice doesn't make sense\n if (result.length === 1)\n result = [];\n return result;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.removeOtherChoiceFromChoices = function (choices) {\n var result = choices;\n choices.forEach(function (choice, index) {\n if (choice.value === \"other\") {\n result.splice(index, 1); // remove other choice\n }\n });\n return result;\n };\n //cross framework initialization\n QuestionRankingModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el) {\n this.initSortable(el);\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n //cross framework destroy\n QuestionRankingModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (this.sortableInst)\n this.sortableInst.destroy();\n _super.prototype.beforeDestroyQuestionElement.call(this, el);\n };\n QuestionRankingModel.prototype.supportSelectAll = function () {\n return false;\n };\n QuestionRankingModel.prototype.supportOther = function () {\n return false;\n };\n QuestionRankingModel.prototype.supportNone = function () {\n return false;\n };\n // to make \"carry forward\" feature work properly with ranking\n QuestionRankingModel.prototype.onVisibleChoicesChanged = function () {\n _super.prototype.onVisibleChoicesChanged.call(this);\n if (this.isIndeterminate)\n return;\n this.value = this.rankingChoices.map(function (choice) { return choice.value; });\n };\n QuestionRankingModel.prototype.mergeValueAndVisibleChoices = function (value, visibleChoices) {\n var length = visibleChoices.length;\n var result = [];\n result.length = length;\n for (var i = 0; i < length; i++) {\n var choice = visibleChoices[i];\n var index = value.indexOf(choice.value);\n if (index !== -1) {\n result.splice(index, 1, choice);\n }\n else {\n result.splice(result.length - 1, 0, choice);\n }\n }\n result = result.filter(function (choice) { return !!choice; });\n return result;\n };\n QuestionRankingModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n var self = this;\n self.domNode = domNode;\n if (this.isReadOnly)\n return;\n if (this.isDesignMode)\n return;\n self.sortableInst = new Sortable(domNode, {\n animation: 100,\n forceFallback: true,\n delay: 200,\n delayOnTouchOnly: true,\n handle: _utils_is_mobile__WEBPACK_IMPORTED_MODULE_4__[\"IsMobile\"]\n ? \".\" + self.cssClasses.itemIconContainer\n : \".\" + self.cssClasses.itemContent,\n ghostClass: self.cssClasses.itemGhostMod,\n dragClass: self.cssClasses.itemDragMod,\n onStart: function (evt) {\n Sortable.ghost.style.opacity = 1;\n domNode.className += \" \" + self.cssClasses.rootDragMod;\n if (self.isIndeterminate) {\n self.setGhostText(evt.oldIndex + 1);\n }\n },\n onEnd: function () {\n domNode.className = domNode.className.replace(\" \" + self.cssClasses.rootDragMod, \"\");\n self.setValueFromUI();\n },\n onChange: function (evt) {\n if (!self.isIndeterminate)\n self.syncNumbers();\n self.setGhostText(evt.newIndex + 1);\n },\n });\n };\n return QuestionRankingModel;\n}(_question_checkbox__WEBPACK_IMPORTED_MODULE_3__[\"QuestionCheckboxModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"ranking\", [\n { name: \"hasOther\", visible: false, isSerializable: false },\n { name: \"otherText\", visible: false, isSerializable: false },\n { name: \"otherErrorText\", visible: false, isSerializable: false },\n { name: \"storeOthersAsComment\", visible: false, isSerializable: false },\n { name: \"hasNone\", visible: false, isSerializable: false },\n { name: \"noneText\", visible: false, isSerializable: false },\n { name: \"hasSelectAll\", visible: false, isSerializable: false },\n { name: \"selectAllText\", visible: false, isSerializable: false },\n { name: \"colCount:number\", visible: false, isSerializable: false },\n { name: \"maxSelectedChoices\", visible: false, isSerializable: false },\n], function () {\n return new QuestionRankingModel(\"\");\n}, \"checkbox\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].Instance.registerQuestion(\"ranking\", function (name) {\n var q = new QuestionRankingModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_2__[\"QuestionFactory\"].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_rating.ts\":\n/*!********************************!*\\\n !*** ./src/question_rating.ts ***!\n \\********************************/\n/*! exports provided: QuestionRatingModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return QuestionRatingModel; });\n/* harmony import */ var _itemvalue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n/**\n * A Model for a rating question.\n */\nvar QuestionRatingModel = /** @class */ (function (_super) {\n __extends(QuestionRatingModel, _super);\n function QuestionRatingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createItemValues(\"rateValues\");\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rateValues\", function () {\n self.fireCallback(self.rateValuesChangedCallback);\n });\n _this.onPropertyChanged.add(function (sender, options) {\n if (options.name == \"rateMin\" ||\n options.name == \"rateMax\" ||\n options.name == \"rateStep\") {\n self.fireCallback(self.rateValuesChangedCallback);\n }\n });\n var locMinRateDescriptionValue = _this.createLocalizableString(\"minRateDescription\", _this, true);\n var locMaxRateDescriptionValue = _this.createLocalizableString(\"maxRateDescription\", _this, true);\n locMinRateDescriptionValue.onGetTextCallback = function (text) {\n return text ? text + \" \" : text;\n };\n locMaxRateDescriptionValue.onGetTextCallback = function (text) {\n return text ? \" \" + text : text;\n };\n return _this;\n }\n QuestionRatingModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.fireCallback(this.rateValuesChangedCallback);\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"rateValues\", {\n /**\n * The list of rate items. Every item has value and text. If text is empty, the value is rendered. The item text supports markdown. If it is empty the array is generated by using rateMin, rateMax and rateStep properties.\n * @see rateMin\n * @see rateMax\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateValues\");\n },\n set: function (val) {\n this.setPropertyValue(\"rateValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateMin\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the first value in the rating. The default value is 1.\n * @see rateValues\n * @see rateMax\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateMin\");\n },\n set: function (val) {\n if (!this.isLoadingFromJson && val > this.rateMax - this.rateStep)\n val = this.rateMax - this.rateStep;\n this.setPropertyValue(\"rateMin\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateMax\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the last value in the rating. The default value is 5.\n * @see rateValues\n * @see rateMin\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateMax\");\n },\n set: function (val) {\n if (!this.isLoadingFromJson && val < this.rateMin + this.rateStep)\n val = this.rateMin + this.rateStep;\n this.setPropertyValue(\"rateMax\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateStep\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the step value. The number of rate values are (rateMax - rateMin) / rateStep. The default value is 1.\n * @see rateValues\n * @see rateMin\n * @see rateMax\n */\n get: function () {\n return this.getPropertyValue(\"rateStep\");\n },\n set: function (val) {\n if (val <= 0)\n val = 1;\n if (!this.isLoadingFromJson && val > this.rateMax - this.rateMin)\n val = this.rateMax - this.rateMin;\n this.setPropertyValue(\"rateStep\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleRateValues, value);\n return !!res ? res : value;\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"visibleRateValues\", {\n get: function () {\n if (this.rateValues.length > 0)\n return this.rateValues;\n var res = [];\n var value = this.rateMin;\n var step = this.rateStep;\n while (value <= this.rateMax &&\n res.length < _settings__WEBPACK_IMPORTED_MODULE_4__[\"settings\"].ratingMaximumRateValueCount) {\n res.push(new _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"](value));\n value = this.correctValue(value + step, step);\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.correctValue = function (value, step) {\n if (!value)\n return value;\n if (Math.round(value) == value)\n return value;\n var fr = 0;\n while (Math.round(step) != step) {\n step *= 10;\n fr++;\n }\n return parseFloat(value.toFixed(fr));\n };\n QuestionRatingModel.prototype.getType = function () {\n return \"rating\";\n };\n QuestionRatingModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionRatingModel.prototype.supportComment = function () {\n return true;\n };\n QuestionRatingModel.prototype.supportOther = function () {\n return true;\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"minRateDescription\", {\n /**\n * The description of minimum (first) item.\n */\n get: function () {\n return this.getLocalizableStringText(\"minRateDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"minRateDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMinRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"minRateDescription\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"maxRateDescription\", {\n /**\n * The description of maximum (last) item.\n */\n get: function () {\n return this.getLocalizableStringText(\"maxRateDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"maxRateDescription\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMaxRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"maxRateDescription\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionRatingModel.prototype.valueToData = function (val) {\n if (this.rateValues.length > 0) {\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_0__[\"ItemValue\"].getItemByValue(this.rateValues, val);\n return !!item ? item.value : val;\n }\n return !isNaN(val) ? parseFloat(val) : val;\n };\n /**\n * Click value again to clear.\n */\n QuestionRatingModel.prototype.setValueFromClick = function (value) {\n if (this.value === parseFloat(value)) {\n this.clearValue();\n }\n else {\n this.value = value;\n }\n };\n return QuestionRatingModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"rating\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n {\n name: \"rateValues:itemvalue[]\",\n baseValue: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_5__[\"surveyLocalization\"].getString(\"choices_Item\");\n },\n },\n { name: \"rateMin:number\", default: 1 },\n { name: \"rateMax:number\", default: 5 },\n { name: \"rateStep:number\", default: 1, minValue: 0.1 },\n {\n name: \"minRateDescription\",\n alternativeName: \"mininumRateDescription\",\n serializationProperty: \"locMinRateDescription\",\n },\n {\n name: \"maxRateDescription\",\n alternativeName: \"maximumRateDescription\",\n serializationProperty: \"locMaxRateDescription\",\n },\n], function () {\n return new QuestionRatingModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"rating\", function (name) {\n return new QuestionRatingModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_signaturepad.ts\":\n/*!**************************************!*\\\n !*** ./src/question_signaturepad.ts ***!\n \\**************************************/\n/*! exports provided: QuestionSignaturePadModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return QuestionSignaturePadModel; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var signature_pad__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! signature_pad */ \"./node_modules/signature_pad/dist/signature_pad.mjs\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\nvar defaultWidth = 300;\nvar defaultHeight = 200;\nfunction resizeCanvas(canvas) {\n var context = canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio ||\n 1;\n var ratio = devicePixelRatio / backingStoreRatio;\n var oldWidth = canvas.width;\n var oldHeight = canvas.height;\n canvas.width = oldWidth * ratio;\n canvas.height = oldHeight * ratio;\n canvas.style.width = oldWidth + \"px\";\n canvas.style.height = oldHeight + \"px\";\n context.scale(ratio, ratio);\n}\n/**\n * A Model for signature pad question.\n */\nvar QuestionSignaturePadModel = /** @class */ (function (_super) {\n __extends(QuestionSignaturePadModel, _super);\n function QuestionSignaturePadModel(name) {\n return _super.call(this, name) || this;\n }\n QuestionSignaturePadModel.prototype.getCssRoot = function (cssClasses) {\n var classes = _super.prototype.getCssRoot.call(this, cssClasses);\n if (\"\" + this.width === \"300\") {\n classes += \" \" + cssClasses.small;\n }\n return classes;\n };\n QuestionSignaturePadModel.prototype.updateValue = function () {\n if (this.signaturePad) {\n var data = this.signaturePad.toDataURL(this.dataFormat);\n this.value = data;\n }\n };\n QuestionSignaturePadModel.prototype.getType = function () {\n return \"signaturepad\";\n };\n QuestionSignaturePadModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el) {\n this.initSignaturePad(el);\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n QuestionSignaturePadModel.prototype.beforeDestroyQuestionElement = function (el) {\n if (!!el) {\n this.destroySignaturePad(el);\n }\n };\n QuestionSignaturePadModel.prototype.initSignaturePad = function (el) {\n var _this = this;\n var canvas = el.getElementsByTagName(\"canvas\")[0];\n var buttonEl = el.getElementsByTagName(\"button\")[0];\n var signaturePad = new signature_pad__WEBPACK_IMPORTED_MODULE_3__[\"default\"](canvas, { backgroundColor: \"#ffffff\" });\n if (this.isInputReadOnly) {\n signaturePad.off();\n }\n buttonEl.onclick = function () {\n _this.value = undefined;\n };\n this.readOnlyChangedCallback = function () {\n if (!_this.allowClear || _this.isInputReadOnly) {\n signaturePad.off();\n buttonEl.style.display = \"none\";\n }\n else {\n signaturePad.on();\n buttonEl.style.display = \"block\";\n }\n };\n signaturePad.penColor = this.penColor;\n signaturePad.backgroundColor = this.backgroundColor;\n signaturePad.onBegin = function () {\n canvas.focus();\n };\n signaturePad.onEnd = function () {\n _this.updateValue();\n };\n var updateValueHandler = function () {\n var data = _this.value;\n canvas.width = _this.width || defaultWidth;\n canvas.height = _this.height || defaultHeight;\n resizeCanvas(canvas);\n if (!data) {\n signaturePad.clear();\n }\n else {\n signaturePad.fromDataURL(data);\n }\n };\n this.valueChangedCallback = updateValueHandler;\n updateValueHandler();\n this.readOnlyChangedCallback();\n this.signaturePad = signaturePad;\n var propertyChangedHandler = function (sender, options) {\n if (options.name === \"width\" || options.name === \"height\") {\n updateValueHandler();\n }\n };\n this.onPropertyChanged.add(propertyChangedHandler);\n this.signaturePad.propertyChangedHandler = propertyChangedHandler;\n };\n QuestionSignaturePadModel.prototype.destroySignaturePad = function (el) {\n if (this.signaturePad) {\n this.onPropertyChanged.remove(this.signaturePad.propertyChangedHandler);\n this.signaturePad.off();\n }\n this.readOnlyChangedCallback = null;\n this.signaturePad = null;\n };\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"dataFormat\", {\n /**\n * Use it to set the specific dataFormat for the signature pad image data.\n * formats: \"\" (default) - png, \"image/jpeg\" - jpeg, \"image/svg+xml\" - svg\n */\n get: function () {\n return this.getPropertyValue(\"dataFormat\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"dataFormat\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"width\", {\n /**\n * Use it to set the specific width for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"width\", 300);\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"height\", {\n /**\n * Use it to set the specific height for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"height\", 200);\n },\n set: function (val) {\n this.setPropertyValue(\"height\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"allowClear\", {\n /**\n * Use it to clear content of the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"allowClear\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowClear\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"penColor\", {\n /**\n * Use it to set pen color for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"penColor\", \"#1ab394\");\n },\n set: function (val) {\n this.setPropertyValue(\"penColor\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"backgroundColor\", {\n /**\n * Use it to set background color for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"backgroundColor\", \"#ffffff\");\n },\n set: function (val) {\n this.setPropertyValue(\"backgroundColor\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"clearButtonCaption\", {\n /**\n * The clear signature button caption.\n */\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n return QuestionSignaturePadModel;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].addClass(\"signaturepad\", [\n {\n name: \"width:number\",\n category: \"general\",\n default: 300,\n },\n {\n name: \"height:number\",\n category: \"general\",\n default: 200,\n },\n {\n name: \"allowClear:boolean\",\n category: \"general\",\n default: true,\n },\n {\n name: \"penColor:color\",\n category: \"general\",\n default: \"#1ab394\",\n },\n {\n name: \"backgroundColor:color\",\n category: \"general\",\n default: \"#ffffff\",\n },\n {\n name: \"dataFormat\",\n category: \"general\",\n default: \"\",\n choices: [\n { value: \"\", text: \"PNG\" },\n { value: \"image/jpeg\", text: \"JPEG\" },\n { value: \"image/svg+xml\", text: \"SVG\" },\n ],\n },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n], function () {\n return new QuestionSignaturePadModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_4__[\"QuestionFactory\"].Instance.registerQuestion(\"signaturepad\", function (name) {\n return new QuestionSignaturePadModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_text.ts\":\n/*!******************************!*\\\n !*** ./src/question_text.ts ***!\n \\******************************/\n/*! exports provided: QuestionTextModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return QuestionTextModel; });\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./validator */ \"./src/validator.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n/**\n * A Model for an input text question.\n */\nvar QuestionTextModel = /** @class */ (function (_super) {\n __extends(QuestionTextModel, _super);\n function QuestionTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"placeHolder\", _this);\n _this.createLocalizableString(\"minErrorText\", _this, true);\n _this.createLocalizableString(\"maxErrorText\", _this, true);\n _this.locDataListValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_3__[\"LocalizableStrings\"](_this);\n _this.registerFunctionOnPropertiesValueChanged([\"min\", \"max\", \"inputType\", \"minValueExpression\", \"maxValueExpression\"], function () {\n _this.setRenderedMinMax();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"inputType\", \"size\"], function () {\n _this.updateInputSize();\n });\n return _this;\n }\n QuestionTextModel.prototype.isTextValue = function () {\n return [\"text\", \"number\", \"password\"].indexOf(this.inputType) > -1;\n };\n QuestionTextModel.prototype.getType = function () {\n return \"text\";\n };\n QuestionTextModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.setRenderedMinMax();\n this.updateInputSize();\n };\n Object.defineProperty(QuestionTextModel.prototype, \"inputType\", {\n /**\n * Use this property to change the default input type.\n */\n get: function () {\n return this.getPropertyValue(\"inputType\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == \"datetime_local\")\n val = \"datetime-local\";\n this.setPropertyValue(\"inputType\", val.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.min = undefined;\n this.max = undefined;\n this.step = undefined;\n }\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.minValueExpression || !!this.maxValueExpression) {\n this.setRenderedMinMax(values, properties);\n }\n };\n Object.defineProperty(QuestionTextModel.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the question updates it's value.\n *\n * The following options are available:\n * - `default` - get the value from survey.textUpdateMode\n * - `onBlur` - the value is updated after an input loses the focus.\n * - `onTyping` - update the value of text questions, \"text\" and \"comment\", on every key press.\n *\n * Note, that setting to \"onTyping\" may lead to a performance degradation, in case you have many expressions in the survey.\n * @see survey.textUpdateMode\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n if (this.textUpdateMode == \"default\")\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.getValidators = function () {\n var validators = _super.prototype.getValidators.call(this);\n if (this.inputType === \"email\" &&\n !this.validators.some(function (v) { return v.getType() === \"emailvalidator\"; })) {\n validators.push(new _validator__WEBPACK_IMPORTED_MODULE_5__[\"EmailValidator\"]());\n }\n return validators;\n };\n QuestionTextModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.getMaxLength = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionTextModel.prototype, \"size\", {\n /**\n * The text input size\n */\n get: function () {\n return this.getPropertyValue(\"size\");\n },\n set: function (val) {\n this.setPropertyValue(\"size\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isTextInput\", {\n get: function () {\n return ([\"text\", \"search\", \"tel\", \"url\", \"email\", \"password\"].indexOf(this.inputType) > -1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"inputSize\", {\n get: function () {\n return this.getPropertyValue(\"inputSize\", 0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"inputWidth\", {\n get: function () {\n return this.getPropertyValue(\"inputWidth\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.updateInputSize = function () {\n var size = this.isTextInput && this.size > 0 ? this.size : 0;\n if (this.isTextInput &&\n size < 1 &&\n this.parent &&\n !!this.parent[\"itemSize\"]) {\n size = this.parent[\"itemSize\"];\n }\n this.setPropertyValue(\"inputSize\", size);\n this.setPropertyValue(\"inputWidth\", size > 0 ? \"auto\" : \"\");\n };\n Object.defineProperty(QuestionTextModel.prototype, \"autoComplete\", {\n /**\n * Text auto complete\n */\n get: function () {\n return this.getPropertyValue(\"autoComplete\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"min\", {\n /**\n * The minimum value\n */\n get: function () {\n return this.getPropertyValue(\"min\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.minValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"min\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"max\", {\n /**\n * The maximum value\n */\n get: function () {\n return this.getPropertyValue(\"max\");\n },\n set: function (val) {\n if (this.isValueExpression(val)) {\n this.maxValueExpression = val.substr(1);\n return;\n }\n this.setPropertyValue(\"max\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"minValueExpression\", {\n /**\n * The minimum value that you can setup as expression, for example today(-1) = yesterday;\n */\n get: function () {\n return this.getPropertyValue(\"minValueExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"minValueExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"maxValueExpression\", {\n /**\n * The maximum value that you can setup as expression, for example today(1) = tomorrow;\n */\n get: function () {\n return this.getPropertyValue(\"maxValueExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxValueExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedMin\", {\n get: function () {\n return this.getPropertyValue(\"renderedMin\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedMax\", {\n get: function () {\n return this.getPropertyValue(\"renderedMax\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"minErrorText\", {\n /**\n * The text that shows when value is less than min property.\n * @see min\n * @see maxErrorText\n */\n get: function () {\n return this.getLocalizableStringText(\"minErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_6__[\"surveyLocalization\"].getString(\"minError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"minErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locMinErrorText\", {\n get: function () {\n return this.getLocalizableString(\"minErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"maxErrorText\", {\n /**\n * The text that shows when value is greater than man property.\n * @see max\n * @see minErrorText\n */\n get: function () {\n return this.getLocalizableStringText(\"maxErrorText\", _surveyStrings__WEBPACK_IMPORTED_MODULE_6__[\"surveyLocalization\"].getString(\"maxError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"maxErrorText\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locMaxErrorText\", {\n get: function () {\n return this.getLocalizableString(\"maxErrorText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isMinMaxType\", {\n /**\n * Readonly property that returns true if the current inputType allows to set min and max properties\n * @see inputType\n * @see min\n * @see max\n */\n get: function () {\n return minMaxTypes.indexOf(this.inputType) > -1;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (isOnValueChanged || this.canSetValueToSurvey())\n return;\n if (this.isValueLessMin) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_7__[\"CustomError\"](this.getMinMaxErrorText(this.minErrorText, this.getCalculatedMinMax(this.renderedMin)), this));\n }\n if (this.isValueGreaterMax) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_7__[\"CustomError\"](this.getMinMaxErrorText(this.maxErrorText, this.getCalculatedMinMax(this.renderedMax)), this));\n }\n };\n QuestionTextModel.prototype.canSetValueToSurvey = function () {\n if (!this.isMinMaxType)\n return true;\n if (this.isValueLessMin)\n return false;\n if (this.isValueGreaterMax)\n return false;\n return true;\n };\n QuestionTextModel.prototype.getMinMaxErrorText = function (errorText, value) {\n if (!value)\n return errorText;\n return errorText.replace(\"{0}\", value.toString());\n };\n Object.defineProperty(QuestionTextModel.prototype, \"isValueLessMin\", {\n get: function () {\n return (!this.isValueEmpty(this.renderedMin) &&\n this.getCalculatedMinMax(this.value) <\n this.getCalculatedMinMax(this.renderedMin));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isValueGreaterMax\", {\n get: function () {\n return (!this.isValueEmpty(this.renderedMax) &&\n this.getCalculatedMinMax(this.value) >\n this.getCalculatedMinMax(this.renderedMax));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"isDateInputType\", {\n get: function () {\n return this.inputType === \"date\" || this.inputType === \"datetime-local\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.getCalculatedMinMax = function (minMax) {\n if (this.isValueEmpty(minMax))\n return minMax;\n return this.isDateInputType ? new Date(minMax) : minMax;\n };\n QuestionTextModel.prototype.setRenderedMinMax = function (values, properties) {\n var _this = this;\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n this.setValueAndRunExpression(this.minValueExpression, this.min, function (val) {\n if (!val && _this.isDateInputType && !!_settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].minDate) {\n val = _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].minDate;\n }\n _this.setPropertyValue(\"renderedMin\", val);\n }, values, properties);\n this.setValueAndRunExpression(this.maxValueExpression, this.max, function (val) {\n if (!val && _this.isDateInputType) {\n val = !!_settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].maxDate ? _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].maxDate : \"2999-12-31\";\n }\n _this.setPropertyValue(\"renderedMax\", val);\n }, values, properties);\n };\n Object.defineProperty(QuestionTextModel.prototype, \"step\", {\n /**\n * The step value\n */\n get: function () {\n return this.getPropertyValue(\"step\");\n },\n set: function (val) {\n this.setPropertyValue(\"step\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"renderedStep\", {\n get: function () {\n return this.isValueEmpty(this.step) ? \"any\" : this.step;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n QuestionTextModel.prototype.supportGoNextPageAutomatic = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n QuestionTextModel.prototype.supportGoNextPageError = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"placeHolder\", {\n /**\n * The input place holder.\n */\n get: function () {\n return this.getLocalizableStringText(\"placeHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"placeHolder\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"dataList\", {\n /**\n * The list of recommended options available to choose.\n */\n get: function () {\n return this.locDataList.value;\n },\n set: function (val) {\n this.locDataList.value = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locDataList\", {\n get: function () {\n return this.locDataListValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"dataListId\", {\n get: function () {\n return !this.locDataList.isEmpty ? this.id + \"_datalist\" : \"\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextModel.prototype.canRunValidators = function (isOnValueChanged) {\n return (this.errors.length > 0 ||\n !isOnValueChanged ||\n this.supportGoNextPageError());\n };\n QuestionTextModel.prototype.setNewValue = function (newValue) {\n newValue = this.correctValueType(newValue);\n _super.prototype.setNewValue.call(this, newValue);\n };\n QuestionTextModel.prototype.correctValueType = function (newValue) {\n if (!newValue)\n return newValue;\n if (this.inputType == \"number\" || this.inputType == \"range\") {\n return _helpers__WEBPACK_IMPORTED_MODULE_4__[\"Helpers\"].isNumber(newValue) ? parseFloat(newValue) : \"\";\n }\n return newValue;\n };\n return QuestionTextModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\nvar minMaxTypes = [\n \"number\",\n \"range\",\n \"date\",\n \"datetime-local\",\n \"month\",\n \"time\",\n \"week\",\n];\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"text\", [\n {\n name: \"inputType\",\n default: \"text\",\n choices: [\n \"color\",\n \"date\",\n \"datetime\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"range\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n ],\n },\n {\n name: \"size:number\",\n minValue: 0,\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"textUpdateMode\",\n default: \"default\",\n choices: [\"default\", \"onBlur\", \"onTyping\"],\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"autoComplete\",\n dataList: [\n \"name\",\n \"honorific-prefix\",\n \"given-name\",\n \"additional-name\",\n \"family-name\",\n \"honorific-suffix\",\n \"nickname\",\n \"organization-title\",\n \"username\",\n \"new-password\",\n \"current-password\",\n \"organization\",\n \"street-address\",\n \"address-line1\",\n \"address-line2\",\n \"address-line3\",\n \"address-level4\",\n \"address-level3\",\n \"address-level2\",\n \"address-level1\",\n \"country\",\n \"country-name\",\n \"postal-code\",\n \"cc-name\",\n \"cc-given-name\",\n \"cc-additional-name\",\n \"cc-family-name\",\n \"cc-number\",\n \"cc-exp\",\n \"cc-exp-month\",\n \"cc-exp-year\",\n \"cc-csc\",\n \"cc-type\",\n \"transaction-currency\",\n \"transaction-amount\",\n \"language\",\n \"bday\",\n \"bday-day\",\n \"bday-month\",\n \"bday-year\",\n \"sex\",\n \"url\",\n \"photo\",\n \"tel\",\n \"tel-country-code\",\n \"tel-national\",\n \"tel-area-code\",\n \"tel-local\",\n \"tel-local-prefix\",\n \"tel-local-suffix\",\n \"tel-extension\",\n \"email\",\n \"impp\",\n ],\n },\n {\n name: \"min\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"max\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"minValueExpression:expression\",\n category: \"logic\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"maxValueExpression:expression\",\n category: \"logic\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"minErrorText\",\n serializationProperty: \"locMinErrorText\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"maxErrorText\",\n serializationProperty: \"locMaxErrorText\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n return !!obj && obj.isMinMaxType;\n },\n },\n {\n name: \"step:number\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.inputType === \"number\";\n },\n },\n {\n name: \"maxLength:number\",\n default: -1,\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"placeHolder\",\n serializationProperty: \"locPlaceHolder\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isTextInput;\n },\n },\n {\n name: \"dataList:string[]\",\n serializationProperty: \"locDataList\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.inputType === \"text\";\n },\n },\n], function () {\n return new QuestionTextModel(\"\");\n}, \"question\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"text\", function (name) {\n return new QuestionTextModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/questionfactory.ts\":\n/*!********************************!*\\\n !*** ./src/questionfactory.ts ***!\n \\********************************/\n/*! exports provided: QuestionFactory, ElementFactory */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return QuestionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return ElementFactory; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n\n\n//TODO replace completely with ElementFactory\nvar QuestionFactory = /** @class */ (function () {\n function QuestionFactory() {\n this.creatorHash = {};\n }\n Object.defineProperty(QuestionFactory, \"DefaultChoices\", {\n get: function () {\n return [\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"1\",\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"2\",\n _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"choices_Item\") + \"3\",\n ];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultColums\", {\n get: function () {\n var colName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_column\") + \" \";\n return [colName + \"1\", colName + \"2\", colName + \"3\"];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultRows\", {\n get: function () {\n var rowName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"matrix_row\") + \" \";\n return [rowName + \"1\", rowName + \"2\"];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultMutlipleTextItems\", {\n get: function () {\n var itemName = _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(\"multipletext_itemname\");\n return [itemName + \"1\", itemName + \"2\"];\n },\n enumerable: false,\n configurable: true\n });\n QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) {\n this.creatorHash[questionType] = questionCreator;\n };\n QuestionFactory.prototype.unregisterElement = function (elementType) {\n delete this.creatorHash[elementType];\n };\n QuestionFactory.prototype.clear = function () {\n this.creatorHash = {};\n };\n QuestionFactory.prototype.getAllTypes = function () {\n var result = new Array();\n for (var key in this.creatorHash) {\n result.push(key);\n }\n return result.sort();\n };\n QuestionFactory.prototype.createQuestion = function (questionType, name) {\n var creator = this.creatorHash[questionType];\n if (creator == null)\n return null;\n return creator(name);\n };\n QuestionFactory.Instance = new QuestionFactory();\n return QuestionFactory;\n}());\n\nvar ElementFactory = /** @class */ (function () {\n function ElementFactory() {\n this.creatorHash = {};\n }\n ElementFactory.prototype.registerElement = function (elementType, elementCreator) {\n this.creatorHash[elementType] = elementCreator;\n };\n ElementFactory.prototype.clear = function () {\n this.creatorHash = {};\n };\n ElementFactory.prototype.unregisterElement = function (elementType, removeFromSerializer) {\n if (removeFromSerializer === void 0) { removeFromSerializer = false; }\n delete this.creatorHash[elementType];\n QuestionFactory.Instance.unregisterElement(elementType);\n if (removeFromSerializer) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].removeClass(elementType);\n }\n };\n ElementFactory.prototype.getAllTypes = function () {\n var result = QuestionFactory.Instance.getAllTypes();\n for (var key in this.creatorHash) {\n result.push(key);\n }\n return result.sort();\n };\n ElementFactory.prototype.createElement = function (elementType, name) {\n var creator = this.creatorHash[elementType];\n if (creator == null)\n return QuestionFactory.Instance.createQuestion(elementType, name);\n return creator(name);\n };\n ElementFactory.Instance = new ElementFactory();\n return ElementFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/questionnonvalue.ts\":\n/*!*********************************!*\\\n !*** ./src/questionnonvalue.ts ***!\n \\*********************************/\n/*! exports provided: QuestionNonValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return QuestionNonValue; });\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for non value question. This question doesn't add any new functionality. It hides some properties, including the value.\n */\nvar QuestionNonValue = /** @class */ (function (_super) {\n __extends(QuestionNonValue, _super);\n function QuestionNonValue(name) {\n return _super.call(this, name) || this;\n }\n QuestionNonValue.prototype.getType = function () {\n return \"nonvalue\";\n };\n Object.defineProperty(QuestionNonValue.prototype, \"hasInput\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionNonValue.prototype, \"hasTitle\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionNonValue.prototype.getTitleLocation = function () {\n return \"\";\n };\n Object.defineProperty(QuestionNonValue.prototype, \"hasComment\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n QuestionNonValue.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n return false;\n };\n QuestionNonValue.prototype.getAllErrors = function () {\n return [];\n };\n QuestionNonValue.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n QuestionNonValue.prototype.addConditionObjectsByContext = function (objects, context) { };\n QuestionNonValue.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n return null;\n };\n return QuestionNonValue;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"nonvalue\", [\n { name: \"title\", visible: false },\n { name: \"description\", visible: false },\n { name: \"valueName\", visible: false },\n { name: \"enableIf\", visible: false },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"isRequired\", visible: false, isSerializable: false },\n { name: \"requiredErrorText\", visible: false },\n { name: \"readOnly\", visible: false },\n { name: \"requiredIf\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"titleLocation\", visible: false },\n { name: \"useDisplayValuesInTitle\", visible: false },\n], function () {\n return new QuestionNonValue(\"\");\n}, \"question\");\n\n\n/***/ }),\n\n/***/ \"./src/rendererFactory.ts\":\n/*!********************************!*\\\n !*** ./src/rendererFactory.ts ***!\n \\********************************/\n/*! exports provided: RendererFactory */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return RendererFactory; });\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.renderersHash = {};\n }\n RendererFactory.prototype.unregisterRenderer = function (questionType, rendererAs) {\n delete this.renderersHash[questionType][rendererAs];\n };\n RendererFactory.prototype.registerRenderer = function (questionType, renderAs, renderer) {\n if (!this.renderersHash[questionType]) {\n this.renderersHash[questionType] = {};\n }\n this.renderersHash[questionType][renderAs] = renderer;\n };\n RendererFactory.prototype.getRenderer = function (questionType, renderAs) {\n return ((this.renderersHash[questionType] &&\n this.renderersHash[questionType][renderAs]) ||\n \"default\");\n };\n RendererFactory.prototype.getRendererByQuestion = function (question) {\n return this.getRenderer(question.getType(), question.renderAs);\n };\n RendererFactory.Instance = new RendererFactory();\n return RendererFactory;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/settings.ts\":\n/*!*************************!*\\\n !*** ./src/settings.ts ***!\n \\*************************/\n/*! exports provided: settings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return settings; });\n/**\n * Global survey settings\n */\nvar settings = {\n /**\n * The prefix that uses to store the question comment, as {questionName} + {commentPrefix}.\n * The default\n */\n commentPrefix: \"-Comment\",\n /**\n * Encode parameter on calling restful web API\n */\n webserviceEncodeParameters: true,\n /**\n * Cache the result for choices getting from web services. Set this property to false, to disable the caching.\n */\n useCachingForChoicesRestful: true,\n get useCachingForChoicesRestfull() {\n return settings.useCachingForChoicesRestful;\n },\n set useCachingForChoicesRestfull(val) {\n settings.useCachingForChoicesRestful = val;\n },\n /**\n * SurveyJS web service API url\n */\n surveyServiceUrl: \"https://api.surveyjs.io/public/v1/Survey\",\n /**\n * separator that can allow to set value and text of ItemValue object in one string as: \"value|text\"\n */\n itemValueSeparator: \"|\",\n /**\n * default locale name for localizable strings that uses during serialization, {\"default\": \"My text\", \"de\": \"Mein Text\"}\n */\n defaultLocaleName: \"default\",\n /**\n * Default row name for matrix (single choice)\n */\n matrixDefaultRowName: \"default\",\n /**\n * Default cell type for dropdown and dynamic matrices\n */\n matrixDefaultCellType: \"dropdown\",\n /**\n * Total value postfix for dropdown and dynamic matrices. The total value stores as: {matrixName} + {postfix}\n */\n matrixTotalValuePostFix: \"-total\",\n /**\n * Maximum row count in dynamic matrix\n */\n matrixMaximumRowCount: 1000,\n /**\n * Maximum rowCount that returns in addConditionObjectsByContext function\n */\n matrixMaxRowCountInCondition: 1,\n /**\n * Maximum panel count in dynamic panel\n */\n panelMaximumPanelCount: 100,\n /**\n * Maximum rate value count in rating question\n */\n ratingMaximumRateValueCount: 20,\n /**\n * Disable the question while choices are getting from the web service\n */\n disableOnGettingChoicesFromWeb: false,\n /**\n * Set to true to always serialize the localization string as object even if there is only one value for default locale. Instead of string \"MyStr\" serialize as {default: \"MyStr\"}\n */\n serializeLocalizableStringAsObject: false,\n /**\n * Set to false to hide empty page title and description in design mode\n */\n allowShowEmptyTitleInDesignMode: true,\n /**\n * Set to false to hide empty page description in design mode\n */\n allowShowEmptyDescriptionInDesignMode: true,\n /**\n * Set this property to true to execute the complete trigger on value change instead of on next page.\n */\n executeCompleteTriggerOnValueChanged: false,\n /**\n * Set this property to false to execute the skip trigger on next page instead of on value change.\n */\n executeSkipTriggerOnValueChanged: true,\n /**\n * Set this property to change readOnlyCommentRenderMode: \"textarea\" (default) or (div)\n */\n readOnlyCommentRenderMode: \"textarea\",\n /**\n * Override this function, set your function, if you want to show your own dialog confirm window instead of standard browser window.\n * @param message\n */\n confirmActionFunc: function (message) {\n return confirm(message);\n },\n /**\n * Set this property to change the default value of the minWidth constraint\n */\n minWidth: \"300px\",\n /**\n * Set this property to change the default value of the minWidth constraint\n */\n maxWidth: \"initial\",\n /**\n * This property tells how many times survey re-run expressions on value changes during condition running. We need it to avoid recursions in the expressions\n */\n maximumConditionRunCountOnValueChanged: 10,\n /**\n * By default visibleIndex for question with titleLocation = \"hidden\" is -1, and survey doesn't count these questions when set questions numbers.\n * Set it true, and a question next to a question with hidden title will increase it's number.\n */\n setQuestionVisibleIndexForHiddenTitle: false,\n /**\n * By default visibleIndex for question with hideNumber = true is -1, and survey doesn't count these questions when set questions numbers.\n * Set it true, and a question next to a question with hidden title number will increase it's number.\n */\n setQuestionVisibleIndexForHiddenNumber: false,\n /**\n * By default all rows are rendered no matters whwther they are visible.\n * Set it true, and survey markup rows will be rendered only if they are visible in viewport.\n * This feature is experimantal and might do not support all the use cases.\n */\n lazyRowsRendering: false,\n /**\n * By default checkbox and radiogroup items are ordered in rows.\n * Set it \"column\", and items will be ordered in columns.\n */\n showItemsInOrder: \"default\",\n /**\n * Supported validators by question types. You can modify this variable to add validators for new question types or add/remove for existing question types.\n */\n supportedValidators: {\n question: [\"expression\"],\n comment: [\"text\", \"regex\"],\n text: [\"numeric\", \"text\", \"regex\", \"email\"],\n checkbox: [\"answercount\"],\n },\n /**\n * Set the value as string \"yyyy-mm-dd\". text questions with inputType \"date\" will not allow to set to survey date that less than this value\n */\n minDate: \"\",\n /**\n * Set the value as string \"yyyy-mm-dd\". text questions with inputType \"date\" will not allow to set to survey date that greater than this value\n */\n maxDate: \"\",\n showModal: undefined,\n supportCreatorV2: false,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stylesmanager.ts\":\n/*!******************************!*\\\n !*** ./src/stylesmanager.ts ***!\n \\******************************/\n/*! exports provided: StylesManager */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return StylesManager; });\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar StylesManager = /** @class */ (function () {\n function StylesManager() {\n this.sheet = null;\n if (StylesManager.Enabled) {\n this.sheet = StylesManager.findSheet(StylesManager.SurveyJSStylesSheetId);\n if (!this.sheet) {\n this.sheet = StylesManager.createSheet(StylesManager.SurveyJSStylesSheetId);\n this.initializeStyles(this.sheet);\n }\n }\n }\n StylesManager.findSheet = function (styleSheetId) {\n if (typeof document === \"undefined\")\n return null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (!!document.styleSheets[i].ownerNode &&\n document.styleSheets[i].ownerNode[\"id\"] === styleSheetId) {\n return document.styleSheets[i];\n }\n }\n return null;\n };\n StylesManager.createSheet = function (styleSheetId) {\n var style = document.createElement(\"style\");\n style.id = styleSheetId;\n // Add a media (and/or media query) here if you'd like!\n // style.setAttribute(\"media\", \"screen\")\n // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n style.appendChild(document.createTextNode(\"\"));\n document.head.appendChild(style);\n return style.sheet;\n };\n StylesManager.applyTheme = function (themeName, themeSelector) {\n if (themeName === void 0) { themeName = \"default\"; }\n if (themeSelector === void 0) { themeSelector = \".sv_main\"; }\n var ThemeCss;\n if (themeName === \"modern\")\n themeSelector = \".sv-root-modern \";\n if ([\"bootstrap\", \"bootstrapmaterial\", \"modern\"].indexOf(themeName) !== -1) {\n ThemeCss = StylesManager[themeName + \"ThemeCss\"];\n _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = themeName;\n }\n else {\n ThemeCss = StylesManager.ThemeCss;\n _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = \"standard\";\n }\n if (StylesManager.Enabled) {\n var sheet_1 = StylesManager.findSheet(themeName + themeSelector);\n if (!sheet_1) {\n sheet_1 = StylesManager.createSheet(themeName + themeSelector);\n var theme_1 = StylesManager.ThemeColors[themeName] ||\n StylesManager.ThemeColors[\"default\"];\n Object.keys(ThemeCss).forEach(function (selector) {\n var cssRuleText = ThemeCss[selector];\n Object.keys(theme_1).forEach(function (colorVariableName) {\n return (cssRuleText = cssRuleText.replace(new RegExp(\"\\\\\" + colorVariableName, \"g\"), theme_1[colorVariableName]));\n });\n try {\n sheet_1.insertRule(themeSelector + selector + \" { \" + cssRuleText + \" }\", 0);\n }\n catch (e) { }\n });\n }\n }\n };\n StylesManager.prototype.initializeStyles = function (sheet) {\n if (StylesManager.Enabled) {\n Object.keys(StylesManager.Styles).forEach(function (selector) {\n try {\n sheet.insertRule(selector + \" { \" + StylesManager.Styles[selector] + \" }\", 0);\n }\n catch (e) { }\n });\n Object.keys(StylesManager.Media).forEach(function (selector) {\n try {\n sheet.insertRule(StylesManager.Media[selector].media +\n \" { \" +\n selector +\n \" { \" +\n StylesManager.Media[selector].style +\n \" } }\", 0);\n }\n catch (e) { }\n });\n }\n };\n StylesManager.SurveyJSStylesSheetId = \"surveyjs-styles\";\n StylesManager.Styles = {\n // \".sv_bootstrap_css\":\n // \"position: relative; width: 100%; background-color: #f4f4f4\",\n // \".sv_bootstrap_css .sv_custom_header\":\n // \"position: absolute; width: 100%; height: 275px; background-color: #e7e7e7;\",\n // \".sv_bootstrap_css .sv_container\":\n // \"max-width: 80%; margin: auto; position: relative; color: #6d7072; padding: 0 1em;\",\n // \".sv_bootstrap_css .panel-body\":\n // \"background-color: white; padding: 1em 1em 5em 1em; border-top: 2px solid lightgray;\",\n \".sv_main span\": \"word-break: break-word;\",\n \".sv_main legend\": \"border: none; margin: 0;\",\n \".sv_bootstrap_css .sv_qstn\": \"padding: 0.5em 1em 1.5em 1em;\",\n \".sv_bootstrap_css .sv_qcbc input[type=checkbox], .sv_bootstrap_css .sv_qcbc input[type=radio]\": \"vertical-align: middle; margin-top: -1px\",\n \".sv_bootstrap_css .sv_qstn fieldset\": \"display: block;\",\n \".sv_bootstrap_css .sv_qstn .sv_q_checkbox_inline, .sv_bootstrap_css .sv_qstn .sv_q_radiogroup_inline\": \"display: inline-block;\",\n \".sv_bootstrap_css .sv-paneldynamic__progress-container \": \"position: relative; margin-right: 250px; margin-left: 40px; margin-top: 10px;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_radiogroup_control_label\": \"display: inline; position: static;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox\": \"margin-top:10px;margin-bottom:10px;\",\n \".sv_row\": \"clear: both; min-width:300px;\",\n \".sv_row .sv_qstn\": \"float: left\",\n \".sv_row .sv_qstn:last-child\": \"float: none\",\n \".sv_qstn\": \"display: vertical-align: top; overflow: auto; min-width:300px;\",\n \".sv_p_container\": \"display: vertical-align: top; min-width:300px;\",\n \".sv_q_title .sv_question_icon\": \"float: right; margin-right: 1em;\",\n \".sv_q_title .sv_question_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_q_title .sv_question_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n \".sv_qbln .checkbox-material\": \"margin-right: 3px;\",\n \".sv_qcbx .checkbox-material\": \"margin-right: 5px;\",\n \".sv_qcbx .checkbox label\": \"justify-content: left; display: inline-block;\",\n \".sv_qstn .radio label\": \"justify-content: left; display: inline-block;\",\n \".sv_qstn .sv_q_imgsel > label img\": \"pointer-events: none;\",\n \".sv_qstn .sv_q_imgsel.sv_q_imagepicker_inline\": \"display: inline-block;\",\n \".sv_qstn label.sv_q_m_label\": \"position: absolute; margin: 0; display: block; width: 100%;\",\n \".sv_qstn td\": \"position: relative;\",\n \".sv_q_mt_item_value\": \"float: left;\",\n '[dir=\"rtl\"] .sv_q_mt_item_value': \"float: right;\",\n \".sv_qstn.sv_qstn_left\": \"margin-top: 0.75em;\",\n \".sv_qstn .title-left\": \"float: left; margin-right: 1em;\",\n '[dir=\"rtl\"] .sv_qstn .title-left': \"float: right; margin-left: 1em;\",\n \".sv_qstn .content-left\": \"overflow: hidden\",\n \".sv_q_radiogroup_inline .sv_q_radiogroup_other\": \"display: inline-block;\",\n \".sv_q_checkbox_inline .sv_q_checkbox_other\": \"display: inline-block;\",\n \".sv_q_checkbox_inline, .sv_q_radiogroup_inline, .sv_q_imagepicker_inline\": \"line-height: 2.5em;\",\n \".form-inline .sv_q_checkbox_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".form-inline .sv_q_radiogroup_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".sv_imgsel .sv_q_imagepicker_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".sv_qstn fieldset\": \"border: none; margin: 0; padding: 0;\",\n \".sv_qstn .sv_q_file_placeholder\": \"display:none\",\n \".sv_p_title\": \"padding-left: 1em; padding-bottom: 0.3em;\",\n \".sv_p_title_expandable\": \"cursor: pointer;\",\n \".sv_q_title_expandable\": \"cursor: pointer;\",\n \".sv_p_title .sv_panel_icon\": \"float: right; margin-right: 1em;\",\n \".sv_p_title .sv_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_p_title .sv_panel_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n \".sv_p_footer\": \"padding-left: 1em; padding-bottom: 1em;padding-top: 1em;\",\n \".sv_matrix_cell_detail_button\": \"position: relative\",\n \".sv_detail_panel_icon\": \"display: block; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 14px; height: 14px;\",\n \".sv_detail_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; width: 14px; height: 14px; display: block; transform: rotate(270deg); background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 15 15' style='enable-background:new 0 0 15 15;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23FFFFFF;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='14,5.5 12.6,4.1 7.5,9.1 2.4,4.1 1,5.5 7.5,12 '/%3E%3C/svg%3E%0A\\\");\",\n \".sv_detail_panel_icon.sv_detail_expanded::before\": \"transform: rotate(0deg)\",\n \".sv_matrix_empty_rows_section\": \"text-align: center; vertical-align: middle;\",\n \".sv_matrix_empty_rows_text\": \"padding:20px\",\n \".sv_q_file > input[type=file], .sv_q_file > button\": \"display: inline-block;\",\n \".sv_q_file_preview\": \"display: inline-block; vertical-align: top; border: 1px solid lightgray; padding: 5px; margin-top: 10px;\",\n \".sv_q_file_preview > a\": \"display: block; overflow: hidden; vertical-align: top; white-space: nowrap; text-overflow: ellipsis;\",\n \".sv_q_file_remove_button\": \"line-height: normal;\",\n \".sv_q_file_remove\": \"display: block; cursor: pointer;\",\n \".sv_q_m_cell_text\": \"cursor: pointer;\",\n \".sv_q_dd_other\": \"margin-top: 1em;\",\n \".sv_q_dd_other input\": \"width: 100%;\",\n \".sv_qstn .sv-q-col-1, .sv-question .sv-q-col-1\": \"width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-2, .sv-question .sv-q-col-2\": \"width: calc(50% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-3, .sv-question .sv-q-col-3\": \"width: calc(33.33333% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-4, .sv-question .sv-q-col-4\": \"width: calc(25% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-5, .sv-question .sv-q-col-5\": \"width: calc(20% - 1em); display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-1, .sv-question .sv-q-column-1\": \"width: 100%; max-width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-2, .sv-question .sv-q-column-2\": \"max-width: 50%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-3, .sv-question .sv-q-column-3\": \"max-width: 33.33333%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-4, .sv-question .sv-q-column-4\": \"max-width: 25%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-5, .sv-question .sv-q-column-5\": \"max-width: 20%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv_q_file_input\": \"color: transparent;\",\n \".sv_qstn .sv_q_imgsel label > div\": \"overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding: 4px; border: 1px solid lightgray; border-radius: 4px;\",\n \".sv_qstn .sv_q_imgsel label > div > img, .sv_qstn .sv_q_imgsel label > div > embed\": \"display: block;\",\n \".sv_qstn table tr td .sv_q_m_cell_label\": \"position: absolute; left: 0; right: 0; top: 0; bottom: 0;\",\n \"f-panel\": \"padding: 0.5em 1em; display: inline-block; line-height: 2em;\",\n \".sv_progress_bar > span\": \"white-space: nowrap;\",\n //progress buttons\n \".sv_progress-buttons__container-center\": \"text-align: center;\",\n \".sv_progress-buttons__container\": \"display: inline-block; font-size:0; width: 100%; max-width: 1100px; white-space: nowrap; overflow: hidden;\",\n \".sv_progress-buttons__image-button-left\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iMTEsMTIgOSwxNCAzLDggOSwyIDExLDQgNyw4ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_progress-buttons__image-button-right\": \"display: inline-block; vertical-align: top; margin-top: 22px; font-size: 14px; width: 16px; height: 16px; cursor: pointer; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIHBvaW50cz0iNSw0IDcsMiAxMyw4IDcsMTQgNSwxMiA5LDggIi8+DQo8L3N2Zz4NCg==);\",\n \".sv_progress-buttons__image-button--hidden\": \"visibility: hidden;\",\n \".sv_progress-buttons__list-container\": \"max-width: calc(100% - 36px); display: inline-block; overflow: hidden;\",\n \".sv_progress-buttons__list\": \"display: inline-block; width: max-content; padding-left: 28px; padding-right: 28px; margin-top: 14px; margin-bottom: 14px;\",\n \".sv_progress-buttons__list li\": \"width: 138px; font-size: 14px; font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif; position: relative; text-align: center; vertical-align: top; display: inline-block;\",\n \".sv_progress-buttons__list li:before\": \"width: 24px; height: 24px; content: ''; line-height: 30px; border: 3px solid #8dd9ca; display: block; margin: 0 auto 10px auto; border-radius: 50%; box-sizing: content-box; background-color: #8dd9ca; cursor: pointer;\",\n \".sv_progress-buttons__list li:after\": \"width: 73%; height: 3px; content: ''; position: absolute; background-color: #d4d4d4; top: 15px; left: -36.5%;\",\n \".sv_progress-buttons__list li:first-child:after\": \"content: none;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-title\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $text-color; font-weight: bold;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-description\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: $text-color;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: #1ab394; background-color: #1ab394;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: #8dd9ca;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: #1ab394; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: #1ab394; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--nonclickable:before\": \"cursor: not-allowed;\",\n // ranking\n \".sv-ranking\": \"outline: none;\",\n \".sv-ranking-item\": \"cursor: pointer; margin-bottom: 5px;position: relative;\",\n \".sv-ranking-item:focus .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n \".sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n \".sv-question--disabled .sv-ranking-item:hover .sv-ranking-item__icon--hover\": \"visibility: hidden;\",\n \".sv-ranking-item:focus\": \"outline: none;\",\n \".sv-ranking-item:focus .sv-ranking-item__icon--focus\": \"visibility: visible; top: 15px;\",\n \".sv-ranking-item:focus .sv-ranking-item__index\": \"background: white; border: 2px solid #19b394;\",\n \".sv-ranking-item__content\": \"display: inline-block;background-color: white;padding-top: 5px;padding-bottom: 5px;padding-left: 35px;padding-right: 10px; border-radius: 100px;\",\n \".sv-ranking-item__icon-container\": \"position: absolute;left: 0;top: 0;bottom: 0;width: 35px;\",\n \".sv-ranking-item__icon\": \"visibility: hidden;left:10px;top:20px;fill:#19b394;position: absolute;\",\n \".sv-ranking-item__index\": \"display: inline-block;padding: 10px 16px;background: rgba(25, 179, 148, 0.1);border-radius: 100px;border: 2px solid transparent; margin-right: 10px;\",\n \".sv-ranking-item__text\": \"display: inline-block;\",\n \".sv-ranking-item__ghost\": \"display: none;background: #f3f3f3;border-radius: 100px;width: 200px;height: 55px;z-index: 1;position: absolute;left: 35px;\",\n \".sv-ranking-item--ghost .sv-ranking-item__ghost\": \"display: block;\",\n \".sv-ranking-item--ghost .sv-ranking-item__content\": \"visibility: hidden;\",\n \".sv-ranking-item--drag .sv-ranking-item__content\": \"box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);border-radius: 100px;\",\n \".sv-ranking--drag .sv-ranking-item:hover .sv-ranking-item__icon\": \"visibility: hidden;\",\n \".sv-ranking-item--drag .sv-ranking-item__icon--hover\": \"visibility: visible;\",\n \".sv-ranking--mobile .sv-ranking-item__icon--hover\": \"visibility:visible; fill:#9f9f9f;\",\n \".sv-ranking--mobile.sv-ranking--drag .sv-ranking-item--ghost .sv-ranking-item__icon.sv-ranking-item__icon--hover\": \"visibility:hidden;\",\n \".sv_qstn .sv_q_select_column\": \"display: inline-block; vertical-align: top; min-width: 10%;\",\n \".sv_qstn .sv_q_select_column > *:not(.sv_technical)\": \"display: block;\",\n \".sv_main .sv_container .sv_body .sv_p_root .sv_qstn .sv_q_select_column textarea\": \"margin-left: 0; padding-left: 0; line-height: initial;\",\n \".sv_main .sv-hidden\": \"display: none !important;\",\n \".sv_main .sv-visuallyhidden\": \"position: absolute; height: 1px !important; width: 1px !important; overflow: hidden; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px);\",\n // paneldynamic progress\n \".sv_main .sv-progress\": \"height: 0.19em; background-color: $header-background-color; position: relative;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color; height: 100%; position: relative;\",\n // EO paneldynamic progress\n // paneldynamic\n \".sv_main .sv-paneldynamic__progress-container\": \"position: relative; display: inline-block; width: calc(100% - 250px); margin-top: 20px;\",\n \".sv_main .sv-paneldynamic__add-btn\": \"float: right;\",\n \".sv_main .sv-paneldynamic__add-btn--list-mode\": \"float: none; margin-top: 0;\",\n \".sv_main .sv-paneldynamic__remove-btn\": \"margin-top: 1.25em;\",\n \".sv_main .sv-paneldynamic__remove-btn--right\": \"margin-top: 0; margin-left: 1.25em;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"box-sizing: border-box; display: inline-block; cursor: pointer; width: 0.7em; top: -0.28em; position: absolute;\",\n \".sv_main .sv-paneldynamic__prev-btn\": \"left: -1.3em; transform: rotate(90deg);\",\n \".sv_main .sv-paneldynamic__next-btn \": \"right: -1.3em; transform: rotate(270deg);\",\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"cursor: auto;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"font-weight: bold; font-size: 0.87em; margin-top: 0.69em; margin-left: 4em\",\n // EO paneldynamic\n //boolean\n \".sv_main .sv-boolean__switch\": \"display: inline-block; box-sizing: border-box; width: 63px; height: 24px; margin-right: 17px; margin-left: 21px; padding: 2px 3px; vertical-align: middle; border-radius: 12px; cursor: pointer;\",\n \".sv_main .sv-boolean__slider\": \"display: inline-block; width: 20px; height: 20px; transition-duration: .4s; transition-property: margin-left; border: none; border-radius: 100%;\",\n \".sv_main .sv-boolean__label\": \"vertical-align: middle; cursor: pointer;\",\n \".sv_main .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-left: calc(50% - 10px);\",\n \".sv_main .sv-boolean--checked .sv-boolean__slider\": \"margin-left: calc(100% - 20px);\",\n \"[dir='rtl'] .sv-boolean__label \": \"float: right;\",\n \"[dir='rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n \"[dir='rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n \"[dir='rtl'] .sv-boolean__switch\": \"float: right;\",\n \"[style*='direction:rtl'] .sv-boolean__label \": \"float: right;\",\n \"[style*='direction:rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n \"[style*='direction:rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n \"[style*='direction:rtl'] .sv-boolean__switch\": \"float: right;\",\n // EO boolean\n \".sv_main .sv_q_num\": \"\",\n \".sv_main .sv_q_num + span\": \"\",\n // SignaturePad\n \".sv_main .sjs_sp_container\": \"position: relative;\",\n \".sv_main .sjs_sp_controls\": \"position: absolute; left: 0; bottom: 0;\",\n \".sv_main .sjs_sp_controls > button\": \"user-select: none;\",\n \".sv_main .sjs_sp_container>div>canvas:focus\": \"outline: none;\",\n // logo\n // \".sv_main .sv_header\": \"white-space: nowrap;\",\n \".sv_main .sv_logo\": \"\",\n \".sv_main .sv-logo--left\": \"display: inline-block; vertical-align: top; margin-right: 2em;\",\n \".sv_main .sv-logo--right\": \"display: inline-block; vertical-align: top; margin-left: 2em; float: right;\",\n \".sv_main .sv-logo--right+.sv-logo--right-tail\": \"clear: both;\",\n \".sv_main .sv-logo--top\": \"display: block; width: 100%; text-align: center;\",\n \".sv_main .sv-logo--bottom\": \"display: block; width: 100%; text-align: center;\",\n \".sv_main .sv_header__text\": \"display: inline-block; vertical-align: top; max-width: 100%\",\n \".sv_main .sv-expand-action:before\": \"content: \\\"\\\"; display: inline-block; background-image: url(\\\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 10 10' style='enable-background:new 0 0 10 10;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23404040;%7D%0A%3C/style%3E%3Cpolygon class='st0' points='2,2 0,4 5,9 10,4 8,2 5,5 '/%3E%3C/svg%3E%0A\\\"); background-repeat: no-repeat; background-position: center center; height: 10px; width: 12px; margin: auto 8px;\",\n \".sv_main .sv-expand-action--expanded:before\": \"transform: rotate(180deg);\",\n \".sv_main .sv-action-bar\": \"display: flex; position: relative; align-items: center; margin-left: auto; padding: 0 0 0 16px; overflow: hidden; white-space: nowrap;\",\n \".sv_main .sv-action-bar-separator\": \"display: inline-block; width: 1px; height: 24px; vertical-align: middle; margin-right: 16px; background-color: #d6d6d6;\",\n \".sv_main .sv-action-bar-item\": \"-webkit-appearance: none; -moz-appearance: none; appearance: none; display: flex; height: 40px; padding: 8px; box-sizing: border-box; margin-right: 16px; border: none; border-radius: 2px; background-color: transparent; cursor: pointer; line-height: 24px; font-size: 16px; overflow-x: hidden; white-space: nowrap; min-width: auto; font-weight: normal\",\n \".sv_main .sv-action-bar-item__title\": \"vertical-align: middle; white-space: nowrap;\",\n \".sv_main .sv-action-bar-item__title--with-icon\": \"margin-left: 8px;\",\n \".sv_main .sv-action\": \"display: flex; align-items: center;\",\n \".sv_main .sv-action--hidden\": \"visibility: hidden\",\n \".sv_main .sv-action-bar-item__icon svg\": \"display: block;\",\n \".sv_main .sv-action-bar-item:active\": \"opacity: 0.5;\",\n \".sv_main .sv-action-bar-item:focus\": \"outline: none;\",\n \".sv_main .sv-title-actions\": \"display: flex;align-items: center;\",\n \".sv_main .sv-title-actions__title\": \"flex-wrap: wrap; max-width: 90%; min-width: 50%;\",\n \".sv_main .sv-title-actions__bar\": \"min-width: 56px;\",\n \".sv_main .sv_matrix_cell_actions .sv-action-bar\": \"margin-left: 0; padding-left: 0;\",\n \".sv_main .sv_p_wrapper_in_row\": \"display: flex; flex-direction: row; align-items: center;\",\n \".sv_main .sv_p_remove_btn_right\": \"margin-left: 1em;\",\n //button-group\n \".sv_main .sv-button-group\": \"display: flex; align-items: center; flex-direction: row; font-size: 16px; height: 48px; overflow: auto;\",\n \".sv_main .sv-button-group__item\": \"display: flex; box-sizing: border-box; flex-direction: row; justify-content: center; align-items: center; width: 100%; padding: 11px 16px; line-height: 24px; border-width: 1px; border-style: solid; outline: none; font-size: 16px; font-weight: 400; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n \".sv_main .sv-button-group__item:not(:first-of-type)\": \"margin-left: -1px;\",\n \".sv_main .sv-button-group__item-icon\": \"display: block; height: 24px;\",\n \".sv_main .sv-button-group__item--selected\": \"font-weight: 600;\",\n \".sv_main .sv-button-group__item-decorator\": \"display: flex; align-items: center;\",\n \".sv_main .sv-button-group__item-icon + .sv-button-group__item-caption\": \"margin-left: 8px;\",\n \".sv_main .sv-button-group__item--disabled\": \"color: cursor: default;\",\n //eo button-group\n //popup\n \"sv-popup\": \"display: block; position: absolute; z-index: -1;\",\n \".sv-popup\": \"position: fixed; left: 0; top: 0; z-index: 1000; width: 100vw; height: 100vh;\",\n \".sv-popup--modal\": \"display: flex; align-items: center; justify-content: center;\",\n \".sv-popup--modal .sv-popup__container\": \"position: static; filter: none; padding: calc(4 * 8px);\",\n \".sv-popup__container\": \"position: absolute; filter: drop-shadow(0px calc(1 * 8px) calc(2 * 8px) rgba(0, 0, 0, 0.1)); padding: calc(1 * 8px) 0; background: white; border-radius: 4px;\",\n \".sv-popup__scrolling-content\": \"max-width: 90vw; max-height: 90vh; overflow: auto;\",\n \".sv-popup__scrolling-content::-webkit-scrollbar\": \"height: 6px; width: 6px; background-color: #f3f3f3;\",\n \".sv-popup__scrolling-content::-webkit-scrollbar-thumb\": \"background: rgba(25, 179, 148, 0.1);\",\n \".sv-popup__content\": \"min-width: 100%;\",\n \".sv-popup--show-pointer.sv-popup--top\": \"transform: translateY(calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--top .sv-popup__pointer\": \"transform: translate(calc(-1 * 8px)) rotate(180deg);\",\n \".sv-popup--show-pointer.sv-popup--bottom\": \"transform: translateY(calc(1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--bottom .sv-popup__pointer\": \"transform: translate(calc(-1 * 8px), calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--right\": \"transform: translate(calc(1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--right .sv-popup__pointer\": \"transform: translate(-12px, -4px) rotate(-90deg);\",\n \".sv-popup--show-pointer.sv-popup--left\": \"transform: translate(calc(-1 * 8px));\",\n \".sv-popup--show-pointer.sv-popup--left .sv-popup__pointer\": \"transform: translate(-4px, -4px) rotate(90deg);\",\n \".sv-popup__pointer\": \"display: block; position: absolute;\",\n \".sv-popup__pointer:after\": \"content: ' '; display: block; width: 0; height: 0; border-left: calc(1 * 8px) solid transparent; border-right: calc(1 * 8px) solid transparent; border-bottom: calc(1 * 8px) solid white; align-self: center;\",\n \".sv-popup__footer\": \"display: flex; margin-top: calc(4 * 8px);\",\n \".sv-popup__footer-item:first-child\": \"margin-left: auto;\",\n \".sv-popup__footer-item + .sv-popup__footer-item\": \"margin-left: calc(1 * 8px);\",\n \".sv-popup__button\": \"padding: calc(2 * 8px) calc(6 * 8px); background: #fff; box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15); border-radius: 4px; cursor: pointer; margin: 2px; font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-weight: 600; font-size: calc(2 * 8px); line-height: calc(3 * 8px); text-align: center; color: #19b394; border: none; outline: none;\",\n \".sv-popup__button:hover\": \"box-shadow: 0 0 0 2px #19b394;\",\n \".sv-popup__button:disabled\": \"color: rgba(22, 22, 22, 0.16); cursor: default;\",\n \".sv-popup__button:disabled:hover\": \"box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);\",\n \".sv-popup__button--apply\": \"background-color: #19b394; color: #fff;\",\n \".sv-popup__button--apply:disabled\": \"background-color: #f3f3f3;\",\n //eo popup\n //list\n \".sv-list\": \"display: flex; flex-direction: column; align-items: flex-start; padding: 0; margin: 0; background: #ffffff; font-family: 'Open Sans'; list-style-type: none;\",\n \".sv-list__item\": \"width: 100%; display: flex; align-items: center; box-sizing: border-box; padding: calc(1 * 8px) calc(2 * 8px); cursor: pointer;\",\n \".sv-list__item-icon\": \"float: left; width: calc(3 * 8px); height: calc(3 * 8px); margin-right: calc(2 * 8px);\",\n \".sv-list__item-icon svg\": \"display: block;\",\n \".sv-list__item-icon use\": \"fill: #909090;\",\n \".sv-list__item:hover\": \"background-color: #f3f3f3;\",\n \".sv-list__item--selected\": \"background-color: #19b394; color: #fff;\",\n \".sv-list__item--selected:hover\": \"background-color: #19b394;\",\n \".sv-list__item--selected .sv-list__item-icon use\": \"fill: #fff;\",\n \".sv-list__item--disabled\": \"color: rgba(22, 22, 22, 0.16); cursor: default; pointer-events: none;\",\n \".sv-list__item span\": \"white-space: nowrap;\",\n //eo list\n };\n StylesManager.Media = {\n \".sv_qstn fieldset .sv-q-col-1\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-2\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-3\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-4\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-5\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn\": {\n style: \"display: block; width: 100% !important;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .title-left\": {\n style: \"float: none;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_radiogroup_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_checkbox_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_imagepicker_inline\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table thead\": {\n style: \"display: none;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tbody, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tr, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table td\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table:not(.sv_q_matrix) td:before\": {\n style: \"content: attr(title);\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.sv_q_matrix td:after\": {\n style: \"content: attr(title); padding-left: 1em\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .radio label, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .checkbox label\": {\n style: \"line-height: 12px; vertical-align: top;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_qstn label.sv_q_m_label\": {\n style: \"display: inline;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_custom_header\": {\n style: \"display: none;\",\n media: \"@media (max-width: 1300px)\",\n },\n \".sv_main .sv_container .sv_header h3\": {\n style: \"font-size: 1.5em;\",\n media: \"@media (max-width: 1300px)\",\n },\n \".sv_main .sv_container .sv_header h3 span\": {\n style: \"font-size: 0.75em;\",\n media: \"@media (max-width: 700px)\",\n },\n \".sv_main.sv_bootstrap_css .sv-progress__text\": {\n style: \"margin-left: 8em;\",\n media: \"@media (min-width: 768px)\",\n },\n \".sv_row\": {\n style: \" display: flex; flex-wrap: wrap;\",\n media: \"@supports (display: flex)\",\n },\n \".sv-vue-row-additional-div\": {\n style: \" display: flex; flex-wrap: wrap; flex-basis: 100%;\",\n media: \"@supports (display: flex)\",\n },\n \".sv-row > .sv-row__panel, .sv-row__question:not(:last-child)\": {\n style: \"float: left;\",\n media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n },\n \"[dir='rtl'],[style*='direction:rtl'] .sv-row__question:not(:last-child)\": {\n style: \"float: right;\",\n media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n },\n \".sv-row > .sv-row__panel, .sv-row__question\": {\n style: \"width: 100% !important; padding-right: 0 !important;\",\n media: \"@media only screen and (max-width: 600px)\",\n },\n };\n StylesManager.ThemeColors = {\n default: {\n \"$header-background-color\": \"#e7e7e7\",\n \"$body-container-background-color\": \"#f4f4f4\",\n \"$main-color\": \"#1ab394\",\n \"$main-hover-color\": \"#0aa384\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#6d7072\",\n \"$text-input-color\": \"#6d7072\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n orange: {\n \"$header-background-color\": \"#4a4a4a\",\n \"$body-container-background-color\": \"#f8f8f8\",\n \"$main-color\": \"#f78119\",\n \"$main-hover-color\": \"#e77109\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$text-input-color\": \"#4a4a4a\",\n \"$header-color\": \"#f78119\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n darkblue: {\n \"$header-background-color\": \"#d9d8dd\",\n \"$body-container-background-color\": \"#f6f7f2\",\n \"$main-color\": \"#3c4f6d\",\n \"$main-hover-color\": \"#2c3f5d\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$text-input-color\": \"#4a4a4a\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n darkrose: {\n \"$header-background-color\": \"#ddd2ce\",\n \"$body-container-background-color\": \"#f7efed\",\n \"$main-color\": \"#68656e\",\n \"$main-hover-color\": \"#58555e\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$text-input-color\": \"#4a4a4a\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n stone: {\n \"$header-background-color\": \"#cdccd2\",\n \"$body-container-background-color\": \"#efedf4\",\n \"$main-color\": \"#0f0f33\",\n \"$main-hover-color\": \"#191955\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#0f0f33\",\n \"$text-input-color\": \"#0f0f33\",\n \"$header-color\": \"#0f0f33\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n winter: {\n \"$header-background-color\": \"#82b8da\",\n \"$body-container-background-color\": \"#dae1e7\",\n \"$main-color\": \"#3c3b40\",\n \"$main-hover-color\": \"#1e1d20\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#000\",\n \"$text-input-color\": \"#000\",\n \"$header-color\": \"#000\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n winterstone: {\n \"$header-background-color\": \"#323232\",\n \"$body-container-background-color\": \"#f8f8f8\",\n \"$main-color\": \"#5ac8fa\",\n \"$main-hover-color\": \"#06a1e7\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#000\",\n \"$text-input-color\": \"#000\",\n \"$header-color\": \"#fff\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n modern: {\n \"$main-color\": \"#1ab394\",\n \"$add-button-color\": \"#1948b3\",\n \"$remove-button-color\": \"#ff1800\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$error-color\": \"#d52901\",\n \"$text-color\": \"#404040\",\n \"$light-text-color\": \"#fff\",\n \"$button-text-color\": \"#fff\",\n \"$checkmark-color\": \"#fff\",\n \"$matrix-text-checked-color\": \"#fff\",\n \"$text-input-color\": \"#404040\",\n \"$inputs-background-color\": \"transparent\",\n \"$main-hover-color\": \"#9f9f9f\",\n \"$body-container-background-color\": \"#f4f4f4\",\n \"$text-border-color\": \"#d4d4d4\",\n \"$disabled-text-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$border-color\": \"rgb(64, 64, 64, 0.5)\",\n \"$dropdown-border-color\": \"#d4d4d4\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$answer-background-color\": \"rgba(26, 179, 148, 0.2)\",\n \"$error-background-color\": \"rgba(213, 41, 1, 0.2)\",\n \"$radio-checked-color\": \"#404040\",\n \"$clean-button-color\": \"#1948b3\",\n \"$body-background-color\": \"#ffffff\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n bootstrap: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$text-input-color\": \"#404040;\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n bootstrapmaterial: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$text-input-color\": \"#404040;\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$body-background-color\": \"#ffffff\",\n \"$foreground-light\": \"#909090\",\n \"$foreground-disabled\": \"#161616\",\n \"$background-dim\": \"#f3f3f3\",\n },\n };\n StylesManager.ThemeCss = {\n \".sv_default_css\": \"background-color: $body-container-background-color;\",\n \".sv_default_css hr\": \"border-color: $border-color;\",\n \".sv_default_css input[type='button'], .sv_default_css button\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_default_css input[type='button']:hover, .sv_default_css button:hover\": \"background-color: $main-hover-color;\",\n \".sv_default_css .sv_header\": \"color: $header-color;\",\n \".sv_default_css .sv_custom_header\": \"background-color: $header-background-color;\",\n \".sv_default_css .sv_container\": \"color: $text-color;\",\n \".sv_default_css .sv_body\": \"background-color: $body-background-color; border-color: $main-color;\",\n \".sv_default_css .sv_progress\": \"background-color: $border-color;\",\n \".sv_default_css .sv_progress_bar\": \"background-color: $main-color;\",\n \".sv_default_css .sv_p_root > .sv_row\": \"border-color: $border-color;\",\n \".sv_default_css .sv_p_root > .sv_row:nth-child(odd)\": \"background-color: $body-background-color;\",\n \".sv_default_css .sv_p_root > .sv_row:nth-child(even)\": \"background-color: $body-container-background-color;\",\n \".sv_default_css .sv_q_other input\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_text_root\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_dropdown_control\": \"color: $text-input-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input[type='text']\": \"color: $text-color; -webkit-text-fill-color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css select\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css textarea\": \"color: $text-input-color; -webkit-text-fill-color: $text-input-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input:not([type='button']):not([type='reset']):not([type='submit']):not([type='image']):not([type='checkbox']):not([type='radio'])\": \"border: 1px solid $border-color; background-color: $inputs-background-color;color: $text-input-color; -webkit-text-fill-color: $text-input-color;\",\n \".sv_default_css input:not([type='button']):not([type='reset']):not([type='submit']):not([type='image']):not([type='checkbox']):not([type='radio']):focus\": \"border: 1px solid $main-color;\",\n \".sv_default_css .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .sv_q_dropdown_control \": \"background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_other input:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_q_text_root:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_q_dropdown_control:focus\": \"border-color: $main-color;\",\n \".sv_default_css input[type='text']:focus\": \"border-color: $main-color;\",\n '.sv_default_css .sv_container .sv_body .sv_p_root .sv_q input[type=\"radio\"]:focus, .sv_default_css .sv_container .sv_body .sv_p_root .sv_q input[type=\"checkbox\"]:focus': \"outline: 1px dotted $main-color;\",\n \".sv_default_css select:focus\": \"border-color: $main-color;\",\n \".sv_default_css textarea:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_select_wrapper\": \"background-color: $body-background-color;\",\n \".sv_default_css .sv_select_wrapper::before\": \"background-color: $main-color;\",\n \".sv_default_css .sv_q_rating_item.active .sv_q_rating_item_text\": \"background-color: $main-hover-color; border-color: $main-hover-color; color: $body-background-color;\",\n \".sv_default_css .sv_q_rating_item .sv_q_rating_item_text\": \"border-color: $border-color;\",\n \".sv_default_css .sv_q_rating_item .sv_q_rating_item_text:hover\": \"border-color: $main-hover-color;\",\n \".sv_default_css table.sv_q_matrix tr\": \"border-color: $border-color;\",\n \".sv_default_css table.sv_q_matrix_dropdown tr\": \"border-color: $border-color;\",\n \".sv_default_css table.sv_q_matrix_dynamic tr\": \"border-color: $border-color;\",\n \".sv_default_css .sv_q_m_cell_selected\": \"color: $body-background-color; background-color: $main-hover-color;\",\n \".sv_main .sv_q_file_remove:hover\": \"color: $main-color;\",\n \".sv_main .sv_q_file_choose_button\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_main .sv_q_file_choose_button:hover\": \"background-color: $main-hover-color;\",\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n \".sv_default_css .sv_p_description\": \"padding-left: 1.29em;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n //eo boolean\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n //action-bar\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n //eo action-bar\n //button-group\n \".sv_main .sv-button-group__item:hover:not(.sv-button-group__item--selected):not(not(.sv-button-group__item--disabled)\": \"background-color: $background-dim;\",\n \".sv_main .sv-button-group__item-icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-button-group__item--selected\": \"color: $main-color;\",\n \".sv_main .sv-button-group__item--selected .sv-button-group__item-icon use\": \"fill: $main-color;\",\n \".sv_main .sv-button-group__item--disabled\": \"color: $foreground-disabled;\",\n \".sv_main .sv-button-group__item--disabled .sv-button-group__item-icon use\": \"fill: $foreground-disabled;\",\n \".sv_main .sv-button-group__item\": \"background: $body-background-color; border-color: $border-color;\",\n //eo button-group\n \".sv_main .sv_qstn textarea\": \"max-width: 100%\",\n };\n StylesManager.modernThemeCss = {\n // \".sv-paneldynamic__add-btn\": \"background-color: $add-button-color;\",\n // \".sv-paneldynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n \".sv-btn\": \"color: $button-text-color;\",\n \".sv-checkbox__svg\": \"border-color: $border-color; fill: transparent;\",\n \".sv-checkbox--allowhover:hover .sv-checkbox__svg\": \"background-color: $main-hover-color; fill: $checkmark-color;\",\n \".sv-checkbox--checked .sv-checkbox__svg\": \"background-color: $main-color; fill: $checkmark-color;\",\n \".sv-checkbox--checked.sv-checkbox--disabled .sv-checkbox__svg\": \"background-color: $disable-color; fill: $checkmark-color;\",\n \".sv-checkbox--disabled .sv-checkbox__svg\": \"border-color: $disable-color;\",\n \".sv-comment\": \"border-color: $text-border-color; max-width: 100%;\",\n \".sv-comment:focus\": \"border-color: $main-color;\",\n \".sv-completedpage\": \"color: $text-color; background-color: $body-container-background-color;\",\n \".sv-container-modern\": \"color: $text-color;\",\n \".sv-container-modern__title\": \"color: $main-color;\",\n \".sv-description\": \"color: $disabled-text-color;\",\n \".sv-dropdown\": \"border-bottom: 0.06em solid $text-border-color;\",\n \".sv-dropdown:focus\": \"border-color: $dropdown-border-color;\",\n \".sv-dropdown--error\": \"border-color: $error-color; color: $error-color;\",\n \".sv-dropdown--error::placeholder\": \"color: $error-color;\",\n \".sv-dropdown--error::-ms-input-placeholder\": \"color: $error-color;\",\n \".sv-file__decorator\": \"background-color: $body-container-background-color;\",\n \".sv-file__clean-btn\": \"background-color: $remove-button-color;\",\n \".sv-file__choose-btn:not(.sv-file__choose-btn--disabled)\": \"background-color: $add-button-color;\",\n \".sv-file__choose-btn--disabled\": \"background-color: $disable-color;\",\n \".sv-file__remove-svg\": \"fill: #ff1800;\",\n \".sv-file__sign a\": \"color: $text-color;\",\n \".sv-footer__complete-btn\": \"background-color: $main-color;\",\n \".sv-footer__next-btn\": \"background-color: $main-color;\",\n \".sv-footer__prev-btn\": \"background-color: $main-color;\",\n \".sv-footer__start-btn\": \"background-color: $main-color;\",\n \".sv-footer__preview-btn\": \"background-color: $main-color;\",\n \".sv-footer__edit-btn\": \"background-color: $main-color;\",\n \".sv-imagepicker__item--allowhover:hover .sv-imagepicker__image\": \"background-color: $main-hover-color; border-color: $main-hover-color;\",\n \".sv-imagepicker__item--checked .sv-imagepicker__image\": \"background-color: $main-color; border-color: $main-color;\",\n \".sv-imagepicker__item--disabled.sv-imagepicker__item--checked .sv-imagepicker__image\": \"background-color: $disable-color; border-color: $disable-color;\",\n \".sv-item__control:focus + .sv-item__decorator\": \"border-color: $main-color;\",\n \".sv-matrix__text--checked\": \"color: $matrix-text-checked-color; background-color: $main-color;\",\n \".sv-matrix__text--disabled.sv-matrix__text--checked\": \"background-color: $disable-color;\",\n \".sv-matrixdynamic__add-btn\": \"background-color: $add-button-color;\",\n \".sv-matrixdynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-paneldynamic__add-btn\": \"background-color: $add-button-color;\",\n \".sv-paneldynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-paneldynamic__prev-btn, .sv-paneldynamic__next-btn\": \"fill: $text-color;\",\n \".sv-paneldynamic__prev-btn--disabled, .sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv-progress\": \"background-color: $header-background-color;\",\n \".sv-progress__bar\": \"background-color: $main-color;\",\n \".sv-progress__text\": \"color: $progress-text-color;\",\n \".sv-question__erbox\": \"color: $error-color;\",\n \".sv-question__title--answer\": \"background-color: $answer-background-color;\",\n \".sv-question__title--error\": \"background-color: $error-background-color;\",\n \".sv-panel__title--error\": \"background-color: $error-background-color;\",\n \".sv-radio__svg\": \"border-color: $border-color; fill: transparent;\",\n \".sv-radio--allowhover:hover .sv-radio__svg\": \"fill: $border-color;\",\n \".sv-radio--checked .sv-radio__svg\": \"border-color: $radio-checked-color; fill: $radio-checked-color;\",\n \".sv-radio--disabled .sv-radio__svg\": \"border-color: $disable-color;\",\n \".sv-radio--disabled.sv-radio--checked .sv-radio__svg\": \"fill: $disable-color;\",\n \".sv-rating\": \"color: $text-color;\",\n \".sv-rating input:focus + .sv-rating__min-text + .sv-rating__item-text, .sv-rating input:focus + .sv-rating__item-text\": \"outline-color: $main-color;\",\n \".sv-rating__item-text\": \"color: $main-hover-color; border: solid 0.1875em $main-hover-color;\",\n \".sv-rating__item-text:hover\": \"background-color: $main-hover-color; color: $body-background-color;\",\n \".sv-rating__item--selected .sv-rating__item-text\": \"background-color: $main-color; color: $body-background-color; border-color: $main-color;\",\n \".sv-rating--disabled .sv-rating__item-text\": \"color: $disable-color; border-color: $disable-color;\",\n \".sv-rating--disabled .sv-rating__item-text:hover\": \"background-color: transparent;\",\n \".sv-rating--disabled .sv-rating__item-text:hover .sv-rating__item--selected .sv-rating__item-text\": \"background-color: $disable-color; color: $body-background-color;\",\n \"::-webkit-scrollbar\": \"background-color: $main-hover-color;\",\n \"::-webkit-scrollbar-thumb\": \"background: $main-color;\",\n \".sv-selectbase__clear-btn\": \"background-color: $clean-button-color;\",\n \".sv-table\": \"background-color: rgba($main-hover-color, 0.1);\",\n \".sv-text:focus\": \"border-color: $main-color;\",\n '.sv-text[type=\"date\"]::-webkit-calendar-picker-indicator': \"color: transparent; background: transparent;\",\n \".sv-text--error\": \"color: $error-color; border-color: $error-color;\",\n \".sv-text--error::placeholder\": \"color: $error-color;\",\n \".sv-text--error::-ms-placeholder\": \"color: $error-color;\",\n \".sv-text--error:-ms-placeholder\": \"color: $error-color;\",\n \"input.sv-text, textarea.sv-comment, select.sv-dropdown\": \"color: $text-input-color; background-color: $inputs-background-color;\",\n \".sv-text::placeholder\": \"color: $text-input-color;\",\n \".sv-text::-ms-placeholder\": \"color: $text-input-color;\",\n \".sv-text:-ms-placeholder\": \"color: $text-input-color;\",\n \".sv-table__row--detail\": \"background-color: $header-background-color;\",\n };\n StylesManager.bootstrapThemeCss = {\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n \".sv_main .sv_p_description\": \"padding-left: 1.66em;\",\n \".sv_main .sv_qstn_error_bottom\": \"margin-top: 20px; margin-bottom: 0;\",\n \".sv_main .progress\": \"width: 60%;\",\n \".sv_main .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n \".sv_main .table>tbody>tr>td\": \"min-width: 90px;\",\n \".sv_main f-panel .sv_qstn\": \"padding: 0; vertical-align: middle;\",\n \".sv_main .sv_q_image\": \"display: inline-block;\",\n \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n //eo boolean\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n };\n StylesManager.bootstrapmaterialThemeCss = {\n \".sv_main.sv_bootstrapmaterial_css .form-group.is-focused .form-control\": \"linear-gradient(0deg, $main-color 2px, $main-color 0),linear-gradient(0deg, #D2D2D2 1px, transparent 0);\",\n \".sv_main.sv_bootstrapmaterial_css .sv_qstn\": \"margin-bottom: 1rem;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_qstn label.sv_q_m_label\": \"height: 100%;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_image\": \"display: inline-block;\",\n \".sv_main .sv_row .sv_qstn:first-child:last-child\": \"flex: none !important;\",\n \".sv_main .sv_row .sv_p_container:first-child:last-child\": \"flex: none !important;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-default.active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-default:active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-secondary.active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-secondary:active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .open>.dropdown-toggle.btn-default\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary, .sv_main.sv_bootstrapmaterial_css button.btn-primary\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary:hover, .sv_main.sv_bootstrapmaterial_css button.btn-primary:hover\": \"background-color: $main-hover-color;\",\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_file_remove:hover\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .form-group input[type=file]\": \"position: relative; opacity: 1;\",\n \".sv_main.sv_bootstrapmaterial_css .progress\": \"width: 60%; height: 1.5em;\",\n \".sv_main.sv_bootstrapmaterial_css .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean .checkbox-decorator\": \"display: none;\",\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label.sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean__label\": \"color: $text-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n //eo boolean\n \".sv_main .sv_matrix_detail_row\": \"background-color: #ededed; border-top: 1px solid $header-background-color; border-bottom: 1px solid $header-background-color;\",\n \".sv_main .sv-action-bar-item\": \"color: $text-color;\",\n \".sv_main .sv-action-bar-item__icon use\": \"fill: $foreground-light;\",\n \".sv_main .sv-action-bar-item:hover\": \"background-color: $background-dim;\",\n };\n StylesManager.Enabled = true;\n return StylesManager;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey.ts\":\n/*!***********************!*\\\n !*** ./src/survey.ts ***!\n \\***********************/\n/*! exports provided: SurveyModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return SurveyModel; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaultCss/cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./page */ \"./src/page.ts\");\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./surveytimer */ \"./src/surveytimer.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The `Survey` object contains information about the survey, Pages, Questions, flow logic and etc.\n */\nvar SurveyModel = /** @class */ (function (_super) {\n __extends(SurveyModel, _super);\n function SurveyModel(jsonObj) {\n if (jsonObj === void 0) { jsonObj = null; }\n var _this = _super.call(this) || this;\n _this.valuesHash = {};\n _this.variablesHash = {};\n _this.localeValue = \"\";\n _this.completedStateValue = \"\";\n _this.completedStateTextValue = \"\";\n _this.isTimerStarted = false;\n /**\n * The event is fired before the survey is completed and the `onComplete` event is fired. You can prevent the survey from completing by setting `options.allowComplete` to `false`\n *
`sender` - the survey object that fires the event.\n *
`options.allowComplete` - Specifies whether a user can complete a survey. Set this property to `false` to prevent the survey from completing. The default value is `true`.\n *
`options.isCompleteOnTrigger` - returns true if the survey is completing on \"complete\" trigger.\n * @see onComplete\n */\n _this.onCompleting = _this.addEvent();\n /**\n * The event is fired after a user clicks the 'Complete' button and finishes a survey. Use this event to send the survey data to your web server.\n *
`sender` - the survey object that fires the event.\n *
`options.showDataSaving(text)` - call this method to show that the survey is saving survey data on your server. The `text` is an optional parameter to show a custom message instead of default.\n *
`options.showDataSavingError(text)` - call this method to show that an error occurred while saving the data on your server. If you want to show a custom error, use an optional `text` parameter.\n *
`options.showDataSavingSuccess(text)` - call this method to show that the data was successfully saved on the server.\n *
`options.showDataSavingClear` - call this method to hide the text about the saving progress.\n *
`options.isCompleteOnTrigger` - returns true if the survey is completed on \"complete\" trigger.\n * @see data\n * @see clearInvisibleValues\n * @see completeLastPage\n * @see surveyPostId\n */\n _this.onComplete = _this.addEvent();\n /**\n * The event is fired after a user clicks the 'Complete' button. The event allows you to specify the URL opened after completing a survey.\n * Specify the `navigateToUrl` property to make survey navigate to another url.\n *
`sender` - the survey object that fires the event.\n *
`options.url` - Specifies a URL opened after completing a survey. Set this property to an empty string to cancel the navigation and show the completed survey page.\n * @see navigateToUrl\n * @see navigateToUrlOnCondition\n */\n _this.onNavigateToUrl = _this.addEvent();\n /**\n * The event is fired after the survey changed it's state from \"starting\" to \"running\". The \"starting\" state means that survey shows the started page.\n * The `firstPageIsStarted` property should be set to `true`, if you want to display a start page in your survey. In this case, an end user should click the \"Start\" button to start the survey.\n * @see firstPageIsStarted\n */\n _this.onStarted = _this.addEvent();\n /**\n * The event is fired on clicking the 'Next' button if the `sendResultOnPageNext` is set to `true`. You can use it to save the intermediate results, for example, if your survey is large enough.\n *
`sender` - the survey object that fires the event.\n * @see sendResultOnPageNext\n */\n _this.onPartialSend = _this.addEvent();\n /**\n * The event is fired before the current page changes to another page. Typically it happens when a user click the 'Next' or 'Prev' buttons.\n *
`sender` - the survey object that fires the event.\n *
`option.oldCurrentPage` - the previous current/active page.\n *
`option.newCurrentPage` - a new current/active page.\n *
`option.allowChanging` - set it to `false` to disable the current page changing. It is `true` by default.\n *
`option.isNextPage` - commonly means, that end-user press the next page button. In general, it means that options.newCurrentPage is the next page after options.oldCurrentPage\n *
`option.isPrevPage` - commonly means, that end-user press the previous page button. In general, it means that options.newCurrentPage is the previous page before options.oldCurrentPage\n * @see currentPage\n * @see currentPageNo\n * @see nextPage\n * @see prevPage\n * @see completeLastPage\n * @see onCurrentPageChanged\n **/\n _this.onCurrentPageChanging = _this.addEvent();\n /**\n * The event is fired when the current page has been changed to another page. Typically it happens when a user click on 'Next' or 'Prev' buttons.\n *
`sender` - the survey object that fires the event.\n *
`option.oldCurrentPage` - a previous current/active page.\n *
`option.newCurrentPage` - a new current/active page.\n *
`option.isNextPage` - commonly means, that end-user press the next page button. In general, it means that options.newCurrentPage is the next page after options.oldCurrentPage\n *
`option.isPrevPage` - commonly means, that end-user press the previous page button. In general, it means that options.newCurrentPage is the previous page before options.oldCurrentPage\n * @see currentPage\n * @see currentPageNo\n * @see nextPage\n * @see prevPage\n * @see completeLastPage\n * @see onCurrentPageChanging\n */\n _this.onCurrentPageChanged = _this.addEvent();\n /**\n * The event is fired before the question value (answer) is changed. It can be done via UI by a user or programmatically on calling the `setValue` method.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the value name that has being changed.\n *
`options.question` - a question which `question.name` equals to the value name. If there are several questions with the same name, the first question is used. If there is no such questions, the `options.question` is null.\n *
`options.oldValue` - an old, previous value.\n *
`options.value` - a new value. You can change it.\n * @see setValue\n * @see onValueChanged\n */\n _this.onValueChanging = _this.addEvent();\n /**\n * The event is fired when the question value (i.e., answer) has been changed. The question value can be changed in UI (by a user) or programmatically (on calling `setValue` method).\n * Use the `onDynamicPanelItemValueChanged` and `onMatrixCellValueChanged` events to handle changes in a question in the Panel Dynamic and a cell question in matrices.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the value name that has been changed.\n *
`options.question` - a question which `question.name` equals to the value name. If there are several questions with the same name, the first question is used. If there is no such questions, the `options.question` is `null`.\n *
`options.value` - a new value.\n * @see setValue\n * @see onValueChanging\n * @see onDynamicPanelItemValueChanged\n * @see onMatrixCellValueChanged\n */\n _this.onValueChanged = _this.addEvent();\n /**\n * The event is fired when a question visibility has been changed.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question which visibility has been changed.\n *
`options.name` - a question name.\n *
`options.visible` - a question `visible` boolean value.\n * @see Question.visibile\n * @see Question.visibileIf\n */\n _this.onVisibleChanged = _this.addEvent();\n /**\n * The event is fired on changing a page visibility.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page which visibility has been changed.\n *
`options.visible` - a page `visible` boolean value.\n * @see PageModel.visibile\n * @see PageModel.visibileIf\n */\n _this.onPageVisibleChanged = _this.addEvent();\n /**\n * The event is fired on changing a panel visibility.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a panel which visibility has been changed.\n *
`options.visible` - a panel `visible` boolean value.\n * @see PanelModel.visibile\n * @see PanelModel.visibileIf\n */\n _this.onPanelVisibleChanged = _this.addEvent();\n /**\n * The event is fired on creating a new question.\n * Unlike the onQuestionAdded event, this event calls for all question created in survey including inside: a page, panel, matrix cell, dynamic panel and multiple text.\n * or inside a matrix cell or it can be a text question in multiple text items or inside a panel of a panel dynamic.\n * You can use this event to set up properties to a question based on it's type for all questions, regardless where they are located, on the page or inside a matrix cell.\n * Please note: If you want to use this event for questions loaded from JSON then you have to create survey with empty/null JSON parameter, assign the event and call survey.fromJSON(yourJSON) function.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a newly created question object.\n * @see Question\n * @see onQuestionAdded\n */\n _this.onQuestionCreated = _this.addEvent();\n /**\n * The event is fired on adding a new question into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a newly added question object.\n *
`options.name` - a question name.\n *
`options.index` - an index of the question in the container (page or panel).\n *
`options.parentPanel` - a container where a new question is located. It can be a page or panel.\n *
`options.rootPanel` - typically, it is a page.\n * @see Question\n * @see onQuestionCreated\n */\n _this.onQuestionAdded = _this.addEvent();\n /**\n * The event is fired on removing a question from survey.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a removed question object.\n *
`options.name` - a question name.\n * @see Question\n */\n _this.onQuestionRemoved = _this.addEvent();\n /**\n * The event is fired on adding a panel into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a newly added panel object.\n *
`options.name` - a panel name.\n *
`options.index` - an index of the panel in the container (a page or panel).\n *
`options.parentPanel` - a container (a page or panel) where a new panel is located.\n *
`options.rootPanel` - a root container, typically it is a page.\n * @see PanelModel\n */\n _this.onPanelAdded = _this.addEvent();\n /**\n * The event is fired on removing a panel from survey.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a removed panel object.\n *
`options.name` - a panel name.\n * @see PanelModel\n */\n _this.onPanelRemoved = _this.addEvent();\n /**\n * The event is fired on adding a page into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a newly added `panel` object.\n * @see PanelModel\n */\n _this.onPageAdded = _this.addEvent();\n /**\n * The event is fired on validating value in a question. You can specify a custom error message using `options.error`. The survey blocks completing the survey or going to the next page when the error messages are displayed.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a validated question.\n *
`options.name` - a question name.\n *
`options.value` - the current question value (answer).\n *
`options.error` - an error string. It is empty by default.\n * @see onServerValidateQuestions\n * @see onSettingQuestionErrors\n */\n _this.onValidateQuestion = _this.addEvent();\n /**\n * The event is fired before errors are assigned to a question. You may add/remove/modify errors for a question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a validated question.\n *
`options.errors` - the list of errors. The list is empty by default and remains empty if a validated question has no errors.\n * @see onValidateQuestion\n */\n _this.onSettingQuestionErrors = _this.addEvent();\n /**\n * Use this event to validate data on your server.\n *
`sender` - the survey object that fires the event.\n *
`options.data` - the values of all non-empty questions on the current page. You can get a question value as `options.data[\"myQuestionName\"]`.\n *
`options.errors` - set your errors to this object as: `options.errors[\"myQuestionName\"] = \"Error text\";`. It will be shown as a question error.\n *
`options.complete()` - call this function to tell survey that your server callback has been processed.\n * @see onValidateQuestion\n * @see onValidatePanel\n */\n _this.onServerValidateQuestions = _this.addEvent();\n /**\n * Use this event to modify the HTML before rendering, for example HTML on a completed page.\n *
`sender` - the survey object that fires the event.\n *
`options.html` - an HTML that you may change before text processing and then rendering.\n * @see completedHtml\n * @see loadingHtml\n * @see QuestionHtmlModel.html\n */\n /**\n * The event is fired on validating a panel. Set your error to `options.error` and survey will show the error for the panel and block completing the survey or going to the next page.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - a panel name.\n *
`options.error` - an error string. It is empty by default.\n * @see onValidateQuestion\n */\n _this.onValidatePanel = _this.addEvent();\n /**\n * Use the event to change the default error text.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - an error text.\n *
`options.error` - an instance of the `SurveyError` object.\n *
`options.name` - the error name. The following error names are available:\n * required, requireoneanswer, requirenumeric, exceedsize, webrequest, webrequestempty, otherempty,\n * uploadingfile, requiredinallrowserror, minrowcounterror, keyduplicationerror, custom\n */\n _this.onErrorCustomText = _this.addEvent();\n /**\n * Use the this event to be notified when the survey finished validate questions on the current page. It commonly happens when a user try to go to the next page or complete the survey\n * options.questions - the list of questions that have errors\n * options.errors - the list of errors\n * options.page - the page where question(s) are located\n */\n _this.onValidatedErrorsOnCurrentPage = _this.addEvent();\n /**\n * Use this event to modify the HTML content before rendering, for example `completeHtml` or `loadingHtml`.\n * `options.html` - specifies the modified HTML content.\n * @see completedHtml\n * @see loadingHtml\n */\n _this.onProcessHtml = _this.addEvent();\n /**\n * Use this event to change the question title in code. If you want to remove question numbering then set showQuestionNumbers to \"off\".\n *
`sender` - the survey object that fires the event.\n *
`options.title` - a calculated question title, based on question `title`, `name`.\n *
`options.question` - a question object.\n * @see showQuestionNumbers\n * @see requiredText\n */\n _this.onGetQuestionTitle = _this.addEvent();\n /**\n * Use this event to change the question no in code. If you want to remove question numbering then set showQuestionNumbers to \"off\".\n *
`sender` - the survey object that fires the event.\n *
`options.no` - a calculated question no, based on question `visibleIndex`, survey `.questionStartIndex` properties. You can change it.\n *
`options.question` - a question object.\n * @see showQuestionNumbers\n * @see questionStartIndex\n */\n _this.onGetQuestionNo = _this.addEvent();\n /**\n * Use this event to change the progress text in code.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - a progress text, that SurveyJS will render in progress bar.\n *
`options.questionCount` - a number of questions that have input(s). We do not count html or expression questions\n *
`options.answeredQuestionCount` - a number of questions that have input(s) and an user has answered.\n *
`options.requiredQuestionCount` - a number of required questions that have input(s). We do not count html or expression questions\n *
`options.requiredAnsweredQuestionCount` - a number of required questions that have input(s) and an user has answered.\n * @see progressBarType\n */\n _this.onProgressText = _this.addEvent();\n /**\n * Use this event to process the markdown text.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - SurveyJS element (a question, panel, page, or survey) where the string is going to be rendered.\n *
`options.name` - a property name is going to be rendered.\n *
`options.text` - a text that is going to be rendered.\n *
`options.html` - an HTML content. It is `null` by default. Use this property to specify the HTML content rendered instead of `options.text`.\n */\n _this.onTextMarkdown = _this.addEvent();\n /**\n * Use this event to specity render component name used for text rendering.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - SurveyJS element (a question, panel, page, or survey) where the string is going to be rendered.\n *
`options.name` - a property name is going to be rendered.\n *
`options.renderAs` - a component name used for text rendering.\n */\n _this.onTextRenderAs = _this.addEvent();\n /**\n * The event fires when it gets response from the [api.surveyjs.io](https://api.surveyjs.io) service on saving survey results. Use it to find out if the results have been saved successfully.\n *
`sender` - the survey object that fires the event.\n *
`options.success` - it is `true` if the results has been sent to the service successfully.\n *
`options.response` - a response from the service.\n */\n _this.onSendResult = _this.addEvent();\n /**\n * Use it to get results after calling the `getResult` method. It returns a simple analytics from [api.surveyjs.io](https://api.surveyjs.io) service.\n *
`sender` - the survey object that fires the event.\n *
`options.success` - it is `true` if the results were got from the service successfully.\n *
`options.data` - the object `{AnswersCount, QuestionResult : {} }`. `AnswersCount` is the number of posted survey results. `QuestionResult` is an object with all possible unique answers to the question and number of these answers.\n *
`options.dataList` - an array of objects `{name, value}`, where `name` is a unique value/answer to the question and `value` is a number/count of such answers.\n *
`options.response` - the server response.\n * @see getResult\n */\n _this.onGetResult = _this.addEvent();\n /**\n * The event is fired on uploading the file in QuestionFile when `storeDataAsText` is set to `false`. Use this event to change the uploaded file name or to prevent a particular file from being uploaded.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the file question instance.\n *
`options.name` - the question name.\n *
`options.files` - the Javascript File objects array to upload.\n *
`options.callback` - a callback function to get the file upload status and the updloaded file content.\n * @see uploadFiles\n * @see QuestionFileModel.storeDataAsText\n * @see onDownloadFile\n * @see onClearFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onUploadFiles%22)\n */\n _this.onUploadFiles = _this.addEvent();\n /**\n * The event is fired on downloading a file in QuestionFile. Use this event to pass the file to a preview.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the question name.\n *
`options.content` - the file content.\n *
`options.fileValue` - single file question value.\n *
`options.callback` - a callback function to get the file downloading status and the downloaded file content.\n * @see downloadFile\n * @see onClearFiles\n * @see onUploadFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onDownloadFile%22)\n */\n _this.onDownloadFile = _this.addEvent();\n /**\n * This event is fired on clearing the value in a QuestionFile. Use this event to remove files stored on your server.\n *
`sender` - the survey object that fires the event.\n *
`question` - the question instance.\n *
`options.name` - the question name.\n *
`options.value` - the question value.\n *
`options.fileName` - a removed file's name, set it to `null` to clear all files.\n *
`options.callback` - a callback function to get the operation status.\n * @see clearFiles\n * @see onDownloadFile\n * @see onUploadFiles\n * @see [View Examples](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fsurveyjs.io%2FExamples%2F+%22onClearFiles%22)\n */\n _this.onClearFiles = _this.addEvent();\n /**\n * The event is fired after choices for radiogroup, checkbox, and dropdown has been loaded from a RESTful service and before they are assigned to a question.\n * You may change the choices, before they are assigned or disable/enabled make visible/invisible question, based on loaded results.\n *
`sender` - the survey object that fires the event.\n *
`question` - the question where loaded choices are going to be assigned.\n *
`choices` - the loaded choices. You can change the loaded choices to before they are assigned to question.\n *
`serverResult` - a result that comes from the server as it is.\n */\n _this.onLoadChoicesFromServer = _this.addEvent();\n /**\n * The event is fired after survey is loaded from api.surveyjs.io service.\n * You can use this event to perform manipulation with the survey model after it was loaded from the web service.\n *
`sender` - the survey object that fires the event.\n * @see surveyId\n * @see loadSurveyFromService\n */\n _this.onLoadedSurveyFromService = _this.addEvent();\n /**\n * The event is fired on processing the text when it finds a text in brackets: `{somevalue}`. By default, it uses the value of survey question values and variables.\n * For example, you may use the text processing in loading choices from the web. If your `choicesByUrl.url` equals to \"UrlToServiceToGetAllCities/{country}/{state}\",\n * you may set on this event `options.value` to \"all\" or empty string when the \"state\" value/question is non selected by a user.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the name of the processing value, for example, \"state\" in our example.\n *
`options.value` - the value of the processing text.\n *
`options.isExists` - a boolean value. Set it to `true` if you want to use the value and set it to `false` if you don't.\n */\n _this.onProcessTextValue = _this.addEvent();\n /**\n * The event is fired before rendering a question. Use it to override the default question CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{root: \"table\", button: \"button\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdateQuestionCssClasses = _this.addEvent();\n /**\n * The event is fired before rendering a panel. Use it to override the default panel CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a panel for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{title: \"sv_p_title\", description: \"small\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdatePanelCssClasses = _this.addEvent();\n /**\n * The event is fired before rendering a page. Use it to override the default page CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{title: \"sv_p_title\", description: \"small\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdatePageCssClasses = _this.addEvent();\n /**\n * The event is fired right after survey is rendered in DOM.\n *
`sender` - the survey object that fires the event.\n *
`options.htmlElement` - a root HTML element bound to the survey object.\n */\n _this.onAfterRenderSurvey = _this.addEvent();\n /**\n * The event is fired right after a page is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.htmlElement` - an HTML element bound to the survey header object.\n */\n _this.onAfterRenderHeader = _this.addEvent();\n /**\n * The event is fired right after a page is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page object for which the event is fired. Typically the current/active page.\n *
`options.htmlElement` - an HTML element bound to the page object.\n */\n _this.onAfterRenderPage = _this.addEvent();\n /**\n * The event is fired right after a question is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question object for which the event is fired.\n *
`options.htmlElement` - an HTML element bound to the question object.\n */\n _this.onAfterRenderQuestion = _this.addEvent();\n /**\n * The event is fired right after a non-composite question (text, comment, dropdown, radiogroup, checkbox) is rendered in DOM. Use it to modify HTML elements.\n * This event is not fired for matrices, panels, multiple text and image picker.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question object for which the event is fired.\n *
`options.htmlElement` - an HTML element bound to the question object.\n */\n _this.onAfterRenderQuestionInput = _this.addEvent();\n /**\n * The event is fired right after a panel is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event\n *
`options.panel` - a panel object for which the event is fired\n *
`options.htmlElement` - an HTML element bound to the panel object\n */\n _this.onAfterRenderPanel = _this.addEvent();\n /**\n * The event is fired on adding a new row in Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.row` - a new added row.\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixRowAdded = _this.addEvent();\n /**\n * The event is fired before adding a new row in Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.canAddRow` - specifies whether a new row can be added\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixBeforeRowAdded = _this.addEvent();\n /**\n * The event is fired before removing a row from Matrix Dynamic question. You can disable removing and clear the data instead.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.rowIndex` - a row index.\n *
`options.row` - a row object.\n *
`options.allow` - a boolean property. Set it to `false` to disable the row removing.\n * @see QuestionMatrixDynamicModel\n * @see onMatrixRowRemoved\n * @see onMatrixAllowRemoveRow\n */\n _this.onMatrixRowRemoving = _this.addEvent();\n /**\n * The event is fired on removing a row from Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question\n *
`options.rowIndex` - a removed row index\n *
`options.row` - a removed row object\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n * @see onMatrixRowRemoving\n * @see onMatrixAllowRemoveRow\n */\n _this.onMatrixRowRemoved = _this.addEvent();\n /**\n * The event is fired before rendering \"Remove\" button for removing a row from Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.rowIndex` - a row index.\n *
`options.row` - a row object.\n *
`options.allow` - a boolean property. Set it to `false` to disable the row removing.\n * @see QuestionMatrixDynamicModel\n * @see onMatrixRowRemoving\n * @see onMatrixRowRemoved\n */\n _this.onMatrixAllowRemoveRow = _this.addEvent();\n /**\n * The event is fired for every cell created in Matrix Dynamic and Matrix Dropdown questions.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cell` - the matrix cell.\n *
`options.cellQuestion` - the question/editor in the cell. You may customize it, change it's properties, like choices or visible.\n *
`options.rowValue` - the value of the current row. To access a particular column's value within the current row, use: `options.rowValue[\"columnValue\"]`.\n *
`options.column` - the matrix column object.\n *
`options.columnName` - the matrix column name.\n *
`options.row` - the matrix row object.\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellCreated = _this.addEvent();\n /**\n * The event is fired for every cell after is has been rendered in DOM.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cell` - the matrix cell.\n *
`options.cellQuestion` - the question/editor in the cell.\n *
`options.htmlElement` - an HTML element bound to the `cellQuestion` object.\n *
`options.column` - the matrix column object.\n *
`options.row` - the matrix row object.\n * @see onMatrixCellCreated\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixAfterCellRender = _this.addEvent();\n /**\n * The event is fired when cell value is changed in Matrix Dynamic and Matrix Dropdown questions.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columnName` - the matrix column name.\n *
`options.value` - a new value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns the cell question by column name.\n * @see onMatrixCellValueChanging\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValueChanged = _this.addEvent();\n /**\n * The event is fired on changing cell value in Matrix Dynamic and Matrix Dropdown questions. You may change the `options.value` property to change a cell value.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columnName` - the matrix column name.\n *
`options.value` - a new value.\n *
`options.oldValue` - the old value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns a cell question by column name.\n * @see onMatrixCellValueChanged\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValueChanging = _this.addEvent();\n /**\n * The event is fired when Matrix Dynamic and Matrix Dropdown questions validate the cell value.\n *
`sender` - the survey object that fires the event.\n *
`options.error` - an error string. It is empty by default.\n *
`options.question` - the matrix question.\n *
`options.columnName` - the matrix column name.\n *
`options.value` - a cell value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns the cell question by column name.\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValidate = _this.addEvent();\n /**\n * The event is fired on adding a new panel in Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a panel question.\n *
`options.panel` - an added panel.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelAdded = _this.addEvent();\n /**\n * The event is fired on removing a panel from Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a panel question.\n *
`options.panelIndex` - a removed panel index.\n *
`options.panel` - a removed panel.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelRemoved = _this.addEvent();\n /**\n * The event is fired every second if the method `startTimer` has been called.\n * @see startTimer\n * @see timeSpent\n * @see Page.timeSpent\n */\n _this.onTimer = _this.addEvent();\n /**\n * The event is fired before displaying a new information in the Timer Panel. Use it to change the default text.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - the timer panel info text.\n */\n _this.onTimerPanelInfoText = _this.addEvent();\n /**\n * The event is fired when item value is changed in Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the panel question.\n *
`options.panel` - the dynamic panel item.\n *
`options.name` - the item name.\n *
`options.value` - a new value.\n *
`options.itemIndex` - the panel item index.\n *
`options.itemValue` - the panel item object.\n * @see onDynamicPanelAdded\n * @see QuestionPanelDynamicModel\n */\n _this.onDynamicPanelItemValueChanged = _this.addEvent();\n /**\n * Use this event to define, whether an answer to a question is correct or not.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question on which you have to decide if the answer is correct or not.\n *
`options.result` - returns `true`, if an answer is correct, or `false`, if the answer is not correct. Use questions' `value` and `correctAnswer` properties to return the correct value.\n *
`options.correctAnswers` - you may change the default number of correct or incorrect answers in the question, for example for matrix, where each row is a quiz question.\n * @see Question.value\n * @see Question.correctAnswer\n */\n _this.onIsAnswerCorrect = _this.addEvent();\n /**\n * Use this event to control drag&drop operations during design mode.\n *
`sender` - the survey object that fires the event.\n *
`options.allow` - set it to `false` to disable dragging.\n *
`options.target` - a target element that is dragged.\n *
`options.source` - a source element. It can be `null`, if it is a new element, dragging from toolbox.\n *
`options.parent` - a page or panel where target element is dragging.\n *
`options.insertBefore` - an element before the target element is dragging. It can be `null` if parent container (page or panel) is empty or dragging an element after the last element in a container.\n *
`options.insertAfter` - an element after the target element is dragging. It can be `null` if parent container (page or panel) is empty or dragging element to the first position within the parent container.\n * @see setDesignMode\n * @see isDesignMode\n */\n _this.onDragDropAllow = _this.addEvent();\n /**\n * Use this event to control scrolling element to top. You can cancel the default behavior by setting options.cancel property to true.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - an element that is going to be scrolled on top.\n *
`options.question` - a question that is going to be scrolled on top. It can be null if options.page is not null.\n *
`options.page` - a page that is going to be scrolled on top. It can be null if options.question is not null.\n *
`options.elementId` - the unique element DOM Id.\n *
`options.cancel` - set this property to true to cancel the default scrolling.\n */\n _this.onScrollingElementToTop = _this.addEvent();\n _this.onLocaleChangedEvent = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a question's title.\n *
`sender` - A [Survey](https://surveyjs.io/Documentation/Library?id=SurveyModel) object that fires the event.\n *
`options.question` - A [Question](https://surveyjs.io/Documentation/Library?id=Question) object for which the event is fired.\n *
`options.actions` - A list of actions ([IActionBarItem](https://surveyjs.io/Documentation/Library?id=IActionBarItem) objects) associated with the processed question.\n * @see IActionBarItem\n * @see Question\n */\n _this.onGetQuestionTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a panel's title.\n *
`sender` - A survey object that fires the event.\n *
`options.panel` - A panel ([PanelModel](https://surveyjs.io/Documentation/Library?id=panelmodel) object) for which the event is fired.\n *
`options.actions` - A list of actions ([IActionBarItem](https://surveyjs.io/Documentation/Library?id=IActionBarItem) objects) associated with the processed panel.\n * @see IActionBarItem\n * @see PanelModel\n */\n _this.onGetPanelTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a page's title.\n *
`sender` - A survey object that fires the event.\n *
`options.page` - A page ([PageModel](https://surveyjs.io/Documentation/Library?id=pagemodel) object) for which the event is fired.\n *
`options.actions` - A list of actions ([IActionBarItem](https://surveyjs.io/Documentation/Library?id=IActionBarItem) objects) associated with the processed page.\n * @see IActionBarItem\n * @see PageModel\n */\n _this.onGetPageTitleActions = _this.addEvent();\n /**\n * Use this event to create/customize actions to be displayed in a matrix question's row.\n *
`sender` - A survey object that fires the event.\n *
`options.question` - A matrix question ([QuestionMatrixBaseModel](https://surveyjs.io/Documentation/Library?id=questionmatrixbasemodel) object) for which the event is fired.\n *
`options.row` - A matrix row for which the event is fired.\n *
`options.actions` - A list of actions ([IActionBarItem](https://surveyjs.io/Documentation/Library?id=IActionBarItem) objects) associated with the processed matrix question and row.\n * @see IActionBarItem\n * @see QuestionMatrixDropdownModelBase\n */\n _this.onGetMatrixRowActions = _this.addEvent();\n /**\n * The event is fired after the survey element content was collapsed or expanded.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - Specifies which survey element content was collapsed or expanded.\n * @see onElementContentVisibilityChanged\n */\n _this.onElementContentVisibilityChanged = _this.addEvent();\n /**\n * The list of errors on loading survey JSON. If the list is empty after loading a JSON, then the JSON is correct and has no errors.\n * @see JsonError\n */\n _this.jsonErrors = null;\n _this.cssValue = null;\n /**\n * Gets or sets whether to hide all required errors.\n */\n _this.hideRequiredErrors = false;\n _this._isMobile = false;\n _this._isDesignMode = false;\n /**\n * Gets or sets whether the survey must ignore validation like required questions and others, on `nextPage` and `completeLastPage` function calls. The default is `false`.\n * @see nextPage\n * @see completeLastPage\n * @see mode\n */\n _this.ignoreValidation = false;\n _this.isNavigationButtonPressed = false;\n _this.isCalculatingProgressText = false;\n _this.isTriggerIsRunning = false;\n _this.triggerValues = null;\n _this.triggerKeys = null;\n _this.conditionValues = null;\n _this.isValueChangedOnRunningCondition = false;\n _this.conditionRunnerCounter = 0;\n _this.conditionUpdateVisibleIndexes = false;\n _this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n _this.isEndLoadingFromJson = null;\n _this.questionHashes = {\n names: {},\n namesInsensitive: {},\n valueNames: {},\n valueNamesInsensitive: {},\n };\n _this.timerFunc = null;\n /**\n * Returns the time in seconds an end user spends on the survey\n * @see startTimer\n * @see PageModel.timeSpent\n */\n _this.timeSpent = 0;\n if (typeof document !== \"undefined\") {\n SurveyModel.stylesManager = new _stylesmanager__WEBPACK_IMPORTED_MODULE_11__[\"StylesManager\"]();\n }\n _this.createLocalizableString(\"title\", _this, true);\n _this.createLocalizableString(\"description\", _this, true);\n _this.createLocalizableString(\"logo\", _this, false);\n _this.createLocalizableString(\"completedHtml\", _this);\n _this.createLocalizableString(\"completedBeforeHtml\", _this);\n _this.createLocalizableString(\"loadingHtml\", _this);\n _this.createLocalizableString(\"startSurveyText\", _this);\n _this.createLocalizableString(\"pagePrevText\", _this);\n _this.createLocalizableString(\"pageNextText\", _this);\n _this.createLocalizableString(\"completeText\", _this);\n _this.createLocalizableString(\"previewText\", _this);\n _this.createLocalizableString(\"editText\", _this);\n _this.createLocalizableString(\"questionTitleTemplate\", _this, true);\n _this.textPreProcessor = new _textPreProcessor__WEBPACK_IMPORTED_MODULE_5__[\"TextPreProcessor\"]();\n _this.textPreProcessor.onProcess = function (textValue) {\n _this.getProcessedTextValue(textValue);\n };\n _this.createNewArray(\"pages\", function (value) {\n _this.doOnPageAdded(value);\n }, function (value) {\n _this.doOnPageRemoved(value);\n });\n _this.createNewArray(\"triggers\", function (value) {\n value.setOwner(_this);\n });\n _this.createNewArray(\"calculatedValues\", function (value) {\n value.setOwner(_this);\n });\n _this.createNewArray(\"completedHtmlOnCondition\", function (value) {\n value.locOwner = _this;\n });\n _this.createNewArray(\"navigateToUrlOnCondition\", function (value) {\n value.locOwner = _this;\n });\n _this.registerFunctionOnPropertyValueChanged(\"firstPageIsStarted\", function () {\n _this.onFirstPageIsStartedChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"mode\", function () {\n _this.onModeChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"progressBarType\", function () {\n _this.updateProgressText();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"questionStartIndex\", \"requiredText\", \"questionTitlePattern\"], function () {\n _this.resetVisibleIndexes();\n });\n _this.onGetQuestionNo.onCallbacksChanged = function () {\n _this.resetVisibleIndexes();\n };\n _this.onProgressText.onCallbacksChanged = function () {\n _this.updateProgressText();\n };\n _this.onTextMarkdown.onCallbacksChanged = function () {\n _this.locStrsChanged();\n };\n _this.onBeforeCreating();\n if (jsonObj) {\n if (typeof jsonObj === \"string\" || jsonObj instanceof String) {\n jsonObj = JSON.parse(jsonObj);\n }\n if (jsonObj && jsonObj.clientId) {\n _this.clientId = jsonObj.clientId;\n }\n _this.fromJSON(jsonObj);\n if (_this.surveyId) {\n _this.loadSurveyFromService(_this.surveyId, _this.clientId);\n }\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(SurveyModel.prototype, \"platformName\", {\n get: function () {\n return SurveyModel.platform;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"commentPrefix\", {\n /**\n * You can display an additional field (comment field) for the most of questions; users can enter additional comments to their response.\n * The comment field input is saved as `'question name' + 'commentPrefix'`.\n * @see data\n * @see Question.hasComment\n */\n get: function () {\n return _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].commentPrefix;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].commentPrefix = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"currentPageValue\", {\n get: function () {\n return this.getPropertyValue(\"currentPageValue\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"currentPageValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getType = function () {\n return \"survey\";\n };\n SurveyModel.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n if (name === \"questionsOnPageMode\") {\n this.onQuestionsOnPageModeChanged(oldValue);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"pages\", {\n /**\n * Returns a list of all pages in the survey, including invisible pages.\n * @see PageModel\n * @see visiblePages\n */\n get: function () {\n return this.getPropertyValue(\"pages\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getCss = function () {\n return this.css;\n };\n Object.defineProperty(SurveyModel.prototype, \"css\", {\n get: function () {\n if (!this.cssValue) {\n this.cssValue = {};\n this.copyCssClasses(this.cssValue, _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_3__[\"surveyCss\"].getCss());\n }\n return this.cssValue;\n },\n set: function (value) {\n this.updateElementCss(false);\n this.mergeValues(value, this.css);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationComplete\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.complete);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationPreview\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.preview);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationEdit\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.edit);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationPrev\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.prev);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationStart\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.start);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationNext\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.next);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedCss\", {\n get: function () {\n var css = this.css;\n return css.body + \" \" + css.completedPage;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNavigationCss = function (main, btn) {\n var res = \"\";\n if (main)\n res = main;\n if (btn)\n res += \" \" + btn;\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"lazyRendering\", {\n /**\n * By default all rows are rendered no matters if they are visible or not.\n * Set it true, and survey markup rows will be rendered only if they are visible in viewport.\n * This feature is experimantal and might do not support all the use cases.\n */\n get: function () {\n return this.lazyRenderingValue === true;\n },\n set: function (val) {\n this.lazyRenderingValue = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLazyRendering\", {\n get: function () {\n return this.lazyRendering || _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].lazyRowsRendering;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"triggers\", {\n /**\n * Gets or sets a list of triggers in the survey.\n * @see SurveyTrigger\n */\n get: function () {\n return this.getPropertyValue(\"triggers\");\n },\n set: function (val) {\n this.setPropertyValue(\"triggers\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"calculatedValues\", {\n /**\n * Gets or sets a list of calculated values in the survey.\n * @see CalculatedValue\n */\n get: function () {\n return this.getPropertyValue(\"calculatedValues\");\n },\n set: function (val) {\n this.setPropertyValue(\"calculatedValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyId\", {\n /**\n * Gets or sets an identifier of a survey model loaded from the [api.surveyjs.io](https://api.surveyjs.io) service. When specified, the survey JSON is automatically loaded from [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see loadSurveyFromService\n * @see onLoadedSurveyFromService\n */\n get: function () {\n return this.getPropertyValue(\"surveyId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"surveyId\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyPostId\", {\n /**\n * Gets or sets an identifier of a survey model saved to the [api.surveyjs.io](https://api.surveyjs.io) service. When specified, the survey data is automatically saved to the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see onComplete\n * @see surveyShowDataSaving\n */\n get: function () {\n return this.getPropertyValue(\"surveyPostId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"surveyPostId\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"clientId\", {\n /**\n * Gets or sets user's identifier (e.g., e-mail or unique customer id) in your web application.\n * If you load survey or post survey results from/to [api.surveyjs.io](https://api.surveyjs.io) service, then the library do not allow users to run the same survey the second time.\n * On the second run, the user will see the survey complete page.\n */\n get: function () {\n return this.getPropertyValue(\"clientId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"clientId\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cookieName\", {\n /**\n * Gets or sets a cookie name used to save information about completing the survey.\n * If the property is not empty, before starting the survey, the Survey library checks if the cookie with this name exists.\n * If it is `true`, the survey goes to complete mode and a user sees the survey complete page. On completing the survey the cookie with this name is created.\n */\n get: function () {\n return this.getPropertyValue(\"cookieName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"cookieName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"sendResultOnPageNext\", {\n /**\n * Gets or sets whether to save survey results on completing every page. If the property value is set to `true`, the `onPartialSend` event is fired.\n * @see onPartialSend\n * @see clientId\n */\n get: function () {\n return this.getPropertyValue(\"sendResultOnPageNext\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"sendResultOnPageNext\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyShowDataSaving\", {\n /**\n * Gets or sets whether to show the progress on saving/sending data into the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see surveyPostId\n */\n get: function () {\n return this.getPropertyValue(\"surveyShowDataSaving\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"surveyShowDataSaving\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"focusFirstQuestionAutomatic\", {\n /**\n * Gets or sets whether the first input is focused on showing a next or a previous page.\n */\n get: function () {\n return this.getPropertyValue(\"focusFirstQuestionAutomatic\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"focusFirstQuestionAutomatic\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"focusOnFirstError\", {\n /**\n * Gets or sets whether the first input is focused if the current page has errors.\n * Set this property to `false` (the default value is `true`) if you do not want to bring the focus to the first question that has error on the page.\n */\n get: function () {\n return this.getPropertyValue(\"focusOnFirstError\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"focusOnFirstError\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showNavigationButtons\", {\n /**\n * Gets or sets the navigation buttons position.\n * Possible values: 'bottom' (default), 'top', 'both' and 'none'. Set it to 'none' to hide 'Prev', 'Next' and 'Complete' buttons.\n * It makes sense if you are going to create a custom navigation, have only a single page, or the `goNextPageAutomatic` property is set to `true`.\n * @see goNextPageAutomatic\n * @see showPrevButton\n */\n get: function () {\n return this.getPropertyValue(\"showNavigationButtons\");\n },\n set: function (val) {\n if (val === true || val === undefined) {\n val = \"bottom\";\n }\n if (val === false) {\n val = \"none\";\n }\n this.setPropertyValue(\"showNavigationButtons\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showPrevButton\", {\n /**\n * Gets or sets whether the Survey displays \"Prev\" button in its pages. Set it to `false` to prevent end-users from going back to their answers.\n * @see showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"showPrevButton\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showPrevButton\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showTitle\", {\n /**\n * Gets or sets whether the Survey displays survey title in its pages. Set it to `false` to hide a survey title.\n * @see title\n */\n get: function () {\n return this.getPropertyValue(\"showTitle\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showPageTitles\", {\n /**\n * Gets or sets whether the Survey displays page titles. Set it to `false` to hide page titles.\n * @see PageModel.title\n */\n get: function () {\n return this.getPropertyValue(\"showPageTitles\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showPageTitles\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showCompletedPage\", {\n /**\n * On finishing the survey the complete page is shown. Set the property to `false`, to hide the complete page.\n * @see data\n * @see onComplete\n * @see navigateToUrl\n */\n get: function () {\n return this.getPropertyValue(\"showCompletedPage\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showCompletedPage\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"navigateToUrl\", {\n /**\n * Set this property to a url you want to navigate after a user completing the survey.\n * By default it uses after calling onComplete event. In case calling options.showDataSaving callback in onComplete event, navigateToUrl will be used on calling options.showDataSavingSuccess callback.\n */\n get: function () {\n return this.getPropertyValue(\"navigateToUrl\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigateToUrl\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"navigateToUrlOnCondition\", {\n /**\n * Gets or sets a list of URL condition items. If the expression of this item returns `true`, then survey will navigate to the item URL.\n * @see UrlConditionItem\n * @see navigateToUrl\n */\n get: function () {\n return this.getPropertyValue(\"navigateToUrlOnCondition\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigateToUrlOnCondition\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNavigateToUrl = function () {\n var item = this.getExpressionItemOnRunCondition(this.navigateToUrlOnCondition);\n var url = !!item ? item.url : this.navigateToUrl;\n if (!!url) {\n url = this.processText(url, true);\n }\n return url;\n };\n SurveyModel.prototype.navigateTo = function () {\n var url = this.getNavigateToUrl();\n var options = { url: url };\n this.onNavigateToUrl.fire(this, options);\n if (!options.url || typeof window === \"undefined\" || !window.location)\n return;\n window.location.href = options.url;\n };\n Object.defineProperty(SurveyModel.prototype, \"requiredText\", {\n /**\n * Gets or sets the required question mark. The required question mark is a char or string that is rendered in the required questions' titles.\n * @see Question.title\n */\n get: function () {\n return this.getPropertyValue(\"requiredText\", \"*\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredText\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.beforeSettingQuestionErrors = function (question, errors) {\n this.maakeRequiredErrorsInvisibgle(errors);\n this.onSettingQuestionErrors.fire(this, {\n question: question,\n errors: errors,\n });\n };\n SurveyModel.prototype.beforeSettingPanelErrors = function (question, errors) {\n this.maakeRequiredErrorsInvisibgle(errors);\n };\n SurveyModel.prototype.maakeRequiredErrorsInvisibgle = function (errors) {\n if (!this.hideRequiredErrors)\n return;\n for (var i = 0; i < errors.length; i++) {\n var erType = errors[i].getErrorType();\n if (erType == \"required\" || erType == \"requireoneanswer\") {\n errors[i].visible = false;\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"questionStartIndex\", {\n /**\n * Gets or sets the first question index. The first question index is '1' by default. You may start it from '100' or from 'A', by setting '100' or 'A' to this property.\n * You can set the start index to \"(1)\" or \"# A)\" or \"a)\" to render question number as (1), # A) and a) accordingly.\n * @see Question.title\n * @see requiredText\n */\n get: function () {\n return this.getPropertyValue(\"questionStartIndex\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionStartIndex\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"storeOthersAsComment\", {\n /**\n * Gets or sets whether the \"Others\" option text is stored as question comment.\n *\n * By default the entered text in the \"Others\" input in the checkbox/radiogroup/dropdown is stored as `\"question name \" + \"-Comment\"`. The value itself is `\"question name\": \"others\"`.\n * Set this property to `false`, to store the entered text directly in the `\"question name\"` key.\n * @see commentPrefix\n */\n get: function () {\n return this.getPropertyValue(\"storeOthersAsComment\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"storeOthersAsComment\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxTextLength\", {\n /**\n * Specifies the default maximum length for questions like text and comment, including matrix cell questions.\n *\n * The default value is `0`, that means that the text and comment have the same max length as the standard HTML input - 524288 characters: https://www.w3schools.com/tags/att_input_maxlength.asp.\n * @see maxOthersLength\n */\n get: function () {\n return this.getPropertyValue(\"maxTextLength\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTextLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxOthersLength\", {\n /**\n * Gets or sets the default maximum length for question comments and others\n *\n * The default value is `0`, that means that the question comments have the same max length as the standard HTML input - 524288 characters: https://www.w3schools.com/tags/att_input_maxlength.asp.\n * @see Question.hasComment\n * @see Question.hasOther\n * @see maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxOthersLength\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxOthersLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"goNextPageAutomatic\", {\n /**\n * Gets or ses whether a user can navigate the next page automatically after answering all the questions on a page without pressing the \"Next\" button.\n * The available options:\n *\n * - `true` - navigate the next page and submit survey data automatically.\n * - `autogonext` - navigate the next page automatically but do not submit survey data.\n * - `false` - do not navigate the next page and do not submit survey data automatically.\n * @see showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"goNextPageAutomatic\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"goNextPageAutomatic\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"allowCompleteSurveyAutomatic\", {\n /**\n * Gets or sets whether a survey is automatically completed when `goNextPageAutomatic = true`. Set it to `false` if you do not want to submit survey automatically on completing the last survey page.\n * @see goNextPageAutomatic\n */\n get: function () {\n return this.getPropertyValue(\"allowCompleteSurveyAutomatic\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowCompleteSurveyAutomatic\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"checkErrorsMode\", {\n /**\n * Gets or sets a value that specifies how the survey validates the question answers.\n *\n * The following options are available:\n *\n * - `onNextPage` (default) - check errors on navigating to the next page or on completing the survey.\n * - `onValueChanged` - check errors on every question value (i.e., answer) changing.\n * - `onValueChanging` - check errors before setting value into survey. If there is an error, then survey data is not changed, but question value will be keeped.\n * - `onComplete` - to validate all visible questions on complete button click. If there are errors on previous pages, then the page with the first error becomes the current.\n */\n get: function () {\n return this.getPropertyValue(\"checkErrorsMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"checkErrorsMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the survey updates its questions' text values.\n *\n * The following options are available:\n *\n * - `onBlur` (default) - the value is updated after an input loses the focus.\n * - `onTyping` - update the value of text questions, \"text\" and \"comment\", on every key press.\n *\n * Note, that setting to \"onTyping\" may lead to a performance degradation, in case you have many expressions in the survey.\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"clearInvisibleValues\", {\n /**\n * Gets or sets a value that specifies how the invisible data is included in survey data.\n *\n * The following options are available:\n *\n * - `none` - include the invisible values into the survey data.\n * - `onHidden` - clear the question value when it becomes invisible. If a question has value and it was invisible initially then survey clears the value on completing.\n * - `onHiddenContainer` - clear the question value when it or its parent (page or panel) becomes invisible. If a question has value and it was invisible initially then survey clears the value on completing.\n * - `onComplete` (default) - clear invisible question values on survey complete. In this case, the invisible questions will not be stored on the server.\n * @see Question.visible\n * @see onComplete\n */\n get: function () {\n return this.getPropertyValue(\"clearInvisibleValues\");\n },\n set: function (val) {\n if (val === true)\n val = \"onComplete\";\n if (val === false)\n val = \"none\";\n this.setPropertyValue(\"clearInvisibleValues\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Call this function to remove all question values from the survey, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radiogroup/dropdown/checkbox choices or matrix rows/columns.\n * Please note, this function doesn't clear values for invisible questions or values that doesn't associated with questions.\n * In fact this function just call clearIncorrectValues function of all questions in the survey\n * @param removeNonExisingRootKeys - set this parameter to true to remove keys from survey.data that doesn't have corresponded questions and calculated values\n * @see Question.clearIncorrectValues\n * @see Page.clearIncorrectValues\n * @see Panel.clearIncorrectValues\n */\n SurveyModel.prototype.clearIncorrectValues = function (removeNonExisingRootKeys) {\n if (removeNonExisingRootKeys === void 0) { removeNonExisingRootKeys = false; }\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].clearIncorrectValues();\n }\n if (!removeNonExisingRootKeys)\n return;\n var data = this.data;\n var hasChanges = false;\n for (var key in data) {\n if (!!this.getQuestionByValueName(key))\n continue;\n if (this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].commentPrefix) ||\n this.iscorrectValueWithPostPrefix(key, _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].matrixTotalValuePostFix))\n continue;\n var calcValue = this.getCalculatedValueByName(key);\n if (!!calcValue && calcValue.includeIntoResult)\n continue;\n hasChanges = true;\n delete data[key];\n }\n if (hasChanges) {\n this.data = data;\n }\n };\n SurveyModel.prototype.iscorrectValueWithPostPrefix = function (key, postPrefix) {\n if (key.indexOf(postPrefix) !== key.length - postPrefix.length)\n return false;\n return !!this.getQuestionByValueName(key.substr(0, key.indexOf(postPrefix)));\n };\n Object.defineProperty(SurveyModel.prototype, \"locale\", {\n /**\n * Gets or sets the survey locale. The default value it is empty, this means the 'en' locale is used.\n * You can set it to 'de' - German, 'fr' - French and so on. The library has built-in localization for several languages. The library has a multi-language support as well.\n */\n get: function () {\n return this.localeValue;\n },\n set: function (value) {\n _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].currentLocale = value;\n this.localeValue = _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].currentLocale;\n this.setPropertyValue(\"locale\", this.localeValue);\n if (this.isLoadingFromJson)\n return;\n this.locStrsChanged();\n this.localeChanged();\n this.onLocaleChangedEvent.fire(this, value);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns an array of locales that are used in the survey's translation.\n */\n SurveyModel.prototype.getUsedLocales = function () {\n var locs = new Array();\n this.addUsedLocales(locs);\n //Replace the default locale with the real one\n var index = locs.indexOf(\"default\");\n if (index > -1) {\n var defaultLoc = _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale;\n //Remove the defaultLoc\n var defIndex = locs.indexOf(defaultLoc);\n if (defIndex > -1) {\n locs.splice(defIndex, 1);\n }\n index = locs.indexOf(\"default\");\n locs[index] = defaultLoc;\n }\n return locs;\n };\n SurveyModel.prototype.localeChanged = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].localeChanged();\n }\n };\n //ILocalizableOwner\n SurveyModel.prototype.getLocale = function () {\n return this.locale;\n };\n SurveyModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n //Do not set current page if it is not set yet.\n //At first we do not need this, at second it creates issues with Vue CLI projects\n //More information here: https://github.com/surveyjs/survey-library/issues/2599\n if (!this.currentPageValue)\n return;\n this.updateProgressText();\n var page = this.activePage;\n if (!!page) {\n page.locStrsChanged();\n }\n };\n SurveyModel.prototype.getMarkdownHtml = function (text, name) {\n return this.getSurveyMarkdownHtml(this, text, name);\n };\n SurveyModel.prototype.getRenderer = function (name) {\n return this.getRendererForString(this, name);\n };\n SurveyModel.prototype.getRendererForString = function (element, name) {\n var renderAs = this.getBuiltInRendererForString(element, name);\n var options = { element: element, name: name, renderAs: renderAs };\n this.onTextRenderAs.fire(this, options);\n return options.renderAs;\n };\n SurveyModel.prototype.getBuiltInRendererForString = function (element, name) {\n if (this.isDesignMode)\n return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"].editableRenderer;\n return undefined;\n };\n SurveyModel.prototype.getProcessedText = function (text) {\n return this.processText(text, true);\n };\n SurveyModel.prototype.getLocString = function (str) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].getString(str);\n };\n //ISurveyErrorOwner\n SurveyModel.prototype.getErrorCustomText = function (text, error) {\n var options = {\n text: text,\n name: error.getErrorType(),\n error: error,\n };\n this.onErrorCustomText.fire(this, options);\n return options.text;\n };\n Object.defineProperty(SurveyModel.prototype, \"emptySurveyText\", {\n /**\n * Returns the text that is displayed when there are no any visible pages and questiona.\n */\n get: function () {\n return this.getLocString(\"emptySurvey\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"title\", {\n /**\n * Gets or sets a survey title.\n * @see description\n */\n get: function () {\n return this.getLocalizableStringText(\"title\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"title\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"description\", {\n /**\n * Gets or sets a survey description. The survey description is displayed under a survey title.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"description\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logo\", {\n /**\n * Gets or sets a survey logo.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"logo\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"logo\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLogo\", {\n get: function () {\n return this.getLocalizableString(\"logo\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getSize = function (value) {\n if (typeof value === \"number\") {\n return \"\" + value + \"px\";\n }\n if (!!value && typeof value === \"string\" && value.length > 0) {\n var lastSymbol = value[value.length - 1];\n if ((lastSymbol >= \"0\" && lastSymbol <= \"9\") || lastSymbol == \".\") {\n try {\n var num = parseFloat(value);\n return \"\" + num + \"px\";\n }\n catch (_a) { }\n }\n }\n return value;\n };\n Object.defineProperty(SurveyModel.prototype, \"logoWidth\", {\n /**\n * Gets or sets a survey logo width.\n * @see logo\n */\n get: function () {\n var width = this.getPropertyValue(\"logoWidth\");\n return this.getSize(width);\n },\n set: function (value) {\n this.setPropertyValue(\"logoWidth\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoHeight\", {\n /**\n * Gets or sets a survey logo height.\n * @see logo\n */\n get: function () {\n var height = this.getPropertyValue(\"logoHeight\");\n return this.getSize(height);\n },\n set: function (value) {\n this.setPropertyValue(\"logoHeight\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoPosition\", {\n /**\n * Gets or sets a survey logo position.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoPosition\");\n },\n set: function (value) {\n this.setPropertyValue(\"logoPosition\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasLogo\", {\n get: function () {\n return !!this.logo && this.logoPosition !== \"none\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoBefore\", {\n get: function () {\n return (this.hasLogo &&\n (this.logoPosition === \"left\" || this.logoPosition === \"top\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoAfter\", {\n get: function () {\n return (this.hasLogo &&\n (this.logoPosition === \"right\" || this.logoPosition === \"bottom\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoClassNames\", {\n get: function () {\n var logoClasses = {\n left: \"sv-logo--left\",\n right: \"sv-logo--right\",\n top: \"sv-logo--top\",\n bottom: \"sv-logo--bottom\",\n };\n return this.css.logo + \" \" + logoClasses[this.logoPosition];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoFit\", {\n /**\n * The logo fit mode.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"logoFit\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setIsMobile = function (newVal) {\n if (newVal === void 0) { newVal = true; }\n this._isMobile = newVal;\n };\n Object.defineProperty(SurveyModel.prototype, \"isMobile\", {\n get: function () {\n return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"isMobile\"])() || this._isMobile;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"titleMaxWidth\", {\n get: function () {\n if (!this.isMobile && !this.isValueEmpty(this.logo)) {\n var logoWidth = this.logoWidth;\n if (this.logoPosition === \"left\" || this.logoPosition === \"right\") {\n return \"calc(100% - 5px - 2em - \" + logoWidth + \")\";\n }\n }\n return \"\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedHtml\", {\n /**\n * Gets or sets the HTML content displayed on the complete page. Use this property to change the default complete page text.\n * @see showCompletedPage\n * @see completedHtmlOnCondition\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completedHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"completedHtml\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedHtml\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedHtmlOnCondition\", {\n /**\n * The list of HTML condition items. If the expression of this item returns `true`, then a survey will use this item HTML instead of `completedHtml`.\n * @see HtmlConditionItem\n * @see completeHtml\n */\n get: function () {\n return this.getPropertyValue(\"completedHtmlOnCondition\");\n },\n set: function (val) {\n this.setPropertyValue(\"completedHtmlOnCondition\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Calculates a given expression and returns a result value.\n * @param expression\n */\n SurveyModel.prototype.runExpression = function (expression) {\n if (!expression)\n return null;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n return new _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ExpressionRunner\"](expression).run(values, properties);\n };\n /**\n * Calculates a given expression and returns `true` or `false`.\n * @param expression\n */\n SurveyModel.prototype.runCondition = function (expression) {\n if (!expression)\n return false;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n return new _conditions__WEBPACK_IMPORTED_MODULE_13__[\"ConditionRunner\"](expression).run(values, properties);\n };\n /**\n * Run all triggers that performs on value changed and not on moving to the next page.\n */\n SurveyModel.prototype.runTriggers = function () {\n this.checkTriggers(this.getFilteredValues(), false);\n };\n Object.defineProperty(SurveyModel.prototype, \"renderedCompletedHtml\", {\n get: function () {\n var item = this.getExpressionItemOnRunCondition(this.completedHtmlOnCondition);\n return !!item ? item.html : this.completedHtml;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getExpressionItemOnRunCondition = function (items) {\n if (items.length == 0)\n return null;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n for (var i = 0; i < items.length; i++) {\n if (items[i].runCondition(values, properties)) {\n return items[i];\n }\n }\n return null;\n };\n Object.defineProperty(SurveyModel.prototype, \"completedBeforeHtml\", {\n /**\n * The HTML content displayed to an end user that has already completed the survey.\n * @see clientId\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completedBeforeHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"completedBeforeHtml\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedBeforeHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedBeforeHtml\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"loadingHtml\", {\n /**\n * The HTML that shows on loading survey Json from the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see surveyId\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"loadingHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"loadingHtml\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLoadingHtml\", {\n get: function () {\n return this.getLocalizableString(\"loadingHtml\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"startSurveyText\", {\n /**\n * Gets or sets the 'Start' button caption.\n * The 'Start' button is shown on the started page. Set the `firstPageIsStarted` property to `true`, to display the started page.\n * @see firstPageIsStarted\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"startSurveyText\", this.getLocString(\"startSurveyText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"startSurveyText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locStartSurveyText\", {\n get: function () {\n return this.getLocalizableString(\"startSurveyText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pagePrevText\", {\n /**\n * Gets or sets the 'Prev' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"pagePrevText\", this.getLocString(\"pagePrevText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"pagePrevText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPagePrevText\", {\n get: function () {\n return this.getLocalizableString(\"pagePrevText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pageNextText\", {\n /**\n * Gets or sets the 'Next' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"pageNextText\", this.getLocString(\"pageNextText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"pageNextText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPageNextText\", {\n get: function () {\n return this.getLocalizableString(\"pageNextText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completeText\", {\n /**\n * Gets or sets the 'Complete' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completeText\", this.getLocString(\"completeText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"completeText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompleteText\", {\n get: function () {\n return this.getLocalizableString(\"completeText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"previewText\", {\n /**\n * Gets or sets the 'Preview' button caption.\n * @see locale\n * @see showPreviewBeforeComplete\n * @see editText\n * @see showPreview\n */\n get: function () {\n return this.getLocalizableStringText(\"previewText\", this.getLocString(\"previewText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"previewText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPreviewText\", {\n get: function () {\n return this.getLocalizableString(\"previewText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"editText\", {\n /**\n * Gets or sets the 'Edit' button caption.\n * @see locale\n * @see showPreviewBeforeComplete\n * @see previewText\n * @see cancelPreview\n */\n get: function () {\n return this.getLocalizableStringText(\"editText\", this.getLocString(\"editText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"editText\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locEditText\", {\n get: function () {\n return this.getLocalizableString(\"editText\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionTitlePattern\", {\n /**\n * Set the pattern for question title. Default is \"numTitleRequire\", 1. What is your name? *,\n * You can set it to numRequireTitle: 1. * What is your name?\n * You can set it to requireNumTitle: * 1. What is your name?\n * You can set it to numTitle (remove require symbol completely): 1. What is your name?\n * @see QuestionModel.title\n */\n get: function () {\n return this.getPropertyValue(\"questionTitlePattern\", \"numTitleRequire\");\n },\n set: function (val) {\n if (val !== \"numRequireTitle\" &&\n val !== \"requireNumTitle\" &&\n val != \"numTitle\") {\n val = \"numTitleRequire\";\n }\n this.setPropertyValue(\"questionTitlePattern\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getQuestionTitlePatternOptions = function () {\n var res = new Array();\n var title = this.getLocString(\"questionTitlePatternText\");\n var num = !!this.questionStartIndex ? this.questionStartIndex : \"1.\";\n res.push({\n value: \"numTitleRequire\",\n text: num + \" \" + title + \" \" + this.requiredText,\n });\n res.push({\n value: \"numRequireTitle\",\n text: num + \" \" + this.requiredText + \" \" + title,\n });\n res.push({\n value: \"requireNumTitle\",\n text: this.requiredText + \" \" + num + \" \" + title,\n });\n res.push({\n value: \"numTitle\",\n text: num + \" \" + title,\n });\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"questionTitleTemplate\", {\n /**\n * Gets or sets a question title template. Obsolete, please use questionTitlePattern\n * @see QuestionModel.title\n * @see questionTitlePattern\n */\n get: function () {\n return this.getLocalizableStringText(\"questionTitleTemplate\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"questionTitleTemplate\", value);\n this.questionTitlePattern = this.getNewTitlePattern(value);\n this.questionStartIndex = this.getNewQuestionTitleElement(value, \"no\", this.questionStartIndex, \"1\");\n this.requiredText = this.getNewQuestionTitleElement(value, \"require\", this.requiredText, \"*\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNewTitlePattern = function (template) {\n if (!!template) {\n var strs = [];\n while (template.indexOf(\"{\") > -1) {\n template = template.substr(template.indexOf(\"{\") + 1);\n var ind = template.indexOf(\"}\");\n if (ind < 0)\n break;\n strs.push(template.substr(0, ind));\n template = template.substr(ind + 1);\n }\n if (strs.length > 1) {\n if (strs[0] == \"require\")\n return \"requireNumTitle\";\n if (strs[1] == \"require\" && strs.length == 3)\n return \"numRequireTitle\";\n if (strs.indexOf(\"require\") < 0)\n return \"numTitle\";\n }\n if (strs.length == 1 && strs[0] == \"title\") {\n return \"numTitle\";\n }\n }\n return \"numTitleRequire\";\n };\n SurveyModel.prototype.getNewQuestionTitleElement = function (template, name, currentValue, defaultValue) {\n name = \"{\" + name + \"}\";\n if (!template || template.indexOf(name) < 0)\n return currentValue;\n var ind = template.indexOf(name);\n var prefix = \"\";\n var postfix = \"\";\n var i = ind - 1;\n for (; i >= 0; i--) {\n if (template[i] == \"}\")\n break;\n }\n if (i < ind - 1) {\n prefix = template.substr(i + 1, ind - i - 1);\n }\n ind += name.length;\n i = ind;\n for (; i < template.length; i++) {\n if (template[i] == \"{\")\n break;\n }\n if (i > ind) {\n postfix = template.substr(ind, i - ind);\n }\n i = 0;\n while (i < prefix.length && prefix.charCodeAt(i) < 33)\n i++;\n prefix = prefix.substr(i);\n i = postfix.length - 1;\n while (i >= 0 && postfix.charCodeAt(i) < 33)\n i--;\n postfix = postfix.substr(0, i + 1);\n if (!prefix && !postfix)\n return currentValue;\n var value = !!currentValue ? currentValue : defaultValue;\n return prefix + value + postfix;\n };\n Object.defineProperty(SurveyModel.prototype, \"locQuestionTitleTemplate\", {\n get: function () {\n return this.getLocalizableString(\"questionTitleTemplate\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getUpdatedQuestionTitle = function (question, title) {\n if (this.onGetQuestionTitle.isEmpty)\n return title;\n var options = { question: question, title: title };\n this.onGetQuestionTitle.fire(this, options);\n return options.title;\n };\n SurveyModel.prototype.getUpdatedQuestionNo = function (question, no) {\n if (this.onGetQuestionNo.isEmpty)\n return no;\n var options = { question: question, no: no };\n this.onGetQuestionNo.fire(this, options);\n return options.no;\n };\n Object.defineProperty(SurveyModel.prototype, \"showPageNumbers\", {\n /**\n * Gets or sets whether the survey displays page numbers on pages titles.\n */\n get: function () {\n return this.getPropertyValue(\"showPageNumbers\", false);\n },\n set: function (value) {\n if (value === this.showPageNumbers)\n return;\n this.setPropertyValue(\"showPageNumbers\", value);\n this.updateVisibleIndexes();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showQuestionNumbers\", {\n /**\n * Gets or sets a value that specifies how the question numbers are displayed.\n *\n * The following options are available:\n *\n * - `on` - display question numbers\n * - `onpage` - display question numbers, start numbering on every page\n * - `off` - turn off the numbering for questions titles\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\");\n },\n set: function (value) {\n value = value.toLowerCase();\n value = value === \"onpage\" ? \"onPage\" : value;\n if (value === this.showQuestionNumbers)\n return;\n this.setPropertyValue(\"showQuestionNumbers\", value);\n this.updateVisibleIndexes();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showProgressBar\", {\n /**\n * Gets or sets the survey progress bar position.\n *\n * The following options are available:\n *\n * - `off` (default) - don't show progress bar\n * - `top` - show progress bar in the top\n * - `bottom` - show progress bar in the bottom\n * - `both` - show progress bar in both sides: top and bottom.\n */\n get: function () {\n return this.getPropertyValue(\"showProgressBar\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"showProgressBar\", newValue.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"progressBarType\", {\n /**\n * Gets or sets the type of info in the progress bar.\n *\n * The following options are available:\n *\n * - `pages` (default),\n * - `questions`,\n * - `requiredQuestions`,\n * - `correctQuestions`,\n * - `buttons`\n */\n get: function () {\n return this.getPropertyValue(\"progressBarType\");\n },\n set: function (newValue) {\n if (newValue === \"correctquestion\")\n newValue = \"correctQuestion\";\n if (newValue === \"requiredquestion\")\n newValue = \"requiredQuestion\";\n this.setPropertyValue(\"progressBarType\", newValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnTop\", {\n get: function () {\n if (!this.canShowProresBar())\n return false;\n return this.showProgressBar === \"top\" || this.showProgressBar === \"both\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnBottom\", {\n get: function () {\n if (!this.canShowProresBar())\n return false;\n return this.showProgressBar === \"bottom\" || this.showProgressBar === \"both\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.canShowProresBar = function () {\n return (!this.isShowingPreview ||\n this.showPreviewBeforeComplete != \"showAllQuestions\");\n };\n Object.defineProperty(SurveyModel.prototype, \"processedTitle\", {\n /**\n * Returns the text/HTML that is rendered as a survey title.\n */\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionTitleLocation\", {\n /**\n * Gets or sets the question title location.\n *\n * The following options are available:\n *\n * - `bottom` - show a question title to bottom\n * - `left` - show a question title to left\n * - `top` - show a question title to top.\n *\n * > Some questions, for example matrixes, do not support 'left' value. The title for them will be displayed to the top.\n */\n get: function () {\n return this.getPropertyValue(\"questionTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.updateElementCss(true);\n }\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateElementCss = function (reNew) {\n var pages = this.visiblePages;\n for (var i = 0; i < pages.length; i++) {\n pages[i].updateElementCss(reNew);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"questionErrorLocation\", {\n /**\n * Gets or sets the error message position.\n *\n * The following options are available:\n *\n * - `top` - to show question error(s) over the question,\n * - `bottom` - to show question error(s) under the question.\n */\n get: function () {\n return this.getPropertyValue(\"questionErrorLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionErrorLocation\", value.toLowerCase());\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionDescriptionLocation\", {\n /**\n * Gets or sets the question description position. The default value is `underTitle`.\n *\n * The following options are available:\n *\n * - `underTitle` - show question description under the question title,\n * - `underInput` - show question description under the question input instead of question title.\n */\n get: function () {\n return this.getPropertyValue(\"questionDescriptionLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionDescriptionLocation\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"mode\", {\n /**\n * Gets or sets the survey edit mode.\n *\n * The following options are available:\n *\n * - `edit` (default) - make a survey editable,\n * - `display` - make a survey read-only.\n */\n get: function () {\n return this.getPropertyValue(\"mode\");\n },\n set: function (value) {\n value = value.toLowerCase();\n if (value == this.mode)\n return;\n if (value != \"edit\" && value != \"display\")\n return;\n this.setPropertyValue(\"mode\", value);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.onModeChanged = function () {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.setPropertyValue(\"isReadOnly\", page.isReadOnly);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"data\", {\n /**\n * Gets or sets an object that stores the survey results/data. You can set it directly as `{ 'question name': questionValue, ... }`\n *\n * > If you set the `data` property after creating the survey, you may need to set the `currentPageNo` to `0`, if you are using `visibleIf` properties for questions/pages/panels to ensure that you are starting from the first page.\n * @see setValue\n * @see getValue\n * @see mergeData\n * @see currentPageNo\n */\n get: function () {\n var result = {};\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var dataValue = this.getDataValueCore(this.valuesHash, key);\n if (dataValue !== undefined) {\n result[key] = dataValue;\n }\n }\n this.setCalcuatedValuesIntoResult(result);\n return result;\n },\n set: function (data) {\n this.valuesHash = {};\n this.setDataCore(data);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Merge the values into survey.data. It works as survey.data, except it doesn't clean the existing data, but overrides them.\n * @param data data to merge. It should be an object {keyValue: Value, ...}\n * @see data\n * @see setValue\n */\n SurveyModel.prototype.mergeData = function (data) {\n if (!data)\n return;\n this.setDataCore(data);\n };\n SurveyModel.prototype.setDataCore = function (data) {\n if (data) {\n for (var key in data) {\n this.setDataValueCore(this.valuesHash, key, data[key]);\n }\n }\n this.updateAllQuestionsValue();\n this.notifyAllQuestionsOnValueChanged();\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n this.runConditions();\n };\n Object.defineProperty(SurveyModel.prototype, \"editingObj\", {\n get: function () {\n return this.editingObjValue;\n },\n set: function (val) {\n var _this = this;\n if (this.editingObj == val)\n return;\n if (!!this.editingObj) {\n this.editingObj.onPropertyChanged.remove(this.onEditingObjPropertyChanged);\n }\n this.editingObjValue = val;\n if (this.isDisposed)\n return;\n if (!val) {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].unbindValue();\n }\n }\n if (!!this.editingObj) {\n this.setDataCore({});\n this.onEditingObjPropertyChanged = function (sender, options) {\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].hasOriginalProperty(_this.editingObj, options.name))\n return;\n _this.updateOnSetValue(options.name, options.newValue, options.oldValue);\n };\n this.editingObj.onPropertyChanged.add(this.onEditingObjPropertyChanged);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEditingSurveyElement\", {\n get: function () {\n return !!this.editingObj;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setCalcuatedValuesIntoResult = function (result) {\n for (var i = 0; i < this.calculatedValues.length; i++) {\n var calValue = this.calculatedValues[i];\n if (calValue.includeIntoResult &&\n !!calValue.name &&\n this.getVariable(calValue.name) !== undefined) {\n result[calValue.name] = this.getVariable(calValue.name);\n }\n }\n };\n SurveyModel.prototype.getAllValues = function () {\n return this.data;\n };\n /**\n * Returns survey result data as an array of plain objects: with question `title`, `name`, `value`, and `displayValue`.\n *\n * For complex questions (like matrix, etc.) `isNode` flag is set to `true` and data contains array of nested objects (rows).\n *\n * Set `options.includeEmpty` to `false` if you want to skip empty answers.\n */\n SurveyModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n var result = [];\n this.getAllQuestions().forEach(function (question) {\n var resultItem = question.getPlainData(options);\n if (!!resultItem) {\n result.push(resultItem);\n }\n });\n return result;\n };\n SurveyModel.prototype.getFilteredValues = function () {\n var values = {};\n for (var key in this.variablesHash)\n values[key] = this.variablesHash[key];\n this.addCalculatedValuesIntoFilteredValues(values);\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n values[key] = this.getDataValueCore(this.valuesHash, key);\n }\n return values;\n };\n SurveyModel.prototype.addCalculatedValuesIntoFilteredValues = function (values) {\n var caclValues = this.calculatedValues;\n for (var i = 0; i < caclValues.length; i++)\n values[caclValues[i].name] = caclValues[i].value;\n };\n SurveyModel.prototype.getFilteredProperties = function () {\n return { survey: this };\n };\n SurveyModel.prototype.getValuesKeys = function () {\n if (!this.editingObj)\n return Object.keys(this.valuesHash);\n var props = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getPropertiesByObj(this.editingObj);\n var res = [];\n for (var i = 0; i < props.length; i++) {\n res.push(props[i].name);\n }\n return res;\n };\n SurveyModel.prototype.getDataValueCore = function (valuesHash, key) {\n if (!!this.editingObj)\n return _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].getObjPropertyValue(this.editingObj, key);\n return valuesHash[key];\n };\n SurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n if (!!this.editingObj) {\n _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].setObjPropertyValue(this.editingObj, key, value);\n }\n else {\n valuesHash[key] = value;\n }\n };\n SurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n if (!!this.editingObj) {\n this.editingObj[key] = null;\n }\n else {\n delete valuesHash[key];\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"comments\", {\n /**\n * Returns all comments from the data.\n * @see data\n */\n get: function () {\n var result = {};\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (key.indexOf(this.commentPrefix) > 0) {\n result[key] = this.getDataValueCore(this.valuesHash, key);\n }\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"visiblePages\", {\n /**\n * Returns a list of visible pages. If all pages are visible, then this property returns the same list as the `pages` property.\n * @see pages\n * @see PageModel.visible\n * @see PageModel.visibleIf\n */\n get: function () {\n if (this.isDesignMode)\n return this.pages;\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n if (this.pages[i].isVisible) {\n result.push(this.pages[i]);\n }\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEmpty\", {\n /**\n * Returns `true` if the survey contains no pages. The survey is empty.\n */\n get: function () {\n return this.pages.length == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"PageCount\", {\n /**\n * Deprecated. Use the `pageCount` property instead.\n */\n get: function () {\n return this.pageCount;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pageCount\", {\n /**\n * Returns the survey page count.\n * @see visiblePageCount\n * @see pages\n */\n get: function () {\n return this.pages.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"visiblePageCount\", {\n /**\n * Returns a number of visible pages within the survey.\n * @see pageCount\n * @see visiblePages\n */\n get: function () {\n return this.visiblePages.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"startedPage\", {\n /**\n * Returns the started page. This property works if the `firstPageIsStarted` property is set to `true`.\n * @see firstPageIsStarted\n */\n get: function () {\n var page = this.firstPageIsStarted && this.pages.length > 0 ? this.pages[0] : null;\n if (!!page) {\n page.onFirstRendering();\n page.setWasShown(true);\n }\n return page;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"currentPage\", {\n /**\n * Gets or sets the current survey page. If a survey is rendered, then this property returns a page that a user can see/edit.\n */\n get: function () {\n var vPages = this.visiblePages;\n if (this.currentPageValue != null) {\n if (vPages.indexOf(this.currentPageValue) < 0) {\n if (!this.onContainsPageCallback ||\n !this.onContainsPageCallback(this.currentPageValue)) {\n this.currentPage = null;\n }\n }\n }\n if (this.currentPageValue == null && vPages.length > 0) {\n this.currentPage = vPages[0];\n }\n return this.currentPageValue;\n },\n set: function (value) {\n if (this.isLoadingFromJson)\n return;\n var newPage = this.getPageByObject(value);\n if (!!value && !newPage)\n return;\n var vPages = this.visiblePages;\n if (newPage != null && vPages.indexOf(newPage) < 0)\n return;\n if (newPage == this.currentPageValue)\n return;\n var oldValue = this.currentPageValue;\n if (!this.currentPageChanging(newPage, oldValue))\n return;\n this.currentPageValue = newPage;\n if (!!newPage) {\n newPage.onFirstRendering();\n newPage.updateCustomWidgets();\n newPage.setWasShown(true);\n }\n this.locStrsChanged();\n this.currentPageChanged(newPage, oldValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"activePage\", {\n /**\n * Returns the currentPage, unless the started page is showing. In this case returns the started page.\n * @see currentPage\n * @see firstPageIsStarted\n * @see startedPage\n */\n get: function () {\n return this.isStartedState && this.startedPage\n ? this.startedPage\n : this.currentPage;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getPageByObject = function (value) {\n if (!value)\n return null;\n if (value.getType && value.getType() == \"page\")\n return value;\n if (typeof value === \"string\" || value instanceof String)\n return this.getPageByName(String(value));\n if (!isNaN(value)) {\n var index = Number(value);\n var vPages = this.visiblePages;\n if (value < 0 || value >= vPages.length)\n return null;\n return vPages[index];\n }\n return value;\n };\n Object.defineProperty(SurveyModel.prototype, \"currentPageNo\", {\n /**\n * The zero-based index of the current page in the visible pages array.\n */\n get: function () {\n return this.visiblePages.indexOf(this.currentPage);\n },\n set: function (value) {\n var vPages = this.visiblePages;\n if (value < 0 || value >= vPages.length)\n return;\n this.currentPage = vPages[value];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionsOrder\", {\n /**\n * Gets or sets the question display order. Use this property to randomize questions. You can randomize questions on a specific page.\n *\n * The following options are available:\n *\n * - `random` - randomize questions\n * - `initial` - keep questions in the same order, as in a survey model.\n * @see SurveyPage.questionsOrder\n */\n get: function () {\n return this.getPropertyValue(\"questionsOrder\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOrder\", val);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Sets the input focus to the first question with the input field.\n */\n SurveyModel.prototype.focusFirstQuestion = function () {\n var page = this.activePage;\n if (page) {\n page.scrollToTop();\n page.focusFirstQuestion();\n }\n };\n SurveyModel.prototype.scrollToTopOnPageChange = function () {\n var page = this.activePage;\n if (!page)\n return;\n page.scrollToTop();\n if (this.focusFirstQuestionAutomatic) {\n page.focusFirstQuestion();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"state\", {\n /**\n * Returns the current survey state:\n *\n * - `loading` - the survey is being loaded from JSON,\n * - `empty` - there is nothing to display in the current survey,\n * - `starting` - the survey's start page is displayed,\n * - `running` - a respondent is answering survey questions right now,\n * - `preview` - a respondent is previewing answered questions before submitting the survey (see [example](https://surveyjs.io/Examples/Library?id=survey-showpreview)),\n * - `completed` - a respondent has completed the survey and submitted the results.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states)\n */\n get: function () {\n if (this.isLoading)\n return \"loading\";\n if (this.isCompleted)\n return \"completed\";\n if (this.isCompletedBefore)\n return \"completedbefore\";\n if (!this.isDesignMode &&\n this.isEditMode &&\n this.isStartedState &&\n this.startedPage)\n return \"starting\";\n if (this.isShowingPreview)\n return this.currentPage ? \"preview\" : \"empty\";\n return this.currentPage ? \"running\" : \"empty\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompleted\", {\n get: function () {\n return this.getPropertyValue(\"isCompleted\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isCompleted\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowingPreview\", {\n get: function () {\n return this.getPropertyValue(\"isShowingPreview\", false);\n },\n set: function (val) {\n if (this.isShowingPreview == val)\n return;\n this.setPropertyValue(\"isShowingPreview\", val);\n this.onShowingPreviewChanged();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isStartedState\", {\n get: function () {\n return this.getPropertyValue(\"isStartedState\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isStartedState\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompletedBefore\", {\n get: function () {\n return this.getPropertyValue(\"isCompletedBefore\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isCompletedBefore\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLoading\", {\n get: function () {\n return this.getPropertyValue(\"isLoading\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isLoading\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedState\", {\n get: function () {\n return this.completedStateValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedStateText\", {\n get: function () {\n return this.completedStateTextValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setCompletedState = function (value, text) {\n this.completedStateValue = value;\n if (!text) {\n if (value == \"saving\")\n text = this.getLocString(\"savingData\");\n if (value == \"error\")\n text = this.getLocString(\"savingDataError\");\n if (value == \"success\")\n text = this.getLocString(\"savingDataSuccess\");\n }\n this.completedStateTextValue = text;\n };\n /**\n * Clears the survey data and state. If the survey has a `completed` state, it will get a `running` state.\n * @param clearData clear the data\n * @param gotoFirstPage make the first page as a current page.\n * @see data\n * @see state\n * @see currentPage\n */\n SurveyModel.prototype.clear = function (clearData, gotoFirstPage) {\n if (clearData === void 0) { clearData = true; }\n if (gotoFirstPage === void 0) { gotoFirstPage = true; }\n if (clearData) {\n this.data = null;\n this.variablesHash = {};\n }\n this.timeSpent = 0;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].timeSpent = 0;\n this.pages[i].setWasShown(false);\n this.pages[i].passed = false;\n }\n this.isCompleted = false;\n this.isCompletedBefore = false;\n this.isLoading = false;\n this.isStartedState = this.firstPageIsStarted;\n if (gotoFirstPage && this.visiblePageCount > 0) {\n this.currentPage = this.visiblePages[0];\n }\n if (clearData) {\n this.updateValuesWithDefaults();\n }\n };\n SurveyModel.prototype.mergeValues = function (src, dest) {\n if (!dest || !src)\n return;\n if (typeof dest !== \"object\")\n return;\n for (var key in src) {\n var value = src[key];\n if (value && typeof value === \"object\") {\n if (!dest[key])\n dest[key] = {};\n this.mergeValues(value, dest[key]);\n }\n else {\n dest[key] = value;\n }\n }\n };\n SurveyModel.prototype.updateValuesWithDefaults = function () {\n if (this.isDesignMode || this.isLoading)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n var questions = this.pages[i].questions;\n for (var j = 0; j < questions.length; j++) {\n questions[j].updateValueWithDefaults();\n }\n }\n };\n SurveyModel.prototype.updateCustomWidgets = function (page) {\n if (!page)\n return;\n page.updateCustomWidgets();\n };\n SurveyModel.prototype.currentPageChanging = function (newValue, oldValue) {\n var options = {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n allowChanging: true,\n isNextPage: this.isNextPage(newValue, oldValue),\n isPrevPage: this.isPrevPage(newValue, oldValue),\n };\n this.onCurrentPageChanging.fire(this, options);\n return options.allowChanging;\n };\n SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) {\n var isNextPage = this.isNextPage(newValue, oldValue);\n if (isNextPage) {\n oldValue.passed = true;\n }\n this.onCurrentPageChanged.fire(this, {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n isNextPage: isNextPage,\n isPrevPage: this.isPrevPage(newValue, oldValue),\n });\n };\n SurveyModel.prototype.isNextPage = function (newValue, oldValue) {\n if (!newValue || !oldValue)\n return false;\n return newValue.visibleIndex == oldValue.visibleIndex + 1;\n };\n SurveyModel.prototype.isPrevPage = function (newValue, oldValue) {\n if (!newValue || !oldValue)\n return false;\n return newValue.visibleIndex + 1 == oldValue.visibleIndex;\n };\n /**\n * Returns the progress that a user made while going through the survey.\n * It depends from progressBarType property\n * @see progressBarType\n * @see progressValue\n */\n SurveyModel.prototype.getProgress = function () {\n if (this.currentPage == null)\n return 0;\n if (this.progressBarType !== \"pages\") {\n var info = this.getProgressInfo();\n if (this.progressBarType === \"requiredQuestions\") {\n return info.requiredQuestionCount > 1\n ? Math.ceil((info.requiredAnsweredQuestionCount * 100) /\n info.requiredQuestionCount)\n : 100;\n }\n return info.questionCount > 1\n ? Math.ceil((info.answeredQuestionCount * 100) / info.questionCount)\n : 100;\n }\n var index = this.visiblePages.indexOf(this.currentPage) + 1;\n return Math.ceil((index * 100) / this.visiblePageCount);\n };\n Object.defineProperty(SurveyModel.prototype, \"progressValue\", {\n /**\n * Returns the progress that a user made while going through the survey.\n * It depends from progressBarType property\n * @see progressBarType\n */\n get: function () {\n return this.getPropertyValue(\"progressValue\", 0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowing\", {\n /**\n * Returns the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') position.\n */\n get: function () {\n if (this.isDesignMode)\n return \"none\";\n var page = this.currentPage;\n if (!page)\n return \"none\";\n if (page.navigationButtonsVisibility === \"show\") {\n return \"bottom\";\n }\n if (page.navigationButtonsVisibility === \"hide\") {\n return \"none\";\n }\n return this.showNavigationButtons;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnTop\", {\n /**\n * Returns true if the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') are shows on top.\n */\n get: function () {\n return this.getIsNavigationButtonsShowingOn(\"top\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowingOnBottom\", {\n /**\n * Returns true if the navigation buttons (i.e., 'Prev', 'Next', or 'Complete' and 'Preview') are shows on bottom.\n */\n get: function () {\n return this.getIsNavigationButtonsShowingOn(\"bottom\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getIsNavigationButtonsShowingOn = function (buttonPosition) {\n var res = this.isNavigationButtonsShowing;\n return res == \"both\" || res == buttonPosition;\n };\n Object.defineProperty(SurveyModel.prototype, \"isEditMode\", {\n /**\n * Returns `true` if the survey is in edit mode.\n * @see mode\n */\n get: function () {\n return this.mode == \"edit\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompleteButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n (!this.isShowPreviewBeforeComplete || this.state == \"preview\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isPreviewButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n this.isShowPreviewBeforeComplete &&\n this.state == \"running\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCancelPreviewButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n this.isShowPreviewBeforeComplete &&\n this.state == \"preview\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isDisplayMode\", {\n /**\n * Returns `true` if the survey is in display mode or in preview mode.\n * @see mode\n * @see showPreviewBeforeComplete\n */\n get: function () {\n return this.mode == \"display\" || this.state == \"preview\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isUpdateValueTextOnTyping\", {\n get: function () {\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isDesignMode\", {\n /**\n * Returns `true` if the survey is in design mode. It is used by SurveyJS Editor.\n * @see setDesignMode\n */\n get: function () {\n return this._isDesignMode;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Sets the survey into design mode.\n * @param value use true to set the survey into the design mode.\n */\n SurveyModel.prototype.setDesignMode = function (value) {\n this._isDesignMode = value;\n this.onQuestionsOnPageModeChanged(\"standard\");\n };\n Object.defineProperty(SurveyModel.prototype, \"showInvisibleElements\", {\n /**\n * Gets or sets whether to show all elements in the survey, regardless their visibility. The default value is `false`.\n */\n get: function () {\n return this.getPropertyValue(\"showInvisibleElements\", false);\n },\n set: function (val) {\n var visPages = this.visiblePages;\n this.setPropertyValue(\"showInvisibleElements\", val);\n if (this.isLoadingFromJson)\n return;\n this.runConditions();\n this.updateAllElementsVisibility(visPages);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateAllElementsVisibility = function (visPages) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.updateElementVisibility();\n if (visPages.indexOf(page) > -1 != page.isVisible) {\n this.onPageVisibleChanged.fire(this, {\n page: page,\n visible: page.isVisible,\n });\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"areInvisibleElementsShowing\", {\n get: function () {\n return this.isDesignMode || this.showInvisibleElements;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"areEmptyElementsHidden\", {\n get: function () {\n return (this.isShowingPreview &&\n this.showPreviewBeforeComplete == \"showAnsweredQuestions\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasCookie\", {\n /**\n * Returns `true`, if a user has already completed the survey in this browser and there is a cookie about it. Survey goes to `completed` state if the function returns `true`.\n * @see cookieName\n * @see setCookie\n * @see deleteCookie\n * @see state\n */\n get: function () {\n if (!this.cookieName || typeof document === \"undefined\")\n return false;\n var cookies = document.cookie;\n return cookies && cookies.indexOf(this.cookieName + \"=true\") > -1;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Set the cookie with `cookieName` in user's browser. It is done automatically on survey complete if the `cookieName` property value is not empty.\n * @see cookieName\n * @see hasCookie\n * @see deleteCookie\n */\n SurveyModel.prototype.setCookie = function () {\n if (!this.cookieName || typeof document === \"undefined\")\n return;\n document.cookie =\n this.cookieName + \"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT\";\n };\n /**\n * Deletes the cookie with `cookieName` from the browser.\n * @see cookieName\n * @see hasCookie\n * @see setCookie\n */\n SurveyModel.prototype.deleteCookie = function () {\n if (!this.cookieName)\n return;\n document.cookie = this.cookieName + \"=;\";\n };\n /**\n * Navigates user to the next page.\n *\n * Returns `false` in the following cases:\n *\n * - if the current page is the last page.\n * - if the current page contains errors (for example, a required question is empty).\n * @see isCurrentPageHasErrors\n * @see prevPage\n * @see completeLastPage\n */\n SurveyModel.prototype.nextPage = function () {\n if (this.isLastPage)\n return false;\n return this.doCurrentPageComplete(false);\n };\n SurveyModel.prototype.hasErrorsOnNavigate = function (doComplete) {\n var _this = this;\n if (this.ignoreValidation || !this.isEditMode)\n return false;\n var func = function (hasErrors) {\n if (!hasErrors) {\n _this.doCurrentPageCompleteCore(doComplete);\n }\n };\n if (this.checkErrorsMode === \"onComplete\") {\n if (!this.isLastPage)\n return false;\n return this.hasErrors(true, true, func) !== false;\n }\n return this.hasCurrentPageErrors(func) !== false;\n };\n SurveyModel.prototype.checkForAsyncQuestionValidation = function (questions, func) {\n var _this = this;\n this.clearAsyncValidationQuesitons();\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isRunningValidators) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.onCompletedAsyncQuestionValidators(func, hasErrors);\n };\n this.asyncValidationQuesitons.push(questions[i]);\n }\n }\n return this.asyncValidationQuesitons.length > 0;\n };\n SurveyModel.prototype.clearAsyncValidationQuesitons = function () {\n if (!!this.asyncValidationQuesitons) {\n var asynQuestions = this.asyncValidationQuesitons;\n for (var i = 0; i < asynQuestions.length; i++) {\n asynQuestions[i].onCompletedAsyncValidators = null;\n }\n }\n this.asyncValidationQuesitons = [];\n };\n SurveyModel.prototype.onCompletedAsyncQuestionValidators = function (func, hasErrors) {\n if (hasErrors) {\n this.clearAsyncValidationQuesitons();\n func(true);\n return;\n }\n var asynQuestions = this.asyncValidationQuesitons;\n for (var i = 0; i < asynQuestions.length; i++) {\n if (asynQuestions[i].isRunningValidators)\n return;\n }\n func(false);\n };\n Object.defineProperty(SurveyModel.prototype, \"isCurrentPageHasErrors\", {\n /**\n * Returns `true`, if the current page contains errors, for example, the required question is empty or a question validation is failed.\n * @see nextPage\n */\n get: function () {\n return this.checkIsCurrentPageHasErrors();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Returns `true`, if the current page contains any error. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasPageErrors\n * @see hasErrors\n * @see currentPage\n */\n SurveyModel.prototype.hasCurrentPageErrors = function (onAsyncValidation) {\n return this.hasPageErrors(undefined, onAsyncValidation);\n };\n /**\n * Returns `true`, if a page contains an error. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use the second `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param page the page that you want to validate. If the parameter is undefined then the `activePage` is using\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasCurrentPageErrors\n * @see hasErrors\n * @see activePage\n * @see currentPage\n */\n SurveyModel.prototype.hasPageErrors = function (page, onAsyncValidation) {\n if (!page) {\n page = this.activePage;\n }\n if (!page)\n return false;\n if (this.checkIsPageHasErrors(page))\n return true;\n if (!onAsyncValidation)\n return false;\n return this.checkForAsyncQuestionValidation(page.questions, function (hasErrors) { return onAsyncValidation(hasErrors); })\n ? undefined\n : false;\n };\n /**\n * Returns `true`, if any of the survey pages contains errors. If there is an async function in an expression, then the function will return `undefined` value.\n * In this case, you should use the third `onAsyncValidation` parameter, which is a callback function: (hasErrors: boolean) => void\n * @param fireCallback set it to `true`, to show errors in UI.\n * @param focusOnFirstError set it to `true` to focus on the first question that doesn't pass the validation and make the page, where the question is located, the current.\n * @param onAsyncValidation use this parameter if you use async functions in your expressions. This callback function will be called with hasErrors value equals to `true` or `false`.\n * @see hasCurrentPageErrors\n * @see hasPageErrors\n */\n SurveyModel.prototype.hasErrors = function (fireCallback, focusOnFirstError, onAsyncValidation) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n if (!!onAsyncValidation) {\n fireCallback = true;\n }\n var visPages = this.visiblePages;\n var firstErrorPage = null;\n var res = false;\n for (var i = 0; i < visPages.length; i++) {\n if (visPages[i].hasErrors(fireCallback, false)) {\n if (!firstErrorPage)\n firstErrorPage = visPages[i];\n res = true;\n }\n }\n if (focusOnFirstError && !!firstErrorPage) {\n this.currentPage = firstErrorPage;\n var questions = firstErrorPage.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].errors.length > 0) {\n questions[i].focus(true);\n break;\n }\n }\n }\n if (res || !onAsyncValidation)\n return res;\n return this.checkForAsyncQuestionValidation(this.getAllQuestions(), function (hasErrors) { return onAsyncValidation(hasErrors); })\n ? undefined\n : false;\n };\n /**\n * Checks whether survey elements (pages, panels, and questions) have unique question names.\n * You can check for unique names for individual page and panel (and all their elements) or a question.\n * If the parameter is not specified, then a survey checks that all its elements have unique names.\n * @param element page, panel or question, it is `null` by default, that means all survey elements will be checked\n */\n SurveyModel.prototype.ensureUniqueNames = function (element) {\n if (element === void 0) { element = null; }\n if (element == null) {\n for (var i = 0; i < this.pages.length; i++) {\n this.ensureUniqueName(this.pages[i]);\n }\n }\n else {\n this.ensureUniqueName(element);\n }\n };\n SurveyModel.prototype.ensureUniqueName = function (element) {\n if (element.isPage) {\n this.ensureUniquePageName(element);\n }\n if (element.isPanel) {\n this.ensureUniquePanelName(element);\n }\n if (element.isPage || element.isPanel) {\n var elements = element.elements;\n for (var i = 0; i < elements.length; i++) {\n this.ensureUniqueNames(elements[i]);\n }\n }\n else {\n this.ensureUniqueQuestionName(element);\n }\n };\n SurveyModel.prototype.ensureUniquePageName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getPageByName(name);\n });\n };\n SurveyModel.prototype.ensureUniquePanelName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getPanelByName(name);\n });\n };\n SurveyModel.prototype.ensureUniqueQuestionName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getQuestionByName(name);\n });\n };\n SurveyModel.prototype.ensureUniqueElementName = function (element, getElementByName) {\n var existingElement = getElementByName(element.name);\n if (!existingElement || existingElement == element)\n return;\n var newName = this.getNewName(element.name);\n while (!!getElementByName(newName)) {\n var newName = this.getNewName(element.name);\n }\n element.name = newName;\n };\n SurveyModel.prototype.getNewName = function (name) {\n var pos = name.length;\n while (pos > 0 && name[pos - 1] >= \"0\" && name[pos - 1] <= \"9\") {\n pos--;\n }\n var base = name.substr(0, pos);\n var num = 0;\n if (pos < name.length) {\n num = parseInt(name.substr(pos));\n }\n num++;\n return base + num;\n };\n SurveyModel.prototype.checkIsCurrentPageHasErrors = function (isFocuseOnFirstError) {\n if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n return this.checkIsPageHasErrors(this.activePage, isFocuseOnFirstError);\n };\n SurveyModel.prototype.checkIsPageHasErrors = function (page, isFocuseOnFirstError) {\n if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n if (isFocuseOnFirstError === undefined) {\n isFocuseOnFirstError = this.focusOnFirstError;\n }\n if (!page)\n return true;\n var res = page.hasErrors(true, isFocuseOnFirstError);\n this.fireValidatedErrorsOnPage(page);\n return res;\n };\n SurveyModel.prototype.fireValidatedErrorsOnPage = function (page) {\n if (this.onValidatedErrorsOnCurrentPage.isEmpty || !page)\n return;\n var questionsOnPage = page.questions;\n var questions = new Array();\n var errors = new Array();\n for (var i = 0; i < questionsOnPage.length; i++) {\n var q = questionsOnPage[i];\n if (q.errors.length > 0) {\n questions.push(q);\n for (var j = 0; j < q.errors.length; j++) {\n errors.push(q.errors[j]);\n }\n }\n }\n this.onValidatedErrorsOnCurrentPage.fire(this, {\n questions: questions,\n errors: errors,\n page: page,\n });\n };\n /**\n * Navigates user to a previous page. If the current page is the first page, `prevPage` returns `false`. `prevPage` does not perform any checks, required questions can be empty.\n * @see isFirstPage\n */\n SurveyModel.prototype.prevPage = function () {\n if (this.isFirstPage)\n return false;\n this.resetNavigationButton();\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index - 1];\n };\n /**\n * Completes the survey, if the current page is the last one. It returns `false` if the last page has errors.\n * If the last page has no errors, `completeLastPage` calls `doComplete` and returns `true`.\n * @see isCurrentPageHasErrors\n * @see nextPage\n * @see doComplete\n */\n SurveyModel.prototype.completeLastPage = function () {\n var res = this.doCurrentPageComplete(true);\n if (res) {\n this.cancelPreview();\n }\n return res;\n };\n SurveyModel.prototype.navigationMouseDown = function () {\n this.isNavigationButtonPressed = true;\n return true;\n };\n SurveyModel.prototype.resetNavigationButton = function () {\n this.isNavigationButtonPressed = false;\n };\n /**\n * Shows preview for the survey. Switches the survey to the \"preview\" state.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * @see showPreviewBeforeComplete\n * @see cancelPreview\n * @see state\n * @see previewText\n * @see editText\n */\n SurveyModel.prototype.showPreview = function () {\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(true))\n return false;\n if (this.doServerValidation(true, true))\n return false;\n this.isShowingPreview = true;\n return true;\n };\n /**\n * Cancels preview and switches back to the \"running\" state.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * @param curPage - A new current page. If the parameter is undefined then the last page becomes the current.\n * @see showPreviewBeforeComplete\n * @see showPreview\n * @see state\n */\n SurveyModel.prototype.cancelPreview = function (curPage) {\n if (curPage === void 0) { curPage = null; }\n if (!this.isShowingPreview)\n return;\n this.isShowingPreview = false;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(curPage) && this.visiblePageCount > 0) {\n curPage = this.visiblePageCount - 1;\n }\n if (curPage !== null) {\n this.currentPage = curPage;\n }\n };\n SurveyModel.prototype.cancelPreviewByPage = function (panel) {\n this.cancelPreview(panel[\"originalPage\"]);\n };\n SurveyModel.prototype.doCurrentPageComplete = function (doComplete) {\n if (this.isValidatingOnServer)\n return false;\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(doComplete))\n return false;\n return this.doCurrentPageCompleteCore(doComplete);\n };\n SurveyModel.prototype.doCurrentPageCompleteCore = function (doComplete) {\n if (this.doServerValidation(doComplete))\n return false;\n if (doComplete) {\n this.currentPage.passed = true;\n this.doComplete();\n }\n else {\n this.doNextPage();\n }\n return true;\n };\n Object.defineProperty(SurveyModel.prototype, \"isSinglePage\", {\n /**\n * Obsolete. Use the `questionsOnPageMode` property instead.\n * @see questionsOnPageMode\n */\n get: function () {\n return this.questionsOnPageMode == \"singlePage\";\n },\n set: function (val) {\n this.questionsOnPageMode = val ? \"singlePage\" : \"standard\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionsOnPageMode\", {\n /**\n * Gets or sets a value that specifies how the survey combines questions, panels, and pages.\n *\n * The following options are available:\n *\n * - `singlePage` - combine all survey pages in a single page. Pages will be converted to panels.\n * - `questionPerPage` - show one question per page. Survey will create a separate page for every question.\n */\n get: function () {\n return this.getPropertyValue(\"questionsOnPageMode\", \"standard\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOnPageMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"firstPageIsStarted\", {\n /**\n * Gets or sets whether the first survey page is a start page. Set this property to `true`, to make the first page a starting page.\n * An end user cannot navigate to the start page and the start page does not affect a survey progress.\n */\n get: function () {\n return this.getPropertyValue(\"firstPageIsStarted\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"firstPageIsStarted\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.isPageStarted = function (page) {\n return (this.firstPageIsStarted && this.pages.length > 0 && this.pages[0] === page);\n };\n Object.defineProperty(SurveyModel.prototype, \"showPreviewBeforeComplete\", {\n /**\n * Set this property to \"showAllQuestions\" or \"showAnsweredQuestions\" to allow respondents to preview answers before submitting the survey results.\n *\n * Details: [Preview State](https://surveyjs.io/Documentation/Library#states-preview)\n * Example: [Show Preview Before Complete](https://surveyjs.io/Examples/Library?id=survey-showpreview)\n * @see showPreview\n * @see cancelPreview\n * @see state\n * @see previewText\n * @see editText\n */\n get: function () {\n return this.getPropertyValue(\"showPreviewBeforeComplete\", \"noPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreviewBeforeComplete\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPreviewBeforeComplete\", {\n get: function () {\n var preview = this.showPreviewBeforeComplete;\n return preview == \"showAllQuestions\" || preview == \"showAnsweredQuestions\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.onFirstPageIsStartedChanged = function () {\n if (this.pages.length == 0)\n return;\n this.isStartedState = this.firstPageIsStarted;\n this.pageVisibilityChanged(this.pages[0], !this.firstPageIsStarted);\n };\n SurveyModel.prototype.onShowingPreviewChanged = function () {\n if (this.isDesignMode)\n return;\n if (this.isShowingPreview) {\n this.runningPages = this.pages.slice(0, this.pages.length);\n this.setupPagesForPageModes(true);\n }\n else {\n if (this.runningPages) {\n this.restoreOrigionalPages(this.runningPages);\n }\n this.runningPages = undefined;\n }\n this.runConditions();\n this.updateAllElementsVisibility(this.pages);\n this.updateVisibleIndexes();\n this.currentPageNo = 0;\n };\n SurveyModel.prototype.onQuestionsOnPageModeChanged = function (oldValue) {\n if (this.isShowingPreview)\n return;\n if (this.questionsOnPageMode == \"standard\" || this.isDesignMode) {\n if (this.origionalPages) {\n this.restoreOrigionalPages(this.origionalPages);\n }\n this.origionalPages = undefined;\n }\n else {\n if (!oldValue || oldValue == \"standard\") {\n this.origionalPages = this.pages.slice(0, this.pages.length);\n }\n this.setupPagesForPageModes(this.isSinglePage);\n }\n this.runConditions();\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.restoreOrigionalPages = function (originalPages) {\n this.questionHashesClear();\n this.pages.splice(0, this.pages.length);\n for (var i = 0; i < originalPages.length; i++) {\n this.pages.push(originalPages[i]);\n }\n };\n SurveyModel.prototype.setupPagesForPageModes = function (isSinglePage) {\n this.questionHashesClear();\n var startIndex = this.firstPageIsStarted ? 1 : 0;\n _super.prototype.startLoadingFromJson.call(this);\n var newPages = this.createPagesForQuestionOnPageMode(isSinglePage, startIndex);\n var deletedLen = this.pages.length - startIndex;\n this.pages.splice(startIndex, deletedLen);\n for (var i = 0; i < newPages.length; i++) {\n this.pages.push(newPages[i]);\n }\n _super.prototype.endLoadingFromJson.call(this);\n for (var i = 0; i < newPages.length; i++) {\n newPages[i].endLoadingFromJson();\n newPages[i].setSurveyImpl(this);\n }\n this.doElementsOnLoad();\n };\n SurveyModel.prototype.createPagesForQuestionOnPageMode = function (isSinglePage, startIndex) {\n if (isSinglePage) {\n return [this.createSinglePage(startIndex)];\n }\n return this.createPagesForEveryQuestion(startIndex);\n };\n SurveyModel.prototype.createSinglePage = function (startIndex) {\n var single = this.createNewPage(\"all\");\n single.setSurveyImpl(this);\n for (var i = startIndex; i < this.pages.length; i++) {\n var page = this.pages[i];\n var panel = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(\"panel\");\n panel.originalPage = page;\n single.addPanel(panel);\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(page);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, panel);\n if (!this.showPageTitles) {\n panel.title = \"\";\n }\n }\n return single;\n };\n SurveyModel.prototype.createPagesForEveryQuestion = function (startIndex) {\n var res = [];\n for (var i = startIndex; i < this.pages.length; i++) {\n var originalPage = this.pages[i];\n // Initialize randomization\n originalPage.setWasShown(true);\n for (var j = 0; j < originalPage.elements.length; j++) {\n var originalElement = originalPage.elements[j];\n var element = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalElement.getType());\n if (!element)\n continue;\n var jsonObj = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n //Deserialize page properties only, excluding elements\n jsonObj.lightSerializing = true;\n var pageJson = jsonObj.toJsonObject(originalPage);\n var page = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(originalPage.getType());\n page.fromJSON(pageJson);\n page.name = \"page\" + (res.length + 1);\n page.setSurveyImpl(this);\n res.push(page);\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(originalElement);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, element);\n page.addElement(element);\n for (var k = 0; k < page.questions.length; k++) {\n this.questionHashesAdded(page.questions[k]);\n }\n }\n }\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"isFirstPage\", {\n /**\n * Gets whether the current page is the first one.\n */\n get: function () {\n if (this.currentPage == null)\n return true;\n return this.visiblePages.indexOf(this.currentPage) == 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPrevButton\", {\n get: function () {\n if (this.isFirstPage || !this.showPrevButton)\n return false;\n var page = this.visiblePages[this.currentPageNo - 1];\n return this.getPageMaxTimeToFinish(page) <= 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLastPage\", {\n /**\n * Gets whether the current page is the last one.\n */\n get: function () {\n if (this.currentPage == null)\n return true;\n var vPages = this.visiblePages;\n return vPages.indexOf(this.currentPage) == vPages.length - 1;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Completes the survey.\n *\n * Calling this function performs the following tasks:\n *\n * - writes cookie if the `cookieName` property is not empty\n * - sets the survey into `completed` state\n * - fires the `onComplete` event\n * - calls `sendResult` function.\n *\n * Calling the `doComplete` function does not perform any validation, unlike the `completeLastPage` function.\n * It calls `navigateToUrl` after calling `onComplete` event.\n * In case calling `options.showDataSaving` callback in the `onComplete` event, `navigateToUrl` is used on calling `options.showDataSavingSuccess` callback.\n * @see completeLastPage\n * @see cookieName\n * @see state\n * @see onComplete\n * @see surveyPostId\n * @see completeLastPage\n * @see navigateToUrl\n * @see navigateToUrlOnCondition\n */\n SurveyModel.prototype.doComplete = function (isCompleteOnTrigger) {\n if (isCompleteOnTrigger === void 0) { isCompleteOnTrigger = false; }\n var onCompletingOptions = {\n allowComplete: true,\n isCompleteOnTrigger: isCompleteOnTrigger,\n };\n this.onCompleting.fire(this, onCompletingOptions);\n if (!onCompletingOptions.allowComplete)\n return;\n var previousCookie = this.hasCookie;\n this.stopTimer();\n this.setCompleted();\n this.clearUnusedValues();\n this.setCookie();\n var self = this;\n var savingDataStarted = false;\n var onCompleteOptions = {\n isCompleteOnTrigger: isCompleteOnTrigger,\n showDataSaving: function (text) {\n savingDataStarted = true;\n self.setCompletedState(\"saving\", text);\n },\n showDataSavingError: function (text) {\n self.setCompletedState(\"error\", text);\n },\n showDataSavingSuccess: function (text) {\n self.setCompletedState(\"success\", text);\n self.navigateTo();\n },\n showDataSavingClear: function (text) {\n self.setCompletedState(\"\", \"\");\n },\n };\n this.onComplete.fire(this, onCompleteOptions);\n if (!previousCookie && this.surveyPostId) {\n this.sendResult();\n }\n if (!savingDataStarted) {\n this.navigateTo();\n }\n };\n /**\n * Starts the survey. Changes the survey mode from \"starting\" to \"running\". Call this function if your survey has a start page, otherwise this function does nothing.\n * @see firstPageIsStarted\n */\n SurveyModel.prototype.start = function () {\n if (!this.firstPageIsStarted)\n return false;\n if (this.checkIsPageHasErrors(this.startedPage, true))\n return false;\n this.isStartedState = false;\n this.startTimerFromUI();\n this.onStarted.fire(this, {});\n if (!!this.currentPage) {\n this.currentPage.locStrsChanged();\n }\n return true;\n };\n Object.defineProperty(SurveyModel.prototype, \"isValidatingOnServer\", {\n /**\n * Gets whether the question values on the current page are validating on the server at the current moment.\n * @see onServerValidateQuestions\n */\n get: function () {\n return this.getPropertyValue(\"isValidatingOnServer\", false);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.setIsValidatingOnServer = function (val) {\n if (val == this.isValidatingOnServer)\n return;\n this.setPropertyValue(\"isValidatingOnServer\", val);\n this.onIsValidatingOnServerChanged();\n };\n SurveyModel.prototype.onIsValidatingOnServerChanged = function () { };\n SurveyModel.prototype.doServerValidation = function (doComplete, isPreview) {\n if (isPreview === void 0) { isPreview = false; }\n if (!this.onServerValidateQuestions ||\n this.onServerValidateQuestions.isEmpty)\n return false;\n if (!doComplete && this.checkErrorsMode === \"onComplete\")\n return false;\n var self = this;\n var options = {\n data: {},\n errors: {},\n survey: this,\n complete: function () {\n self.completeServerValidation(options, isPreview);\n },\n };\n if (doComplete && this.checkErrorsMode === \"onComplete\") {\n options.data = this.data;\n }\n else {\n var questions = this.activePage.questions;\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n if (!question.visible)\n continue;\n var value = this.getValue(question.getValueName());\n if (!this.isValueEmpty(value))\n options.data[question.getValueName()] = value;\n }\n }\n this.setIsValidatingOnServer(true);\n if (typeof this.onServerValidateQuestions === \"function\") {\n this.onServerValidateQuestions(this, options);\n }\n else {\n this.onServerValidateQuestions.fire(this, options);\n }\n return true;\n };\n SurveyModel.prototype.completeServerValidation = function (options, isPreview) {\n this.setIsValidatingOnServer(false);\n if (!options && !options.survey)\n return;\n var self = options.survey;\n var hasErrors = false;\n if (options.errors) {\n var hasToFocus = this.focusOnFirstError;\n for (var name in options.errors) {\n var question = self.getQuestionByName(name);\n if (question && question[\"errors\"]) {\n hasErrors = true;\n question.addError(new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.errors[name], this));\n if (hasToFocus) {\n hasToFocus = false;\n if (!!question.page) {\n this.currentPage = question.page;\n }\n question.focus(true);\n }\n }\n }\n this.fireValidatedErrorsOnPage(this.currentPage);\n }\n if (!hasErrors) {\n if (isPreview) {\n this.isShowingPreview = true;\n }\n else {\n if (self.isLastPage)\n self.doComplete();\n else\n self.doNextPage();\n }\n }\n };\n SurveyModel.prototype.doNextPage = function () {\n var curPage = this.currentPage;\n this.checkOnPageTriggers();\n if (!this.isCompleted) {\n if (this.sendResultOnPageNext) {\n this.sendResult(this.surveyPostId, this.clientId, true);\n }\n if (curPage === this.currentPage) {\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index + 1];\n }\n }\n else {\n this.doComplete(true);\n }\n };\n SurveyModel.prototype.setCompleted = function () {\n this.isCompleted = true;\n };\n Object.defineProperty(SurveyModel.prototype, \"processedCompletedHtml\", {\n /**\n * Returns the HTML content for the complete page.\n * @see completedHtml\n */\n get: function () {\n var html = this.renderedCompletedHtml;\n if (html) {\n return this.processHtml(html);\n }\n return \"

\" + this.getLocString(\"completingSurvey\") + \"

\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedCompletedBeforeHtml\", {\n /**\n * Returns the HTML content, that is shown to a user that had completed the survey before.\n * @see completedHtml\n * @see cookieName\n */\n get: function () {\n if (this.completedBeforeHtml) {\n return this.processHtml(this.completedBeforeHtml);\n }\n return \"

\" + this.getLocString(\"completingSurveyBefore\") + \"

\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedLoadingHtml\", {\n /**\n * Returns the HTML content, that is shows when a survey loads the survey JSON.\n */\n get: function () {\n if (this.loadingHtml) {\n return this.processHtml(this.loadingHtml);\n }\n return \"

\" + this.getLocString(\"loadingSurvey\") + \"

\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getProgressInfo = function () {\n var pages = this.isDesignMode ? this.pages : this.visiblePages;\n return _base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].getProgressInfoByElements(pages, false);\n };\n Object.defineProperty(SurveyModel.prototype, \"progressText\", {\n /**\n * Returns the text for the current progress.\n */\n get: function () {\n var res = this.getPropertyValue(\"progressText\", \"\");\n if (!res) {\n this.updateProgressText();\n res = this.getPropertyValue(\"progressText\", \"\");\n }\n return res;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateProgressText = function (onValueChanged) {\n if (onValueChanged === void 0) { onValueChanged = false; }\n if (this.isCalculatingProgressText)\n return;\n if (onValueChanged &&\n this.progressBarType == \"pages\" &&\n this.onProgressText.isEmpty)\n return;\n this.isCalculatingProgressText = true;\n this.setPropertyValue(\"progressText\", this.getProgressText());\n this.setPropertyValue(\"progressValue\", this.getProgress());\n this.isCalculatingProgressText = false;\n };\n SurveyModel.prototype.getProgressText = function () {\n if (!this.isDesignMode && this.currentPage == null)\n return \"\";\n var options = {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n text: \"\",\n };\n var type = this.progressBarType.toLowerCase();\n if (type === \"questions\" ||\n type === \"requiredquestions\" ||\n type === \"correctquestions\" ||\n !this.onProgressText.isEmpty) {\n var info = this.getProgressInfo();\n options.questionCount = info.questionCount;\n options.answeredQuestionCount = info.answeredQuestionCount;\n options.requiredQuestionCount = info.requiredQuestionCount;\n options.requiredAnsweredQuestionCount =\n info.requiredAnsweredQuestionCount;\n }\n options.text = this.getProgressTextCore(options);\n this.onProgressText.fire(this, options);\n return options.text;\n };\n SurveyModel.prototype.getProgressTextCore = function (info) {\n var type = this.progressBarType.toLowerCase();\n if (type === \"questions\") {\n return this.getLocString(\"questionsProgressText\")[\"format\"](info.answeredQuestionCount, info.questionCount);\n }\n if (type === \"requiredquestions\") {\n return this.getLocString(\"questionsProgressText\")[\"format\"](info.requiredAnsweredQuestionCount, info.requiredQuestionCount);\n }\n if (type === \"correctquestions\") {\n var correctAnswersCount = this.getCorrectedAnswerCount();\n return this.getLocString(\"questionsProgressText\")[\"format\"](correctAnswersCount, info.questionCount);\n }\n var vPages = this.isDesignMode ? this.pages : this.visiblePages;\n var index = this.isDesignMode ? 1 : vPages.indexOf(this.currentPage) + 1;\n return this.getLocString(\"progressText\")[\"format\"](index, vPages.length);\n };\n SurveyModel.prototype.afterRenderSurvey = function (htmlElement) {\n this.onAfterRenderSurvey.fire(this, {\n survey: this,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.updateQuestionCssClasses = function (question, cssClasses) {\n this.onUpdateQuestionCssClasses.fire(this, {\n question: question,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.updatePanelCssClasses = function (panel, cssClasses) {\n this.onUpdatePanelCssClasses.fire(this, {\n panel: panel,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.updatePageCssClasses = function (page, cssClasses) {\n this.onUpdatePageCssClasses.fire(this, {\n page: page,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.afterRenderPage = function (htmlElement) {\n if (this.onAfterRenderPage.isEmpty)\n return;\n this.onAfterRenderPage.fire(this, {\n page: this.activePage,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderHeader = function (htmlElement) {\n if (this.onAfterRenderHeader.isEmpty)\n return;\n this.onAfterRenderHeader.fire(this, {\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) {\n this.onAfterRenderQuestion.fire(this, {\n question: question,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderQuestionInput = function (question, htmlElement) {\n if (this.onAfterRenderQuestionInput.isEmpty)\n return;\n var id = question.inputId;\n if (!!id && htmlElement.id !== id && typeof document !== \"undefined\") {\n var el = document.getElementById(id);\n if (!!el) {\n htmlElement = el;\n }\n }\n this.onAfterRenderQuestionInput.fire(this, {\n question: question,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) {\n this.onAfterRenderPanel.fire(this, {\n panel: panel,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.matrixBeforeRowAdded = function (options) {\n this.onMatrixBeforeRowAdded.fire(this, options);\n };\n SurveyModel.prototype.matrixRowAdded = function (question, row) {\n this.onMatrixRowAdded.fire(this, { question: question, row: row });\n };\n SurveyModel.prototype.getQuestionByValueNameFromArray = function (valueName, name, index) {\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return;\n for (var i = 0; i < questions.length; i++) {\n var res = questions[i].getQuestionFromArray(name, index);\n if (!!res)\n return res;\n }\n return null;\n };\n SurveyModel.prototype.matrixRowRemoved = function (question, rowIndex, row) {\n this.onMatrixRowRemoved.fire(this, {\n question: question,\n rowIndex: rowIndex,\n row: row,\n });\n };\n SurveyModel.prototype.matrixRowRemoving = function (question, rowIndex, row) {\n var options = {\n question: question,\n rowIndex: rowIndex,\n row: row,\n allow: true,\n };\n this.onMatrixRowRemoving.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.matrixAllowRemoveRow = function (question, rowIndex, row) {\n var options = {\n question: question,\n rowIndex: rowIndex,\n row: row,\n allow: true,\n };\n this.onMatrixAllowRemoveRow.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.matrixCellCreated = function (question, options) {\n options.question = question;\n this.onMatrixCellCreated.fire(this, options);\n };\n SurveyModel.prototype.matrixAfterCellRender = function (question, options) {\n options.question = question;\n this.onMatrixAfterCellRender.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValueChanged = function (question, options) {\n options.question = question;\n this.onMatrixCellValueChanged.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValueChanging = function (question, options) {\n options.question = question;\n this.onMatrixCellValueChanging.fire(this, options);\n };\n Object.defineProperty(SurveyModel.prototype, \"isValidateOnValueChanging\", {\n get: function () {\n return this.checkErrorsMode === \"onValueChanging\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.matrixCellValidate = function (question, options) {\n options.question = question;\n this.onMatrixCellValidate.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.dynamicPanelAdded = function (question) {\n if (this.onDynamicPanelAdded.isEmpty)\n return;\n var panels = question.panels;\n var panel = panels[panels.length - 1];\n this.onDynamicPanelAdded.fire(this, { question: question, panel: panel });\n };\n SurveyModel.prototype.dynamicPanelRemoved = function (question, panelIndex, panel) {\n var questions = !!panel ? panel.questions : [];\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearOnDeletingContainer();\n }\n this.onDynamicPanelRemoved.fire(this, {\n question: question,\n panelIndex: panelIndex,\n panel: panel,\n });\n };\n SurveyModel.prototype.dynamicPanelItemValueChanged = function (question, options) {\n options.question = question;\n this.onDynamicPanelItemValueChanged.fire(this, options);\n };\n SurveyModel.prototype.dragAndDropAllow = function (options) {\n options.allow = true;\n this.onDragDropAllow.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.renderTitleActions = function (element) {\n if (element.isPanel)\n return !this.onGetPanelTitleActions.isEmpty;\n else if (element.isPage)\n return !this.onGetPageTitleActions.isEmpty;\n else\n return !this.onGetQuestionTitleActions.isEmpty;\n };\n SurveyModel.prototype.elementContentVisibilityChanged = function (element) {\n if (this.currentPageValue) {\n this.currentPageValue.ensureRowsVisibility();\n }\n this.onElementContentVisibilityChanged.fire(this, { element: element });\n };\n SurveyModel.prototype.getUpdatedQuestionTitleActions = function (question, titleActions) {\n var options = {\n question: question,\n titleActions: titleActions,\n };\n this.onGetQuestionTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedPanelTitleActions = function (panel, titleActions) {\n var options = {\n panel: panel,\n titleActions: titleActions,\n };\n this.onGetPanelTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedPageTitleActions = function (page, titleActions) {\n var options = {\n page: page,\n titleActions: titleActions,\n };\n this.onGetPageTitleActions.fire(this, options);\n return options.titleActions;\n };\n SurveyModel.prototype.getUpdatedMatrixRowActions = function (question, row, actions) {\n var options = {\n question: question,\n actions: actions,\n row: row,\n };\n this.onGetMatrixRowActions.fire(this, options);\n return options.actions;\n };\n SurveyModel.prototype.scrollElementToTop = function (element, question, page, id) {\n var options = {\n element: element,\n question: question,\n page: page,\n elementId: id,\n cancel: false,\n };\n this.onScrollingElementToTop.fire(this, options);\n if (!options.cancel) {\n _base__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].ScrollElementToTop(options.elementId);\n }\n };\n /**\n * Uploads a file to server.\n * @param question a file question object\n * @param name a question name\n * @param files files to upload\n * @param uploadingCallback a call back function to get the status on uploading the files\n */\n SurveyModel.prototype.uploadFiles = function (question, name, files, uploadingCallback) {\n if (this.onUploadFiles.isEmpty) {\n uploadingCallback(\"error\", files);\n }\n else {\n this.onUploadFiles.fire(this, {\n question: question,\n name: name,\n files: files || [],\n callback: uploadingCallback,\n });\n }\n if (this.surveyPostId) {\n this.uploadFilesCore(name, files, uploadingCallback);\n }\n };\n /**\n * Downloads a file from server\n * @param name a question name\n * @param fileValue a single file question value\n * @param callback a call back function to get the status on downloading the file and the downloaded file content\n */\n SurveyModel.prototype.downloadFile = function (questionName, fileValue, callback) {\n if (this.onDownloadFile.isEmpty) {\n !!callback && callback(\"success\", fileValue.content || fileValue);\n }\n this.onDownloadFile.fire(this, {\n name: questionName,\n content: fileValue.content || fileValue,\n fileValue: fileValue,\n callback: callback,\n });\n };\n /**\n * Clears files from server.\n * @param question question\n * @param name question name\n * @param value file question value\n * @param callback call back function to get the status of the clearing operation\n */\n SurveyModel.prototype.clearFiles = function (question, name, value, fileName, callback) {\n if (this.onClearFiles.isEmpty) {\n !!callback && callback(\"success\", value);\n }\n this.onClearFiles.fire(this, {\n question: question,\n name: name,\n value: value,\n fileName: fileName,\n callback: callback,\n });\n };\n SurveyModel.prototype.updateChoicesFromServer = function (question, choices, serverResult) {\n var options = {\n question: question,\n choices: choices,\n serverResult: serverResult,\n };\n this.onLoadChoicesFromServer.fire(this, options);\n return options.choices;\n };\n SurveyModel.prototype.createSurveyService = function () {\n return new _dxSurveyService__WEBPACK_IMPORTED_MODULE_7__[\"dxSurveyService\"]();\n };\n SurveyModel.prototype.uploadFilesCore = function (name, files, uploadingCallback) {\n var _this = this;\n var responses = [];\n files.forEach(function (file) {\n if (uploadingCallback)\n uploadingCallback(\"uploading\", file);\n _this.createSurveyService().sendFile(_this.surveyPostId, file, function (success, response) {\n if (success) {\n responses.push({ content: response, file: file });\n if (responses.length === files.length) {\n if (uploadingCallback)\n uploadingCallback(\"success\", responses);\n }\n }\n else {\n if (uploadingCallback)\n uploadingCallback(\"error\", {\n response: response,\n file: file,\n });\n }\n });\n });\n };\n SurveyModel.prototype.getPage = function (index) {\n return this.pages[index];\n };\n /**\n * Adds an existing page to the survey.\n * @param page a newly added page\n * @param index - a page index to where insert a page. It is -1 by default and the page will be added into the end.\n * @see addNewPage\n */\n SurveyModel.prototype.addPage = function (page, index) {\n if (index === void 0) { index = -1; }\n if (page == null)\n return;\n if (index < 0 || index >= this.pages.length) {\n this.pages.push(page);\n }\n else {\n this.pages.splice(index, 0, page);\n }\n };\n /**\n * Creates a new page and adds it to a survey. Generates a new name if the `name` parameter is not specified.\n * @param name a page name\n * @param index - a page index to where insert a new page. It is -1 by default and the page will be added into the end.\n * @see addPage\n */\n SurveyModel.prototype.addNewPage = function (name, index) {\n if (name === void 0) { name = null; }\n if (index === void 0) { index = -1; }\n var page = this.createNewPage(name);\n this.addPage(page, index);\n return page;\n };\n /**\n * Removes a page from a survey.\n * @param page\n */\n SurveyModel.prototype.removePage = function (page) {\n var index = this.pages.indexOf(page);\n if (index < 0)\n return;\n this.pages.splice(index, 1);\n if (this.currentPageValue == page) {\n this.currentPage = this.pages.length > 0 ? this.pages[0] : null;\n }\n };\n /**\n * Returns a question by its name.\n * @param name a question name\n * @param caseInsensitive\n * @see getQuestionByValueName\n */\n SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n if (!name)\n return null;\n if (caseInsensitive) {\n name = name.toLowerCase();\n }\n var hash = !!caseInsensitive\n ? this.questionHashes.namesInsensitive\n : this.questionHashes.names;\n var res = hash[name];\n if (!res)\n return null;\n return res[0];\n };\n /**\n * Returns a question by its value name\n * @param valueName a question name\n * @param caseInsensitive\n * @see getQuestionByName\n * @see getQuestionsByValueName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionByValueName = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var res = this.getQuestionsByValueName(valueName, caseInsensitive);\n return !!res ? res[0] : null;\n };\n /**\n * Returns all questions by their valueName. name property is used if valueName property is empty.\n * @param valueName a question name\n * @param caseInsensitive\n * @see getQuestionByName\n * @see getQuestionByValueName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionsByValueName = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var hash = !!caseInsensitive\n ? this.questionHashes.valueNamesInsensitive\n : this.questionHashes.valueNames;\n var res = hash[valueName];\n if (!res)\n return null;\n return res;\n };\n SurveyModel.prototype.getCalculatedValueByName = function (name) {\n for (var i = 0; i < this.calculatedValues.length; i++) {\n if (name == this.calculatedValues[i].name)\n return this.calculatedValues[i];\n }\n return null;\n };\n /**\n * Gets a list of questions by their names.\n * @param names an array of question names\n * @param caseInsensitive\n */\n SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var result = [];\n if (!names)\n return result;\n for (var i = 0; i < names.length; i++) {\n if (!names[i])\n continue;\n var question = this.getQuestionByName(names[i], caseInsensitive);\n if (question)\n result.push(question);\n }\n return result;\n };\n /**\n * Returns a page on which an element (question or panel) is placed.\n * @param element Question or Panel\n */\n SurveyModel.prototype.getPageByElement = function (element) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n if (page.containsElement(element))\n return page;\n }\n return null;\n };\n /**\n * Returns a page on which a question is located.\n * @param question\n */\n SurveyModel.prototype.getPageByQuestion = function (question) {\n return this.getPageByElement(question);\n };\n /**\n * Returns a page by it's name.\n * @param name\n */\n SurveyModel.prototype.getPageByName = function (name) {\n for (var i = 0; i < this.pages.length; i++) {\n if (this.pages[i].name == name)\n return this.pages[i];\n }\n return null;\n };\n /**\n * Returns a list of pages by their names.\n * @param names a list of page names\n */\n SurveyModel.prototype.getPagesByNames = function (names) {\n var result = [];\n if (!names)\n return result;\n for (var i = 0; i < names.length; i++) {\n if (!names[i])\n continue;\n var page = this.getPageByName(names[i]);\n if (page)\n result.push(page);\n }\n return result;\n };\n /**\n * Returns a list of all questions in a survey.\n * @param visibleOnly set it `true`, if you want to get only visible questions\n */\n SurveyModel.prototype.getAllQuestions = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].addQuestionsToList(result, visibleOnly, includingDesignTime);\n }\n return result;\n };\n /**\n * Returns quiz questions. All visible questions that has input(s) widgets.\n * @see getQuizQuestionCount\n */\n SurveyModel.prototype.getQuizQuestions = function () {\n var result = new Array();\n var startIndex = this.firstPageIsStarted ? 1 : 0;\n for (var i = startIndex; i < this.pages.length; i++) {\n if (!this.pages[i].isVisible)\n continue;\n var questions = this.pages[i].questions;\n for (var j = 0; j < questions.length; j++) {\n var q = questions[j];\n if (q.quizQuestionCount > 0) {\n result.push(q);\n }\n }\n }\n return result;\n };\n /**\n * Returns a panel by its name.\n * @param name a panel name\n * @param caseInsensitive\n * @see getQuestionByName\n */\n SurveyModel.prototype.getPanelByName = function (name, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var panels = this.getAllPanels();\n if (caseInsensitive)\n name = name.toLowerCase();\n for (var i = 0; i < panels.length; i++) {\n var panelName = panels[i].name;\n if (caseInsensitive)\n panelName = panelName.toLowerCase();\n if (panelName == name)\n return panels[i];\n }\n return null;\n };\n /**\n * Returns a list of all survey's panels.\n */\n SurveyModel.prototype.getAllPanels = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].addPanelsIntoList(result, visibleOnly, includingDesignTime);\n }\n return result;\n };\n /**\n * Creates and returns a new page, but do not add it into the survey.\n * You can use addPage(page) function to add it into survey later.\n * @see addPage\n * @see addNewPage\n */\n SurveyModel.prototype.createNewPage = function (name) {\n return new _page__WEBPACK_IMPORTED_MODULE_4__[\"PageModel\"](name);\n };\n SurveyModel.prototype.questionOnValueChanging = function (valueName, newValue) {\n if (this.onValueChanging.isEmpty)\n return newValue;\n var options = {\n name: valueName,\n question: this.getQuestionByValueName(valueName),\n value: this.getUnbindValue(newValue),\n oldValue: this.getValue(valueName),\n };\n this.onValueChanging.fire(this, options);\n return options.value;\n };\n SurveyModel.prototype.updateQuestionValue = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueName(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n var qValue = questions[i].value;\n if ((qValue === newValue && Array.isArray(qValue) && !!this.editingObj) ||\n !this.isTwoValueEquals(qValue, newValue)) {\n questions[i].updateValueFromSurvey(newValue);\n }\n }\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChanged = function (question) {\n if (!this.isNavigationButtonPressed &&\n (this.checkErrorsMode === \"onValueChanged\" ||\n question.getAllErrors().length > 0)) {\n this.checkQuestionErrorOnValueChangedCore(question);\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChangedCore = function (question) {\n var oldErrorCount = question.getAllErrors().length;\n var res = question.hasErrors(true, {\n isOnValueChanged: !this.isValidateOnValueChanging,\n });\n if (!!question.page &&\n (oldErrorCount > 0 || question.getAllErrors().length > 0)) {\n this.fireValidatedErrorsOnPage(question.page);\n }\n return res;\n };\n SurveyModel.prototype.checkErrorsOnValueChanging = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return false;\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return false;\n var res = false;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (!this.isTwoValueEquals(q.valueForSurvey, newValue)) {\n q.value = newValue;\n }\n if (this.checkQuestionErrorOnValueChangedCore(q))\n res = true;\n res = res || q.errors.length > 0;\n }\n return res;\n };\n SurveyModel.prototype.notifyQuestionOnValueChanged = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueName(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n this.checkQuestionErrorOnValueChanged(question);\n question.onSurveyValueChanged(newValue);\n this.onValueChanged.fire(this, {\n name: valueName,\n question: question,\n value: newValue,\n });\n }\n }\n else {\n this.onValueChanged.fire(this, {\n name: valueName,\n question: null,\n value: newValue,\n });\n }\n if (this.isDisposed)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].checkBindings(valueName, newValue);\n }\n this.notifyElementsOnAnyValueOrVariableChanged(valueName);\n };\n SurveyModel.prototype.notifyElementsOnAnyValueOrVariableChanged = function (name) {\n if (this.isEndLoadingFromJson === \"processing\")\n return;\n if (this.isRunningConditions) {\n this.conditionNotifyElementsOnAnyValueOrVariableChanged = true;\n return;\n }\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].onAnyValueChanged(name);\n }\n if (!this.isEndLoadingFromJson) {\n this.locStrsChanged();\n }\n };\n SurveyModel.prototype.updateAllQuestionsValue = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var valName = q.getValueName();\n q.updateValueFromSurvey(this.getValue(valName));\n if (q.requireUpdateCommentValue) {\n q.updateCommentFromSurvey(this.getComment(valName));\n }\n }\n };\n SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].onSurveyValueChanged(this.getValue(questions[i].getValueName()));\n }\n };\n SurveyModel.prototype.checkOnPageTriggers = function () {\n var questions = this.getCurrentPageQuestions(true);\n var values = {};\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n var name = question.getValueName();\n values[name] = this.getValue(name);\n }\n this.addCalculatedValuesIntoFilteredValues(values);\n this.checkTriggers(values, true);\n };\n SurveyModel.prototype.getCurrentPageQuestions = function (includeInvsible) {\n if (includeInvsible === void 0) { includeInvsible = false; }\n var result = [];\n var page = this.currentPage;\n if (!page)\n return result;\n for (var i = 0; i < page.questions.length; i++) {\n var question = page.questions[i];\n if ((!includeInvsible && !question.visible) || !question.name)\n continue;\n result.push(question);\n }\n return result;\n };\n SurveyModel.prototype.checkTriggers = function (key, isOnNextPage) {\n if (this.isCompleted || this.triggers.length == 0)\n return;\n if (this.isTriggerIsRunning) {\n this.triggerValues = this.getFilteredValues();\n for (var k in key) {\n this.triggerKeys[k] = key[k];\n }\n return;\n }\n this.isTriggerIsRunning = true;\n this.triggerKeys = key;\n this.triggerValues = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n for (var i = 0; i < this.triggers.length; i++) {\n var trigger = this.triggers[i];\n if (trigger.isOnNextPage == isOnNextPage) {\n trigger.checkExpression(this.triggerKeys, this.triggerValues, properties);\n }\n }\n this.isTriggerIsRunning = false;\n };\n SurveyModel.prototype.doElementsOnLoad = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].onSurveyLoad();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"isRunningConditions\", {\n get: function () {\n return !!this.conditionValues;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.runConditions = function () {\n if (this.isCompleted ||\n this.isEndLoadingFromJson === \"processing\" ||\n this.isRunningConditions)\n return;\n this.conditionValues = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n var oldCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n this.runConditionsCore(properties);\n this.checkIfNewPagesBecomeVisible(oldCurrentPageIndex);\n this.conditionValues = null;\n if (this.isValueChangedOnRunningCondition &&\n this.conditionRunnerCounter <\n _settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].maximumConditionRunCountOnValueChanged) {\n this.isValueChangedOnRunningCondition = false;\n this.conditionRunnerCounter++;\n this.runConditions();\n }\n else {\n this.isValueChangedOnRunningCondition = false;\n this.conditionRunnerCounter = 0;\n if (this.conditionUpdateVisibleIndexes) {\n this.conditionUpdateVisibleIndexes = false;\n this.updateVisibleIndexes();\n }\n if (this.conditionNotifyElementsOnAnyValueOrVariableChanged) {\n this.conditionNotifyElementsOnAnyValueOrVariableChanged = false;\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n }\n }\n };\n SurveyModel.prototype.runConditionOnValueChanged = function (name, value) {\n if (this.isRunningConditions) {\n this.conditionValues[name] = value;\n this.isValueChangedOnRunningCondition = true;\n }\n else {\n this.runConditions();\n }\n };\n SurveyModel.prototype.runConditionsCore = function (properties) {\n var pages = this.pages;\n for (var i = 0; i < this.calculatedValues.length; i++) {\n this.calculatedValues[i].resetCalculation();\n }\n for (var i = 0; i < this.calculatedValues.length; i++) {\n this.calculatedValues[i].doCalculation(this.calculatedValues, this.conditionValues, properties);\n }\n for (var i = 0; i < pages.length; i++) {\n pages[i].runCondition(this.conditionValues, properties);\n }\n };\n SurveyModel.prototype.checkIfNewPagesBecomeVisible = function (oldCurrentPageIndex) {\n var newCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n if (newCurrentPageIndex <= oldCurrentPageIndex + 1)\n return;\n for (var i = oldCurrentPageIndex + 1; i < newCurrentPageIndex; i++) {\n if (this.pages[i].isVisible) {\n this.currentPage = this.pages[i];\n break;\n }\n }\n };\n /**\n * Sends a survey result to the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @param postId [api.surveyjs.io](https://api.surveyjs.io) service postId\n * @param clientId Typically a customer e-mail or an identifier\n * @param isPartialCompleted Set it to `true` if the survey is not completed yet and the results are intermediate\n * @see surveyPostId\n * @see clientId\n */\n SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) {\n if (postId === void 0) { postId = null; }\n if (clientId === void 0) { clientId = null; }\n if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n if (!this.isEditMode)\n return;\n if (isPartialCompleted && this.onPartialSend) {\n this.onPartialSend.fire(this, null);\n }\n if (!postId && this.surveyPostId) {\n postId = this.surveyPostId;\n }\n if (!postId)\n return;\n if (clientId) {\n this.clientId = clientId;\n }\n if (isPartialCompleted && !this.clientId)\n return;\n var self = this;\n if (this.surveyShowDataSaving) {\n this.setCompletedState(\"saving\", \"\");\n }\n this.createSurveyService().sendResult(postId, this.data, function (success, response, request) {\n if (self.surveyShowDataSaving) {\n if (success) {\n self.setCompletedState(\"success\", \"\");\n }\n else {\n self.setCompletedState(\"error\", response);\n }\n }\n self.onSendResult.fire(self, {\n success: success,\n response: response,\n request: request,\n });\n }, this.clientId, isPartialCompleted);\n };\n /**\n * Calls the [api.surveyjs.io](https://api.surveyjs.io) service and, on callback, fires the `onGetResult` event with all answers that your users made for a question.\n * @param resultId [api.surveyjs.io](https://api.surveyjs.io) service resultId\n * @param name The question name\n * @see onGetResult\n */\n SurveyModel.prototype.getResult = function (resultId, name) {\n var self = this;\n this.createSurveyService().getResult(resultId, name, function (success, data, dataList, response) {\n self.onGetResult.fire(self, {\n success: success,\n data: data,\n dataList: dataList,\n response: response,\n });\n });\n };\n /**\n * Loads the survey JSON from the [api.surveyjs.io](https://api.surveyjs.io) service.\n * If `clientId` is not `null` and a user had completed a survey before, the survey switches to `completedbefore` state.\n * @param surveyId [api.surveyjs.io](https://api.surveyjs.io) service surveyId\n * @param clientId users' indentifier, for example an e-mail or a unique customer id in your web application.\n * @see state\n * @see onLoadedSurveyFromService\n */\n SurveyModel.prototype.loadSurveyFromService = function (surveyId, cliendId) {\n if (surveyId === void 0) { surveyId = null; }\n if (cliendId === void 0) { cliendId = null; }\n if (surveyId) {\n this.surveyId = surveyId;\n }\n if (cliendId) {\n this.clientId = cliendId;\n }\n var self = this;\n this.isLoading = true;\n this.onLoadingSurveyFromService();\n if (cliendId) {\n this.createSurveyService().getSurveyJsonAndIsCompleted(this.surveyId, this.clientId, function (success, json, isCompleted, response) {\n self.isLoading = false;\n if (success) {\n self.isCompletedBefore = isCompleted == \"completed\";\n self.loadSurveyFromServiceJson(json);\n }\n });\n }\n else {\n this.createSurveyService().loadSurvey(this.surveyId, function (success, result, response) {\n self.isLoading = false;\n if (success) {\n self.loadSurveyFromServiceJson(result);\n }\n });\n }\n };\n SurveyModel.prototype.loadSurveyFromServiceJson = function (json) {\n if (!json)\n return;\n this.fromJSON(json);\n this.notifyAllQuestionsOnValueChanged();\n this.onLoadSurveyFromService();\n this.onLoadedSurveyFromService.fire(this, {});\n };\n SurveyModel.prototype.onLoadingSurveyFromService = function () { };\n SurveyModel.prototype.onLoadSurveyFromService = function () { };\n SurveyModel.prototype.resetVisibleIndexes = function () {\n var questions = this.getAllQuestions(true);\n for (var i = 0; i < questions.length; i++) {\n questions[i].setVisibleIndex(-1);\n }\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.updateVisibleIndexes = function () {\n if (this.isLoadingFromJson || !!this.isEndLoadingFromJson)\n return;\n if (this.isRunningConditions &&\n this.onVisibleChanged.isEmpty &&\n this.onPageVisibleChanged.isEmpty) {\n //Run update visible index only one time on finishing running conditions\n this.conditionUpdateVisibleIndexes = true;\n return;\n }\n this.updatePageVisibleIndexes(this.showPageNumbers);\n if (this.showQuestionNumbers == \"onPage\") {\n var visPages = this.visiblePages;\n for (var i = 0; i < visPages.length; i++) {\n visPages[i].setVisibleIndex(0);\n }\n }\n else {\n var index = this.showQuestionNumbers == \"on\" ? 0 : -1;\n for (var i = 0; i < this.pages.length; i++) {\n index += this.pages[i].setVisibleIndex(index);\n }\n }\n this.updateProgressText(true);\n };\n SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) {\n var index = 0;\n for (var i = 0; i < this.pages.length; i++) {\n var isPageVisible = this.pages[i].isVisible;\n this.pages[i].visibleIndex = isPageVisible ? index++ : -1;\n this.pages[i].num =\n showIndex && isPageVisible ? this.pages[i].visibleIndex + 1 : -1;\n }\n };\n SurveyModel.prototype.fromJSON = function (json) {\n if (!json)\n return;\n this.questionHashesClear();\n this.jsonErrors = null;\n var jsonConverter = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]();\n jsonConverter.toObject(json, this);\n if (jsonConverter.errors.length > 0) {\n this.jsonErrors = jsonConverter.errors;\n }\n };\n SurveyModel.prototype.setJsonObject = function (jsonObj) {\n this.fromJSON(jsonObj);\n };\n SurveyModel.prototype.endLoadingFromJson = function () {\n this.isEndLoadingFromJson = \"processing\";\n this.isStartedState = this.firstPageIsStarted;\n this.onQuestionsOnPageModeChanged(\"standard\");\n _super.prototype.endLoadingFromJson.call(this);\n if (this.hasCookie) {\n this.doComplete();\n }\n this.doElementsOnLoad();\n this.isEndLoadingFromJson = \"conditions\";\n this.runConditions();\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n this.isEndLoadingFromJson = null;\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.onBeforeCreating = function () { };\n SurveyModel.prototype.onCreating = function () { };\n SurveyModel.prototype.getProcessedTextValue = function (textValue) {\n this.getProcessedTextValueCore(textValue);\n if (!this.onProcessTextValue.isEmpty) {\n var wasEmpty = this.isValueEmpty(textValue.value);\n this.onProcessTextValue.fire(this, textValue);\n textValue.isExists =\n textValue.isExists || (wasEmpty && !this.isValueEmpty(textValue.value));\n }\n };\n SurveyModel.prototype.getProcessedTextValueCore = function (textValue) {\n var name = textValue.name.toLocaleLowerCase();\n if ([\"no\", \"require\", \"title\"].indexOf(name) !== -1) {\n return;\n }\n if (name === \"pageno\") {\n textValue.isExists = true;\n var page = this.currentPage;\n textValue.value = page != null ? this.visiblePages.indexOf(page) + 1 : 0;\n return;\n }\n if (name === \"pagecount\") {\n textValue.isExists = true;\n textValue.value = this.visiblePageCount;\n return;\n }\n if (name === \"locale\") {\n textValue.isExists = true;\n textValue.value = !!this.locale\n ? this.locale\n : _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale;\n return;\n }\n if (name === \"correctedanswers\" || name === \"correctedanswercount\") {\n textValue.isExists = true;\n textValue.value = this.getCorrectedAnswerCount();\n return;\n }\n if (name === \"incorrectedanswers\" || name === \"incorrectedanswercount\") {\n textValue.isExists = true;\n textValue.value = this.getInCorrectedAnswerCount();\n return;\n }\n if (name === \"questioncount\") {\n textValue.isExists = true;\n textValue.value = this.getQuizQuestionCount();\n return;\n }\n var variable = this.getVariable(name);\n if (variable !== undefined) {\n textValue.isExists = true;\n textValue.value = variable;\n return;\n }\n var question = this.getFirstName(name);\n if (question) {\n textValue.isExists = true;\n var firstName = question.getValueName().toLowerCase();\n name = firstName + name.substr(firstName.length);\n name = name.toLocaleLowerCase();\n var values = {};\n values[firstName] = textValue.returnDisplayValue\n ? question.getDisplayValue(false, undefined)\n : question.value;\n textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]().getValue(name, values);\n return;\n }\n var value = this.getValue(textValue.name);\n if (value !== undefined) {\n textValue.isExists = true;\n textValue.value = value;\n }\n };\n SurveyModel.prototype.getFirstName = function (name) {\n name = name.toLowerCase();\n var question;\n do {\n question = this.getQuestionByValueName(name, true);\n name = this.reduceFirstName(name);\n } while (!question && !!name);\n return question;\n };\n SurveyModel.prototype.reduceFirstName = function (name) {\n var pos1 = name.lastIndexOf(\".\");\n var pos2 = name.lastIndexOf(\"[\");\n if (pos1 < 0 && pos2 < 0)\n return \"\";\n var pos = Math.max(pos1, pos2);\n return name.substr(0, pos);\n };\n SurveyModel.prototype.clearUnusedValues = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearUnusedValues();\n }\n if (this.clearInvisibleValues != \"none\") {\n this.clearInvisibleQuestionValues();\n }\n };\n SurveyModel.prototype.hasVisibleQuestionByValueName = function (valueName) {\n var questions = this.getQuestionsByValueName(valueName);\n if (!questions)\n return false;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isVisible)\n return true;\n }\n return false;\n };\n SurveyModel.prototype.questionCountByValueName = function (valueName) {\n var questions = this.getQuestionsByValueName(valueName);\n return !!questions ? questions.length : 0;\n };\n SurveyModel.prototype.clearInvisibleQuestionValues = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValueIfInvisible();\n }\n };\n /**\n * Returns a variable value. Variable, unlike values, are not stored in the survey results.\n * @param name A variable name\n * @see SetVariable\n */\n SurveyModel.prototype.getVariable = function (name) {\n if (!name)\n return null;\n name = name.toLowerCase();\n var res = this.variablesHash[name];\n if (!this.isValueEmpty(res))\n return res;\n if (name.indexOf(\".\") > -1 || name.indexOf(\"[\") > -1) {\n if (new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]().hasValue(name, this.variablesHash))\n return new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]().getValue(name, this.variablesHash);\n }\n return res;\n };\n /**\n * Sets a variable value. Variable, unlike values, are not stored in the survey results.\n * @param name A variable name\n * @param newValue A variable new value\n * @see GetVariable\n */\n SurveyModel.prototype.setVariable = function (name, newValue) {\n if (!name)\n return;\n name = name.toLowerCase();\n this.variablesHash[name] = newValue;\n this.notifyElementsOnAnyValueOrVariableChanged(name);\n this.runConditionOnValueChanged(name, newValue);\n };\n /**\n * Returns all variables in the survey. Use setVariable function to create a new variable.\n * @see getVariable\n * @see setVariable\n */\n SurveyModel.prototype.getVariableNames = function () {\n var res = [];\n for (var key in this.variablesHash) {\n res.push(key);\n }\n return res;\n };\n //ISurvey data\n SurveyModel.prototype.getUnbindValue = function (value) {\n if (!!this.editingObj)\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n };\n /**\n * Returns a question value (answer) by a question's name.\n * @param name A question name\n * @see data\n * @see setValue\n */\n SurveyModel.prototype.getValue = function (name) {\n if (!name || name.length == 0)\n return null;\n var value = this.getDataValueCore(this.valuesHash, name);\n return this.getUnbindValue(value);\n };\n /**\n * Sets a question value (answer). It runs all triggers and conditions (`visibleIf` properties).\n *\n * Goes to the next page if `goNextPageAutomatic` is `true` and all questions on the current page are answered correctly.\n * @param name A question name\n * @param newValue A new question value\n * @see data\n * @see getValue\n * @see PageModel.visibleIf\n * @see Question.visibleIf\n * @see goNextPageAutomatic\n */\n SurveyModel.prototype.setValue = function (name, newQuestionValue, locNotification, allowNotifyValueChanged) {\n if (locNotification === void 0) { locNotification = false; }\n if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n var newValue = newQuestionValue;\n if (allowNotifyValueChanged) {\n newValue = this.questionOnValueChanging(name, newQuestionValue);\n }\n if (this.isValidateOnValueChanging &&\n this.checkErrorsOnValueChanging(name, newValue))\n return;\n if (!this.editingObj &&\n this.isValueEqual(name, newValue) &&\n this.isTwoValueEquals(newValue, newQuestionValue))\n return;\n var oldValue = this.getValue(name);\n if (this.isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, name);\n }\n else {\n newValue = this.getUnbindValue(newValue);\n this.setDataValueCore(this.valuesHash, name, newValue);\n }\n this.updateOnSetValue(name, newValue, oldValue, locNotification, allowNotifyValueChanged);\n };\n SurveyModel.prototype.updateOnSetValue = function (name, newValue, oldValue, locNotification, allowNotifyValueChanged) {\n if (locNotification === void 0) { locNotification = false; }\n if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n this.updateQuestionValue(name, newValue);\n if (locNotification === true || this.isDisposed)\n return;\n var triggerKeys = {};\n triggerKeys[name] = { newValue: newValue, oldValue: oldValue };\n this.runConditionOnValueChanged(name, newValue);\n this.checkTriggers(triggerKeys, false);\n if (allowNotifyValueChanged)\n this.notifyQuestionOnValueChanged(name, newValue);\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n this.updateProgressText(true);\n };\n SurveyModel.prototype.isValueEqual = function (name, newValue) {\n if (newValue === \"\" || newValue === undefined)\n newValue = null;\n var oldValue = this.getValue(name);\n if (oldValue === \"\" || oldValue === undefined)\n oldValue = null;\n if (newValue === null || oldValue === null)\n return newValue === oldValue;\n return this.isTwoValueEquals(newValue, oldValue);\n };\n SurveyModel.prototype.doOnPageAdded = function (page) {\n page.setSurveyImpl(this);\n if (!page.name)\n page.name = this.generateNewName(this.pages, \"page\");\n this.questionHashesPanelAdded(page);\n this.updateVisibleIndexes();\n if (this.isDesignMode) {\n this.updateProgressText();\n }\n var options = { page: page };\n this.onPageAdded.fire(this, options);\n };\n SurveyModel.prototype.doOnPageRemoved = function (page) {\n page.setSurveyImpl(null);\n this.updateVisibleIndexes();\n if (this.isDesignMode) {\n this.updateProgressText();\n }\n };\n SurveyModel.prototype.generateNewName = function (elements, baseName) {\n var keys = {};\n for (var i = 0; i < elements.length; i++)\n keys[elements[i][\"name\"]] = true;\n var index = 1;\n while (keys[baseName + index])\n index++;\n return baseName + index;\n };\n SurveyModel.prototype.tryGoNextPageAutomatic = function (name) {\n if (!!this.isEndLoadingFromJson ||\n !this.goNextPageAutomatic ||\n !this.currentPage)\n return;\n var question = this.getQuestionByValueName(name);\n if (!question ||\n (!!question &&\n (!question.visible || !question.supportGoNextPageAutomatic())))\n return;\n if (question.hasErrors(false) && !question.supportGoNextPageError())\n return;\n var questions = this.getCurrentPageQuestions();\n if (questions.indexOf(question) < 0)\n return;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].hasInput && questions[i].isEmpty())\n return;\n }\n if (!this.checkIsCurrentPageHasErrors(false)) {\n if (!this.isLastPage) {\n this.nextPage();\n }\n else {\n if (this.goNextPageAutomatic === true &&\n this.allowCompleteSurveyAutomatic) {\n this.completeLastPage();\n }\n }\n }\n };\n /**\n * Returns the comment value.\n * @param name A comment's name.\n * @see setComment\n */\n SurveyModel.prototype.getComment = function (name) {\n var result = this.data[name + this.commentPrefix];\n if (result == null)\n result = \"\";\n return result;\n };\n /**\n * Sets a comment value.\n * @param name A comment name.\n * @param newValue A new comment value.\n * @see getComment\n */\n SurveyModel.prototype.setComment = function (name, newValue, locNotification) {\n if (locNotification === void 0) { locNotification = false; }\n if (!newValue)\n newValue = \"\";\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(newValue, this.getComment(name)))\n return;\n var commentName = name + this.commentPrefix;\n if (this.isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, commentName);\n }\n else {\n this.setDataValueCore(this.valuesHash, commentName, newValue);\n }\n var questions = this.getQuestionsByValueName(name);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n questions[i].updateCommentFromSurvey(newValue);\n this.checkQuestionErrorOnValueChanged(questions[i]);\n }\n }\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n var question = this.getQuestionByName(name);\n if (question) {\n this.onValueChanged.fire(this, {\n name: commentName,\n question: question,\n value: newValue,\n });\n }\n };\n /**\n * Removes a value from the survey results.\n * @param {string} name The name of the value. Typically it is a question name.\n */\n SurveyModel.prototype.clearValue = function (name) {\n this.setValue(name, null);\n this.setComment(name, null);\n };\n Object.defineProperty(SurveyModel.prototype, \"clearValueOnDisableItems\", {\n /**\n * Gets or sets whether to clear value on disable items in checkbox, dropdown and radiogroup questions.\n * By default, values are not cleared on disabled the corresponded items. This property is not persisted in survey JSON and you have to set it in code.\n */\n get: function () {\n return this.getPropertyValue(\"clearValueOnDisableItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"clearValueOnDisableItems\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isClearValueOnHidden\", {\n get: function () {\n return (this.clearInvisibleValues == \"onHidden\" ||\n this.isClearValueOnHiddenContainer);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isClearValueOnHiddenContainer\", {\n get: function () {\n return (this.clearInvisibleValues == \"onHiddenContainer\" &&\n !this.isShowingPreview &&\n !this.runningPages);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) {\n this.updateVisibleIndexes();\n this.onVisibleChanged.fire(this, {\n question: question,\n name: question.name,\n visible: newValue,\n });\n };\n SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) {\n if (this.isLoadingFromJson)\n return;\n if (newValue && !this.currentPageValue) {\n this.currentPageValue = this.currentPage;\n }\n this.updateVisibleIndexes();\n this.onPageVisibleChanged.fire(this, {\n page: page,\n visible: newValue,\n });\n };\n SurveyModel.prototype.panelVisibilityChanged = function (panel, newValue) {\n this.updateVisibleIndexes();\n this.onPanelVisibleChanged.fire(this, {\n panel: panel,\n visible: newValue,\n });\n };\n SurveyModel.prototype.questionCreated = function (question) {\n this.onQuestionCreated.fire(this, { question: question });\n };\n SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) {\n if (!question.name) {\n question.name = this.generateNewName(this.getAllQuestions(false, true), \"question\");\n }\n if (!!question.page) {\n this.questionHashesAdded(question);\n }\n this.updateVisibleIndexes();\n this.onQuestionAdded.fire(this, {\n question: question,\n name: question.name,\n index: index,\n parentPanel: parentPanel,\n rootPanel: rootPanel,\n });\n };\n SurveyModel.prototype.questionRemoved = function (question) {\n this.questionHashesRemoved(question, question.name, question.getValueName());\n this.updateVisibleIndexes();\n this.onQuestionRemoved.fire(this, {\n question: question,\n name: question.name,\n });\n };\n SurveyModel.prototype.questionRenamed = function (question, oldName, oldValueName) {\n this.questionHashesRemoved(question, oldName, oldValueName);\n this.questionHashesAdded(question);\n };\n SurveyModel.prototype.questionHashesClear = function () {\n this.questionHashes.names = {};\n this.questionHashes.namesInsensitive = {};\n this.questionHashes.valueNames = {};\n this.questionHashes.valueNamesInsensitive = {};\n };\n SurveyModel.prototype.questionHashesPanelAdded = function (panel) {\n if (this.isLoadingFromJson)\n return;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n this.questionHashesAdded(questions[i]);\n }\n };\n SurveyModel.prototype.questionHashesAdded = function (question) {\n this.questionHashAddedCore(this.questionHashes.names, question, question.name);\n this.questionHashAddedCore(this.questionHashes.namesInsensitive, question, question.name.toLowerCase());\n this.questionHashAddedCore(this.questionHashes.valueNames, question, question.getValueName());\n this.questionHashAddedCore(this.questionHashes.valueNamesInsensitive, question, question.getValueName().toLowerCase());\n };\n SurveyModel.prototype.questionHashesRemoved = function (question, name, valueName) {\n if (!!name) {\n this.questionHashRemovedCore(this.questionHashes.names, question, name);\n this.questionHashRemovedCore(this.questionHashes.namesInsensitive, question, name.toLowerCase());\n }\n if (!!valueName) {\n this.questionHashRemovedCore(this.questionHashes.valueNames, question, valueName);\n this.questionHashRemovedCore(this.questionHashes.valueNamesInsensitive, question, valueName.toLowerCase());\n }\n };\n SurveyModel.prototype.questionHashAddedCore = function (hash, question, name) {\n var res = hash[name];\n if (!!res) {\n var res = hash[name];\n if (res.indexOf(question) < 0) {\n res.push(question);\n }\n }\n else {\n hash[name] = [question];\n }\n };\n SurveyModel.prototype.questionHashRemovedCore = function (hash, question, name) {\n var res = hash[name];\n if (!res)\n return;\n var index = res.indexOf(question);\n if (index > -1) {\n res.splice(index, 1);\n }\n if (res.length == 0) {\n delete hash[name];\n }\n };\n SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) {\n if (!panel.name) {\n panel.name = this.generateNewName(this.getAllPanels(false, true), \"panel\");\n }\n this.questionHashesPanelAdded(panel);\n this.updateVisibleIndexes();\n this.onPanelAdded.fire(this, {\n panel: panel,\n name: panel.name,\n index: index,\n parentPanel: parentPanel,\n rootPanel: rootPanel,\n });\n };\n SurveyModel.prototype.panelRemoved = function (panel) {\n this.updateVisibleIndexes();\n this.onPanelRemoved.fire(this, { panel: panel, name: panel.name });\n };\n SurveyModel.prototype.validateQuestion = function (question) {\n if (this.onValidateQuestion.isEmpty)\n return null;\n var options = {\n name: question.name,\n question: question,\n value: question.value,\n error: null,\n };\n this.onValidateQuestion.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.validatePanel = function (panel) {\n if (this.onValidatePanel.isEmpty)\n return null;\n var options = {\n name: panel.name,\n panel: panel,\n error: null,\n };\n this.onValidatePanel.fire(this, options);\n return options.error ? new _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"](options.error, this) : null;\n };\n SurveyModel.prototype.processHtml = function (html) {\n var options = { html: html };\n this.onProcessHtml.fire(this, options);\n return this.processText(options.html, true);\n };\n SurveyModel.prototype.processText = function (text, returnDisplayValue) {\n return this.processTextEx(text, returnDisplayValue, false).text;\n };\n SurveyModel.prototype.processTextEx = function (text, returnDisplayValue, doEncoding) {\n var res = {\n text: this.processTextCore(text, returnDisplayValue, doEncoding),\n hasAllValuesOnLastRun: true,\n };\n res.hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n return res;\n };\n SurveyModel.prototype.processTextCore = function (text, returnDisplayValue, doEncoding) {\n if (doEncoding === void 0) { doEncoding = false; }\n if (this.isDesignMode)\n return text;\n return this.textPreProcessor.process(text, returnDisplayValue, doEncoding);\n };\n SurveyModel.prototype.getSurveyMarkdownHtml = function (element, text, name) {\n var options = {\n element: element,\n text: text,\n name: name,\n html: null,\n };\n this.onTextMarkdown.fire(this, options);\n return options.html;\n };\n /**\n * Returns an amount of corrected quiz answers.\n */\n SurveyModel.prototype.getCorrectedAnswerCount = function () {\n return this.getCorrectedAnswerCountCore(true);\n };\n /**\n * Returns quiz question number. It may be different from `getQuizQuestions.length` because some widgets like matrix may have several questions.\n * @see getQuizQuestions\n */\n SurveyModel.prototype.getQuizQuestionCount = function () {\n var questions = this.getQuizQuestions();\n var res = 0;\n for (var i = 0; i < questions.length; i++) {\n res += questions[i].quizQuestionCount;\n }\n return res;\n };\n /**\n * Returns an amount of incorrect quiz answers.\n */\n SurveyModel.prototype.getInCorrectedAnswerCount = function () {\n return this.getCorrectedAnswerCountCore(false);\n };\n SurveyModel.prototype.getCorrectedAnswerCountCore = function (isCorrect) {\n var questions = this.getQuizQuestions();\n var counter = 0;\n var options = {\n question: null,\n result: false,\n correctAnswers: 0,\n incorrectAnswers: 0,\n };\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var quizQuestionCount = q.quizQuestionCount;\n options.question = q;\n options.correctAnswers = q.correctAnswerCount;\n options.incorrectAnswers = quizQuestionCount - options.correctAnswers;\n options.result = options.question.isAnswerCorrect();\n this.onIsAnswerCorrect.fire(this, options);\n if (isCorrect) {\n if (options.result || options.correctAnswers < quizQuestionCount) {\n var addCount = options.correctAnswers;\n if (addCount == 0 && options.result)\n addCount = 1;\n counter += addCount;\n }\n }\n else {\n if (!options.result || options.incorrectAnswers < quizQuestionCount) {\n counter += options.incorrectAnswers;\n }\n }\n }\n return counter;\n };\n SurveyModel.prototype.getCorrectedAnswers = function () {\n return this.getCorrectedAnswerCount();\n };\n SurveyModel.prototype.getInCorrectedAnswers = function () {\n return this.getInCorrectedAnswerCount();\n };\n Object.defineProperty(SurveyModel.prototype, \"showTimerPanel\", {\n /**\n * Gets or sets a timer panel position. The timer panel displays information about how much time an end user spends on a survey/page.\n *\n * The available options:\n * - `top` - display timer panel in the top.\n * - `bottom` - display timer panel in the bottom.\n * - `none` - do not display a timer panel.\n *\n * If the value is not equal to 'none', the survey calls the `startTimer()` method on survey rendering.\n * @see showTimerPanelMode\n * @see startTimer\n * @see stopTimer\n */\n get: function () {\n return this.getPropertyValue(\"showTimerPanel\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanel\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnTop\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"top\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnBottom\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"bottom\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showTimerPanelMode\", {\n /**\n * Gets or set a value that specifies whether the timer displays information for the page or for the entire survey.\n *\n * The available options:\n *\n * - `page` - show timer information for page\n * - `survey` - show timer information for survey\n *\n * Use the `onTimerPanelInfoText` event to change the default text.\n * @see showTimerPanel\n * @see onTimerPanelInfoText\n */\n get: function () {\n return this.getPropertyValue(\"showTimerPanelMode\", \"all\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanelMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"timerInfoText\", {\n get: function () {\n var options = { text: this.getTimerInfoText() };\n this.onTimerPanelInfoText.fire(this, options);\n var loc = new _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"](this, true);\n loc.text = options.text;\n return loc.textOrHtml;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getTimerInfoText = function () {\n var page = this.currentPage;\n if (!page)\n return \"\";\n var pageSpent = this.getDisplayTime(page.timeSpent);\n var surveySpent = this.getDisplayTime(this.timeSpent);\n var pageLimitSec = this.getPageMaxTimeToFinish(page);\n var pageLimit = this.getDisplayTime(pageLimitSec);\n var surveyLimit = this.getDisplayTime(this.maxTimeToFinish);\n if (this.showTimerPanelMode == \"page\")\n return this.getTimerInfoPageText(page, pageSpent, pageLimit);\n if (this.showTimerPanelMode == \"survey\")\n return this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n if (this.showTimerPanelMode == \"all\") {\n if (pageLimitSec <= 0 && this.maxTimeToFinish <= 0) {\n return this.getLocString(\"timerSpentAll\")[\"format\"](pageSpent, surveySpent);\n }\n if (pageLimitSec > 0 && this.maxTimeToFinish > 0) {\n return this.getLocString(\"timerLimitAll\")[\"format\"](pageSpent, pageLimit, surveySpent, surveyLimit);\n }\n var pageText = this.getTimerInfoPageText(page, pageSpent, pageLimit);\n var surveyText = this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n return pageText + \" \" + surveyText;\n }\n return \"\";\n };\n SurveyModel.prototype.getTimerInfoPageText = function (page, pageSpent, pageLimit) {\n return this.getPageMaxTimeToFinish(page) > 0\n ? this.getLocString(\"timerLimitPage\")[\"format\"](pageSpent, pageLimit)\n : this.getLocString(\"timerSpentPage\")[\"format\"](pageSpent, pageLimit);\n };\n SurveyModel.prototype.getTimerInfoSurveyText = function (surveySpent, surveyLimit) {\n return this.maxTimeToFinish > 0\n ? this.getLocString(\"timerLimitSurvey\")[\"format\"](surveySpent, surveyLimit)\n : this.getLocString(\"timerSpentSurvey\")[\"format\"](surveySpent, surveyLimit);\n };\n SurveyModel.prototype.getDisplayTime = function (val) {\n var min = Math.floor(val / 60);\n var sec = val % 60;\n var res = \"\";\n if (min > 0) {\n res += min + \" \" + this.getLocString(\"timerMin\");\n }\n if (res && sec == 0)\n return res;\n if (res)\n res += \" \";\n return res + sec + \" \" + this.getLocString(\"timerSec\");\n };\n /**\n * Starts a timer that will calculate how much time end-user spends on the survey or on pages.\n * @see stopTimer\n * @see timeSpent\n */\n SurveyModel.prototype.startTimer = function () {\n if (this.isTimerStarted || this.isDesignMode)\n return;\n var self = this;\n this.timerFunc = function () {\n self.doTimer();\n };\n this.isTimerStarted = true;\n _surveytimer__WEBPACK_IMPORTED_MODULE_12__[\"SurveyTimer\"].instance.start(this.timerFunc);\n };\n SurveyModel.prototype.startTimerFromUI = function () {\n if (this.showTimerPanel != \"none\" && this.state === \"running\") {\n this.startTimer();\n }\n };\n /**\n * Stops the timer.\n * @see startTimer\n * @see timeSpent\n */\n SurveyModel.prototype.stopTimer = function () {\n if (!this.isTimerStarted)\n return;\n this.isTimerStarted = false;\n _surveytimer__WEBPACK_IMPORTED_MODULE_12__[\"SurveyTimer\"].instance.stop(this.timerFunc);\n };\n Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinish\", {\n /**\n * Gets or sets the maximum time in seconds that end user has to complete a survey. If the value is 0 or less, an end user has no time limit to finish a survey.\n * @see startTimer\n * @see maxTimeToFinishPage\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinish\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinish\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinishPage\", {\n /**\n * Gets or sets the maximum time in seconds that end user has to complete a page in the survey. If the value is 0 or less, an end user has no time limit.\n *\n * You may override this value for every page.\n * @see startTimer\n * @see maxTimeToFinish\n * @see PageModel.maxTimeToFinish\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinishPage\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinishPage\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getPageMaxTimeToFinish = function (page) {\n if (!page || page.maxTimeToFinish < 0)\n return 0;\n return page.maxTimeToFinish > 0\n ? page.maxTimeToFinish\n : this.maxTimeToFinishPage;\n };\n SurveyModel.prototype.doTimer = function () {\n var page = this.currentPage;\n if (page) {\n page.timeSpent = page.timeSpent + 1;\n }\n this.timeSpent = this.timeSpent + 1;\n this.onTimer.fire(this, {});\n if (this.maxTimeToFinish > 0 && this.maxTimeToFinish == this.timeSpent) {\n this.completeLastPage();\n }\n if (page) {\n var pageLimit = this.getPageMaxTimeToFinish(page);\n if (pageLimit > 0 && pageLimit == page.timeSpent) {\n if (this.isLastPage) {\n this.completeLastPage();\n }\n else {\n this.nextPage();\n }\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"inSurvey\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n //ISurveyImplementor\n SurveyModel.prototype.getSurveyData = function () {\n return this;\n };\n SurveyModel.prototype.getSurvey = function () {\n return this;\n };\n SurveyModel.prototype.getTextProcessor = function () {\n return this;\n };\n //ISurveyTriggerOwner\n SurveyModel.prototype.getObjects = function (pages, questions) {\n var result = [];\n Array.prototype.push.apply(result, this.getPagesByNames(pages));\n Array.prototype.push.apply(result, this.getQuestionsByNames(questions));\n return result;\n };\n SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) {\n if (!name)\n return;\n if (isVariable) {\n this.setVariable(name, value);\n }\n else {\n var question = this.getQuestionByName(name);\n if (!!question) {\n question.value = value;\n }\n else {\n var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]();\n var firstName = processor.getFirstName(name);\n if (firstName == name) {\n this.setValue(name, value);\n }\n else {\n if (!this.getQuestionByName(firstName))\n return;\n var data = this.getUnbindValue(this.getFilteredValues());\n processor.setValue(data, name, value);\n this.setValue(firstName, data[firstName]);\n }\n }\n }\n };\n SurveyModel.prototype.copyTriggerValue = function (name, fromName) {\n if (!name || !fromName)\n return;\n var processor = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_6__[\"ProcessValue\"]();\n var value = processor.getValue(fromName, this.getFilteredValues());\n this.setTriggerValue(name, value, false);\n };\n SurveyModel.prototype.focusQuestion = function (name) {\n var question = this.getQuestionByName(name, true);\n if (!question || !question.isVisible || !question.page)\n return false;\n this.currentPage = question.page;\n setTimeout(function () {\n question.focus(), 1;\n });\n return true;\n };\n SurveyModel.prototype.getRowWrapperComponentName = function (row) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getRowWrapperComponentData = function (row) {\n return row;\n };\n SurveyModel.prototype.getElementWrapperComponentName = function (element, reason) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getElementWrapperComponentData = function (element, reason) {\n return element;\n };\n SurveyModel.prototype.getItemValueWrapperComponentName = function (item, question) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getItemValueWrapperComponentData = function (item, question) {\n return item;\n };\n SurveyModel.prototype.getMatrixCellTemplateData = function (cell) {\n return cell.question;\n };\n SurveyModel.prototype.searchText = function (text) {\n if (!!text)\n text = text.toLowerCase();\n var res = [];\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].searchText(text, res);\n }\n return res;\n };\n /**\n * Use this method to dispose survey model properly.\n */\n SurveyModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.editingObj = null;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].dispose();\n }\n this.pages.splice(0, this.pages.length);\n this.currentPage = null;\n };\n SurveyModel.TemplateRendererComponentName = \"sv-template-renderer\";\n SurveyModel.stylesManager = null;\n SurveyModel.platform = \"unknown\";\n return SurveyModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"survey\", [\n {\n name: \"locale\",\n choices: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].getLocales(true);\n },\n onGetValue: function (obj) {\n return obj.locale == _surveyStrings__WEBPACK_IMPORTED_MODULE_8__[\"surveyLocalization\"].defaultLocale ? null : obj.locale;\n },\n },\n { name: \"title\", serializationProperty: \"locTitle\", dependsOn: \"locale\" },\n {\n name: \"description:text\",\n serializationProperty: \"locDescription\",\n dependsOn: \"locale\",\n },\n { name: \"logo\", serializationProperty: \"locLogo\" },\n { name: \"logoWidth\", default: \"300px\", minValue: 0 },\n { name: \"logoHeight\", default: \"200px\", minValue: 0 },\n {\n name: \"logoFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n {\n name: \"logoPosition\",\n default: \"left\",\n choices: [\"none\", \"left\", \"right\", \"top\", \"bottom\"],\n },\n { name: \"focusFirstQuestionAutomatic:boolean\", default: true },\n { name: \"focusOnFirstError:boolean\", default: true },\n { name: \"completedHtml:html\", serializationProperty: \"locCompletedHtml\" },\n {\n name: \"completedBeforeHtml:html\",\n serializationProperty: \"locCompletedBeforeHtml\",\n },\n {\n name: \"completedHtmlOnCondition:htmlconditions\",\n className: \"htmlconditionitem\",\n },\n { name: \"loadingHtml:html\", serializationProperty: \"locLoadingHtml\" },\n { name: \"pages:surveypages\", className: \"page\" },\n {\n name: \"questions\",\n alternativeName: \"elements\",\n baseClassName: \"question\",\n visible: false,\n isLightSerializable: false,\n onGetValue: function (obj) {\n return null;\n },\n onSetValue: function (obj, value, jsonConverter) {\n var page = obj.addNewPage(\"\");\n jsonConverter.toObject({ questions: value }, page);\n },\n },\n {\n name: \"triggers:triggers\",\n baseClassName: \"surveytrigger\",\n classNamePart: \"trigger\",\n },\n {\n name: \"calculatedValues:calculatedvalues\",\n className: \"calculatedvalue\",\n },\n { name: \"surveyId\", visible: false },\n { name: \"surveyPostId\", visible: false },\n { name: \"surveyShowDataSaving:boolean\", visible: false },\n \"cookieName\",\n \"sendResultOnPageNext:boolean\",\n {\n name: \"showNavigationButtons\",\n default: \"bottom\",\n choices: [\"none\", \"top\", \"bottom\", \"both\"],\n },\n { name: \"showPrevButton:boolean\", default: true },\n { name: \"showTitle:boolean\", default: true },\n { name: \"showPageTitles:boolean\", default: true },\n { name: \"showCompletedPage:boolean\", default: true },\n \"navigateToUrl\",\n {\n name: \"navigateToUrlOnCondition:urlconditions\",\n className: \"urlconditionitem\",\n },\n {\n name: \"questionsOrder\",\n default: \"initial\",\n choices: [\"initial\", \"random\"],\n },\n \"showPageNumbers:boolean\",\n {\n name: \"showQuestionNumbers\",\n default: \"on\",\n choices: [\"on\", \"onPage\", \"off\"],\n },\n {\n name: \"questionTitleLocation\",\n default: \"top\",\n choices: [\"top\", \"bottom\", \"left\"],\n },\n {\n name: \"questionDescriptionLocation\",\n default: \"underTitle\",\n choices: [\"underInput\", \"underTitle\"],\n },\n { name: \"questionErrorLocation\", default: \"top\", choices: [\"top\", \"bottom\"] },\n {\n name: \"showProgressBar\",\n default: \"off\",\n choices: [\"off\", \"top\", \"bottom\", \"both\"],\n },\n {\n name: \"progressBarType\",\n default: \"pages\",\n choices: [\n \"pages\",\n \"questions\",\n \"requiredQuestions\",\n \"correctQuestions\",\n \"buttons\",\n ],\n },\n { name: \"mode\", default: \"edit\", choices: [\"edit\", \"display\"] },\n { name: \"storeOthersAsComment:boolean\", default: true },\n { name: \"maxTextLength:number\", default: 0, minValue: 0 },\n { name: \"maxOthersLength:number\", default: 0, minValue: 0 },\n \"goNextPageAutomatic:boolean\",\n {\n name: \"clearInvisibleValues\",\n default: \"onComplete\",\n choices: [\"none\", \"onComplete\", \"onHidden\", \"onHiddenContainer\"],\n },\n {\n name: \"checkErrorsMode\",\n default: \"onNextPage\",\n choices: [\"onNextPage\", \"onValueChanged\", \"onValueChanging\", \"onComplete\"],\n },\n {\n name: \"textUpdateMode\",\n default: \"onBlur\",\n choices: [\"onBlur\", \"onTyping\"],\n },\n { name: \"startSurveyText\", serializationProperty: \"locStartSurveyText\" },\n { name: \"pagePrevText\", serializationProperty: \"locPagePrevText\" },\n { name: \"pageNextText\", serializationProperty: \"locPageNextText\" },\n { name: \"completeText\", serializationProperty: \"locCompleteText\" },\n { name: \"previewText\", serializationProperty: \"locPreviewText\" },\n { name: \"editText\", serializationProperty: \"locEditText\" },\n { name: \"requiredText\", default: \"*\" },\n {\n name: \"questionStartIndex\",\n dependsOn: [\"showQuestionNumbers\"],\n visibleIf: function (survey) {\n return !survey || survey.showQuestionNumbers !== \"off\";\n },\n },\n {\n name: \"questionTitlePattern\",\n default: \"numTitleRequire\",\n dependsOn: [\"questionStartIndex\", \"requiredText\"],\n choices: function (obj) {\n if (!obj)\n return [];\n return obj.getQuestionTitlePatternOptions();\n },\n },\n {\n name: \"questionTitleTemplate\",\n visible: false,\n isSerializable: false,\n serializationProperty: \"locQuestionTitleTemplate\",\n },\n { name: \"firstPageIsStarted:boolean\", default: false },\n {\n name: \"isSinglePage:boolean\",\n default: false,\n visible: false,\n isSerializable: false,\n },\n {\n name: \"questionsOnPageMode\",\n default: \"standard\",\n choices: [\"singlePage\", \"standard\", \"questionPerPage\"],\n },\n {\n name: \"showPreviewBeforeComplete\",\n default: \"noPreview\",\n choices: [\"noPreview\", \"showAllQuestions\", \"showAnsweredQuestions\"],\n },\n { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n { name: \"maxTimeToFinishPage:number\", default: 0, minValue: 0 },\n {\n name: \"showTimerPanel\",\n default: \"none\",\n choices: [\"none\", \"top\", \"bottom\"],\n },\n {\n name: \"showTimerPanelMode\",\n default: \"all\",\n choices: [\"all\", \"page\", \"survey\"],\n },\n]);\n\n\n/***/ }),\n\n/***/ \"./src/surveyProgressButtons.ts\":\n/*!**************************************!*\\\n !*** ./src/surveyProgressButtons.ts ***!\n \\**************************************/\n/*! exports provided: SurveyProgressButtonsModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return SurveyProgressButtonsModel; });\nvar SurveyProgressButtonsModel = /** @class */ (function () {\n function SurveyProgressButtonsModel(survey) {\n this.survey = survey;\n }\n SurveyProgressButtonsModel.prototype.isListElementClickable = function (index) {\n if (!this.survey.onServerValidateQuestions ||\n this.survey.onServerValidateQuestions.isEmpty ||\n this.survey.checkErrorsMode === \"onComplete\") {\n return true;\n }\n return index <= this.survey.currentPageNo + 1;\n };\n SurveyProgressButtonsModel.prototype.getListElementCss = function (index) {\n if (index >= this.survey.visiblePages.length)\n return;\n var elementCss = this.survey.visiblePages[index].passed ?\n this.survey.css.progressButtonsListElementPassed : \"\";\n if (this.survey.currentPageNo === index) {\n elementCss += elementCss !== \"\" ? \" \" : \"\";\n elementCss += this.survey.css.progressButtonsListElementCurrent;\n }\n if (!this.isListElementClickable(index)) {\n elementCss += elementCss !== \"\" ? \" \" : \"\";\n elementCss += this.survey.css.progressButtonsListElementNonClickable;\n }\n return elementCss;\n };\n SurveyProgressButtonsModel.prototype.clickListElement = function (index) {\n if (this.survey.isDesignMode)\n return;\n if (index < this.survey.currentPageNo) {\n this.survey.currentPageNo = index;\n }\n else if (index > this.survey.currentPageNo) {\n for (var i = this.survey.currentPageNo; i < index; i++) {\n if (!this.survey.nextPage())\n break;\n }\n }\n };\n return SurveyProgressButtonsModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/surveyStrings.ts\":\n/*!******************************!*\\\n !*** ./src/surveyStrings.ts ***!\n \\******************************/\n/*! exports provided: surveyLocalization, surveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return surveyLocalization; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return surveyStrings; });\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localization/english */ \"./src/localization/english.ts\");\n\nvar surveyLocalization = {\n currentLocaleValue: \"\",\n defaultLocaleValue: \"en\",\n locales: {},\n localeNames: {},\n supportedLocales: [],\n get currentLocale() {\n return this.currentLocaleValue === this.defaultLocaleValue\n ? \"\"\n : this.currentLocaleValue;\n },\n set currentLocale(val) {\n if (val === \"cz\")\n val = \"cs\";\n this.currentLocaleValue = val;\n },\n get defaultLocale() {\n return this.defaultLocaleValue;\n },\n set defaultLocale(val) {\n if (val === \"cz\")\n val = \"cs\";\n this.defaultLocaleValue = val;\n },\n getLocaleStrings: function (loc) {\n return this.locales[loc];\n },\n getCurrentStrings: function () {\n var loc = this.currentLocale\n ? this.locales[this.currentLocale]\n : this.locales[this.defaultLocale];\n if (!loc)\n loc = this.locales[this.defaultLocale];\n return loc;\n },\n getString: function (strName) {\n var loc = this.getCurrentStrings();\n if (!loc[strName])\n loc = this.locales[this.defaultLocale];\n var result = loc[strName];\n if (result === undefined) {\n result = this.locales[\"en\"][strName];\n }\n return result;\n },\n getLocales: function (removeDefaultLoc) {\n if (removeDefaultLoc === void 0) { removeDefaultLoc = false; }\n var res = [];\n res.push(\"\");\n var locs = this.locales;\n if (this.supportedLocales && this.supportedLocales.length > 0) {\n locs = {};\n for (var i = 0; i < this.supportedLocales.length; i++) {\n locs[this.supportedLocales[i]] = true;\n }\n }\n for (var key in locs) {\n if (removeDefaultLoc && key == this.defaultLocale)\n continue;\n res.push(key);\n }\n var locName = function (loc) {\n if (!loc)\n return \"\";\n var res = surveyLocalization.localeNames[loc];\n if (!res)\n res = loc;\n return res.toLowerCase();\n };\n res.sort(function (a, b) {\n var str1 = locName(a);\n var str2 = locName(b);\n if (str1 === str2)\n return 0;\n return str1 < str2 ? -1 : 1;\n });\n return res;\n },\n};\nvar surveyStrings = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.locales[\"en\"] = _localization_english__WEBPACK_IMPORTED_MODULE_0__[\"englishStrings\"];\nsurveyLocalization.localeNames[\"en\"] = \"english\";\n\n\n/***/ }),\n\n/***/ \"./src/surveyWindow.ts\":\n/*!*****************************!*\\\n !*** ./src/surveyWindow.ts ***!\n \\*****************************/\n/*! exports provided: SurveyWindowModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return SurveyWindowModel; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey */ \"./src/survey.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A Model for a survey running in the Window.\n */\nvar SurveyWindowModel = /** @class */ (function (_super) {\n __extends(SurveyWindowModel, _super);\n function SurveyWindowModel(jsonObj, initialModel) {\n if (initialModel === void 0) { initialModel = null; }\n var _this = _super.call(this) || this;\n /**\n * Set this value to negative value, for example -1, to avoid closing the window on completing the survey. Leave it equals to 0 (default value) to close the window immediately, or set it to 3, 5, 10, ... to close the window in 3, 5, 10 seconds.\n */\n _this.closeOnCompleteTimeout = 0;\n if (initialModel) {\n _this.surveyValue = initialModel;\n }\n else {\n _this.surveyValue = _this.createSurvey(jsonObj);\n }\n _this.surveyValue.showTitle = false;\n if (\"undefined\" !== typeof document) {\n _this.windowElement = document.createElement(\"div\");\n }\n var self = _this;\n _this.survey.onComplete.add(function (survey, options) {\n self.onSurveyComplete();\n });\n return _this;\n }\n SurveyWindowModel.prototype.getType = function () {\n return \"window\";\n };\n Object.defineProperty(SurveyWindowModel.prototype, \"survey\", {\n /**\n * A survey object.\n * @see SurveyModel\n */\n get: function () {\n return this.surveyValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"isShowing\", {\n /**\n * Returns true if the window is currently showing. Set it to true to show the window and false to hide it.\n * @see show\n * @see hide\n */\n get: function () {\n return this.getPropertyValue(\"isShowing\", false);\n },\n set: function (val) {\n if (this.isShowing == val)\n return;\n this.setPropertyValue(\"isShowing\", val);\n if (this.showingChangedCallback)\n this.showingChangedCallback();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Show the window\n * @see hide\n * @see isShowing\n */\n SurveyWindowModel.prototype.show = function () {\n this.isShowing = true;\n };\n /**\n * Hide the window\n * @see show\n * @see isShowing\n */\n SurveyWindowModel.prototype.hide = function () {\n this.isShowing = false;\n };\n Object.defineProperty(SurveyWindowModel.prototype, \"isExpanded\", {\n /**\n * Returns true if the window is expanded. Set it to true to expand the window or false to collapse it.\n * @see expand\n * @see collapse\n */\n get: function () {\n return this.getPropertyValue(\"isExpanded\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isExpanded\", val);\n if (!this.isLoadingFromJson && this.expandedChangedCallback)\n this.expandedChangedCallback();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"title\", {\n /**\n * The window and survey title.\n */\n get: function () {\n return this.survey.title;\n },\n set: function (value) {\n this.survey.title = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"locTitle\", {\n get: function () {\n return this.survey.locTitle;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Expand the window to show the survey.\n */\n SurveyWindowModel.prototype.expand = function () {\n this.expandcollapse(true);\n };\n /**\n * Collapse the window and show survey title only.\n */\n SurveyWindowModel.prototype.collapse = function () {\n this.expandcollapse(false);\n };\n SurveyWindowModel.prototype.createSurvey = function (jsonObj) {\n return new _survey__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"](jsonObj);\n };\n SurveyWindowModel.prototype.expandcollapse = function (value) {\n this.isExpanded = value;\n };\n SurveyWindowModel.prototype.onSurveyComplete = function () {\n if (this.closeOnCompleteTimeout < 0)\n return;\n if (this.closeOnCompleteTimeout == 0) {\n this.closeWindowOnComplete();\n }\n else {\n var self = this;\n var timerId = null;\n var func = function () {\n self.closeWindowOnComplete();\n if (typeof window !== \"undefined\") {\n window.clearInterval(timerId);\n }\n };\n timerId =\n typeof window !== \"undefined\"\n ? window.setInterval(func, this.closeOnCompleteTimeout * 1000)\n : 0;\n }\n };\n SurveyWindowModel.prototype.closeWindowOnComplete = function () {\n if (!!this.closeWindowOnCompleteCallback) {\n this.closeWindowOnCompleteCallback();\n }\n };\n SurveyWindowModel.surveyElementName = \"windowSurveyJS\";\n return SurveyWindowModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/surveytimer.ts\":\n/*!****************************!*\\\n !*** ./src/surveytimer.ts ***!\n \\****************************/\n/*! exports provided: surveyTimerFunctions, SurveyTimer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyTimerFunctions\", function() { return surveyTimerFunctions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return SurveyTimer; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n\nvar surveyTimerFunctions = {\n setTimeout: function (func) {\n if (typeof window === \"undefined\")\n return 0;\n return window.setTimeout(func, 1000);\n },\n clearTimeout: function (timerId) {\n if (typeof window === \"undefined\")\n return;\n window.clearTimeout(timerId);\n },\n};\nvar SurveyTimer = /** @class */ (function () {\n function SurveyTimer() {\n this.listenerCounter = 0;\n this.timerId = -1;\n this.onTimer = new _base__WEBPACK_IMPORTED_MODULE_0__[\"Event\"]();\n }\n Object.defineProperty(SurveyTimer, \"instance\", {\n get: function () {\n if (!SurveyTimer.instanceValue) {\n SurveyTimer.instanceValue = new SurveyTimer();\n }\n return SurveyTimer.instanceValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTimer.prototype.start = function (func) {\n var _this = this;\n if (func === void 0) { func = null; }\n if (func) {\n this.onTimer.add(func);\n }\n if (this.timerId < 0) {\n this.timerId = surveyTimerFunctions.setTimeout(function () {\n _this.doTimer();\n });\n }\n this.listenerCounter++;\n };\n SurveyTimer.prototype.stop = function (func) {\n if (func === void 0) { func = null; }\n if (func) {\n this.onTimer.remove(func);\n }\n this.listenerCounter--;\n if (this.listenerCounter == 0 && this.timerId > -1) {\n surveyTimerFunctions.clearTimeout(this.timerId);\n this.timerId = -1;\n }\n };\n SurveyTimer.prototype.doTimer = function () {\n var _this = this;\n if (this.timerId < 0)\n return;\n this.onTimer.fire(this, {});\n this.timerId = surveyTimerFunctions.setTimeout(function () {\n _this.doTimer();\n });\n };\n SurveyTimer.instanceValue = null;\n return SurveyTimer;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/template-renderer.ts\":\n/*!**********************************!*\\\n !*** ./src/template-renderer.ts ***!\n \\**********************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n\n\n/***/ }),\n\n/***/ \"./src/textPreProcessor.ts\":\n/*!*********************************!*\\\n !*** ./src/textPreProcessor.ts ***!\n \\*********************************/\n/*! exports provided: TextPreProcessorItem, TextPreProcessorValue, TextPreProcessor, QuestionTextProcessor */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessorItem\", function() { return TextPreProcessorItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessorValue\", function() { return TextPreProcessorValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return TextPreProcessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextProcessor\", function() { return QuestionTextProcessor; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n\n\nvar TextPreProcessorItem = /** @class */ (function () {\n function TextPreProcessorItem() {\n }\n return TextPreProcessorItem;\n}());\n\nvar TextPreProcessorValue = /** @class */ (function () {\n function TextPreProcessorValue(name, returnDisplayValue) {\n this.name = name;\n this.returnDisplayValue = returnDisplayValue;\n this.isExists = false;\n this.canProcess = true;\n }\n return TextPreProcessorValue;\n}());\n\nvar TextPreProcessor = /** @class */ (function () {\n function TextPreProcessor() {\n }\n TextPreProcessor.prototype.process = function (text, returnDisplayValue, doEncoding) {\n if (returnDisplayValue === void 0) { returnDisplayValue = false; }\n if (doEncoding === void 0) { doEncoding = false; }\n this.hasAllValuesOnLastRunValue = true;\n if (!text)\n return text;\n if (!this.onProcess)\n return text;\n var items = this.getItems(text);\n for (var i = items.length - 1; i >= 0; i--) {\n var item = items[i];\n var name = this.getName(text.substring(item.start + 1, item.end));\n if (!name)\n continue;\n var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n this.onProcess(textValue);\n if (!textValue.isExists) {\n if (textValue.canProcess) {\n this.hasAllValuesOnLastRunValue = false;\n }\n continue;\n }\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)) {\n this.hasAllValuesOnLastRunValue = false;\n }\n var replacedValue = !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(textValue.value)\n ? textValue.value\n : \"\";\n if (doEncoding) {\n replacedValue = encodeURIComponent(replacedValue);\n }\n text =\n text.substr(0, item.start) + replacedValue + text.substr(item.end + 1);\n }\n return text;\n };\n TextPreProcessor.prototype.processValue = function (name, returnDisplayValue) {\n var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n if (!!this.onProcess) {\n this.onProcess(textValue);\n }\n return textValue;\n };\n Object.defineProperty(TextPreProcessor.prototype, \"hasAllValuesOnLastRun\", {\n get: function () {\n return !!this.hasAllValuesOnLastRunValue;\n },\n enumerable: false,\n configurable: true\n });\n TextPreProcessor.prototype.getItems = function (text) {\n var items = [];\n var length = text.length;\n var start = -1;\n var ch = \"\";\n for (var i = 0; i < length; i++) {\n ch = text[i];\n if (ch == \"{\")\n start = i;\n if (ch == \"}\") {\n if (start > -1) {\n var item = new TextPreProcessorItem();\n item.start = start;\n item.end = i;\n items.push(item);\n }\n start = -1;\n }\n }\n return items;\n };\n TextPreProcessor.prototype.getName = function (name) {\n if (!name)\n return;\n return name.trim();\n };\n return TextPreProcessor;\n}());\n\nvar QuestionTextProcessor = /** @class */ (function () {\n function QuestionTextProcessor(variableName) {\n var _this = this;\n this.variableName = variableName;\n this.textPreProcessor = new TextPreProcessor();\n this.textPreProcessor.onProcess = function (textValue) {\n _this.getProcessedTextValue(textValue);\n };\n }\n QuestionTextProcessor.prototype.processValue = function (name, returnDisplayValue) {\n return this.textPreProcessor.processValue(name, returnDisplayValue);\n };\n Object.defineProperty(QuestionTextProcessor.prototype, \"survey\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextProcessor.prototype, \"panel\", {\n get: function () {\n return null;\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextProcessor.prototype.getValues = function () {\n return !!this.panel ? this.panel.getValue() : null;\n };\n QuestionTextProcessor.prototype.getQuestionByName = function (name) {\n return !!this.panel\n ? this.panel.getQuestionByValueName(name)\n : null;\n };\n QuestionTextProcessor.prototype.onCustomProcessText = function (textValue) {\n return false;\n };\n //ITextProcessor\n QuestionTextProcessor.prototype.getProcessedTextValue = function (textValue) {\n if (!textValue)\n return;\n if (this.onCustomProcessText(textValue))\n return;\n var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n textValue.isExists = firstName == this.variableName;\n textValue.canProcess = textValue.isExists;\n if (!textValue.canProcess)\n return;\n //name should start with the variable name\n textValue.name = textValue.name.replace(this.variableName + \".\", \"\");\n var firstName = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getFirstName(textValue.name);\n var question = this.getQuestionByName(firstName);\n var values = {};\n if (question) {\n values[firstName] = textValue.returnDisplayValue\n ? question.displayValue\n : question.value;\n }\n else {\n var allValues = !!this.panel ? this.getValues() : null;\n if (allValues) {\n values[firstName] = allValues[firstName];\n }\n }\n textValue.value = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_1__[\"ProcessValue\"]().getValue(textValue.name, values);\n };\n QuestionTextProcessor.prototype.processText = function (text, returnDisplayValue) {\n text = this.textPreProcessor.process(text, returnDisplayValue);\n var survey = this.survey;\n return survey ? survey.processText(text, returnDisplayValue) : text;\n };\n QuestionTextProcessor.prototype.processTextEx = function (text, returnDisplayValue) {\n text = this.processText(text, returnDisplayValue);\n var hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n var res = { hasAllValuesOnLastRun: true, text: text };\n if (this.survey) {\n res = this.survey.processTextEx(text, returnDisplayValue, false);\n }\n res.hasAllValuesOnLastRun =\n res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;\n return res;\n };\n return QuestionTextProcessor;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/trigger.ts\":\n/*!************************!*\\\n !*** ./src/trigger.ts ***!\n \\************************/\n/*! exports provided: Trigger, SurveyTrigger, SurveyTriggerVisible, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerSkip, SurveyTriggerRunExpression, SurveyTriggerCopyValue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return Trigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return SurveyTrigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return SurveyTriggerVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return SurveyTriggerComplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return SurveyTriggerSetValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSkip\", function() { return SurveyTriggerSkip; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return SurveyTriggerRunExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return SurveyTriggerCopyValue; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * A base class for all triggers.\n * A trigger calls a method when the expression change the result: from false to true or from true to false.\n * Please note, it runs only one changing the expression result.\n */\nvar Trigger = /** @class */ (function (_super) {\n __extends(Trigger, _super);\n function Trigger() {\n var _this = _super.call(this) || this;\n _this.usedNames = [];\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"operator\", \"value\", \"name\"], function () {\n self.oldPropertiesChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n self.onExpressionChanged();\n });\n return _this;\n }\n Object.defineProperty(Trigger, \"operators\", {\n get: function () {\n if (Trigger.operatorsValue != null)\n return Trigger.operatorsValue;\n Trigger.operatorsValue = {\n empty: function (value, expectedValue) {\n return !value;\n },\n notempty: function (value, expectedValue) {\n return !!value;\n },\n equal: function (value, expectedValue) {\n return value == expectedValue;\n },\n notequal: function (value, expectedValue) {\n return value != expectedValue;\n },\n contains: function (value, expectedValue) {\n return value && value[\"indexOf\"] && value.indexOf(expectedValue) > -1;\n },\n notcontains: function (value, expectedValue) {\n return (!value || !value[\"indexOf\"] || value.indexOf(expectedValue) == -1);\n },\n greater: function (value, expectedValue) {\n return value > expectedValue;\n },\n less: function (value, expectedValue) {\n return value < expectedValue;\n },\n greaterorequal: function (value, expectedValue) {\n return value >= expectedValue;\n },\n lessorequal: function (value, expectedValue) {\n return value <= expectedValue;\n },\n };\n return Trigger.operatorsValue;\n },\n enumerable: false,\n configurable: true\n });\n Trigger.prototype.getType = function () {\n return \"triggerbase\";\n };\n Trigger.prototype.toString = function () {\n var res = this.getType().replace(\"trigger\", \"\");\n var exp = !!this.expression ? this.expression : this.buildExpression();\n if (exp) {\n res += \", \" + exp;\n }\n return res;\n };\n Object.defineProperty(Trigger.prototype, \"operator\", {\n get: function () {\n return this.getPropertyValue(\"operator\", \"equal\");\n },\n set: function (value) {\n if (!value)\n return;\n value = value.toLowerCase();\n if (!Trigger.operators[value])\n return;\n this.setPropertyValue(\"operator\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"value\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"name\", {\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"name\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"expression\", {\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n Trigger.prototype.checkExpression = function (keys, values, properties) {\n if (properties === void 0) { properties = null; }\n if (!this.isCheckRequired(keys))\n return;\n if (!!this.conditionRunner) {\n this.perform(values, properties);\n }\n };\n Trigger.prototype.check = function (value) {\n var triggerResult = Trigger.operators[this.operator](value, this.value);\n if (triggerResult) {\n this.onSuccess({}, null);\n }\n else {\n this.onFailure();\n }\n };\n Trigger.prototype.perform = function (values, properties) {\n var _this = this;\n this.conditionRunner.onRunComplete = function (res) {\n _this.triggerResult(res, values, properties);\n };\n this.conditionRunner.run(values, properties);\n };\n Trigger.prototype.triggerResult = function (res, values, properties) {\n if (res) {\n this.onSuccess(values, properties);\n }\n else {\n this.onFailure();\n }\n };\n Trigger.prototype.onSuccess = function (values, properties) { };\n Trigger.prototype.onFailure = function () { };\n Trigger.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.oldPropertiesChanged();\n };\n Trigger.prototype.oldPropertiesChanged = function () {\n this.onExpressionChanged();\n };\n Trigger.prototype.onExpressionChanged = function () {\n this.usedNames = [];\n this.hasFunction = false;\n this.conditionRunner = null;\n };\n Trigger.prototype.buildExpression = function () {\n if (!this.name)\n return \"\";\n if (this.isValueEmpty(this.value) && this.isRequireValue)\n return \"\";\n return (\"{\" +\n this.name +\n \"} \" +\n this.operator +\n \" \" +\n _expressions_expressions__WEBPACK_IMPORTED_MODULE_4__[\"OperandMaker\"].toOperandString(this.value));\n };\n Trigger.prototype.isCheckRequired = function (keys) {\n if (!keys)\n return false;\n this.buildUsedNames();\n if (this.hasFunction === true)\n return true;\n var processValue = new _conditionProcessValue__WEBPACK_IMPORTED_MODULE_5__[\"ProcessValue\"]();\n for (var i = 0; i < this.usedNames.length; i++) {\n var name = this.usedNames[i];\n if (keys.hasOwnProperty(name))\n return true;\n var firstName = processValue.getFirstName(name);\n if (!keys.hasOwnProperty(firstName))\n continue;\n if (name == firstName)\n return true;\n var keyValue = keys[firstName];\n if (!keyValue.hasOwnProperty(\"oldValue\") ||\n !keyValue.hasOwnProperty(\"newValue\"))\n return true;\n var v = {};\n v[firstName] = keyValue[\"oldValue\"];\n var oldValue = processValue.getValue(name, v);\n v[firstName] = keyValue[\"newValue\"];\n var newValue = processValue.getValue(name, v);\n return !_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isTwoValueEquals(oldValue, newValue);\n }\n return false;\n };\n Trigger.prototype.buildUsedNames = function () {\n if (!!this.conditionRunner)\n return;\n var expression = this.expression;\n if (!expression) {\n expression = this.buildExpression();\n }\n if (!expression)\n return;\n this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ConditionRunner\"](expression);\n this.hasFunction = this.conditionRunner.hasFunction();\n this.usedNames = this.conditionRunner.getVariables();\n };\n Object.defineProperty(Trigger.prototype, \"isRequireValue\", {\n get: function () {\n return this.operator !== \"empty\" && this.operator != \"notempty\";\n },\n enumerable: false,\n configurable: true\n });\n Trigger.operatorsValue = null;\n return Trigger;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n/**\n * It extends the Trigger base class and add properties required for SurveyJS classes.\n */\nvar SurveyTrigger = /** @class */ (function (_super) {\n __extends(SurveyTrigger, _super);\n function SurveyTrigger() {\n var _this = _super.call(this) || this;\n _this.ownerValue = null;\n return _this;\n }\n Object.defineProperty(SurveyTrigger.prototype, \"owner\", {\n get: function () {\n return this.ownerValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTrigger.prototype.setOwner = function (owner) {\n this.ownerValue = owner;\n };\n SurveyTrigger.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.owner && !!this.owner[\"getSurvey\"]\n ? this.owner.getSurvey()\n : null;\n };\n Object.defineProperty(SurveyTrigger.prototype, \"isOnNextPage\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n return SurveyTrigger;\n}(Trigger));\n\n/**\n * If expression returns true, it makes questions/pages visible.\n * Ohterwise it makes them invisible.\n */\nvar SurveyTriggerVisible = /** @class */ (function (_super) {\n __extends(SurveyTriggerVisible, _super);\n function SurveyTriggerVisible() {\n var _this = _super.call(this) || this;\n _this.pages = [];\n _this.questions = [];\n return _this;\n }\n SurveyTriggerVisible.prototype.getType = function () {\n return \"visibletrigger\";\n };\n SurveyTriggerVisible.prototype.onSuccess = function (values, properties) {\n this.onTrigger(this.onItemSuccess);\n };\n SurveyTriggerVisible.prototype.onFailure = function () {\n this.onTrigger(this.onItemFailure);\n };\n SurveyTriggerVisible.prototype.onTrigger = function (func) {\n if (!this.owner)\n return;\n var objects = this.owner.getObjects(this.pages, this.questions);\n for (var i = 0; i < objects.length; i++) {\n func(objects[i]);\n }\n };\n SurveyTriggerVisible.prototype.onItemSuccess = function (item) {\n item.visible = true;\n };\n SurveyTriggerVisible.prototype.onItemFailure = function (item) {\n item.visible = false;\n };\n return SurveyTriggerVisible;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, it completes the survey.\n */\nvar SurveyTriggerComplete = /** @class */ (function (_super) {\n __extends(SurveyTriggerComplete, _super);\n function SurveyTriggerComplete() {\n return _super.call(this) || this;\n }\n SurveyTriggerComplete.prototype.getType = function () {\n return \"completetrigger\";\n };\n Object.defineProperty(SurveyTriggerComplete.prototype, \"isOnNextPage\", {\n get: function () {\n return !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].executeCompleteTriggerOnValueChanged;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerComplete.prototype.onSuccess = function (values, properties) {\n if (this.owner)\n this.owner.setCompleted();\n };\n return SurveyTriggerComplete;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from property **setValue** will be set to **setToName**\n */\nvar SurveyTriggerSetValue = /** @class */ (function (_super) {\n __extends(SurveyTriggerSetValue, _super);\n function SurveyTriggerSetValue() {\n return _super.call(this) || this;\n }\n SurveyTriggerSetValue.prototype.getType = function () {\n return \"setvaluetrigger\";\n };\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"setValue\", {\n get: function () {\n return this.getPropertyValue(\"setValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"setValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"isVariable\", {\n get: function () {\n return this.getPropertyValue(\"isVariable\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isVariable\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerSetValue.prototype.onSuccess = function (values, properties) {\n if (!this.setToName || !this.owner)\n return;\n this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable);\n };\n return SurveyTriggerSetValue;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the survey go to question **gotoName** and focus it.\n */\nvar SurveyTriggerSkip = /** @class */ (function (_super) {\n __extends(SurveyTriggerSkip, _super);\n function SurveyTriggerSkip() {\n return _super.call(this) || this;\n }\n SurveyTriggerSkip.prototype.getType = function () {\n return \"skiptrigger\";\n };\n Object.defineProperty(SurveyTriggerSkip.prototype, \"gotoName\", {\n get: function () {\n return this.getPropertyValue(\"gotoName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"gotoName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSkip.prototype, \"isOnNextPage\", {\n get: function () {\n return !_settings__WEBPACK_IMPORTED_MODULE_6__[\"settings\"].executeSkipTriggerOnValueChanged;\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerSkip.prototype.onSuccess = function (values, properties) {\n if (!this.gotoName || !this.owner)\n return;\n this.owner.focusQuestion(this.gotoName);\n };\n return SurveyTriggerSkip;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the **runExpression** will be run. If **setToName** property is not empty then the result of **runExpression** will be set to it.\n */\nvar SurveyTriggerRunExpression = /** @class */ (function (_super) {\n __extends(SurveyTriggerRunExpression, _super);\n function SurveyTriggerRunExpression() {\n return _super.call(this) || this;\n }\n SurveyTriggerRunExpression.prototype.getType = function () {\n return \"runexpressiontrigger\";\n };\n Object.defineProperty(SurveyTriggerRunExpression.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerRunExpression.prototype, \"runExpression\", {\n get: function () {\n return this.getPropertyValue(\"runExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"runExpression\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerRunExpression.prototype.onSuccess = function (values, properties) {\n var _this = this;\n if (!this.owner || !this.runExpression)\n return;\n var expression = new _conditions__WEBPACK_IMPORTED_MODULE_3__[\"ExpressionRunner\"](this.runExpression);\n if (expression.canRun) {\n expression.onRunComplete = function (res) {\n _this.onCompleteRunExpression(res);\n };\n expression.run(values, properties);\n }\n };\n SurveyTriggerRunExpression.prototype.onCompleteRunExpression = function (newValue) {\n if (!!this.setToName && newValue !== undefined) {\n this.owner.setTriggerValue(this.setToName, newValue, false);\n }\n };\n return SurveyTriggerRunExpression;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from question **fromName** will be set into **setToName**.\n */\nvar SurveyTriggerCopyValue = /** @class */ (function (_super) {\n __extends(SurveyTriggerCopyValue, _super);\n function SurveyTriggerCopyValue() {\n return _super.call(this) || this;\n }\n Object.defineProperty(SurveyTriggerCopyValue.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerCopyValue.prototype, \"fromName\", {\n get: function () {\n return this.getPropertyValue(\"fromName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"fromName\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyTriggerCopyValue.prototype.getType = function () {\n return \"copyvaluetrigger\";\n };\n SurveyTriggerCopyValue.prototype.onSuccess = function (values, properties) {\n if (!this.setToName || !this.owner)\n return;\n this.owner.copyTriggerValue(this.setToName, this.fromName);\n };\n return SurveyTriggerCopyValue;\n}(SurveyTrigger));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"trigger\", [\n { name: \"operator\", default: \"equal\", visible: false },\n { name: \"value\", visible: false },\n \"expression:condition\",\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"surveytrigger\", [{ name: \"name\", visible: false }], null, \"trigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"visibletrigger\", [\"pages:pages\", \"questions:questions\"], function () {\n return new SurveyTriggerVisible();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"completetrigger\", [], function () {\n return new SurveyTriggerComplete();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"setvaluetrigger\", [\n { name: \"!setToName:questionvalue\" },\n {\n name: \"setValue:triggervalue\",\n dependsOn: \"setToName\",\n visibleIf: function (obj) {\n return !!obj && !!obj[\"setToName\"];\n },\n },\n { name: \"isVariable:boolean\", visible: false },\n], function () {\n return new SurveyTriggerSetValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"copyvaluetrigger\", [{ name: \"!setToName:questionvalue\" }, { name: \"!fromName:questionvalue\" }], function () {\n return new SurveyTriggerCopyValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"skiptrigger\", [{ name: \"!gotoName:question\" }], function () {\n return new SurveyTriggerSkip();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].addClass(\"runexpressiontrigger\", [{ name: \"setToName:questionvalue\" }, \"runExpression:expression\"], function () {\n return new SurveyTriggerRunExpression();\n}, \"surveytrigger\");\n\n\n/***/ }),\n\n/***/ \"./src/utils/is-mobile.ts\":\n/*!********************************!*\\\n !*** ./src/utils/is-mobile.ts ***!\n \\********************************/\n/*! exports provided: IsMobile */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IsMobile\", function() { return IsMobile; });\nvar _isMobile = false;\nvar vendor = null;\nif (typeof navigator !== \"undefined\" &&\n typeof window !== \"undefined\" &&\n navigator &&\n window) {\n vendor = navigator.userAgent || navigator.vendor || window.opera;\n}\n(function (a) {\n if (!a)\n return;\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)))\n _isMobile = true;\n})(vendor);\nvar IsMobile = _isMobile;\n\n\n/***/ }),\n\n/***/ \"./src/utils/popup.ts\":\n/*!****************************!*\\\n !*** ./src/utils/popup.ts ***!\n \\****************************/\n/*! exports provided: PopupUtils */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PopupUtils\", function() { return PopupUtils; });\nvar PopupUtils = /** @class */ (function () {\n function PopupUtils() {\n }\n PopupUtils.calculatePosition = function (targetRect, height, width, verticalPosition, horizontalPosition, showPointer) {\n if (horizontalPosition == \"center\")\n var left = (targetRect.left + targetRect.right - width) / 2;\n else if (horizontalPosition == \"left\")\n left = targetRect.left - width;\n else\n left = targetRect.right;\n if (verticalPosition == \"middle\")\n var top = (targetRect.top + targetRect.bottom - height) / 2;\n else if (verticalPosition == \"top\")\n top = targetRect.top - height;\n else\n top = targetRect.bottom;\n if (showPointer) {\n if (horizontalPosition != \"center\" && verticalPosition != \"middle\") {\n if (verticalPosition == \"top\") {\n top = top + targetRect.height;\n }\n else {\n top = top - targetRect.height;\n }\n }\n }\n return { left: Math.round(left), top: Math.round(top) };\n };\n PopupUtils.calculatePopupDirection = function (verticalPosition, horizontalPosition) {\n var popupDirection;\n if (horizontalPosition == \"center\" && verticalPosition != \"middle\") {\n popupDirection = verticalPosition;\n }\n else if (horizontalPosition != \"center\") {\n popupDirection = horizontalPosition;\n }\n return popupDirection;\n };\n //called when showPointer is true\n PopupUtils.calculatePointerTarget = function (targetRect, top, left, verticalPosition, horizontalPosition) {\n var targetPos = {};\n if (horizontalPosition != \"center\") {\n targetPos.top = targetRect.top + targetRect.height / 2;\n targetPos.left = targetRect[horizontalPosition];\n }\n else if (verticalPosition != \"middle\") {\n targetPos.top = targetRect[verticalPosition];\n targetPos.left = targetRect.left + targetRect.width / 2;\n }\n targetPos.left = Math.round(targetPos.left - left);\n targetPos.top = Math.round(targetPos.top - top);\n return targetPos;\n };\n return PopupUtils;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/responsivitymanager.ts\":\n/*!******************************************!*\\\n !*** ./src/utils/responsivitymanager.ts ***!\n \\******************************************/\n/*! exports provided: ResponsivityManager, VerticalResponsivityManager */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return ResponsivityManager; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return VerticalResponsivityManager; });\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar ResponsivityManager = /** @class */ (function () {\n function ResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n var _this = this;\n if (dotsItemSize === void 0) { dotsItemSize = 48; }\n this.container = container;\n this.model = model;\n this.itemsSelector = itemsSelector;\n this.dotsItemSize = dotsItemSize;\n this.IGNORE_SHRINK_LIMIT_PX = 1;\n this.previousParentOffset = 0;\n this.previousVisibleItemsCount = Number.MAX_VALUE;\n this._itemsSizes = undefined;\n this.resizeObserver = undefined;\n this.getComputedStyle = window.getComputedStyle.bind(window);\n this.resizeObserver = new ResizeObserver(function (_) { return _this.process(); });\n this.resizeObserver.observe(this.container.parentElement);\n }\n ResponsivityManager.prototype.getDimensions = function (element) {\n return {\n scroll: element.scrollWidth,\n offset: element.offsetWidth\n };\n };\n ResponsivityManager.prototype.getAvailableSpace = function () {\n var style = this.getComputedStyle(this.container);\n var space = this.container.offsetWidth - this.dotsItemSize;\n if (style.boxSizing === 'border-box') {\n space -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n }\n return space;\n };\n ResponsivityManager.prototype.calcItemSize = function (item) {\n return item.offsetWidth;\n };\n ResponsivityManager.prototype.calcItemsSizes = function () {\n var _this = this;\n var sizes = [];\n this.container.querySelectorAll(this.itemsSelector)\n .forEach(function (item) {\n sizes.push(_this.calcItemSize(item));\n });\n return sizes;\n };\n Object.defineProperty(ResponsivityManager.prototype, \"itemsSizes\", {\n get: function () {\n if (typeof this._itemsSizes === 'undefined') {\n this._itemsSizes = this.calcItemsSizes();\n }\n return this._itemsSizes;\n },\n enumerable: false,\n configurable: true\n });\n ResponsivityManager.prototype.getVisibleItemsCount = function (size) {\n var itemsSizes = this.itemsSizes;\n var currSize = itemsSizes[0];\n var i = 1;\n for (; i < itemsSizes.length; i++) {\n if (currSize + itemsSizes[i] > size)\n return i;\n currSize += itemsSizes[i];\n }\n return i;\n };\n ResponsivityManager.prototype.process = function () {\n var scrollOffset = this.getDimensions(this.container);\n var hiddenWidth = scrollOffset.scroll - scrollOffset.offset;\n if (this.previousVisibleItemsCount < Number.MAX_VALUE) {\n hiddenWidth -= this.dotsItemSize;\n }\n var parentOffsetWidth = this.getDimensions(this.container.parentElement).offset;\n if (parentOffsetWidth === this.previousParentOffset)\n return;\n if (hiddenWidth > this.IGNORE_SHRINK_LIMIT_PX) {\n if (this.model.canShrink) {\n this._itemsSizes = undefined;\n this.model.shrink();\n }\n var count = this.getVisibleItemsCount(this.getAvailableSpace());\n if (this.previousVisibleItemsCount !== count) {\n this.model.showFirstN(count);\n this.previousVisibleItemsCount = count;\n }\n }\n else {\n if (this.model.canGrow && hiddenWidth <= 0.0 &&\n parentOffsetWidth - this.previousParentOffset > this.dotsItemSize) {\n this._itemsSizes = undefined;\n this.model.grow();\n }\n this.model.showFirstN(Number.MAX_VALUE);\n this.previousVisibleItemsCount = Number.MAX_VALUE;\n }\n this.previousParentOffset = parentOffsetWidth;\n };\n ResponsivityManager.prototype.dispose = function () {\n this.resizeObserver.disconnect();\n };\n return ResponsivityManager;\n}());\n\nvar VerticalResponsivityManager = /** @class */ (function (_super) {\n __extends(VerticalResponsivityManager, _super);\n function VerticalResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n return _super.call(this, container, model, itemsSelector, dotsItemSize) || this;\n }\n VerticalResponsivityManager.prototype.getDimensions = function () {\n return {\n scroll: this.container.scrollHeight,\n offset: this.container.offsetHeight,\n };\n };\n VerticalResponsivityManager.prototype.getAvailableSpace = function () {\n var style = this.getComputedStyle(this.container);\n var space = this.container.offsetHeight;\n if (style.boxSizing === 'border-box') {\n space -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n }\n return space;\n };\n VerticalResponsivityManager.prototype.calcItemSize = function (item) {\n return item.offsetHeight;\n };\n return VerticalResponsivityManager;\n}(ResponsivityManager));\n\n\n\n/***/ }),\n\n/***/ \"./src/utils/utils.ts\":\n/*!****************************!*\\\n !*** ./src/utils/utils.ts ***!\n \\****************************/\n/*! exports provided: unwrap, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, createSvg */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"unwrap\", function() { return unwrap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"compareVersions\", function() { return compareVersions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"confirmAction\", function() { return confirmAction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return detectIEOrEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectIEBrowser\", function() { return detectIEBrowser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return loadFileFromBase64; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isMobile\", function() { return isMobile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isElementVisible\", function() { return isElementVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"findScrollableParent\", function() { return findScrollableParent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return createSvg; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../settings */ \"./src/settings.ts\");\n\nfunction compareVersions(a, b) {\n var i, diff;\n var regExStrip0 = /(\\.0+)+$/;\n var segmentsA = a.replace(regExStrip0, \"\").split(\".\");\n var segmentsB = b.replace(regExStrip0, \"\").split(\".\");\n var l = Math.min(segmentsA.length, segmentsB.length);\n for (i = 0; i < l; i++) {\n diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10);\n if (diff) {\n return diff;\n }\n }\n return segmentsA.length - segmentsB.length;\n}\nfunction confirmAction(message) {\n if (!!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"] && !!_settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc)\n return _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].confirmActionFunc(message);\n return confirm(message);\n}\nfunction detectIEBrowser() {\n if (typeof window === \"undefined\")\n return false;\n var ua = window.navigator.userAgent;\n var oldIe = ua.indexOf(\"MSIE \");\n var elevenIe = ua.indexOf(\"Trident/\");\n return oldIe > -1 || elevenIe > -1;\n}\nfunction detectIEOrEdge() {\n if (typeof window === \"undefined\")\n return false;\n if (typeof detectIEOrEdge.isIEOrEdge == \"undefined\") {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf(\"MSIE \");\n var trident = ua.indexOf(\"Trident/\");\n var edge = ua.indexOf(\"Edge/\");\n detectIEOrEdge.isIEOrEdge = edge > 0 || trident > 0 || msie > 0;\n }\n return detectIEOrEdge.isIEOrEdge;\n}\nfunction loadFileFromBase64(b64Data, fileName) {\n try {\n var byteString = atob(b64Data.split(\",\")[1]);\n // separate out the mime component\n var mimeString = b64Data.split(\",\")[0].split(\":\")[1].split(\";\")[0];\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n // write the ArrayBuffer to a blob, and you're done\n var bb = new Blob([ab], { type: mimeString });\n if (typeof window !== \"undefined\" &&\n window.navigator &&\n window.navigator.msSaveBlob) {\n window.navigator.msSaveOrOpenBlob(bb, fileName);\n }\n }\n catch (err) { }\n}\nfunction isMobile() {\n return (typeof window !== \"undefined\" && typeof window.orientation !== \"undefined\");\n}\nfunction isElementVisible(element, threshold) {\n if (threshold === void 0) { threshold = 0; }\n if (typeof document === \"undefined\") {\n return false;\n }\n var elementRect = element.getBoundingClientRect();\n var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n var topWin = -threshold;\n var bottomWin = viewHeight + threshold;\n var topEl = elementRect.top;\n var bottomEl = elementRect.bottom;\n var maxTop = Math.max(topWin, topEl);\n var minBottom = Math.min(bottomWin, bottomEl);\n return maxTop <= minBottom;\n}\nfunction findScrollableParent(element) {\n if (!element) {\n return document.documentElement;\n }\n if (element.scrollHeight > element.clientHeight &&\n (getComputedStyle(element).overflowY === \"scroll\" ||\n getComputedStyle(element).overflowY === \"auto\")) {\n return element;\n }\n else {\n return findScrollableParent(element.parentElement);\n }\n}\nfunction createSvg(size, width, height, iconName, svgElem) {\n svgElem.style.width = (size || width || 16) + \"px\";\n svgElem.style.height = (size || height || 16) + \"px\";\n var node = svgElem.childNodes[0];\n node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + iconName);\n}\nfunction unwrap(value) {\n if (typeof value !== \"function\") {\n return value;\n }\n else {\n return value();\n }\n}\n\n\n\n/***/ }),\n\n/***/ \"./src/validator.ts\":\n/*!**************************!*\\\n !*** ./src/validator.ts ***!\n \\**************************/\n/*! exports provided: ValidatorResult, SurveyValidator, ValidatorRunner, NumericValidator, TextValidator, AnswerCountValidator, RegexValidator, EmailValidator, ExpressionValidator */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return ValidatorResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return SurveyValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return ValidatorRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return NumericValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return TextValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return AnswerCountValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return RegexValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return EmailValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return ExpressionValidator; });\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\nvar ValidatorResult = /** @class */ (function () {\n function ValidatorResult(value, error) {\n if (error === void 0) { error = null; }\n this.value = value;\n this.error = error;\n }\n return ValidatorResult;\n}());\n\n/**\n * Base SurveyJS validator class.\n */\nvar SurveyValidator = /** @class */ (function (_super) {\n __extends(SurveyValidator, _super);\n function SurveyValidator() {\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"text\", _this, true);\n return _this;\n }\n SurveyValidator.prototype.getSurvey = function (live) {\n if (live === void 0) { live = false; }\n return !!this.errorOwner && !!this.errorOwner[\"getSurvey\"]\n ? this.errorOwner.getSurvey()\n : null;\n };\n Object.defineProperty(SurveyValidator.prototype, \"text\", {\n get: function () {\n return this.getLocalizableStringText(\"text\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"text\", value);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyValidator.prototype.getErrorText = function (name) {\n if (this.text)\n return this.text;\n return this.getDefaultErrorText(name);\n };\n SurveyValidator.prototype.getDefaultErrorText = function (name) {\n return \"\";\n };\n SurveyValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n return null;\n };\n Object.defineProperty(SurveyValidator.prototype, \"isRunning\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isAsync\", {\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n SurveyValidator.prototype.getLocale = function () {\n return !!this.errorOwner ? this.errorOwner.getLocale() : \"\";\n };\n SurveyValidator.prototype.getMarkdownHtml = function (text, name) {\n return !!this.errorOwner\n ? this.errorOwner.getMarkdownHtml(text, name)\n : null;\n };\n SurveyValidator.prototype.getRenderer = function (name) {\n return !!this.errorOwner ? this.errorOwner.getRenderer(name) : null;\n };\n SurveyValidator.prototype.getProcessedText = function (text) {\n return !!this.errorOwner ? this.errorOwner.getProcessedText(text) : text;\n };\n SurveyValidator.prototype.createCustomError = function (name) {\n return new _error__WEBPACK_IMPORTED_MODULE_1__[\"CustomError\"](this.getErrorText(name), this.errorOwner);\n };\n SurveyValidator.prototype.toString = function () {\n var res = this.getType().replace(\"validator\", \"\");\n if (!!this.text) {\n res += \", \" + this.text;\n }\n return res;\n };\n return SurveyValidator;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nvar ValidatorRunner = /** @class */ (function () {\n function ValidatorRunner() {\n }\n ValidatorRunner.prototype.run = function (owner) {\n var _this = this;\n var res = [];\n var values = null;\n var properties = null;\n this.prepareAsyncValidators();\n var asyncResults = [];\n var validators = owner.getValidators();\n for (var i = 0; i < validators.length; i++) {\n var validator = validators[i];\n if (!values && validator.isValidateAllValues) {\n values = owner.getDataFilteredValues();\n properties = owner.getDataFilteredProperties();\n }\n if (validator.isAsync) {\n this.asyncValidators.push(validator);\n validator.onAsyncCompleted = function (result) {\n if (!!result && !!result.error)\n asyncResults.push(result.error);\n if (!_this.onAsyncCompleted)\n return;\n for (var i = 0; i < _this.asyncValidators.length; i++) {\n if (_this.asyncValidators[i].isRunning)\n return;\n }\n _this.onAsyncCompleted(asyncResults);\n };\n }\n }\n validators = owner.getValidators();\n for (var i = 0; i < validators.length; i++) {\n var validator = validators[i];\n var validatorResult = validator.validate(owner.validatedValue, owner.getValidatorTitle(), values, properties);\n if (!!validatorResult && !!validatorResult.error) {\n res.push(validatorResult.error);\n }\n }\n if (this.asyncValidators.length == 0 && !!this.onAsyncCompleted)\n this.onAsyncCompleted([]);\n return res;\n };\n ValidatorRunner.prototype.prepareAsyncValidators = function () {\n if (!!this.asyncValidators) {\n for (var i = 0; i < this.asyncValidators.length; i++) {\n this.asyncValidators[i].onAsyncCompleted = null;\n }\n }\n this.asyncValidators = [];\n };\n return ValidatorRunner;\n}());\n\n/**\n * Validate numeric values.\n */\nvar NumericValidator = /** @class */ (function (_super) {\n __extends(NumericValidator, _super);\n function NumericValidator(minValue, maxValue) {\n if (minValue === void 0) { minValue = null; }\n if (maxValue === void 0) { maxValue = null; }\n var _this = _super.call(this) || this;\n _this.minValue = minValue;\n _this.maxValue = maxValue;\n return _this;\n }\n NumericValidator.prototype.getType = function () {\n return \"numericvalidator\";\n };\n NumericValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (this.isValueEmpty(value))\n return null;\n if (!_helpers__WEBPACK_IMPORTED_MODULE_5__[\"Helpers\"].isNumber(value)) {\n return new ValidatorResult(null, new _error__WEBPACK_IMPORTED_MODULE_1__[\"RequreNumericError\"](null, this.errorOwner));\n }\n var result = new ValidatorResult(parseFloat(value));\n if (this.minValue !== null && this.minValue > result.value) {\n result.error = this.createCustomError(name);\n return result;\n }\n if (this.maxValue !== null && this.maxValue < result.value) {\n result.error = this.createCustomError(name);\n return result;\n }\n return typeof value === \"number\" ? null : result;\n };\n NumericValidator.prototype.getDefaultErrorText = function (name) {\n var vName = name ? name : _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"value\");\n if (this.minValue !== null && this.maxValue !== null) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMinMax\")[\"format\"](vName, this.minValue, this.maxValue);\n }\n else {\n if (this.minValue !== null) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMin\")[\"format\"](vName, this.minValue);\n }\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"numericMax\")[\"format\"](vName, this.maxValue);\n }\n };\n Object.defineProperty(NumericValidator.prototype, \"minValue\", {\n /**\n * The minValue property.\n */\n get: function () {\n return this.getPropertyValue(\"minValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"minValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NumericValidator.prototype, \"maxValue\", {\n /**\n * The maxValue property.\n */\n get: function () {\n return this.getPropertyValue(\"maxValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxValue\", val);\n },\n enumerable: false,\n configurable: true\n });\n return NumericValidator;\n}(SurveyValidator));\n\n/**\n * Validate text values.\n */\nvar TextValidator = /** @class */ (function (_super) {\n __extends(TextValidator, _super);\n function TextValidator(minLength, maxLength, allowDigits) {\n if (minLength === void 0) { minLength = 0; }\n if (maxLength === void 0) { maxLength = 0; }\n if (allowDigits === void 0) { allowDigits = true; }\n var _this = _super.call(this) || this;\n _this.minLength = minLength;\n _this.maxLength = maxLength;\n _this.allowDigits = allowDigits;\n return _this;\n }\n TextValidator.prototype.getType = function () {\n return \"textvalidator\";\n };\n TextValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (value !== \"\" && this.isValueEmpty(value))\n return null;\n if (!this.allowDigits) {\n var reg = /^[A-Za-z\\s]*$/;\n if (!reg.test(value)) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n }\n if (this.minLength > 0 && value.length < this.minLength) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n if (this.maxLength > 0 && value.length > this.maxLength) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n return null;\n };\n TextValidator.prototype.getDefaultErrorText = function (name) {\n if (this.minLength > 0 && this.maxLength > 0)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMinMaxLength\")[\"format\"](this.minLength, this.maxLength);\n if (this.minLength > 0)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMinLength\")[\"format\"](this.minLength);\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"textMaxLength\")[\"format\"](this.maxLength);\n };\n Object.defineProperty(TextValidator.prototype, \"minLength\", {\n /**\n * The minLength property.\n */\n get: function () {\n return this.getPropertyValue(\"minLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"minLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TextValidator.prototype, \"maxLength\", {\n /**\n * The maxLength property.\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TextValidator.prototype, \"allowDigits\", {\n /**\n * The allowDigits property.\n */\n get: function () {\n return this.getPropertyValue(\"allowDigits\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowDigits\", val);\n },\n enumerable: false,\n configurable: true\n });\n return TextValidator;\n}(SurveyValidator));\n\nvar AnswerCountValidator = /** @class */ (function (_super) {\n __extends(AnswerCountValidator, _super);\n function AnswerCountValidator(minCount, maxCount) {\n if (minCount === void 0) { minCount = null; }\n if (maxCount === void 0) { maxCount = null; }\n var _this = _super.call(this) || this;\n _this.minCount = minCount;\n _this.maxCount = maxCount;\n return _this;\n }\n AnswerCountValidator.prototype.getType = function () {\n return \"answercountvalidator\";\n };\n AnswerCountValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (value == null || value.constructor != Array)\n return null;\n var count = value.length;\n if (this.minCount && count < this.minCount) {\n return new ValidatorResult(null, this.createCustomError(_surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"minSelectError\")[\"format\"](this.minCount)));\n }\n if (this.maxCount && count > this.maxCount) {\n return new ValidatorResult(null, this.createCustomError(_surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"maxSelectError\")[\"format\"](this.maxCount)));\n }\n return null;\n };\n AnswerCountValidator.prototype.getDefaultErrorText = function (name) {\n return name;\n };\n Object.defineProperty(AnswerCountValidator.prototype, \"minCount\", {\n /**\n * The minCount property.\n */\n get: function () {\n return this.getPropertyValue(\"minCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"minCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AnswerCountValidator.prototype, \"maxCount\", {\n /**\n * The maxCount property.\n */\n get: function () {\n return this.getPropertyValue(\"maxCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxCount\", val);\n },\n enumerable: false,\n configurable: true\n });\n return AnswerCountValidator;\n}(SurveyValidator));\n\n/**\n * Use it to validate the text by regular expressions.\n */\nvar RegexValidator = /** @class */ (function (_super) {\n __extends(RegexValidator, _super);\n function RegexValidator(regex) {\n if (regex === void 0) { regex = null; }\n var _this = _super.call(this) || this;\n _this.regex = regex;\n return _this;\n }\n RegexValidator.prototype.getType = function () {\n return \"regexvalidator\";\n };\n RegexValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!this.regex || this.isValueEmpty(value))\n return null;\n var re = new RegExp(this.regex);\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var res = this.hasError(re, value[i], name);\n if (res)\n return res;\n }\n }\n return this.hasError(re, value, name);\n };\n RegexValidator.prototype.hasError = function (re, value, name) {\n if (re.test(value))\n return null;\n return new ValidatorResult(value, this.createCustomError(name));\n };\n Object.defineProperty(RegexValidator.prototype, \"regex\", {\n /**\n * The regex property.\n */\n get: function () {\n return this.getPropertyValue(\"regex\");\n },\n set: function (val) {\n this.setPropertyValue(\"regex\", val);\n },\n enumerable: false,\n configurable: true\n });\n return RegexValidator;\n}(SurveyValidator));\n\n/**\n * Validate e-mail address in the text input\n */\nvar EmailValidator = /** @class */ (function (_super) {\n __extends(EmailValidator, _super);\n function EmailValidator() {\n var _this = _super.call(this) || this;\n _this.re = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()=[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()=[\\]\\.,;:\\s@\\\"]{2,})$/i;\n return _this;\n }\n EmailValidator.prototype.getType = function () {\n return \"emailvalidator\";\n };\n EmailValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!value)\n return null;\n if (this.re.test(value))\n return null;\n return new ValidatorResult(value, this.createCustomError(name));\n };\n EmailValidator.prototype.getDefaultErrorText = function (name) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"].getString(\"invalidEmail\");\n };\n return EmailValidator;\n}(SurveyValidator));\n\n/**\n * Show error if expression returns false\n */\nvar ExpressionValidator = /** @class */ (function (_super) {\n __extends(ExpressionValidator, _super);\n function ExpressionValidator(expression) {\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.conditionRunner = null;\n _this.isRunningValue = false;\n _this.expression = expression;\n return _this;\n }\n ExpressionValidator.prototype.getType = function () {\n return \"expressionvalidator\";\n };\n Object.defineProperty(ExpressionValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isAsync\", {\n get: function () {\n if (!this.ensureConditionRunner())\n return false;\n return this.conditionRunner.isAsync;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isRunning\", {\n get: function () {\n return this.isRunningValue;\n },\n enumerable: false,\n configurable: true\n });\n ExpressionValidator.prototype.validate = function (value, name, values, properties) {\n var _this = this;\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!this.ensureConditionRunner())\n return null;\n this.conditionRunner.onRunComplete = function (res) {\n _this.isRunningValue = false;\n if (!!_this.onAsyncCompleted) {\n _this.onAsyncCompleted(_this.generateError(res, value, name));\n }\n };\n this.isRunningValue = true;\n var res = this.conditionRunner.run(values, properties);\n if (this.conditionRunner.isAsync)\n return null;\n this.isRunningValue = false;\n return this.generateError(res, value, name);\n };\n ExpressionValidator.prototype.generateError = function (res, value, name) {\n if (!res) {\n return new ValidatorResult(value, this.createCustomError(name));\n }\n return null;\n };\n ExpressionValidator.prototype.getDefaultErrorText = function (name) {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_2__[\"surveyLocalization\"]\n .getString(\"invalidExpression\")[\"format\"](this.expression);\n };\n ExpressionValidator.prototype.ensureConditionRunner = function () {\n if (!!this.conditionRunner) {\n this.conditionRunner.expression = this.expression;\n return true;\n }\n if (!this.expression)\n return false;\n this.conditionRunner = new _conditions__WEBPACK_IMPORTED_MODULE_4__[\"ConditionRunner\"](this.expression);\n return true;\n };\n Object.defineProperty(ExpressionValidator.prototype, \"expression\", {\n /**\n * The expression property.\n */\n get: function () {\n return this.getPropertyValue(\"expression\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: false,\n configurable: true\n });\n return ExpressionValidator;\n}(SurveyValidator));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"surveyvalidator\", [\n { name: \"text\", serializationProperty: \"locText\" },\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"numericvalidator\", [\"minValue:number\", \"maxValue:number\"], function () {\n return new NumericValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"textvalidator\", [\"minLength:number\", \"maxLength:number\", \"allowDigits:boolean\"], function () {\n return new TextValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"answercountvalidator\", [\"minCount:number\", \"maxCount:number\"], function () {\n return new AnswerCountValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"regexvalidator\", [\"regex\"], function () {\n return new RegexValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"emailvalidator\", [], function () {\n return new EmailValidator();\n}, \"surveyvalidator\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_3__[\"Serializer\"].addClass(\"expressionvalidator\", [\"expression:condition\"], function () {\n return new ExpressionValidator();\n}, \"surveyvalidator\");\n\n\n/***/ }),\n\n/***/ \"./src/vue/base.ts\":\n/*!*************************!*\\\n !*** ./src/vue/base.ts ***!\n \\*************************/\n/*! exports provided: BaseVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseVue\", function() { return BaseVue; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar BaseVue = /** @class */ (function (_super) {\n __extends(BaseVue, _super);\n function BaseVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BaseVue.prototype.getModel = function () {\n return null;\n };\n BaseVue.prototype.setIsRendering = function (val) {\n var model = this.getModel();\n if (!!model) {\n model.isRendering = val;\n }\n };\n BaseVue.prototype.getIsRendering = function () {\n var model = this.getModel();\n return !!model && !!model.isRendering;\n };\n BaseVue.prototype.onMounted = function () { };\n BaseVue.prototype.onUpdated = function () { };\n BaseVue.prototype.onDestroyed = function () { };\n BaseVue.prototype.onCreated = function () {\n var _this = this;\n var model = this.getModel();\n if (!model)\n return;\n model.iteratePropertiesHash(function (hash, key) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(hash, key, hash[key]);\n });\n model.setPropertyValueCoreHandler = function (propertiesHash, name, val) {\n if (!propertiesHash.hasOwnProperty(name) || !_this.getIsRendering())\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n };\n BaseVue.prototype.created = function () {\n this.onCreated();\n };\n BaseVue.prototype.beforeMount = function () {\n this.setIsRendering(true);\n };\n BaseVue.prototype.beforeUpdate = function () {\n this.setIsRendering(true);\n };\n BaseVue.prototype.mounted = function () {\n this.setIsRendering(false);\n this.onMounted();\n };\n BaseVue.prototype.updated = function () {\n this.setIsRendering(false);\n this.onUpdated();\n };\n BaseVue.prototype.destroyed = function () {\n this.onDestroyed();\n };\n BaseVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], BaseVue);\n return BaseVue;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue\":\n/*!**************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue ***!\n \\**************************************/\n/*! exports provided: BooleanCheckbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony import */ var _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanCheckbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-checkbox.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************/\n/*! exports provided: default, BooleanCheckbox */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanCheckbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanCheckbox\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a& ***!\n \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-checkbox.vue?vue&type=template&id=5ccd340a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-checkbox.vue?vue&type=template&id=5ccd340a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_checkbox_vue_vue_type_template_id_5ccd340a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue\":\n/*!************************************!*\\\n !*** ./src/vue/boolean-switch.vue ***!\n \\************************************/\n/*! exports provided: BooleanSwitch, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony import */ var _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boolean-switch.vue?vue&type=script&lang=ts& */ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"BooleanSwitch\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/boolean-switch.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/boolean-switch.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, BooleanSwitch */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BooleanSwitch\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"BooleanSwitch\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./boolean-switch.vue?vue&type=template&id=70e4aebb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/boolean-switch.vue?vue&type=template&id=70e4aebb&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_boolean_switch_vue_vue_type_template_id_70e4aebb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/boolean.ts\":\n/*!****************************!*\\\n !*** ./src/vue/boolean.ts ***!\n \\****************************/\n/*! exports provided: Boolean */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return Boolean; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./question */ \"./src/vue/question.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar Boolean = /** @class */ (function (_super) {\n __extends(Boolean, _super);\n function Boolean() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Boolean.prototype, \"itemClass\", {\n get: function () {\n var question = this.question;\n var cssClasses = question.cssClasses;\n var isChecked = question.checkedValue;\n var isDisabled = question.isReadOnly;\n var itemClass = cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n else if (isChecked === null)\n itemClass += \" \" + cssClasses.itemIndeterminate;\n return itemClass;\n },\n enumerable: false,\n configurable: true\n });\n Boolean.prototype.getLabelClass = function (checked) {\n var question = this.question;\n var cssClasses = this.question.cssClasses;\n return (cssClasses.label +\n \" \" +\n (question.checkedValue === !checked || question.isReadOnly\n ? question.cssClasses.disabledLabel\n : \"\"));\n };\n Boolean.prototype.preventDefaults = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n Boolean.prototype.onSwitchClick = function (event) {\n if (this.question.isIndeterminate) {\n this.preventDefaults(event);\n var isRightClick = event.offsetX / event.target.offsetWidth > 0.5;\n var isRtl = document.defaultView.getComputedStyle(event.target).direction == \"rtl\";\n this.question.checkedValue = isRtl ? !isRightClick : isRightClick;\n }\n };\n Boolean.prototype.onLabelClick = function (event, value) {\n if (this.question.isIndeterminate) {\n this.preventDefaults(event);\n this.question.checkedValue = value;\n }\n };\n Boolean = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], Boolean);\n return Boolean;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/buttongroup.vue ***!\n \\*********************************/\n/*! exports provided: ButtonGroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony import */ var _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buttongroup.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/buttongroup.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, ButtonGroup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroup.vue?vue&type=template&id=6bdc7abb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroup.vue?vue&type=template&id=6bdc7abb&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroup_vue_vue_type_template_id_6bdc7abb___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/buttongroupitem.vue ***!\n \\*************************************/\n/*! exports provided: ButtonGroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony import */ var _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ButtonGroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/buttongroupitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/buttongroupitem.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, ButtonGroupItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ButtonGroupItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./buttongroupitem.vue?vue&type=template&id=4bad6ace& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/buttongroupitem.vue?vue&type=template&id=4bad6ace&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_buttongroupitem_vue_vue_type_template_id_4bad6ace___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue\":\n/*!******************************!*\\\n !*** ./src/vue/checkbox.vue ***!\n \\******************************/\n/*! exports provided: Checkbox, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkbox.vue?vue&type=template&id=cad276f6& */ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony import */ var _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkbox.vue?vue&type=script&lang=ts& */ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Checkbox\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkbox.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/checkbox.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Checkbox */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Checkbox\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/checkbox.vue?vue&type=template&id=cad276f6& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkbox.vue?vue&type=template&id=cad276f6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkbox.vue?vue&type=template&id=cad276f6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkbox_vue_vue_type_template_id_cad276f6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/checkboxitem.vue ***!\n \\**********************************/\n/*! exports provided: CheckboxItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony import */ var _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkboxitem.vue?vue&type=script&lang=ts& */ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CheckboxItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/checkboxitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/checkboxitem.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, CheckboxItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CheckboxItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./checkboxitem.vue?vue&type=template&id=c58c80d0& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/checkboxitem.vue?vue&type=template&id=c58c80d0&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_checkboxitem_vue_vue_type_template_id_c58c80d0___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue\":\n/*!*****************************!*\\\n !*** ./src/vue/comment.vue ***!\n \\*****************************/\n/*! exports provided: Comment, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./comment.vue?vue&type=template&id=099c2c8d& */ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony import */ var _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./comment.vue?vue&type=script&lang=ts& */ \"./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Comment\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/comment.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n !*** ./src/vue/comment.vue?vue&type=script&lang=ts& ***!\n \\******************************************************/\n/*! exports provided: default, Comment */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Comment\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/comment.vue?vue&type=template&id=099c2c8d&\":\n/*!************************************************************!*\\\n !*** ./src/vue/comment.vue?vue&type=template&id=099c2c8d& ***!\n \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./comment.vue?vue&type=template&id=099c2c8d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/comment.vue?vue&type=template&id=099c2c8d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_comment_vue_vue_type_template_id_099c2c8d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue\":\n/*!********************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue ***!\n \\********************************************************************/\n/*! exports provided: ActionBarItemDropdownViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony import */ var _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item-dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************************************/\n/*! exports provided: default, ActionBarItemDropdownViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\":\n/*!***************************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& ***!\n \\***************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item-dropdown.vue?vue&type=template&id=4ca4f276&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_dropdown_vue_vue_type_template_id_4ca4f276___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue\":\n/*!***********************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue ***!\n \\***********************************************************/\n/*! exports provided: ActionBarItemViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony import */ var _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************************/\n/*! exports provided: default, ActionBarItemViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\":\n/*!******************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8& ***!\n \\******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-item.vue?vue&type=template&id=40a056f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-item.vue?vue&type=template&id=40a056f8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_item_vue_vue_type_template_id_40a056f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue\":\n/*!****************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue ***!\n \\****************************************************************/\n/*! exports provided: ActionBarSeparatorViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony import */ var _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar-separator.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************/\n/*! exports provided: default, ActionBarSeparatorViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\":\n/*!***********************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850& ***!\n \\***********************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar-separator.vue?vue&type=template&id=1aab6850& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar-separator.vue?vue&type=template&id=1aab6850&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_separator_vue_vue_type_template_id_1aab6850___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue\":\n/*!******************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue ***!\n \\******************************************************/\n/*! exports provided: ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action-bar.vue?vue&type=template&id=313bf210& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony import */ var _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action-bar.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/action-bar/action-bar.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************/\n/*! exports provided: default, ActionBarItemViewModel, ActionBarItemDropdownViewModel, ActionBarSeparatorViewModel, ActionBarViewModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarItemDropdownViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarSeparatorViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarSeparatorViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionBarViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionBarViewModel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210& ***!\n \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./action-bar.vue?vue&type=template&id=313bf210& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action-bar.vue?vue&type=template&id=313bf210&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_action_bar_vue_vue_type_template_id_313bf210___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue\":\n/*!************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue ***!\n \\************************************************************/\n/*! exports provided: DefaultTitle, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./default-title.vue?vue&type=template&id=7f6117dc& */ \"./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\");\n/* harmony import */ var _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./default-title.vue?vue&type=script&lang=ts& */ \"./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/default-title/default-title.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************/\n/*! exports provided: default, DefaultTitle */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./default-title.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitle\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\":\n/*!*******************************************************************************************!*\\\n !*** ./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc& ***!\n \\*******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./default-title.vue?vue&type=template&id=7f6117dc& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/default-title/default-title.vue?vue&type=template&id=7f6117dc&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_default_title_vue_vue_type_template_id_7f6117dc___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/components/list/list.vue ***!\n \\******************************************/\n/*! exports provided: List, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./list.vue?vue&type=template&id=cc17a010& */ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony import */ var _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./list.vue?vue&type=script&lang=ts& */ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/list/list.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/components/list/list.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, List */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"List\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/components/list/list.vue?vue&type=template&id=cc17a010& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./list.vue?vue&type=template&id=cc17a010& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list.vue?vue&type=template&id=cc17a010&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_template_id_cc17a010___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue ***!\n \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDetailButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony import */ var _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./detail-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/detail-button/detail-button.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDetailButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDetailButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\":\n/*!**********************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6& ***!\n \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail-button.vue?vue&type=template&id=5b4e69b6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/detail-button/detail-button.vue?vue&type=template&id=5b4e69b6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_button_vue_vue_type_template_id_5b4e69b6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue ***!\n \\***************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicRemoveButton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony import */ var _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./remove-button.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/matrix-actions/remove-button/remove-button.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\":\n/*!****************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicRemoveButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/ts-loader??ref--0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicRemoveButton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\":\n/*!**********************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60& ***!\n \\**********************************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./remove-button.vue?vue&type=template&id=c8a7aa60& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/remove-button/remove-button.vue?vue&type=template&id=c8a7aa60&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_remove_button_vue_vue_type_template_id_c8a7aa60___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue\":\n/*!******************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue ***!\n \\******************************************************/\n/*! exports provided: PopupContainer, showModal, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony import */ var _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popup-container.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"showModal\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup-container.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************************/\n/*! exports provided: default, PopupContainer, showModal */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupContainer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PopupContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"showModal\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"showModal\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74& ***!\n \\*************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup-container.vue?vue&type=template&id=c18dfd74& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup-container.vue?vue&type=template&id=c18dfd74&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_container_vue_vue_type_template_id_c18dfd74___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue\":\n/*!********************************************!*\\\n !*** ./src/vue/components/popup/popup.vue ***!\n \\********************************************/\n/*! exports provided: Popup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./popup.vue?vue&type=template&id=ef11265c& */ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony import */ var _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./popup.vue?vue&type=script&lang=ts& */ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Popup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/popup/popup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/components/popup/popup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************/\n/*! exports provided: default, Popup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Popup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Popup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c& ***!\n \\***************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./popup.vue?vue&type=template&id=ef11265c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/popup/popup.vue?vue&type=template&id=ef11265c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_popup_vue_vue_type_template_id_ef11265c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue\":\n/*!**************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue ***!\n \\**************************************************/\n/*! exports provided: SvgIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./svg-icon.vue?vue&type=template&id=684776f8& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony import */ var _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svg-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SvgIcon\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/svg-icon/svg-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************/\n/*! exports provided: default, SvgIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SvgIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SvgIcon\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\":\n/*!*********************************************************************************!*\\\n !*** ./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8& ***!\n \\*********************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./svg-icon.vue?vue&type=template&id=684776f8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/svg-icon/svg-icon.vue?vue&type=template&id=684776f8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_svg_icon_vue_vue_type_template_id_684776f8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue\":\n/*!************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue ***!\n \\************************************************************/\n/*! exports provided: TitleActions, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./title-actions.vue?vue&type=template&id=b72886ec& */ \"./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\");\n/* harmony import */ var _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title-actions.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleActions\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/components/title-actions/title-actions.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************************************/\n/*! exports provided: default, TitleActions */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/ts-loader??ref--0!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleActions\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\":\n/*!*******************************************************************************************!*\\\n !*** ./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec& ***!\n \\*******************************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./title-actions.vue?vue&type=template&id=b72886ec& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title-actions/title-actions.vue?vue&type=template&id=b72886ec&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_title_actions_vue_vue_type_template_id_b72886ec___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue\":\n/*!*******************************!*\\\n !*** ./src/vue/composite.vue ***!\n \\*******************************/\n/*! exports provided: Composite, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./composite.vue?vue&type=template&id=1a9e2196& */ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony import */ var _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./composite.vue?vue&type=script&lang=ts& */ \"./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Composite\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/composite.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n !*** ./src/vue/composite.vue?vue&type=script&lang=ts& ***!\n \\********************************************************/\n/*! exports provided: default, Composite */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Composite\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/composite.vue?vue&type=template&id=1a9e2196&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/composite.vue?vue&type=template&id=1a9e2196& ***!\n \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./composite.vue?vue&type=template&id=1a9e2196& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/composite.vue?vue&type=template&id=1a9e2196&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_composite_vue_vue_type_template_id_1a9e2196___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue\":\n/*!****************************!*\\\n !*** ./src/vue/custom.vue ***!\n \\****************************/\n/*! exports provided: Custom, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./custom.vue?vue&type=template&id=d4aae09a& */ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony import */ var _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom.vue?vue&type=script&lang=ts& */ \"./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Custom\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/custom.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/custom.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Custom */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Custom\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/custom.vue?vue&type=template&id=d4aae09a&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/custom.vue?vue&type=template&id=d4aae09a& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./custom.vue?vue&type=template&id=d4aae09a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/custom.vue?vue&type=template&id=d4aae09a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_custom_vue_vue_type_template_id_d4aae09a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/customwidget.vue ***!\n \\**********************************/\n/*! exports provided: CustomWidget, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony import */ var _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./customwidget.vue?vue&type=script&lang=ts& */ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"CustomWidget\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/customwidget.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/customwidget.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, CustomWidget */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"CustomWidget\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./customwidget.vue?vue&type=template&id=1e61a7b7& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/customwidget.vue?vue&type=template&id=1e61a7b7&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_customwidget_vue_vue_type_template_id_1e61a7b7___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/drag-drop-td.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/drag-drop-td.vue ***!\n \\**********************************/\n/*! exports provided: DragDropTD, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag-drop-td.vue?vue&type=template&id=6b922537& */ \"./src/vue/drag-drop-td.vue?vue&type=template&id=6b922537&\");\n/* harmony import */ var _drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drag-drop-td.vue?vue&type=script&lang=ts& */ \"./src/vue/drag-drop-td.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropTD\", function() { return _drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"DragDropTD\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/drag-drop-td.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/drag-drop-td.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/drag-drop-td.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, DragDropTD */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-td.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/drag-drop-td.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropTD\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"DragDropTD\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/drag-drop-td.vue?vue&type=template&id=6b922537&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/drag-drop-td.vue?vue&type=template&id=6b922537& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./drag-drop-td.vue?vue&type=template&id=6b922537& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/drag-drop-td.vue?vue&type=template&id=6b922537&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_td_vue_vue_type_template_id_6b922537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue\":\n/*!******************************!*\\\n !*** ./src/vue/dropdown.vue ***!\n \\******************************/\n/*! exports provided: Dropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony import */ var _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Dropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/dropdown.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Dropdown */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Dropdown\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/dropdown.vue?vue&type=template&id=6b3215d3& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=6b3215d3& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/dropdown.vue?vue&type=template&id=6b3215d3&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_6b3215d3___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue\":\n/*!*****************************!*\\\n !*** ./src/vue/element.vue ***!\n \\*****************************/\n/*! exports provided: SurveyElementVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element.vue?vue&type=template&id=973472ac& */ \"./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony import */ var _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.vue?vue&type=script&lang=ts& */ \"./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyElementVue\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/element.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=script&lang=ts&\":\n/*!******************************************************!*\\\n !*** ./src/vue/element.vue?vue&type=script&lang=ts& ***!\n \\******************************************************/\n/*! exports provided: default, SurveyElementVue */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementVue\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/element.vue?vue&type=template&id=973472ac&\":\n/*!************************************************************!*\\\n !*** ./src/vue/element.vue?vue&type=template&id=973472ac& ***!\n \\************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./element.vue?vue&type=template&id=973472ac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/element.vue?vue&type=template&id=973472ac&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_element_vue_vue_type_template_id_973472ac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/elementheader.vue ***!\n \\***********************************/\n/*! exports provided: ElementHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./elementheader.vue?vue&type=template&id=27adc537& */ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony import */ var _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./elementheader.vue?vue&type=script&lang=ts& */ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ElementHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/elementheader.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/elementheader.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, ElementHeader */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ElementHeader\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/elementheader.vue?vue&type=template&id=27adc537&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/elementheader.vue?vue&type=template&id=27adc537& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./elementheader.vue?vue&type=template&id=27adc537& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/elementheader.vue?vue&type=template&id=27adc537&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_elementheader_vue_vue_type_template_id_27adc537___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue\":\n/*!***************************!*\\\n !*** ./src/vue/empty.vue ***!\n \\***************************/\n/*! exports provided: Empty, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./empty.vue?vue&type=template&id=05052c0a& */ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony import */ var _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./empty.vue?vue&type=script&lang=ts& */ \"./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Empty\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/empty.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/empty.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, Empty */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Empty\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/empty.vue?vue&type=template&id=05052c0a&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/empty.vue?vue&type=template&id=05052c0a& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./empty.vue?vue&type=template&id=05052c0a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/empty.vue?vue&type=template&id=05052c0a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_empty_vue_vue_type_template_id_05052c0a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue\":\n/*!****************************!*\\\n !*** ./src/vue/errors.vue ***!\n \\****************************/\n/*! exports provided: Errors, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors.vue?vue&type=template&id=5682e6ad& */ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony import */ var _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors.vue?vue&type=script&lang=ts& */ \"./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Errors\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/errors.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/errors.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Errors */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Errors\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/errors.vue?vue&type=template&id=5682e6ad&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/errors.vue?vue&type=template&id=5682e6ad& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./errors.vue?vue&type=template&id=5682e6ad& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/errors.vue?vue&type=template&id=5682e6ad&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_errors_vue_vue_type_template_id_5682e6ad___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue\":\n/*!********************************!*\\\n !*** ./src/vue/expression.vue ***!\n \\********************************/\n/*! exports provided: Expression, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expression.vue?vue&type=template&id=1d20865a& */ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony import */ var _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./expression.vue?vue&type=script&lang=ts& */ \"./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Expression\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/expression.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/expression.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Expression */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Expression\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/expression.vue?vue&type=template&id=1d20865a&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/expression.vue?vue&type=template&id=1d20865a& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./expression.vue?vue&type=template&id=1d20865a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/expression.vue?vue&type=template&id=1d20865a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_expression_vue_vue_type_template_id_1d20865a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue\":\n/*!**************************!*\\\n !*** ./src/vue/file.vue ***!\n \\**************************/\n/*! exports provided: File, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./file.vue?vue&type=template&id=20f70284& */ \"./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony import */ var _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file.vue?vue&type=script&lang=ts& */ \"./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"File\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/file.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/file.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, File */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"File\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/file.vue?vue&type=template&id=20f70284&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/file.vue?vue&type=template&id=20f70284& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./file.vue?vue&type=template&id=20f70284& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/file.vue?vue&type=template&id=20f70284&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_file_vue_vue_type_template_id_20f70284___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue\":\n/*!*******************************!*\\\n !*** ./src/vue/flowpanel.vue ***!\n \\*******************************/\n/*! exports provided: FlowPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony import */ var _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flowpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=script&lang=ts&\":\n/*!********************************************************!*\\\n !*** ./src/vue/flowpanel.vue?vue&type=script&lang=ts& ***!\n \\********************************************************/\n/*! exports provided: default, FlowPanel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78& ***!\n \\**************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanel.vue?vue&type=template&id=96ae1a78& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanel.vue?vue&type=template&id=96ae1a78&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanel_vue_vue_type_template_id_96ae1a78___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue\":\n/*!**************************************!*\\\n !*** ./src/vue/flowpanelelement.vue ***!\n \\**************************************/\n/*! exports provided: FlowPanelElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony import */ var _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/flowpanelelement.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/flowpanelelement.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************/\n/*! exports provided: default, FlowPanelElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"FlowPanelElement\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30& ***!\n \\*********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./flowpanelelement.vue?vue&type=template&id=9d992c30& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/flowpanelelement.vue?vue&type=template&id=9d992c30&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_flowpanelelement_vue_vue_type_template_id_9d992c30___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue\":\n/*!****************************!*\\\n !*** ./src/vue/header.vue ***!\n \\****************************/\n/*! exports provided: SurveyHeader, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=69cff8cf& */ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony import */ var _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header.vue?vue&type=script&lang=ts& */ \"./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/header.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/header.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, SurveyHeader */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyHeader\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/header.vue?vue&type=template&id=69cff8cf&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/header.vue?vue&type=template&id=69cff8cf& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./header.vue?vue&type=template&id=69cff8cf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/header.vue?vue&type=template&id=69cff8cf&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_69cff8cf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue\":\n/*!**************************!*\\\n !*** ./src/vue/html.vue ***!\n \\**************************/\n/*! exports provided: Html, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./html.vue?vue&type=template&id=0742e16d& */ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony import */ var _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./html.vue?vue&type=script&lang=ts& */ \"./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Html\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/html.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/html.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, Html */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Html\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/html.vue?vue&type=template&id=0742e16d&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/html.vue?vue&type=template&id=0742e16d& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./html.vue?vue&type=template&id=0742e16d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/html.vue?vue&type=template&id=0742e16d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_html_vue_vue_type_template_id_0742e16d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue\":\n/*!***************************!*\\\n !*** ./src/vue/image.vue ***!\n \\***************************/\n/*! exports provided: QuestionImage, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./image.vue?vue&type=template&id=1dc8d709& */ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony import */ var _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./image.vue?vue&type=script&lang=ts& */ \"./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionImage\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/image.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/image.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, QuestionImage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionImage\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionImage\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/image.vue?vue&type=template&id=1dc8d709&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/image.vue?vue&type=template&id=1dc8d709& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./image.vue?vue&type=template&id=1dc8d709& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/image.vue?vue&type=template&id=1dc8d709&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_image_vue_vue_type_template_id_1dc8d709___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/imagepicker.vue ***!\n \\*********************************/\n/*! exports provided: ImagePicker, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imagepicker.vue?vue&type=template&id=153fe052& */ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony import */ var _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./imagepicker.vue?vue&type=script&lang=ts& */ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ImagePicker\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/imagepicker.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/imagepicker.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, ImagePicker */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ImagePicker\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/imagepicker.vue?vue&type=template&id=153fe052& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./imagepicker.vue?vue&type=template&id=153fe052& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/imagepicker.vue?vue&type=template&id=153fe052&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_imagepicker_vue_vue_type_template_id_153fe052___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue\":\n/*!****************************!*\\\n !*** ./src/vue/matrix.vue ***!\n \\****************************/\n/*! exports provided: Matrix, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrix.vue?vue&type=template&id=7fa2f403& */ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony import */ var _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrix.vue?vue&type=script&lang=ts& */ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Matrix\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrix.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/matrix.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Matrix */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Matrix\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/matrix.vue?vue&type=template&id=7fa2f403& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrix.vue?vue&type=template&id=7fa2f403& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrix.vue?vue&type=template&id=7fa2f403&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrix_vue_vue_type_template_id_7fa2f403___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue\":\n/*!********************************!*\\\n !*** ./src/vue/matrixcell.vue ***!\n \\********************************/\n/*! exports provided: MatrixCell, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony import */ var _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixcell.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixCell\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixcell.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/matrixcell.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, MatrixCell */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixCell\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixcell.vue?vue&type=template&id=3ca54ee5& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixcell.vue?vue&type=template&id=3ca54ee5&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixcell_vue_vue_type_template_id_3ca54ee5___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue\":\n/*!************************************!*\\\n !*** ./src/vue/matrixdropdown.vue ***!\n \\************************************/\n/*! exports provided: MatrixDropdown, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony import */ var _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDropdown\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/matrixdropdown.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, MatrixDropdown */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDropdown\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdropdown.vue?vue&type=template&id=0b4da6d8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdropdown.vue?vue&type=template&id=0b4da6d8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdropdown_vue_vue_type_template_id_0b4da6d8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/matrixdynamic.vue ***!\n \\***********************************/\n/*! exports provided: MatrixDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony import */ var _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixdynamic.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/matrixdynamic.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, MatrixDynamic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixDynamic\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixdynamic.vue?vue&type=template&id=9a0b88e8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixdynamic.vue?vue&type=template&id=9a0b88e8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixdynamic_vue_vue_type_template_id_9a0b88e8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/matrixtable.vue ***!\n \\*********************************/\n/*! exports provided: MatrixTable, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony import */ var _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matrixtable.vue?vue&type=script&lang=ts& */ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MatrixTable\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/matrixtable.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/matrixtable.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, MatrixTable */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MatrixTable\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./matrixtable.vue?vue&type=template&id=fa197e4a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/matrixtable.vue?vue&type=template&id=fa197e4a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_matrixtable_vue_vue_type_template_id_fa197e4a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/multipletext.vue ***!\n \\**********************************/\n/*! exports provided: MultipleText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony import */ var _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multipletext.vue?vue&type=script&lang=ts& */ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"MultipleText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/multipletext.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/multipletext.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, MultipleText */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"MultipleText\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/multipletext.vue?vue&type=template&id=93fe4c02& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./multipletext.vue?vue&type=template&id=93fe4c02& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/multipletext.vue?vue&type=template&id=93fe4c02&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_multipletext_vue_vue_type_template_id_93fe4c02___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue\":\n/*!********************************!*\\\n !*** ./src/vue/navigation.vue ***!\n \\********************************/\n/*! exports provided: Navigation, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./navigation.vue?vue&type=template&id=75eadfd6& */ \"./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\");\n/* harmony import */ var _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./navigation.vue?vue&type=script&lang=ts& */ \"./src/vue/navigation.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Navigation\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/navigation.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/navigation.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Navigation */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./navigation.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Navigation\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/navigation.vue?vue&type=template&id=75eadfd6& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./navigation.vue?vue&type=template&id=75eadfd6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/navigation.vue?vue&type=template&id=75eadfd6&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_navigation_vue_vue_type_template_id_75eadfd6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue\":\n/*!*********************************!*\\\n !*** ./src/vue/otherChoice.vue ***!\n \\*********************************/\n/*! exports provided: OtherChoice, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./otherChoice.vue?vue&type=template&id=2ed776ff& */ \"./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\");\n/* harmony import */ var _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./otherChoice.vue?vue&type=script&lang=ts& */ \"./src/vue/otherChoice.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"OtherChoice\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/otherChoice.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue?vue&type=script&lang=ts&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/otherChoice.vue?vue&type=script&lang=ts& ***!\n \\**********************************************************/\n/*! exports provided: default, OtherChoice */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./otherChoice.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"OtherChoice\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\":\n/*!****************************************************************!*\\\n !*** ./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff& ***!\n \\****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./otherChoice.vue?vue&type=template&id=2ed776ff& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/otherChoice.vue?vue&type=template&id=2ed776ff&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_otherChoice_vue_vue_type_template_id_2ed776ff___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue\":\n/*!**************************!*\\\n !*** ./src/vue/page.vue ***!\n \\**************************/\n/*! exports provided: Page, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./page.vue?vue&type=template&id=4e962a51& */ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony import */ var _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./page.vue?vue&type=script&lang=ts& */ \"./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Page\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/page.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/page.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, Page */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Page\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/page.vue?vue&type=template&id=4e962a51&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/page.vue?vue&type=template&id=4e962a51& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./page.vue?vue&type=template&id=4e962a51& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/page.vue?vue&type=template&id=4e962a51&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_page_vue_vue_type_template_id_4e962a51___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue\":\n/*!***************************!*\\\n !*** ./src/vue/panel.vue ***!\n \\***************************/\n/*! exports provided: Panel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./panel.vue?vue&type=template&id=0c78899c& */ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony import */ var _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel.vue?vue&type=script&lang=ts& */ \"./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Panel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/panel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=script&lang=ts&\":\n/*!****************************************************!*\\\n !*** ./src/vue/panel.vue?vue&type=script&lang=ts& ***!\n \\****************************************************/\n/*! exports provided: default, Panel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Panel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/panel.vue?vue&type=template&id=0c78899c&\":\n/*!**********************************************************!*\\\n !*** ./src/vue/panel.vue?vue&type=template&id=0c78899c& ***!\n \\**********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./panel.vue?vue&type=template&id=0c78899c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/panel.vue?vue&type=template&id=0c78899c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_panel_vue_vue_type_template_id_0c78899c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/paneldynamic.vue ***!\n \\**********************************/\n/*! exports provided: PanelDynamic, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony import */ var _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamic.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamic\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamic.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/paneldynamic.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, PanelDynamic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamic\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamic.vue?vue&type=template&id=9dda5d06& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamic.vue?vue&type=template&id=9dda5d06&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamic_vue_vue_type_template_id_9dda5d06___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue ***!\n \\******************************************/\n/*! exports provided: PanelDynamicProgress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony import */ var _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicprogress.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, PanelDynamicProgress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgress\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicprogress.vue?vue&type=template&id=742bffac& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogress.vue?vue&type=template&id=742bffac&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogress_vue_vue_type_template_id_742bffac___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue\":\n/*!****************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue ***!\n \\****************************************/\n/*! exports provided: PanelDynamicRemove, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicremove.vue?vue&type=template&id=db6b2f7e& */ \"./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\");\n/* harmony import */ var _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicremove.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicRemove\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/paneldynamicremove.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************/\n/*! exports provided: default, PanelDynamicRemove */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicremove.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicRemove\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\":\n/*!***********************************************************************!*\\\n !*** ./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e& ***!\n \\***********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./paneldynamicremove.vue?vue&type=template&id=db6b2f7e& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicremove.vue?vue&type=template&id=db6b2f7e&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicremove_vue_vue_type_template_id_db6b2f7e___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue\":\n/*!******************************!*\\\n !*** ./src/vue/progress.vue ***!\n \\******************************/\n/*! exports provided: Progress, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progress.vue?vue&type=template&id=27e325ef& */ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony import */ var _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress.vue?vue&type=script&lang=ts& */ \"./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Progress\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progress.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************!*\\\n !*** ./src/vue/progress.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************/\n/*! exports provided: default, Progress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Progress\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progress.vue?vue&type=template&id=27e325ef&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/progress.vue?vue&type=template&id=27e325ef& ***!\n \\*************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progress.vue?vue&type=template&id=27e325ef& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progress.vue?vue&type=template&id=27e325ef&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progress_vue_vue_type_template_id_27e325ef___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/progressButtons.vue ***!\n \\*************************************/\n/*! exports provided: ProgressButtons, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony import */ var _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progressButtons.vue?vue&type=script&lang=ts& */ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/progressButtons.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/progressButtons.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, ProgressButtons */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressButtons\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ProgressButtons\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./progressButtons.vue?vue&type=template&id=2ae7de42& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/progressButtons.vue?vue&type=template&id=2ae7de42&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_progressButtons_vue_vue_type_template_id_2ae7de42___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/question.ts\":\n/*!*****************************!*\\\n !*** ./src/vue/question.ts ***!\n \\*****************************/\n/*! exports provided: QuestionVue, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionVue\", function() { return QuestionVue; });\n/* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./src/vue/base.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar QuestionVue = /** @class */ (function (_super) {\n __extends(QuestionVue, _super);\n function QuestionVue() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.innerValue = null;\n return _this;\n }\n QuestionVue.prototype.changeQuestion = function (new_val, old_val) {\n this.innerValue = null;\n };\n QuestionVue.prototype.getModel = function () {\n return this.question;\n };\n QuestionVue.prototype.onMounted = function () {\n if (this.question) {\n this.question.afterRenderQuestionElement(this.$el);\n }\n };\n QuestionVue.prototype.beforeDestroy = function () {\n if (this.question) {\n this.question.beforeDestroyQuestionElement(this.$el);\n }\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], QuestionVue.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], QuestionVue.prototype, \"css\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Watch\"])(\"question\")\n ], QuestionVue.prototype, \"changeQuestion\", null);\n QuestionVue = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], QuestionVue);\n return QuestionVue;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"BaseVue\"]));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (QuestionVue);\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue\":\n/*!********************************!*\\\n !*** ./src/vue/radiogroup.vue ***!\n \\********************************/\n/*! exports provided: Radiogroup, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony import */ var _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./radiogroup.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Radiogroup\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroup.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/radiogroup.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, Radiogroup */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Radiogroup\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/radiogroup.vue?vue&type=template&id=06c6d526& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroup.vue?vue&type=template&id=06c6d526& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroup.vue?vue&type=template&id=06c6d526&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroup_vue_vue_type_template_id_06c6d526___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue\":\n/*!************************************!*\\\n !*** ./src/vue/radiogroupitem.vue ***!\n \\************************************/\n/*! exports provided: RadiogroupItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony import */ var _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RadiogroupItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/radiogroupitem.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\":\n/*!*************************************************************!*\\\n !*** ./src/vue/radiogroupitem.vue?vue&type=script&lang=ts& ***!\n \\*************************************************************/\n/*! exports provided: default, RadiogroupItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RadiogroupItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9& ***!\n \\*******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./radiogroupitem.vue?vue&type=template&id=5bbe97b9& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/radiogroupitem.vue?vue&type=template&id=5bbe97b9&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_radiogroupitem_vue_vue_type_template_id_5bbe97b9___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue\":\n/*!******************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue ***!\n \\******************************************/\n/*! exports provided: RankingItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ranking-item.vue?vue&type=template&id=2faded76& */ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony import */ var _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ranking-item.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"RankingItem\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\":\n/*!*******************************************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts& ***!\n \\*******************************************************************/\n/*! exports provided: default, RankingItem */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RankingItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"RankingItem\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\":\n/*!*************************************************************************!*\\\n !*** ./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76& ***!\n \\*************************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking-item.vue?vue&type=template&id=2faded76& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking-item.vue?vue&type=template&id=2faded76&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_item_vue_vue_type_template_id_2faded76___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue\":\n/*!*************************************!*\\\n !*** ./src/vue/ranking/ranking.vue ***!\n \\*************************************/\n/*! exports provided: Ranking, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ranking.vue?vue&type=template&id=19074eea& */ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony import */ var _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ranking.vue?vue&type=script&lang=ts& */ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Ranking\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/ranking/ranking.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\":\n/*!**************************************************************!*\\\n !*** ./src/vue/ranking/ranking.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************/\n/*! exports provided: default, Ranking */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/ts-loader??ref--0!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ranking\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Ranking\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\":\n/*!********************************************************************!*\\\n !*** ./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea& ***!\n \\********************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./ranking.vue?vue&type=template&id=19074eea& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/ranking/ranking.vue?vue&type=template&id=19074eea&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ranking_vue_vue_type_template_id_19074eea___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue\":\n/*!****************************!*\\\n !*** ./src/vue/rating.vue ***!\n \\****************************/\n/*! exports provided: Rating, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rating.vue?vue&type=template&id=7092bfdf& */ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony import */ var _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rating.vue?vue&type=script&lang=ts& */ \"./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Rating\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/rating.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/rating.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Rating */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Rating\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/rating.vue?vue&type=template&id=7092bfdf&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/rating.vue?vue&type=template&id=7092bfdf& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./rating.vue?vue&type=template&id=7092bfdf& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/rating.vue?vue&type=template&id=7092bfdf&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_rating_vue_vue_type_template_id_7092bfdf___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue\":\n/*!*************************!*\\\n !*** ./src/vue/row.vue ***!\n \\*************************/\n/*! exports provided: Row, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./row.vue?vue&type=template&id=7cc0bd88& */ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony import */ var _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./row.vue?vue&type=script&lang=ts& */ \"./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Row\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/row.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=script&lang=ts&\":\n/*!**************************************************!*\\\n !*** ./src/vue/row.vue?vue&type=script&lang=ts& ***!\n \\**************************************************/\n/*! exports provided: default, Row */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Row\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/row.vue?vue&type=template&id=7cc0bd88&\":\n/*!********************************************************!*\\\n !*** ./src/vue/row.vue?vue&type=template&id=7cc0bd88& ***!\n \\********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./row.vue?vue&type=template&id=7cc0bd88& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/row.vue?vue&type=template&id=7cc0bd88&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_row_vue_vue_type_template_id_7cc0bd88___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/signaturepad.vue ***!\n \\**********************************/\n/*! exports provided: SignaturePad, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./signaturepad.vue?vue&type=template&id=0462349d& */ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony import */ var _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./signaturepad.vue?vue&type=script&lang=ts& */ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SignaturePad\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/signaturepad.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/signaturepad.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, SignaturePad */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SignaturePad\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/signaturepad.vue?vue&type=template&id=0462349d& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./signaturepad.vue?vue&type=template&id=0462349d& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/signaturepad.vue?vue&type=template&id=0462349d&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_signaturepad_vue_vue_type_template_id_0462349d___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/string-editor.vue ***!\n \\***********************************/\n/*! exports provided: SurveyStringEditor, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string-editor.vue?vue&type=template&id=9639f152& */ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony import */ var _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string-editor.vue?vue&type=script&lang=ts& */ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringEditor\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-editor.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/string-editor.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, SurveyStringEditor */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringEditor\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringEditor\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-editor.vue?vue&type=template&id=9639f152&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/string-editor.vue?vue&type=template&id=9639f152& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-editor.vue?vue&type=template&id=9639f152& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-editor.vue?vue&type=template&id=9639f152&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_editor_vue_vue_type_template_id_9639f152___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue\":\n/*!***********************************!*\\\n !*** ./src/vue/string-viewer.vue ***!\n \\***********************************/\n/*! exports provided: SurveyStringViewer, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string-viewer.vue?vue&type=template&id=7d918508& */ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony import */ var _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string-viewer.vue?vue&type=script&lang=ts& */ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyStringViewer\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string-viewer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=script&lang=ts&\":\n/*!************************************************************!*\\\n !*** ./src/vue/string-viewer.vue?vue&type=script&lang=ts& ***!\n \\************************************************************/\n/*! exports provided: default, SurveyStringViewer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyStringViewer\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyStringViewer\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/string-viewer.vue?vue&type=template&id=7d918508& ***!\n \\******************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string-viewer.vue?vue&type=template&id=7d918508& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string-viewer.vue?vue&type=template&id=7d918508&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_viewer_vue_vue_type_template_id_7d918508___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue\":\n/*!****************************!*\\\n !*** ./src/vue/string.vue ***!\n \\****************************/\n/*! exports provided: SurveyString, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./string.vue?vue&type=template&id=d3a3d75a& */ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony import */ var _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string.vue?vue&type=script&lang=ts& */ \"./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyString\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/string.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/string.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, SurveyString */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyString\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/string.vue?vue&type=template&id=d3a3d75a&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/string.vue?vue&type=template&id=d3a3d75a& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./string.vue?vue&type=template&id=d3a3d75a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/string.vue?vue&type=template&id=d3a3d75a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_string_vue_vue_type_template_id_d3a3d75a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue\":\n/*!****************************!*\\\n !*** ./src/vue/survey.vue ***!\n \\****************************/\n/*! exports provided: Survey, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./survey.vue?vue&type=template&id=6874e1c8& */ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony import */ var _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey.vue?vue&type=script&lang=ts& */ \"./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Survey\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/survey.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/survey.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Survey */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Survey\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/survey.vue?vue&type=template&id=6874e1c8&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/survey.vue?vue&type=template&id=6874e1c8& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./survey.vue?vue&type=template&id=6874e1c8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/survey.vue?vue&type=template&id=6874e1c8&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_survey_vue_vue_type_template_id_6874e1c8___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/surveyModel.ts\":\n/*!********************************!*\\\n !*** ./src/vue/surveyModel.ts ***!\n \\********************************/\n/*! exports provided: VueSurveyModel, VueSurveyWindowModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VueSurveyModel\", function() { return VueSurveyModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VueSurveyWindowModel\", function() { return VueSurveyWindowModel; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ \"./src/entries/core.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\nvar VueSurveyModel = /** @class */ (function (_super) {\n __extends(VueSurveyModel, _super);\n function VueSurveyModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n VueSurveyModel.prototype.render = function () {\n if (this.renderCallback) {\n this.renderCallback();\n }\n };\n VueSurveyModel.prototype.onLoadSurveyFromService = function () {\n this.render();\n };\n VueSurveyModel.prototype.onLoadingSurveyFromService = function () {\n this.render();\n };\n Object.defineProperty(VueSurveyModel.prototype, \"css\", {\n get: function () {\n return survey_core__WEBPACK_IMPORTED_MODULE_1__[\"surveyCss\"].getCss();\n },\n set: function (value) {\n this.mergeValues(value, this.css);\n },\n enumerable: false,\n configurable: true\n });\n VueSurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.set(valuesHash, key, value);\n };\n VueSurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.delete(valuesHash, key);\n };\n VueSurveyModel.prototype.doAfterRenderSurvey = function (el) {\n this.afterRenderSurvey(el);\n };\n VueSurveyModel.prototype.doAfterRenderHeader = function (el) {\n this.afterRenderHeader(el);\n };\n return VueSurveyModel;\n}(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"]));\n\nvar VueSurveyWindowModel = /** @class */ (function (_super) {\n __extends(VueSurveyWindowModel, _super);\n function VueSurveyWindowModel(jsonObj, initialModel) {\n if (initialModel === void 0) { initialModel = null; }\n return _super.call(this, jsonObj, initialModel) || this;\n }\n VueSurveyWindowModel.prototype.createSurvey = function (jsonObj) {\n return new VueSurveyModel(jsonObj);\n };\n return VueSurveyWindowModel;\n}(survey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyWindowModel\"]));\n\nsurvey_core__WEBPACK_IMPORTED_MODULE_1__[\"SurveyModel\"].platform = \"vue\";\n\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue\":\n/*!**************************!*\\\n !*** ./src/vue/text.vue ***!\n \\**************************/\n/*! exports provided: QuestionText, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.vue?vue&type=template&id=40ece422& */ \"./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony import */ var _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text.vue?vue&type=script&lang=ts& */ \"./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"QuestionText\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/text.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=script&lang=ts&\":\n/*!***************************************************!*\\\n !*** ./src/vue/text.vue?vue&type=script&lang=ts& ***!\n \\***************************************************/\n/*! exports provided: default, QuestionText */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionText\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"QuestionText\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/text.vue?vue&type=template&id=40ece422&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/text.vue?vue&type=template&id=40ece422& ***!\n \\*********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./text.vue?vue&type=template&id=40ece422& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/text.vue?vue&type=template&id=40ece422&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_text_vue_vue_type_template_id_40ece422___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue\":\n/*!********************************!*\\\n !*** ./src/vue/timerpanel.vue ***!\n \\********************************/\n/*! exports provided: TimerPanel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony import */ var _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timerpanel.vue?vue&type=script&lang=ts& */ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TimerPanel\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/timerpanel.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************!*\\\n !*** ./src/vue/timerpanel.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************/\n/*! exports provided: default, TimerPanel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TimerPanel\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\":\n/*!***************************************************************!*\\\n !*** ./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21& ***!\n \\***************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./timerpanel.vue?vue&type=template&id=0d2abe21& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/timerpanel.vue?vue&type=template&id=0d2abe21&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_timerpanel_vue_vue_type_template_id_0d2abe21___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue\":\n/*!**********************************!*\\\n !*** ./src/vue/titlecontent.vue ***!\n \\**********************************/\n/*! exports provided: TitleContent, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./titlecontent.vue?vue&type=template&id=cd49b83a& */ \"./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\");\n/* harmony import */ var _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./titlecontent.vue?vue&type=script&lang=ts& */ \"./src/vue/titlecontent.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleContent\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/titlecontent.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue?vue&type=script&lang=ts&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/titlecontent.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************/\n/*! exports provided: default, TitleContent */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./titlecontent.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleContent\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\":\n/*!*****************************************************************!*\\\n !*** ./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a& ***!\n \\*****************************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./titlecontent.vue?vue&type=template&id=cd49b83a& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/titlecontent.vue?vue&type=template&id=cd49b83a&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_titlecontent_vue_vue_type_template_id_cd49b83a___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/window.vue\":\n/*!****************************!*\\\n !*** ./src/vue/window.vue ***!\n \\****************************/\n/*! exports provided: Window, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./window.vue?vue&type=template&id=62f588b2& */ \"./src/vue/window.vue?vue&type=template&id=62f588b2&\");\n/* harmony import */ var _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window.vue?vue&type=script&lang=ts& */ \"./src/vue/window.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Window\"]; });\n\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/vue/window.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/window.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************!*\\\n !*** ./src/vue/window.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************/\n/*! exports provided: default, Window */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/ts-loader??ref--0!../../node_modules/vue-loader/lib??vue-loader-options!./window.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Window\"]; });\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/window.vue?vue&type=template&id=62f588b2&\":\n/*!***********************************************************!*\\\n !*** ./src/vue/window.vue?vue&type=template&id=62f588b2& ***!\n \\***********************************************************/\n/*! exports provided: render, staticRenderFns */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./window.vue?vue&type=template&id=62f588b2& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/window.vue?vue&type=template&id=62f588b2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_window_vue_vue_type_template_id_62f588b2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"vue\":\n/*!******************************************************************************!*\\\n !*** external {\"root\":\"Vue\",\"commonjs2\":\"vue\",\"commonjs\":\"vue\",\"amd\":\"vue\"} ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_vue__;\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXkvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1N1cnZleS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvc2lnbmF0dXJlX3BhZC9kaXN0L3NpZ25hdHVyZV9wYWQubWpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy9zb3J0YWJsZWpzL21vZHVsYXIvc29ydGFibGUuZXNtLmpzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/MGVjZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT84YWRjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2EzOTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlP2I2NTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/YmQxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/M2RkMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlP2UzNjIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT85YmE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/MDliNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/YmUxZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT9hNDFkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9kZWZhdWx0LXRpdGxlL2RlZmF1bHQtdGl0bGUudnVlPzBhM2QiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/YmU5OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT9iYTNmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlPzE0NzEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWU/ZmZkYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlPzc0MWIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT8xNDk5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS1hY3Rpb25zL3RpdGxlLWFjdGlvbnMudnVlP2QxYTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlPzRmMGIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b20udnVlPzEzZWEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlPzI5NGIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcmFnLWRyb3AtdGQudnVlP2UxZjciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/ZDk4ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnQudnVlPzA3NTAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT84ZmY4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZW1wdHkudnVlPzllMzQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lcnJvcnMudnVlPzI0YzkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT84ZDU1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmlsZS52dWU/YTEzNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/ZWI5OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP2IzNWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9oZWFkZXIudnVlP2NlNmIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9odG1sLnZ1ZT9iMzQ3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2UudnVlPzYyNGEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/ZGRiNSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/MDk4NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP2RlYmMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/N2I2NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlP2IyNGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/ZjcyNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/YzYwMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL25hdmlnYXRpb24udnVlP2JkZDQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWU/ZjQ2MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhZ2UudnVlPzU3MmUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbC52dWU/NmY1MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/YzUyYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT81ZGRkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT9mYTM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlPzU1NjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlPzBhMDMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT8zZWFlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlP2U3YTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/MTIzYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWU/MTQzNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/ZGQzZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWU/MmEzYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/MmJjZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP2JkZWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZT9jZDQ4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT84YjZhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZT80MTljIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWU/MzFhOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlPzMwNjYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aXRsZWNvbnRlbnQudnVlPzdkMTciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS93aW5kb3cudnVlP2I0ZTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmVzbS5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlPzZiNDgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/MzQ3MCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT9hNjVmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT82NWRjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlPzVkNWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlPzdjMTYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT9hNTZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/OTExOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlPzBkZWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP2YzNzEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/Y2I2MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT85MDRiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlPzRhMjUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWU/MjM1YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT8wNGZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlPzQ0YWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT9hYmE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/OWU1NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZT8xNmZhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9zaXRlLnZ1ZT80ZWEwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9tLnZ1ZT84MjNiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT8wYTg0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZHJhZy1kcm9wLXRkLnZ1ZT83YjIyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZHJvcGRvd24udnVlPzAwYTQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT8xZDJmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/YTUwMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VtcHR5LnZ1ZT82NmI5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXJyb3JzLnZ1ZT9mZjBkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/YWNlOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ZpbGUudnVlP2M0YmMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlP2JlYzIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT9lNDBhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT9iNTgzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWU/MmI5YSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZT9jMDg1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlP2M2ZTQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXgudnVlPzcwNzgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZT8wN2Q4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlPzkwZDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT83ZTBjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4dGFibGUudnVlPzcyZDUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlP2ZhNDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZT81ODFmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlP2Y0ZjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZT8xOTQzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlPzcyNDAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlPzc1YjUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/NTllMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/NjI3MCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT9jM2Y1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT8wMjVmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cC52dWU/NzNkYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT80ZTUyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlPzJjYzQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlPzVkNGUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYXRpbmcudnVlPzlkNTQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzE4ZmMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlPzMwNmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT9kNzZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/ZGM5ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy52dWU/ZTFjMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/N2EwZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RleHQudnVlPzNhNWEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZT9jYzQzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT83M2QwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvd2luZG93LnZ1ZT83YjExIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvRW1pdC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9JbmplY3QuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvSW5qZWN0UmVhY3RpdmUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvTW9kZWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvTW9kZWxTeW5jLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3AuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvcFN5bmMuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvdmlkZS5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm92aWRlUmVhY3RpdmUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUmVmLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1ZNb2RlbC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9XYXRjaC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvaGVscGVycy9wcm92aWRlSW5qZWN0LmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvYWN0aW9uLWJhci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvYmFzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY2FsY3VsYXRlZFZhbHVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9jaG9pY2VzUmVzdGZ1bC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9jb25kaXRpb25zLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kZWZhdWx0Q3NzL2Nzc2Jvb3RzdHJhcC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXBtYXRlcmlhbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZGVmYXVsdENzcy9jc3Ntb2Rlcm4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmQudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZW50cmllcy9jaHVua3MvbG9jYWxpemF0aW9uLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL2NodW5rcy9tb2RlbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZW50cmllcy9jb3JlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lbnRyaWVzL3Z1ZS11aS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZW50cmllcy92dWUudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Vycm9yLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9leHByZXNzaW9uSXRlbXMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2V4cHJlc3Npb25zL2V4cHJlc3Npb25QYXJzZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9mbG93cGFuZWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Z1bmN0aW9uc2ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2l0ZW12YWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvanNvbm9iamVjdC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbGlzdC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9hcmFiaWMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9idWxnYXJpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9jYXRhbGFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vY3JvYXRpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9jemVjaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2RhbmlzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2R1dGNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZW5nbGlzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2VzdG9uaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZmlubmlzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2ZyZW5jaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2dlb3JnaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9oZWJyZXcudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9oaW5kaS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2h1bmdhcmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2ljZWxhbmRpYy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2luZG9uZXNpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9pdGFsaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vamFwYW5lc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9rb3JlYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9sYXR2aWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vbGl0aHVhbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL21hY2Vkb25pYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9ub3J3ZWdpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9wZXJzaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcG9saXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1ici50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9yb21hbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3J1c3NpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zZXJiaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vc3BhbmlzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3N3YWhpbGkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zd2VkaXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdGFqaWsudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi90aGFpLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3R1cmtpc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi91a3JhaW5pYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi93ZWxzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbWFpbi5zY3NzPzNiYzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL21hcnRpeEJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BhbmVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9wb3B1cC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYm9vbGVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fYnV0dG9uZ3JvdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9jdXN0b20udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9lbXB0eS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZXhwcmVzc2lvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZmlsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faHRtbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faW1hZ2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2ltYWdlcGlja2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9tYXRyaXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYW5raW5nLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbm5vbnZhbHVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9yZW5kZXJlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3NldHRpbmdzLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdHlsZXNtYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleVByb2dyZXNzQnV0dG9ucy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5V2luZG93LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXl0aW1lci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdHJpZ2dlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdXRpbHMvaXMtbW9iaWxlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy91dGlscy9wb3B1cC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdXRpbHMvcmVzcG9uc2l2aXR5bWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdXRpbHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3ZhbGlkYXRvci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlPzgyNzgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZT80ODkzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlPzk2ZTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/YTliNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/YjViNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT9kZWU1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWU/ZDE4MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWU/YjA2ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZT8wYjM2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlPzIwYTIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZT81MjcwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZT9lMjg0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tbWVudC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT8yYmRmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tbWVudC52dWU/NDEwZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/Y2QwOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlPzQ4NGIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlPzZkZTEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZT8yNDIxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/NzgwOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/MzdhZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT8wMTFjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlP2Q0MDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2RlZmF1bHQtdGl0bGUvZGVmYXVsdC10aXRsZS52dWU/YzliYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvZGVmYXVsdC10aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT9hYTZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP2QxNTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/NzJhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT9hNTllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlPzA4ZjQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/NzRiNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT9jNTMzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlP2EyZmMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWU/YWNmZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC52dWU/MTBkNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlPzk5NzMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlP2M3NzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZT9mMGExIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS1hY3Rpb25zL3RpdGxlLWFjdGlvbnMudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS1hY3Rpb25zL3RpdGxlLWFjdGlvbnMudnVlP2U1NzEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlLWFjdGlvbnMvdGl0bGUtYWN0aW9ucy52dWU/MWJlMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP2JkYTEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlP2RmZTciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b20udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9tLnZ1ZT9mYmFlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9tLnZ1ZT85ODNjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/NDlmZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/ZDVhYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2RyYWctZHJvcC10ZC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcmFnLWRyb3AtdGQudnVlP2Y1NzYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcmFnLWRyb3AtdGQudnVlPzk0NDAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/MjE4NiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT8wY2VkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50LnZ1ZT9lZTUxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/ODRiMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/NDE0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlPzhjMzgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/OWEwOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VtcHR5LnZ1ZT84N2UzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXJyb3JzLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/NTMxMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/MjIxNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZXhwcmVzc2lvbi52dWU/ZDY5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlPzZjYjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ZpbGUudnVlPzFiMWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9iZDFmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/OGY5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/NWM1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/YjNmOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlPzY2YTciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9oZWFkZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT8wZjE2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZT9jNGNiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9odG1sLnZ1ZT8wMTEyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWU/ZDJlZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZT9lMzZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2UudnVlP2Y5ODEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/YTA3ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9hZjNmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/ZGJkMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/ZWU5ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/NWY3OSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlPzU3MzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/NDJjZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT85NDk0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZT9iOTJjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/NWM1ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT83NjllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4dGFibGUudnVlPzMzZDQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9kY2ZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT82ZjVmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZT80NzdjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/MWFkMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mZTI0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlPzRjYTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhZ2UudnVlP2UzMzkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZT9mOWE3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlPzc3ZjAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbC52dWU/YmU3MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlPzliZmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlP2E5Y2MiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/MDEwNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT8xOTFhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/M2MxYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/NjZhOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT9mNzI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlP2MxOGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT8yOTE5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT9iZWM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzcwMTQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT81OTQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlPzgwYjMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/MzIyMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZT9mYjZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlPzU3M2YiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT85OWM1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLnZ1ZT9hNTUyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/MzhkNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/OGJkYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzkxNjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzIwOTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT9kMzdiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZT85MzIwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT9kZjUzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLWVkaXRvci52dWU/M2I1NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/N2U1OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy12aWV3ZXIudnVlPzdmNGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT9kMTcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT84NjZiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/N2VmMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/YzU2MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleU1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zMzdjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWU/MzhlYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/ZmI3NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP2JmM2YiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aXRsZWNvbnRlbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT85YjcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGl0bGVjb250ZW50LnZ1ZT83MDMwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvd2luZG93LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/MjliOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWU/OGZkZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvZXh0ZXJuYWwge1wicm9vdFwiOlwiVnVlXCIsXCJjb21tb25qczJcIjpcInZ1ZVwiLFwiY29tbW9uanNcIjpcInZ1ZVwiLFwiYW1kXCI6XCJ2dWVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsYUFBYTtBQUN4RztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaLFlBQVk7O0FBRVo7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHdCQUF3QjtBQUN6Qzs7QUFFQTtBQUNBLHFCQUFxQixrQkFBa0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVILG1DQUFtQztBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsMkVBQVksRUFBQzs7Ozs7Ozs7Ozs7OztBQ3psQjVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSw2QkFBNkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQsZ0JBQWdCOztBQUVqRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLFVBQVU7QUFDdEIsWUFBWSxVQUFVO0FBQ3RCLFlBQVksVUFBVTtBQUN0QixZQUFZLGNBQWM7QUFDMUIsWUFBWSxPQUFPO0FBQ25COzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksWUFBWTtBQUN4Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkIsWUFBWSxZQUFZO0FBQ3hCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLFNBQVM7QUFDckIsWUFBWSxZQUFZO0FBQ3hCOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCLFlBQVksU0FBUztBQUNyQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLE1BQU07QUFDbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCLFlBQVksT0FBTztBQUNuQixZQUFZLE9BQU87QUFDbkI7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCx1Q0FBdUMsb0RBQW9EOzs7QUFHM0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxL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QXlEOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7OztBQUdULDRDQUE0Qzs7O0FBRzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFOzs7QUFHWDtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdNQUFnTTs7QUFFaE07QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUCxLQUFLOzs7QUFHTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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OztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQiw4QkFBOEI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sRUFBRTs7QUFFVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDakRBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNWQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNoREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQzNDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW1DO0FBQ0c7QUFDRjtBQUNDO0FBQ0g7QUFDQztBQUNEO0FBQ0c7QUFDRDtBQUNEO0FBQ0U7QUFDRjtBQUNEO0FBQ0M7QUFDRDtBQUNJO0FBQ0E7QUFDQztBQUNIO0FBQ0M7QUFDRjtBQUNDO0FBQ0c7QUFDQTtBQUNEO0FBQ0Y7QUFDRDtBQUNJO0FBQ0c7QUFDTDtBQUNEO0FBQ0E7QUFDVztBQUNYO0FBQ0E7QUFDQTtBQUNGO0FBQ0Q7QUFDZTtBQUNaO0FBQ0U7QUFDSjs7Ozs7Ozs7Ozs7OztBQ3pDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFTO0FBQ2dCO0FBQ3pCLDZCQUE2QjtBQUV0QixJQUFJLE9BQWUsQ0FBQztBQUMzQixPQUFPLEdBQUcsS0FBRyxRQUFxQixDQUFDO0FBRU87QUFDUztBQVcxQjtBQUNtQjtBQVl4QjtBQUNvQztBQU9uQztBQU1ZO0FBQzJDO0FBQ0w7QUFDSTtBQUNOO0FBUTlCO0FBQ21CO0FBQ0M7QUFlakM7QUFVaUI7QUFJSjtBQUlEO0FBTVA7QUFJTTtBQUNzQztBQUMxQjtBQUNWO0FBQ0M7QUFDRTtBQUNnQjtBQUNBO0FBSXZCO0FBQzZCO0FBQ0Y7QUFDQTtBQUNFO0FBQ1E7QUFDaEI7QUFDQTtBQUNZO0FBQ1I7QUFDUTtBQUNaO0FBQ007QUFDd0I7QUFDNUI7QUFDYztBQUluQztBQUNXO0FBQ3lCO0FBQzlCO0FBU3BCO0FBQ2dDO0FBQ0c7QUFFRjtBQUNJO0FBQ1k7QUFDeEUsbURBQW1EO0FBSWQ7QUFNTjtBQUVxQjtBQVExQjtBQUNhO0FBQ3NCO0FBS3pCO0FBQ2E7QUFNdEI7QUFFOEI7QUFDekQsZ0RBQWdEO0FBQ2hELDJFQUEyRTs7Ozs7Ozs7Ozs7OztBQzlMM0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBUTtBQUN1QjtBQUUvQixlQUFlO0FBQ2dCO0FBRS9CLHVCQUF1QjtBQUN3QztBQUMvRCx3QkFBd0I7QUFDeUM7QUFDakUsbUNBQW1DO0FBQzhDO0FBQ2pGLHFCQUFxQjtBQUMrQjtBQUVwRCxRQUFRO0FBQzJCO0FBQ1U7QUFDTDs7Ozs7Ozs7Ozs7OztBQ2xCeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW9EO0FBQ2pCO0FBQ3VCO0FBQ1g7QUFDSjtBQUNZO0FBQ047QUFDYTtBQUNBO0FBQ1I7QUFDWDtBQUNKO0FBQ1k7QUFDUTtBQUNOO0FBQ1Y7QUFDRTtBQUNRO0FBQ1M7QUFDZjtBQUNRO0FBQ0Y7QUFDUTtBQUNkO0FBQ047QUFDaUI7QUFDSTtBQUNyQjtBQUNjO0FBQ1o7QUFDSTtBQUNSO0FBQ1k7QUFDRTtBQUNNO0FBQ0Y7QUFDZDtBQUNKO0FBQ1k7QUFDRTtBQUNFO0FBQ1k7QUFDSTtBQUNwQjtBQUNKO0FBQ2M7QUFDVjtBQUNWO0FBQ1E7QUFDYztBQUMxQjtBQUNvQjtBQUNSO0FBQ007QUFDTjtBQUNOO0FBQ007QUFDSTtBQUVFO0FBQzBCO0FBQ0E7QUFDQTtBQUNmO0FBQ1I7QUFDSDtBQUNvRTtBQUNQOzs7Ozs7Ozs7Ozs7O0FDbkVwSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7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RkFBTTtBQUNSLEVBQUUsOEZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUE7QUFBQTtBQUEySyxDQUFnQiw2T0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0EvTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMkY7QUFDM0I7QUFDTDs7O0FBRzNEO0FBQzBGO0FBQzFGLGdCQUFnQiwyR0FBVTtBQUMxQixFQUFFLGtGQUFNO0FBQ1IsRUFBRSx1RkFBTTtBQUNSLEVBQUUsZ0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUE7QUFBQTtBQUE2SyxDQUFnQiwrT0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0FqTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBcUY7QUFDM0I7QUFDTDs7O0FBR3JEO0FBQzBGO0FBQzFGLGdCQUFnQiwyR0FBVTtBQUMxQixFQUFFLDRFQUFNO0FBQ1IsRUFBRSxpRkFBTTtBQUNSLEVBQUUsMEZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUE7QUFBQTtBQUF1SyxDQUFnQix5T0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0EzTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7OztBQ0FBLGlEIiwiZmlsZSI6InN1cnZleS52dWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJzdXJ2ZXktdnVlXCIsIFtcInZ1ZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzdXJ2ZXktdnVlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwidnVlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlcIl0gPSBmYWN0b3J5KHJvb3RbXCJWdWVcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV92dWVfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJpZXMvdnVlLnRzXCIpO1xuIiwiLyohXG4gKiBTaWduYXR1cmUgUGFkIHYyLjMuMlxuICogaHR0cHM6Ly9naXRodWIuY29tL3N6aW1lay9zaWduYXR1cmVfcGFkXG4gKlxuICogQ29weXJpZ2h0IDIwMTcgU3p5bW9uIE5vd2FrXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqXG4gKiBUaGUgbWFpbiBpZGVhIGFuZCBzb21lIHBhcnRzIG9mIHRoZSBjb2RlIChlLmcuIGRyYXdpbmcgdmFyaWFibGUgd2lkdGggQsOpemllciBjdXJ2ZSkgYXJlIHRha2VuIGZyb206XG4gKiBodHRwOi8vY29ybmVyLnNxdWFyZXVwLmNvbS8yMDEyLzA3L3Ntb290aGVyLXNpZ25hdHVyZXMuaHRtbFxuICpcbiAqIEltcGxlbWVudGF0aW9uIG9mIGludGVycG9sYXRpb24gdXNpbmcgY3ViaWMgQsOpemllciBjdXJ2ZXMgaXMgdGFrZW4gZnJvbTpcbiAqIGh0dHA6Ly9iZW5rbm93c2NvZGUud29yZHByZXNzLmNvbS8yMDEyLzA5LzE0L3BhdGgtaW50ZXJwb2xhdGlvbi11c2luZy1jdWJpYy1iZXppZXItYW5kLWNvbnRyb2wtcG9pbnQtZXN0aW1hdGlvbi1pbi1qYXZhc2NyaXB0XG4gKlxuICogQWxnb3JpdGhtIGZvciBhcHByb3hpbWF0ZWQgbGVuZ3RoIG9mIGEgQsOpemllciBjdXJ2ZSBpcyB0YWtlbiBmcm9tOlxuICogaHR0cDovL3d3dy5sZW1vZGEubmV0L21hdGhzL2Jlemllci1sZW5ndGgvaW5kZXguaHRtbFxuICpcbiAqL1xuXG5mdW5jdGlvbiBQb2ludCh4LCB5LCB0aW1lKSB7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG4gIHRoaXMudGltZSA9IHRpbWUgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG59XG5cblBvaW50LnByb3RvdHlwZS52ZWxvY2l0eUZyb20gPSBmdW5jdGlvbiAoc3RhcnQpIHtcbiAgcmV0dXJuIHRoaXMudGltZSAhPT0gc3RhcnQudGltZSA/IHRoaXMuZGlzdGFuY2VUbyhzdGFydCkgLyAodGhpcy50aW1lIC0gc3RhcnQudGltZSkgOiAxO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRpc3RhbmNlVG8gPSBmdW5jdGlvbiAoc3RhcnQpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0aGlzLnggLSBzdGFydC54LCAyKSArIE1hdGgucG93KHRoaXMueSAtIHN0YXJ0LnksIDIpKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgcmV0dXJuIHRoaXMueCA9PT0gb3RoZXIueCAmJiB0aGlzLnkgPT09IG90aGVyLnkgJiYgdGhpcy50aW1lID09PSBvdGhlci50aW1lO1xufTtcblxuZnVuY3Rpb24gQmV6aWVyKHN0YXJ0UG9pbnQsIGNvbnRyb2wxLCBjb250cm9sMiwgZW5kUG9pbnQpIHtcbiAgdGhpcy5zdGFydFBvaW50ID0gc3RhcnRQb2ludDtcbiAgdGhpcy5jb250cm9sMSA9IGNvbnRyb2wxO1xuICB0aGlzLmNvbnRyb2wyID0gY29udHJvbDI7XG4gIHRoaXMuZW5kUG9pbnQgPSBlbmRQb2ludDtcbn1cblxuLy8gUmV0dXJucyBhcHByb3hpbWF0ZWQgbGVuZ3RoLlxuQmV6aWVyLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGVwcyA9IDEwO1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgdmFyIHB4ID0gdm9pZCAwO1xuICB2YXIgcHkgPSB2b2lkIDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc3RlcHM7IGkgKz0gMSkge1xuICAgIHZhciB0ID0gaSAvIHN0ZXBzO1xuICAgIHZhciBjeCA9IHRoaXMuX3BvaW50KHQsIHRoaXMuc3RhcnRQb2ludC54LCB0aGlzLmNvbnRyb2wxLngsIHRoaXMuY29udHJvbDIueCwgdGhpcy5lbmRQb2ludC54KTtcbiAgICB2YXIgY3kgPSB0aGlzLl9wb2ludCh0LCB0aGlzLnN0YXJ0UG9pbnQueSwgdGhpcy5jb250cm9sMS55LCB0aGlzLmNvbnRyb2wyLnksIHRoaXMuZW5kUG9pbnQueSk7XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICB2YXIgeGRpZmYgPSBjeCAtIHB4O1xuICAgICAgdmFyIHlkaWZmID0gY3kgLSBweTtcbiAgICAgIGxlbmd0aCArPSBNYXRoLnNxcnQoeGRpZmYgKiB4ZGlmZiArIHlkaWZmICogeWRpZmYpO1xuICAgIH1cbiAgICBweCA9IGN4O1xuICAgIHB5ID0gY3k7XG4gIH1cblxuICByZXR1cm4gbGVuZ3RoO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzLCBzcGFjZS1pbi1wYXJlbnMgKi9cbkJlemllci5wcm90b3R5cGUuX3BvaW50ID0gZnVuY3Rpb24gKHQsIHN0YXJ0LCBjMSwgYzIsIGVuZCkge1xuICByZXR1cm4gc3RhcnQgKiAoMS4wIC0gdCkgKiAoMS4wIC0gdCkgKiAoMS4wIC0gdCkgKyAzLjAgKiBjMSAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSAqIHQgKyAzLjAgKiBjMiAqICgxLjAgLSB0KSAqIHQgKiB0ICsgZW5kICogdCAqIHQgKiB0O1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgKi9cblxuLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjcwNzg0MDEvODE1NTA3XG5mdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBsYXRlciA9IGZ1bmN0aW9uIGxhdGVyKCkge1xuICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBEYXRlLm5vdygpO1xuICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcbiAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgY29udGV4dCA9IHRoaXM7XG4gICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBTaWduYXR1cmVQYWQoY2FudmFzLCBvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMudmVsb2NpdHlGaWx0ZXJXZWlnaHQgPSBvcHRzLnZlbG9jaXR5RmlsdGVyV2VpZ2h0IHx8IDAuNztcbiAgdGhpcy5taW5XaWR0aCA9IG9wdHMubWluV2lkdGggfHwgMC41O1xuICB0aGlzLm1heFdpZHRoID0gb3B0cy5tYXhXaWR0aCB8fCAyLjU7XG4gIHRoaXMudGhyb3R0bGUgPSAndGhyb3R0bGUnIGluIG9wdHMgPyBvcHRzLnRocm90dGxlIDogMTY7IC8vIGluIG1pbGlzZWNvbmRzXG4gIHRoaXMubWluRGlzdGFuY2UgPSAnbWluRGlzdGFuY2UnIGluIG9wdHMgPyBvcHRzLm1pbkRpc3RhbmNlIDogNTtcblxuICBpZiAodGhpcy50aHJvdHRsZSkge1xuICAgIHRoaXMuX3N0cm9rZU1vdmVVcGRhdGUgPSB0aHJvdHRsZShTaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VVcGRhdGUsIHRoaXMudGhyb3R0bGUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3N0cm9rZU1vdmVVcGRhdGUgPSBTaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VVcGRhdGU7XG4gIH1cblxuICB0aGlzLmRvdFNpemUgPSBvcHRzLmRvdFNpemUgfHwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5taW5XaWR0aCArIHRoaXMubWF4V2lkdGgpIC8gMjtcbiAgfTtcbiAgdGhpcy5wZW5Db2xvciA9IG9wdHMucGVuQ29sb3IgfHwgJ2JsYWNrJztcbiAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRzLmJhY2tncm91bmRDb2xvciB8fCAncmdiYSgwLDAsMCwwKSc7XG4gIHRoaXMub25CZWdpbiA9IG9wdHMub25CZWdpbjtcbiAgdGhpcy5vbkVuZCA9IG9wdHMub25FbmQ7XG5cbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9jdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgdGhpcy5jbGVhcigpO1xuXG4gIC8vIFdlIG5lZWQgYWRkIHRoZXNlIGlubGluZSBzbyB0aGV5IGFyZSBhdmFpbGFibGUgdG8gdW5iaW5kIHdoaWxlIHN0aWxsIGhhdmluZ1xuICAvLyBhY2Nlc3MgdG8gJ3NlbGYnIHdlIGNvdWxkIHVzZSBfLmJpbmQgYnV0IGl0J3Mgbm90IHdvcnRoIGFkZGluZyBhIGRlcGVuZGVuY3kuXG4gIHRoaXMuX2hhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gMSkge1xuICAgICAgc2VsZi5fbW91c2VCdXR0b25Eb3duID0gdHJ1ZTtcbiAgICAgIHNlbGYuX3N0cm9rZUJlZ2luKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKHNlbGYuX21vdXNlQnV0dG9uRG93bikge1xuICAgICAgc2VsZi5fc3Ryb2tlTW92ZVVwZGF0ZShldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuX2hhbmRsZU1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDEgJiYgc2VsZi5fbW91c2VCdXR0b25Eb3duKSB7XG4gICAgICBzZWxmLl9tb3VzZUJ1dHRvbkRvd24gPSBmYWxzZTtcbiAgICAgIHNlbGYuX3N0cm9rZUVuZChldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgc2VsZi5fc3Ryb2tlQmVnaW4odG91Y2gpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLl9oYW5kbGVUb3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IHNjcm9sbGluZy5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdmFyIHRvdWNoID0gZXZlbnQudGFyZ2V0VG91Y2hlc1swXTtcbiAgICBzZWxmLl9zdHJva2VNb3ZlVXBkYXRlKHRvdWNoKTtcbiAgfTtcblxuICB0aGlzLl9oYW5kbGVUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciB3YXNDYW52YXNUb3VjaGVkID0gZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9jYW52YXM7XG4gICAgaWYgKHdhc0NhbnZhc1RvdWNoZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZWxmLl9zdHJva2VFbmQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICAvLyBFbmFibGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50IGhhbmRsZXJzXG4gIHRoaXMub24oKTtcbn1cblxuLy8gUHVibGljIG1ldGhvZHNcblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjdHggPSB0aGlzLl9jdHg7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICBjdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuXG4gIHRoaXMuX2RhdGEgPSBbXTtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5faXNFbXB0eSA9IHRydWU7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLmZyb21EYXRhVVJMID0gZnVuY3Rpb24gKGRhdGFVcmwpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gIHZhciByYXRpbyA9IG9wdGlvbnMucmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCB8fCB0aGlzLl9jYW52YXMud2lkdGggLyByYXRpbztcbiAgdmFyIGhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IHRoaXMuX2NhbnZhcy5oZWlnaHQgLyByYXRpbztcblxuICB0aGlzLl9yZXNldCgpO1xuICBpbWFnZS5zcmMgPSBkYXRhVXJsO1xuICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX3RoaXMuX2N0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICB9O1xuICB0aGlzLl9pc0VtcHR5ID0gZmFsc2U7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLnRvRGF0YVVSTCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIHZhciBfY2FudmFzO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3N2Zyt4bWwnOlxuICAgICAgcmV0dXJuIHRoaXMuX3RvU1ZHKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvcHRpb25zID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBvcHRpb25zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChfY2FudmFzID0gdGhpcy5fY2FudmFzKS50b0RhdGFVUkwuYXBwbHkoX2NhbnZhcywgW3R5cGVdLmNvbmNhdChvcHRpb25zKSk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2hhbmRsZU1vdXNlRXZlbnRzKCk7XG4gIHRoaXMuX2hhbmRsZVRvdWNoRXZlbnRzKCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX2hhbmRsZU1vdXNlRG93bik7XG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9oYW5kbGVNb3VzZU1vdmUpO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5faGFuZGxlTW91c2VVcCk7XG5cbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0KTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX2hhbmRsZVRvdWNoTW92ZSk7XG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX2hhbmRsZVRvdWNoRW5kKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX2lzRW1wdHk7XG59O1xuXG4vLyBQcml2YXRlIG1ldGhvZHNcblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZUJlZ2luID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHRoaXMuX2RhdGEucHVzaChbXSk7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuX3N0cm9rZVVwZGF0ZShldmVudCk7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9uQmVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uQmVnaW4oZXZlbnQpO1xuICB9XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VVcGRhdGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIHggPSBldmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50LmNsaWVudFk7XG5cbiAgdmFyIHBvaW50ID0gdGhpcy5fY3JlYXRlUG9pbnQoeCwgeSk7XG4gIHZhciBsYXN0UG9pbnRHcm91cCA9IHRoaXMuX2RhdGFbdGhpcy5fZGF0YS5sZW5ndGggLSAxXTtcbiAgdmFyIGxhc3RQb2ludCA9IGxhc3RQb2ludEdyb3VwICYmIGxhc3RQb2ludEdyb3VwW2xhc3RQb2ludEdyb3VwLmxlbmd0aCAtIDFdO1xuICB2YXIgaXNMYXN0UG9pbnRUb29DbG9zZSA9IGxhc3RQb2ludCAmJiBwb2ludC5kaXN0YW5jZVRvKGxhc3RQb2ludCkgPCB0aGlzLm1pbkRpc3RhbmNlO1xuXG4gIC8vIFNraXAgdGhpcyBwb2ludCBpZiBpdCdzIHRvbyBjbG9zZSB0byB0aGUgcHJldmlvdXMgb25lXG4gIGlmICghKGxhc3RQb2ludCAmJiBpc0xhc3RQb2ludFRvb0Nsb3NlKSkge1xuICAgIHZhciBfYWRkUG9pbnQgPSB0aGlzLl9hZGRQb2ludChwb2ludCksXG4gICAgICAgIGN1cnZlID0gX2FkZFBvaW50LmN1cnZlLFxuICAgICAgICB3aWR0aHMgPSBfYWRkUG9pbnQud2lkdGhzO1xuXG4gICAgaWYgKGN1cnZlICYmIHdpZHRocykge1xuICAgICAgdGhpcy5fZHJhd0N1cnZlKGN1cnZlLCB3aWR0aHMuc3RhcnQsIHdpZHRocy5lbmQpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGFbdGhpcy5fZGF0YS5sZW5ndGggLSAxXS5wdXNoKHtcbiAgICAgIHg6IHBvaW50LngsXG4gICAgICB5OiBwb2ludC55LFxuICAgICAgdGltZTogcG9pbnQudGltZSxcbiAgICAgIGNvbG9yOiB0aGlzLnBlbkNvbG9yXG4gICAgfSk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZUVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICB2YXIgY2FuRHJhd0N1cnZlID0gdGhpcy5wb2ludHMubGVuZ3RoID4gMjtcbiAgdmFyIHBvaW50ID0gdGhpcy5wb2ludHNbMF07IC8vIFBvaW50IGluc3RhbmNlXG5cbiAgaWYgKCFjYW5EcmF3Q3VydmUgJiYgcG9pbnQpIHtcbiAgICB0aGlzLl9kcmF3RG90KHBvaW50KTtcbiAgfVxuXG4gIGlmIChwb2ludCkge1xuICAgIHZhciBsYXN0UG9pbnRHcm91cCA9IHRoaXMuX2RhdGFbdGhpcy5fZGF0YS5sZW5ndGggLSAxXTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbGFzdFBvaW50R3JvdXBbbGFzdFBvaW50R3JvdXAubGVuZ3RoIC0gMV07IC8vIHBsYWluIG9iamVjdFxuXG4gICAgLy8gV2hlbiBkcmF3aW5nIGEgZG90LCB0aGVyZSdzIG9ubHkgb25lIHBvaW50IGluIGEgZ3JvdXAsIHNvIHdpdGhvdXQgdGhpcyBjaGVja1xuICAgIC8vIHN1Y2ggZ3JvdXAgd291bGQgZW5kIHVwIHdpdGggZXhhY3RseSB0aGUgc2FtZSAyIHBvaW50cy5cbiAgICBpZiAoIXBvaW50LmVxdWFscyhsYXN0UG9pbnQpKSB7XG4gICAgICBsYXN0UG9pbnRHcm91cC5wdXNoKHtcbiAgICAgICAgeDogcG9pbnQueCxcbiAgICAgICAgeTogcG9pbnQueSxcbiAgICAgICAgdGltZTogcG9pbnQudGltZSxcbiAgICAgICAgY29sb3I6IHRoaXMucGVuQ29sb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdGhpcy5vbkVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25FbmQoZXZlbnQpO1xuICB9XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fbW91c2VCdXR0b25Eb3duID0gZmFsc2U7XG5cbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX2hhbmRsZU1vdXNlRG93bik7XG4gIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9oYW5kbGVNb3VzZU1vdmUpO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5faGFuZGxlTW91c2VVcCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9oYW5kbGVUb3VjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gUGFzcyB0b3VjaCBldmVudHMgdG8gY2FudmFzIGVsZW1lbnQgb24gbW9iaWxlIElFMTEgYW5kIEVkZ2UuXG4gIHRoaXMuX2NhbnZhcy5zdHlsZS5tc1RvdWNoQWN0aW9uID0gJ25vbmUnO1xuICB0aGlzLl9jYW52YXMuc3R5bGUudG91Y2hBY3Rpb24gPSAnbm9uZSc7XG5cbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0KTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX2hhbmRsZVRvdWNoTW92ZSk7XG4gIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX2hhbmRsZVRvdWNoRW5kKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnBvaW50cyA9IFtdO1xuICB0aGlzLl9sYXN0VmVsb2NpdHkgPSAwO1xuICB0aGlzLl9sYXN0V2lkdGggPSAodGhpcy5taW5XaWR0aCArIHRoaXMubWF4V2lkdGgpIC8gMjtcbiAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9IHRoaXMucGVuQ29sb3I7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jcmVhdGVQb2ludCA9IGZ1bmN0aW9uICh4LCB5LCB0aW1lKSB7XG4gIHZhciByZWN0ID0gdGhpcy5fY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHJldHVybiBuZXcgUG9pbnQoeCAtIHJlY3QubGVmdCwgeSAtIHJlY3QudG9wLCB0aW1lIHx8IG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2FkZFBvaW50ID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcbiAgdmFyIHRtcCA9IHZvaWQgMDtcblxuICBwb2ludHMucHVzaChwb2ludCk7XG5cbiAgaWYgKHBvaW50cy5sZW5ndGggPiAyKSB7XG4gICAgLy8gVG8gcmVkdWNlIHRoZSBpbml0aWFsIGxhZyBtYWtlIGl0IHdvcmsgd2l0aCAzIHBvaW50c1xuICAgIC8vIGJ5IGNvcHlpbmcgdGhlIGZpcnN0IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDMpIHBvaW50cy51bnNoaWZ0KHBvaW50c1swXSk7XG5cbiAgICB0bXAgPSB0aGlzLl9jYWxjdWxhdGVDdXJ2ZUNvbnRyb2xQb2ludHMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSk7XG4gICAgdmFyIGMyID0gdG1wLmMyO1xuICAgIHRtcCA9IHRoaXMuX2NhbGN1bGF0ZUN1cnZlQ29udHJvbFBvaW50cyhwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdKTtcbiAgICB2YXIgYzMgPSB0bXAuYzE7XG4gICAgdmFyIGN1cnZlID0gbmV3IEJlemllcihwb2ludHNbMV0sIGMyLCBjMywgcG9pbnRzWzJdKTtcbiAgICB2YXIgd2lkdGhzID0gdGhpcy5fY2FsY3VsYXRlQ3VydmVXaWR0aHMoY3VydmUpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gdGhlIGxpc3QsXG4gICAgLy8gc28gdGhhdCB3ZSBhbHdheXMgaGF2ZSBubyBtb3JlIHRoYW4gNCBwb2ludHMgaW4gcG9pbnRzIGFycmF5LlxuICAgIHBvaW50cy5zaGlmdCgpO1xuXG4gICAgcmV0dXJuIHsgY3VydmU6IGN1cnZlLCB3aWR0aHM6IHdpZHRocyB9O1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fY2FsY3VsYXRlQ3VydmVDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKHMxLCBzMiwgczMpIHtcbiAgdmFyIGR4MSA9IHMxLnggLSBzMi54O1xuICB2YXIgZHkxID0gczEueSAtIHMyLnk7XG4gIHZhciBkeDIgPSBzMi54IC0gczMueDtcbiAgdmFyIGR5MiA9IHMyLnkgLSBzMy55O1xuXG4gIHZhciBtMSA9IHsgeDogKHMxLnggKyBzMi54KSAvIDIuMCwgeTogKHMxLnkgKyBzMi55KSAvIDIuMCB9O1xuICB2YXIgbTIgPSB7IHg6IChzMi54ICsgczMueCkgLyAyLjAsIHk6IChzMi55ICsgczMueSkgLyAyLjAgfTtcblxuICB2YXIgbDEgPSBNYXRoLnNxcnQoZHgxICogZHgxICsgZHkxICogZHkxKTtcbiAgdmFyIGwyID0gTWF0aC5zcXJ0KGR4MiAqIGR4MiArIGR5MiAqIGR5Mik7XG5cbiAgdmFyIGR4bSA9IG0xLnggLSBtMi54O1xuICB2YXIgZHltID0gbTEueSAtIG0yLnk7XG5cbiAgdmFyIGsgPSBsMiAvIChsMSArIGwyKTtcbiAgdmFyIGNtID0geyB4OiBtMi54ICsgZHhtICogaywgeTogbTIueSArIGR5bSAqIGsgfTtcblxuICB2YXIgdHggPSBzMi54IC0gY20ueDtcbiAgdmFyIHR5ID0gczIueSAtIGNtLnk7XG5cbiAgcmV0dXJuIHtcbiAgICBjMTogbmV3IFBvaW50KG0xLnggKyB0eCwgbTEueSArIHR5KSxcbiAgICBjMjogbmV3IFBvaW50KG0yLnggKyB0eCwgbTIueSArIHR5KVxuICB9O1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fY2FsY3VsYXRlQ3VydmVXaWR0aHMgPSBmdW5jdGlvbiAoY3VydmUpIHtcbiAgdmFyIHN0YXJ0UG9pbnQgPSBjdXJ2ZS5zdGFydFBvaW50O1xuICB2YXIgZW5kUG9pbnQgPSBjdXJ2ZS5lbmRQb2ludDtcbiAgdmFyIHdpZHRocyA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gIHZhciB2ZWxvY2l0eSA9IHRoaXMudmVsb2NpdHlGaWx0ZXJXZWlnaHQgKiBlbmRQb2ludC52ZWxvY2l0eUZyb20oc3RhcnRQb2ludCkgKyAoMSAtIHRoaXMudmVsb2NpdHlGaWx0ZXJXZWlnaHQpICogdGhpcy5fbGFzdFZlbG9jaXR5O1xuXG4gIHZhciBuZXdXaWR0aCA9IHRoaXMuX3N0cm9rZVdpZHRoKHZlbG9jaXR5KTtcblxuICB3aWR0aHMuc3RhcnQgPSB0aGlzLl9sYXN0V2lkdGg7XG4gIHdpZHRocy5lbmQgPSBuZXdXaWR0aDtcblxuICB0aGlzLl9sYXN0VmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgdGhpcy5fbGFzdFdpZHRoID0gbmV3V2lkdGg7XG5cbiAgcmV0dXJuIHdpZHRocztcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVdpZHRoID0gZnVuY3Rpb24gKHZlbG9jaXR5KSB7XG4gIHJldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoIC8gKHZlbG9jaXR5ICsgMSksIHRoaXMubWluV2lkdGgpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fZHJhd1BvaW50ID0gZnVuY3Rpb24gKHgsIHksIHNpemUpIHtcbiAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcblxuICBjdHgubW92ZVRvKHgsIHkpO1xuICBjdHguYXJjKHgsIHksIHNpemUsIDAsIDIgKiBNYXRoLlBJLCBmYWxzZSk7XG4gIHRoaXMuX2lzRW1wdHkgPSBmYWxzZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2RyYXdDdXJ2ZSA9IGZ1bmN0aW9uIChjdXJ2ZSwgc3RhcnRXaWR0aCwgZW5kV2lkdGgpIHtcbiAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcbiAgdmFyIHdpZHRoRGVsdGEgPSBlbmRXaWR0aCAtIHN0YXJ0V2lkdGg7XG4gIHZhciBkcmF3U3RlcHMgPSBNYXRoLmZsb29yKGN1cnZlLmxlbmd0aCgpKTtcblxuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkcmF3U3RlcHM7IGkgKz0gMSkge1xuICAgIC8vIENhbGN1bGF0ZSB0aGUgQmV6aWVyICh4LCB5KSBjb29yZGluYXRlIGZvciB0aGlzIHN0ZXAuXG4gICAgdmFyIHQgPSBpIC8gZHJhd1N0ZXBzO1xuICAgIHZhciB0dCA9IHQgKiB0O1xuICAgIHZhciB0dHQgPSB0dCAqIHQ7XG4gICAgdmFyIHUgPSAxIC0gdDtcbiAgICB2YXIgdXUgPSB1ICogdTtcbiAgICB2YXIgdXV1ID0gdXUgKiB1O1xuXG4gICAgdmFyIHggPSB1dXUgKiBjdXJ2ZS5zdGFydFBvaW50Lng7XG4gICAgeCArPSAzICogdXUgKiB0ICogY3VydmUuY29udHJvbDEueDtcbiAgICB4ICs9IDMgKiB1ICogdHQgKiBjdXJ2ZS5jb250cm9sMi54O1xuICAgIHggKz0gdHR0ICogY3VydmUuZW5kUG9pbnQueDtcblxuICAgIHZhciB5ID0gdXV1ICogY3VydmUuc3RhcnRQb2ludC55O1xuICAgIHkgKz0gMyAqIHV1ICogdCAqIGN1cnZlLmNvbnRyb2wxLnk7XG4gICAgeSArPSAzICogdSAqIHR0ICogY3VydmUuY29udHJvbDIueTtcbiAgICB5ICs9IHR0dCAqIGN1cnZlLmVuZFBvaW50Lnk7XG5cbiAgICB2YXIgd2lkdGggPSBzdGFydFdpZHRoICsgdHR0ICogd2lkdGhEZWx0YTtcbiAgICB0aGlzLl9kcmF3UG9pbnQoeCwgeSwgd2lkdGgpO1xuICB9XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xuICBjdHguZmlsbCgpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fZHJhd0RvdCA9IGZ1bmN0aW9uIChwb2ludCkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuICB2YXIgd2lkdGggPSB0eXBlb2YgdGhpcy5kb3RTaXplID09PSAnZnVuY3Rpb24nID8gdGhpcy5kb3RTaXplKCkgOiB0aGlzLmRvdFNpemU7XG5cbiAgY3R4LmJlZ2luUGF0aCgpO1xuICB0aGlzLl9kcmF3UG9pbnQocG9pbnQueCwgcG9pbnQueSwgd2lkdGgpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9mcm9tRGF0YSA9IGZ1bmN0aW9uIChwb2ludEdyb3VwcywgZHJhd0N1cnZlLCBkcmF3RG90KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRHcm91cHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgZ3JvdXAgPSBwb2ludEdyb3Vwc1tpXTtcblxuICAgIGlmIChncm91cC5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciByYXdQb2ludCA9IGdyb3VwW2pdO1xuICAgICAgICB2YXIgcG9pbnQgPSBuZXcgUG9pbnQocmF3UG9pbnQueCwgcmF3UG9pbnQueSwgcmF3UG9pbnQudGltZSk7XG4gICAgICAgIHZhciBjb2xvciA9IHJhd1BvaW50LmNvbG9yO1xuXG4gICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgLy8gRmlyc3QgcG9pbnQgaW4gYSBncm91cC4gTm90aGluZyB0byBkcmF3IHlldC5cblxuICAgICAgICAgIC8vIEFsbCBwb2ludHMgaW4gdGhlIGdyb3VwIGhhdmUgdGhlIHNhbWUgY29sb3IsIHNvIGl0J3MgZW5vdWdoIHRvIHNldFxuICAgICAgICAgIC8vIHBlbkNvbG9yIGp1c3QgYXQgdGhlIGJlZ2lubmluZy5cbiAgICAgICAgICB0aGlzLnBlbkNvbG9yID0gY29sb3I7XG4gICAgICAgICAgdGhpcy5fcmVzZXQoKTtcblxuICAgICAgICAgIHRoaXMuX2FkZFBvaW50KHBvaW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChqICE9PSBncm91cC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gTWlkZGxlIHBvaW50IGluIGEgZ3JvdXAuXG4gICAgICAgICAgdmFyIF9hZGRQb2ludDIgPSB0aGlzLl9hZGRQb2ludChwb2ludCksXG4gICAgICAgICAgICAgIGN1cnZlID0gX2FkZFBvaW50Mi5jdXJ2ZSxcbiAgICAgICAgICAgICAgd2lkdGhzID0gX2FkZFBvaW50Mi53aWR0aHM7XG5cbiAgICAgICAgICBpZiAoY3VydmUgJiYgd2lkdGhzKSB7XG4gICAgICAgICAgICBkcmF3Q3VydmUoY3VydmUsIHdpZHRocywgY29sb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBMYXN0IHBvaW50IGluIGEgZ3JvdXAuIERvIG5vdGhpbmcuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIHZhciBfcmF3UG9pbnQgPSBncm91cFswXTtcbiAgICAgIGRyYXdEb3QoX3Jhd1BvaW50KTtcbiAgICB9XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3RvU1ZHID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3RoaXMyID0gdGhpcztcblxuICB2YXIgcG9pbnRHcm91cHMgPSB0aGlzLl9kYXRhO1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuICB2YXIgcmF0aW8gPSBNYXRoLm1heCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLCAxKTtcbiAgdmFyIG1pblggPSAwO1xuICB2YXIgbWluWSA9IDA7XG4gIHZhciBtYXhYID0gY2FudmFzLndpZHRoIC8gcmF0aW87XG4gIHZhciBtYXhZID0gY2FudmFzLmhlaWdodCAvIHJhdGlvO1xuICB2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcblxuICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgY2FudmFzLndpZHRoKTtcbiAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICdoZWlnaHQnLCBjYW52YXMuaGVpZ2h0KTtcblxuICB0aGlzLl9mcm9tRGF0YShwb2ludEdyb3VwcywgZnVuY3Rpb24gKGN1cnZlLCB3aWR0aHMsIGNvbG9yKSB7XG4gICAgdmFyIHBhdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwYXRoJyk7XG5cbiAgICAvLyBOZWVkIHRvIGNoZWNrIGN1cnZlIGZvciBOYU4gdmFsdWVzLCB0aGVzZSBwb3AgdXAgd2hlbiBkcmF3aW5nXG4gICAgLy8gbGluZXMgb24gdGhlIGNhbnZhcyB0aGF0IGFyZSBub3QgY29udGludW91cy4gRS5nLiBTaGFycCBjb3JuZXJzXG4gICAgLy8gb3Igc3RvcHBpbmcgbWlkLXN0cm9rZSBhbmQgdGhhbiBjb250aW51aW5nIHdpdGhvdXQgbGlmdGluZyBtb3VzZS5cbiAgICBpZiAoIWlzTmFOKGN1cnZlLmNvbnRyb2wxLngpICYmICFpc05hTihjdXJ2ZS5jb250cm9sMS55KSAmJiAhaXNOYU4oY3VydmUuY29udHJvbDIueCkgJiYgIWlzTmFOKGN1cnZlLmNvbnRyb2wyLnkpKSB7XG4gICAgICB2YXIgYXR0ciA9ICdNICcgKyBjdXJ2ZS5zdGFydFBvaW50LngudG9GaXhlZCgzKSArICcsJyArIGN1cnZlLnN0YXJ0UG9pbnQueS50b0ZpeGVkKDMpICsgJyAnICsgKCdDICcgKyBjdXJ2ZS5jb250cm9sMS54LnRvRml4ZWQoMykgKyAnLCcgKyBjdXJ2ZS5jb250cm9sMS55LnRvRml4ZWQoMykgKyAnICcpICsgKGN1cnZlLmNvbnRyb2wyLngudG9GaXhlZCgzKSArICcsJyArIGN1cnZlLmNvbnRyb2wyLnkudG9GaXhlZCgzKSArICcgJykgKyAoY3VydmUuZW5kUG9pbnQueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuZW5kUG9pbnQueS50b0ZpeGVkKDMpKTtcblxuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2QnLCBhdHRyKTtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAod2lkdGhzLmVuZCAqIDIuMjUpLnRvRml4ZWQoMykpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIGNvbG9yKTtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsICdyb3VuZCcpO1xuXG4gICAgICBzdmcuYXBwZW5kQ2hpbGQocGF0aCk7XG4gICAgfVxuICB9LCBmdW5jdGlvbiAocmF3UG9pbnQpIHtcbiAgICB2YXIgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2lyY2xlJyk7XG4gICAgdmFyIGRvdFNpemUgPSB0eXBlb2YgX3RoaXMyLmRvdFNpemUgPT09ICdmdW5jdGlvbicgPyBfdGhpczIuZG90U2l6ZSgpIDogX3RoaXMyLmRvdFNpemU7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgncicsIGRvdFNpemUpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N4JywgcmF3UG9pbnQueCk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnY3knLCByYXdQb2ludC55KTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdmaWxsJywgcmF3UG9pbnQuY29sb3IpO1xuXG4gICAgc3ZnLmFwcGVuZENoaWxkKGNpcmNsZSk7XG4gIH0pO1xuXG4gIHZhciBwcmVmaXggPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnO1xuICB2YXIgaGVhZGVyID0gJzxzdmcnICsgJyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCInICsgJyB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIicgKyAoJyB2aWV3Qm94PVwiJyArIG1pblggKyAnICcgKyBtaW5ZICsgJyAnICsgbWF4WCArICcgJyArIG1heFkgKyAnXCInKSArICgnIHdpZHRoPVwiJyArIG1heFggKyAnXCInKSArICgnIGhlaWdodD1cIicgKyBtYXhZICsgJ1wiJykgKyAnPic7XG4gIHZhciBib2R5ID0gc3ZnLmlubmVySFRNTDtcblxuICAvLyBJRSBoYWNrIGZvciBtaXNzaW5nIGlubmVySFRNTCBwcm9wZXJ0eSBvbiBTVkdFbGVtZW50XG4gIGlmIChib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZHVtbXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkdW1teScpO1xuICAgIHZhciBub2RlcyA9IHN2Zy5jaGlsZE5vZGVzO1xuICAgIGR1bW15LmlubmVySFRNTCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZHVtbXkuYXBwZW5kQ2hpbGQobm9kZXNbaV0uY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9XG5cbiAgICBib2R5ID0gZHVtbXkuaW5uZXJIVE1MO1xuICB9XG5cbiAgdmFyIGZvb3RlciA9ICc8L3N2Zz4nO1xuICB2YXIgZGF0YSA9IGhlYWRlciArIGJvZHkgKyBmb290ZXI7XG5cbiAgcmV0dXJuIHByZWZpeCArIGJ0b2EoZGF0YSk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLmZyb21EYXRhID0gZnVuY3Rpb24gKHBvaW50R3JvdXBzKSB7XG4gIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gIHRoaXMuY2xlYXIoKTtcblxuICB0aGlzLl9mcm9tRGF0YShwb2ludEdyb3VwcywgZnVuY3Rpb24gKGN1cnZlLCB3aWR0aHMpIHtcbiAgICByZXR1cm4gX3RoaXMzLl9kcmF3Q3VydmUoY3VydmUsIHdpZHRocy5zdGFydCwgd2lkdGhzLmVuZCk7XG4gIH0sIGZ1bmN0aW9uIChyYXdQb2ludCkge1xuICAgIHJldHVybiBfdGhpczMuX2RyYXdEb3QocmF3UG9pbnQpO1xuICB9KTtcblxuICB0aGlzLl9kYXRhID0gcG9pbnRHcm91cHM7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLnRvRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX2RhdGE7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaWduYXR1cmVQYWQ7XG4iLCIvKiohXG4gKiBTb3J0YWJsZSAxLjEzLjBcbiAqIEBhdXRob3JcdFJ1YmFYYSAgIDx0cmFzaEBydWJheGEub3JnPlxuICogQGF1dGhvclx0b3dlbm0gICAgPG93ZW4yMzM1NUBnbWFpbC5jb20+XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICB2YXIgb3duS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG93bktleXMgPSBvd25LZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSkuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBzeW0pLmVudW1lcmFibGU7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgb3duS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcblxuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xufVxuXG52YXIgdmVyc2lvbiA9IFwiMS4xMy4wXCI7XG5cbmZ1bmN0aW9uIHVzZXJBZ2VudChwYXR0ZXJuKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuICEhXG4gICAgLypAX19QVVJFX18qL1xuICAgIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2gocGF0dGVybik7XG4gIH1cbn1cblxudmFyIElFMTFPckxlc3MgPSB1c2VyQWdlbnQoLyg/OlRyaWRlbnQuKnJ2WyA6XT8xMVxcLnxtc2llfGllbW9iaWxlfFdpbmRvd3MgUGhvbmUpL2kpO1xudmFyIEVkZ2UgPSB1c2VyQWdlbnQoL0VkZ2UvaSk7XG52YXIgRmlyZUZveCA9IHVzZXJBZ2VudCgvZmlyZWZveC9pKTtcbnZhciBTYWZhcmkgPSB1c2VyQWdlbnQoL3NhZmFyaS9pKSAmJiAhdXNlckFnZW50KC9jaHJvbWUvaSkgJiYgIXVzZXJBZ2VudCgvYW5kcm9pZC9pKTtcbnZhciBJT1MgPSB1c2VyQWdlbnQoL2lQKGFkfG9kfGhvbmUpL2kpO1xudmFyIENocm9tZUZvckFuZHJvaWQgPSB1c2VyQWdlbnQoL2Nocm9tZS9pKSAmJiB1c2VyQWdlbnQoL2FuZHJvaWQvaSk7XG5cbnZhciBjYXB0dXJlTW9kZSA9IHtcbiAgY2FwdHVyZTogZmFsc2UsXG4gIHBhc3NpdmU6IGZhbHNlXG59O1xuXG5mdW5jdGlvbiBvbihlbCwgZXZlbnQsIGZuKSB7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCAhSUUxMU9yTGVzcyAmJiBjYXB0dXJlTW9kZSk7XG59XG5cbmZ1bmN0aW9uIG9mZihlbCwgZXZlbnQsIGZuKSB7XG4gIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCAhSUUxMU9yTGVzcyAmJiBjYXB0dXJlTW9kZSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXMoXG4vKipIVE1MRWxlbWVudCovXG5lbCxcbi8qKlN0cmluZyovXG5zZWxlY3Rvcikge1xuICBpZiAoIXNlbGVjdG9yKSByZXR1cm47XG4gIHNlbGVjdG9yWzBdID09PSAnPicgJiYgKHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyaW5nKDEpKTtcblxuICBpZiAoZWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGVsLm1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgfSBlbHNlIGlmIChlbC5tc01hdGNoZXNTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZWwubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfSBlbHNlIGlmIChlbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50T3JIb3N0KGVsKSB7XG4gIHJldHVybiBlbC5ob3N0ICYmIGVsICE9PSBkb2N1bWVudCAmJiBlbC5ob3N0Lm5vZGVUeXBlID8gZWwuaG9zdCA6IGVsLnBhcmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3QoXG4vKipIVE1MRWxlbWVudCovXG5lbCxcbi8qKlN0cmluZyovXG5zZWxlY3Rvcixcbi8qKkhUTUxFbGVtZW50Ki9cbmN0eCwgaW5jbHVkZUNUWCkge1xuICBpZiAoZWwpIHtcbiAgICBjdHggPSBjdHggfHwgZG9jdW1lbnQ7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCAmJiAoc2VsZWN0b3JbMF0gPT09ICc+JyA/IGVsLnBhcmVudE5vZGUgPT09IGN0eCAmJiBtYXRjaGVzKGVsLCBzZWxlY3RvcikgOiBtYXRjaGVzKGVsLCBzZWxlY3RvcikpIHx8IGluY2x1ZGVDVFggJiYgZWwgPT09IGN0eCkge1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbCA9PT0gY3R4KSBicmVhaztcbiAgICAgIC8qIGpzaGludCBib3NzOnRydWUgKi9cbiAgICB9IHdoaWxlIChlbCA9IGdldFBhcmVudE9ySG9zdChlbCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSX1NQQUNFID0gL1xccysvZztcblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWwsIG5hbWUsIHN0YXRlKSB7XG4gIGlmIChlbCAmJiBuYW1lKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgZWwuY2xhc3NMaXN0W3N0YXRlID8gJ2FkZCcgOiAncmVtb3ZlJ10obmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjbGFzc05hbWUgPSAoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5yZXBsYWNlKFJfU1BBQ0UsICcgJykucmVwbGFjZSgnICcgKyBuYW1lICsgJyAnLCAnICcpO1xuICAgICAgZWwuY2xhc3NOYW1lID0gKGNsYXNzTmFtZSArIChzdGF0ZSA/ICcgJyArIG5hbWUgOiAnJykpLnJlcGxhY2UoUl9TUEFDRSwgJyAnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3NzKGVsLCBwcm9wLCB2YWwpIHtcbiAgdmFyIHN0eWxlID0gZWwgJiYgZWwuc3R5bGU7XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgaWYgKHZhbCA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgICAgICB2YWwgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsLCAnJyk7XG4gICAgICB9IGVsc2UgaWYgKGVsLmN1cnJlbnRTdHlsZSkge1xuICAgICAgICB2YWwgPSBlbC5jdXJyZW50U3R5bGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9wID09PSB2b2lkIDAgPyB2YWwgOiB2YWxbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHByb3AgaW4gc3R5bGUpICYmIHByb3AuaW5kZXhPZignd2Via2l0JykgPT09IC0xKSB7XG4gICAgICAgIHByb3AgPSAnLXdlYmtpdC0nICsgcHJvcDtcbiAgICAgIH1cblxuICAgICAgc3R5bGVbcHJvcF0gPSB2YWwgKyAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyAnJyA6ICdweCcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRyaXgoZWwsIHNlbGZPbmx5KSB7XG4gIHZhciBhcHBsaWVkVHJhbnNmb3JtcyA9ICcnO1xuXG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgYXBwbGllZFRyYW5zZm9ybXMgPSBlbDtcbiAgfSBlbHNlIHtcbiAgICBkbyB7XG4gICAgICB2YXIgdHJhbnNmb3JtID0gY3NzKGVsLCAndHJhbnNmb3JtJyk7XG5cbiAgICAgIGlmICh0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtICE9PSAnbm9uZScpIHtcbiAgICAgICAgYXBwbGllZFRyYW5zZm9ybXMgPSB0cmFuc2Zvcm0gKyAnICcgKyBhcHBsaWVkVHJhbnNmb3JtcztcbiAgICAgIH1cbiAgICAgIC8qIGpzaGludCBib3NzOnRydWUgKi9cblxuICAgIH0gd2hpbGUgKCFzZWxmT25seSAmJiAoZWwgPSBlbC5wYXJlbnROb2RlKSk7XG4gIH1cblxuICB2YXIgbWF0cml4Rm4gPSB3aW5kb3cuRE9NTWF0cml4IHx8IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXggfHwgd2luZG93LkNTU01hdHJpeCB8fCB3aW5kb3cuTVNDU1NNYXRyaXg7XG4gIC8qanNoaW50IC1XMDU2ICovXG5cbiAgcmV0dXJuIG1hdHJpeEZuICYmIG5ldyBtYXRyaXhGbihhcHBsaWVkVHJhbnNmb3Jtcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmQoY3R4LCB0YWdOYW1lLCBpdGVyYXRvcikge1xuICBpZiAoY3R4KSB7XG4gICAgdmFyIGxpc3QgPSBjdHguZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSksXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBuID0gbGlzdC5sZW5ndGg7XG5cbiAgICBpZiAoaXRlcmF0b3IpIHtcbiAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGxpc3RbaV0sIGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCkge1xuICB2YXIgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG5cbiAgaWYgKHNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gc2Nyb2xsaW5nRWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIFwiYm91bmRpbmcgY2xpZW50IHJlY3RcIiBvZiBnaXZlbiBlbGVtZW50XG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHdob3NlIGJvdW5kaW5nQ2xpZW50UmVjdCBpcyB3YW50ZWRcbiAqIEBwYXJhbSAge1tCb29sZWFuXX0gcmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jayAgV2hldGhlciB0aGUgcmVjdCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgKGluY2x1ZGluZykgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtICB7W0Jvb2xlYW5dfSByZWxhdGl2ZVRvTm9uU3RhdGljUGFyZW50ICBXaGV0aGVyIHRoZSByZWN0IHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgcmVsYXRpdmUgcGFyZW50IG9mIChpbmNsdWRpbmcpIHRoZSBjb250YWllbnJcbiAqIEBwYXJhbSAge1tCb29sZWFuXX0gdW5kb1NjYWxlICAgICAgICAgICAgICAgICAgV2hldGhlciB0aGUgY29udGFpbmVyJ3Mgc2NhbGUoKSBzaG91bGQgYmUgdW5kb25lXG4gKiBAcGFyYW0gIHtbSFRNTEVsZW1lbnRdfSBjb250YWluZXIgICAgICAgICAgICAgIFRoZSBwYXJlbnQgdGhlIGVsZW1lbnQgd2lsbCBiZSBwbGFjZWQgaW5cbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJvdW5kaW5nQ2xpZW50UmVjdCBvZiBlbCwgd2l0aCBzcGVjaWZpZWQgYWRqdXN0bWVudHNcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFJlY3QoZWwsIHJlbGF0aXZlVG9Db250YWluaW5nQmxvY2ssIHJlbGF0aXZlVG9Ob25TdGF0aWNQYXJlbnQsIHVuZG9TY2FsZSwgY29udGFpbmVyKSB7XG4gIGlmICghZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmIGVsICE9PSB3aW5kb3cpIHJldHVybjtcbiAgdmFyIGVsUmVjdCwgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0LCBoZWlnaHQsIHdpZHRoO1xuXG4gIGlmIChlbCAhPT0gd2luZG93ICYmIGVsLnBhcmVudE5vZGUgJiYgZWwgIT09IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKSkge1xuICAgIGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRvcCA9IGVsUmVjdC50b3A7XG4gICAgbGVmdCA9IGVsUmVjdC5sZWZ0O1xuICAgIGJvdHRvbSA9IGVsUmVjdC5ib3R0b207XG4gICAgcmlnaHQgPSBlbFJlY3QucmlnaHQ7XG4gICAgaGVpZ2h0ID0gZWxSZWN0LmhlaWdodDtcbiAgICB3aWR0aCA9IGVsUmVjdC53aWR0aDtcbiAgfSBlbHNlIHtcbiAgICB0b3AgPSAwO1xuICAgIGxlZnQgPSAwO1xuICAgIGJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICByaWdodCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICB9XG5cbiAgaWYgKChyZWxhdGl2ZVRvQ29udGFpbmluZ0Jsb2NrIHx8IHJlbGF0aXZlVG9Ob25TdGF0aWNQYXJlbnQpICYmIGVsICE9PSB3aW5kb3cpIHtcbiAgICAvLyBBZGp1c3QgZm9yIHRyYW5zbGF0ZSgpXG4gICAgY29udGFpbmVyID0gY29udGFpbmVyIHx8IGVsLnBhcmVudE5vZGU7IC8vIHNvbHZlcyAjMTEyMyAoc2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzc5NTM4MDYvNjA4ODMxMilcbiAgICAvLyBOb3QgbmVlZGVkIG9uIDw9IElFMTFcblxuICAgIGlmICghSUUxMU9yTGVzcykge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QgJiYgKGNzcyhjb250YWluZXIsICd0cmFuc2Zvcm0nKSAhPT0gJ25vbmUnIHx8IHJlbGF0aXZlVG9Ob25TdGF0aWNQYXJlbnQgJiYgY3NzKGNvbnRhaW5lciwgJ3Bvc2l0aW9uJykgIT09ICdzdGF0aWMnKSkge1xuICAgICAgICAgIHZhciBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvLyBTZXQgcmVsYXRpdmUgdG8gZWRnZXMgb2YgcGFkZGluZyBib3ggb2YgY29udGFpbmVyXG5cbiAgICAgICAgICB0b3AgLT0gY29udGFpbmVyUmVjdC50b3AgKyBwYXJzZUludChjc3MoY29udGFpbmVyLCAnYm9yZGVyLXRvcC13aWR0aCcpKTtcbiAgICAgICAgICBsZWZ0IC09IGNvbnRhaW5lclJlY3QubGVmdCArIHBhcnNlSW50KGNzcyhjb250YWluZXIsICdib3JkZXItbGVmdC13aWR0aCcpKTtcbiAgICAgICAgICBib3R0b20gPSB0b3AgKyBlbFJlY3QuaGVpZ2h0O1xuICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIGVsUmVjdC53aWR0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cbiAgICAgIH0gd2hpbGUgKGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodW5kb1NjYWxlICYmIGVsICE9PSB3aW5kb3cpIHtcbiAgICAvLyBBZGp1c3QgZm9yIHNjYWxlKClcbiAgICB2YXIgZWxNYXRyaXggPSBtYXRyaXgoY29udGFpbmVyIHx8IGVsKSxcbiAgICAgICAgc2NhbGVYID0gZWxNYXRyaXggJiYgZWxNYXRyaXguYSxcbiAgICAgICAgc2NhbGVZID0gZWxNYXRyaXggJiYgZWxNYXRyaXguZDtcblxuICAgIGlmIChlbE1hdHJpeCkge1xuICAgICAgdG9wIC89IHNjYWxlWTtcbiAgICAgIGxlZnQgLz0gc2NhbGVYO1xuICAgICAgd2lkdGggLz0gc2NhbGVYO1xuICAgICAgaGVpZ2h0IC89IHNjYWxlWTtcbiAgICAgIGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgICAgIHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgbGVmdDogbGVmdCxcbiAgICBib3R0b206IGJvdHRvbSxcbiAgICByaWdodDogcmlnaHQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIHNpZGUgb2YgYW4gZWxlbWVudCBpcyBzY3JvbGxlZCBwYXN0IGEgc2lkZSBvZiBpdHMgcGFyZW50c1xuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9ICBlbCAgICAgICAgICAgVGhlIGVsZW1lbnQgd2hvJ3Mgc2lkZSBiZWluZyBzY3JvbGxlZCBvdXQgb2YgdmlldyBpcyBpbiBxdWVzdGlvblxuICogQHBhcmFtICB7U3RyaW5nfSAgICAgICBlbFNpZGUgICAgICAgU2lkZSBvZiB0aGUgZWxlbWVudCBpbiBxdWVzdGlvbiAoJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbScpXG4gKiBAcGFyYW0gIHtTdHJpbmd9ICAgICAgIHBhcmVudFNpZGUgICBTaWRlIG9mIHRoZSBwYXJlbnQgaW4gcXVlc3Rpb24gKCd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nKVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9ICAgICAgICAgICAgICAgVGhlIHBhcmVudCBzY3JvbGwgZWxlbWVudCB0aGF0IHRoZSBlbCdzIHNpZGUgaXMgc2Nyb2xsZWQgcGFzdCwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBzdWNoIGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzU2Nyb2xsZWRQYXN0KGVsLCBlbFNpZGUsIHBhcmVudFNpZGUpIHtcbiAgdmFyIHBhcmVudCA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGVsLCB0cnVlKSxcbiAgICAgIGVsU2lkZVZhbCA9IGdldFJlY3QoZWwpW2VsU2lkZV07XG4gIC8qIGpzaGludCBib3NzOnRydWUgKi9cblxuICB3aGlsZSAocGFyZW50KSB7XG4gICAgdmFyIHBhcmVudFNpZGVWYWwgPSBnZXRSZWN0KHBhcmVudClbcGFyZW50U2lkZV0sXG4gICAgICAgIHZpc2libGUgPSB2b2lkIDA7XG5cbiAgICBpZiAocGFyZW50U2lkZSA9PT0gJ3RvcCcgfHwgcGFyZW50U2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICB2aXNpYmxlID0gZWxTaWRlVmFsID49IHBhcmVudFNpZGVWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpc2libGUgPSBlbFNpZGVWYWwgPD0gcGFyZW50U2lkZVZhbDtcbiAgICB9XG5cbiAgICBpZiAoIXZpc2libGUpIHJldHVybiBwYXJlbnQ7XG4gICAgaWYgKHBhcmVudCA9PT0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpKSBicmVhaztcbiAgICBwYXJlbnQgPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChwYXJlbnQsIGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogR2V0cyBudGggY2hpbGQgb2YgZWwsIGlnbm9yaW5nIGhpZGRlbiBjaGlsZHJlbiwgc29ydGFibGUncyBlbGVtZW50cyAoZG9lcyBub3QgaWdub3JlIGNsb25lIGlmIGl0J3MgdmlzaWJsZSlcbiAqIGFuZCBub24tZHJhZ2dhYmxlIGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgICAgVGhlIHBhcmVudCBlbGVtZW50XG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGNoaWxkTnVtICAgICAgVGhlIGluZGV4IG9mIHRoZSBjaGlsZFxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zICAgICAgIFBhcmVudCBTb3J0YWJsZSdzIG9wdGlvbnNcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSAgICAgICAgICBUaGUgY2hpbGQgYXQgaW5kZXggY2hpbGROdW0sIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDaGlsZChlbCwgY2hpbGROdW0sIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRDaGlsZCA9IDAsXG4gICAgICBpID0gMCxcbiAgICAgIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47XG5cbiAgd2hpbGUgKGkgPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICBpZiAoY2hpbGRyZW5baV0uc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnICYmIGNoaWxkcmVuW2ldICE9PSBTb3J0YWJsZS5naG9zdCAmJiBjaGlsZHJlbltpXSAhPT0gU29ydGFibGUuZHJhZ2dlZCAmJiBjbG9zZXN0KGNoaWxkcmVuW2ldLCBvcHRpb25zLmRyYWdnYWJsZSwgZWwsIGZhbHNlKSkge1xuICAgICAgaWYgKGN1cnJlbnRDaGlsZCA9PT0gY2hpbGROdW0pIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q2hpbGQrKztcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2V0cyB0aGUgbGFzdCBjaGlsZCBpbiB0aGUgZWwsIGlnbm9yaW5nIGdob3N0RWwgb3IgaW52aXNpYmxlIGVsZW1lbnRzIChjbG9uZXMpXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgICAgUGFyZW50IGVsZW1lbnRcbiAqIEBwYXJhbSAge3NlbGVjdG9yfSBzZWxlY3RvciAgICBBbnkgb3RoZXIgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgaWdub3JlZFxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9ICAgICAgICAgIFRoZSBsYXN0IGNoaWxkLCBpZ25vcmluZyBnaG9zdEVsXG4gKi9cblxuXG5mdW5jdGlvbiBsYXN0Q2hpbGQoZWwsIHNlbGVjdG9yKSB7XG4gIHZhciBsYXN0ID0gZWwubGFzdEVsZW1lbnRDaGlsZDtcblxuICB3aGlsZSAobGFzdCAmJiAobGFzdCA9PT0gU29ydGFibGUuZ2hvc3QgfHwgY3NzKGxhc3QsICdkaXNwbGF5JykgPT09ICdub25lJyB8fCBzZWxlY3RvciAmJiAhbWF0Y2hlcyhsYXN0LCBzZWxlY3RvcikpKSB7XG4gICAgbGFzdCA9IGxhc3QucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0IHx8IG51bGw7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IG9mIGFuIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnQgZm9yIGEgc2VsZWN0ZWQgc2V0IG9mXG4gKiBlbGVtZW50c1xuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcGFyYW0gIHtzZWxlY3Rvcn0gc2VsZWN0b3JcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGluZGV4KGVsLCBzZWxlY3Rvcikge1xuICB2YXIgaW5kZXggPSAwO1xuXG4gIGlmICghZWwgfHwgIWVsLnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG5cbiAgd2hpbGUgKGVsID0gZWwucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIGlmIChlbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnVEVNUExBVEUnICYmIGVsICE9PSBTb3J0YWJsZS5jbG9uZSAmJiAoIXNlbGVjdG9yIHx8IG1hdGNoZXMoZWwsIHNlbGVjdG9yKSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzY3JvbGwgb2Zmc2V0IG9mIHRoZSBnaXZlbiBlbGVtZW50LCBhZGRlZCB3aXRoIGFsbCB0aGUgc2Nyb2xsIG9mZnNldHMgb2YgcGFyZW50IGVsZW1lbnRzLlxuICogVGhlIHZhbHVlIGlzIHJldHVybmVkIGluIHJlYWwgcGl4ZWxzLlxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICAgT2Zmc2V0cyBpbiB0aGUgZm9ybWF0IG9mIFtsZWZ0LCB0b3BdXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVNjcm9sbE9mZnNldChlbCkge1xuICB2YXIgb2Zmc2V0TGVmdCA9IDAsXG4gICAgICBvZmZzZXRUb3AgPSAwLFxuICAgICAgd2luU2Nyb2xsZXIgPSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG5cbiAgaWYgKGVsKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGVsTWF0cml4ID0gbWF0cml4KGVsKSxcbiAgICAgICAgICBzY2FsZVggPSBlbE1hdHJpeC5hLFxuICAgICAgICAgIHNjYWxlWSA9IGVsTWF0cml4LmQ7XG4gICAgICBvZmZzZXRMZWZ0ICs9IGVsLnNjcm9sbExlZnQgKiBzY2FsZVg7XG4gICAgICBvZmZzZXRUb3AgKz0gZWwuc2Nyb2xsVG9wICogc2NhbGVZO1xuICAgIH0gd2hpbGUgKGVsICE9PSB3aW5TY3JvbGxlciAmJiAoZWwgPSBlbC5wYXJlbnROb2RlKSk7XG4gIH1cblxuICByZXR1cm4gW29mZnNldExlZnQsIG9mZnNldFRvcF07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBvYmplY3Qgd2l0aGluIHRoZSBnaXZlbiBhcnJheVxuICogQHBhcmFtICB7QXJyYXl9IGFyciAgIEFycmF5IHRoYXQgbWF5IG9yIG1heSBub3QgaG9sZCB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gIHtPYmplY3R9IG9iaiAgQW4gb2JqZWN0IHRoYXQgaGFzIGEga2V5LXZhbHVlIHBhaXIgdW5pcXVlIHRvIGFuZCBpZGVudGljYWwgdG8gYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgb2JqZWN0IHlvdSB3YW50IHRvIGZpbmRcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICBUaGUgaW5kZXggb2YgdGhlIG9iamVjdCBpbiB0aGUgYXJyYXksIG9yIC0xXG4gKi9cblxuXG5mdW5jdGlvbiBpbmRleE9mT2JqZWN0KGFyciwgb2JqKSB7XG4gIGZvciAodmFyIGkgaW4gYXJyKSB7XG4gICAgaWYgKCFhcnIuaGFzT3duUHJvcGVydHkoaSkpIGNvbnRpbnVlO1xuXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9ialtrZXldID09PSBhcnJbaV1ba2V5XSkgcmV0dXJuIE51bWJlcihpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGVsLCBpbmNsdWRlU2VsZikge1xuICAvLyBza2lwIHRvIHdpbmRvd1xuICBpZiAoIWVsIHx8ICFlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHJldHVybiBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG4gIHZhciBlbGVtID0gZWw7XG4gIHZhciBnb3RTZWxmID0gZmFsc2U7XG5cbiAgZG8ge1xuICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gZ2V0IGVsZW0gY3NzIGlmIGl0IGlzbid0IGV2ZW4gb3ZlcmZsb3dpbmcgaW4gdGhlIGZpcnN0IHBsYWNlIChwZXJmb3JtYW5jZSlcbiAgICBpZiAoZWxlbS5jbGllbnRXaWR0aCA8IGVsZW0uc2Nyb2xsV2lkdGggfHwgZWxlbS5jbGllbnRIZWlnaHQgPCBlbGVtLnNjcm9sbEhlaWdodCkge1xuICAgICAgdmFyIGVsZW1DU1MgPSBjc3MoZWxlbSk7XG5cbiAgICAgIGlmIChlbGVtLmNsaWVudFdpZHRoIDwgZWxlbS5zY3JvbGxXaWR0aCAmJiAoZWxlbUNTUy5vdmVyZmxvd1ggPT0gJ2F1dG8nIHx8IGVsZW1DU1Mub3ZlcmZsb3dYID09ICdzY3JvbGwnKSB8fCBlbGVtLmNsaWVudEhlaWdodCA8IGVsZW0uc2Nyb2xsSGVpZ2h0ICYmIChlbGVtQ1NTLm92ZXJmbG93WSA9PSAnYXV0bycgfHwgZWxlbUNTUy5vdmVyZmxvd1kgPT0gJ3Njcm9sbCcpKSB7XG4gICAgICAgIGlmICghZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgfHwgZWxlbSA9PT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuIGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgICAgICAgaWYgKGdvdFNlbGYgfHwgaW5jbHVkZVNlbGYpIHJldHVybiBlbGVtO1xuICAgICAgICBnb3RTZWxmID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG4gIH0gd2hpbGUgKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpO1xuXG4gIHJldHVybiBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZChkc3QsIHNyYykge1xuICBpZiAoZHN0ICYmIHNyYykge1xuICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkc3Q7XG59XG5cbmZ1bmN0aW9uIGlzUmVjdEVxdWFsKHJlY3QxLCByZWN0Mikge1xuICByZXR1cm4gTWF0aC5yb3VuZChyZWN0MS50b3ApID09PSBNYXRoLnJvdW5kKHJlY3QyLnRvcCkgJiYgTWF0aC5yb3VuZChyZWN0MS5sZWZ0KSA9PT0gTWF0aC5yb3VuZChyZWN0Mi5sZWZ0KSAmJiBNYXRoLnJvdW5kKHJlY3QxLmhlaWdodCkgPT09IE1hdGgucm91bmQocmVjdDIuaGVpZ2h0KSAmJiBNYXRoLnJvdW5kKHJlY3QxLndpZHRoKSA9PT0gTWF0aC5yb3VuZChyZWN0Mi53aWR0aCk7XG59XG5cbnZhciBfdGhyb3R0bGVUaW1lb3V0O1xuXG5mdW5jdGlvbiB0aHJvdHRsZShjYWxsYmFjaywgbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIV90aHJvdHRsZVRpbWVvdXQpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwoX3RoaXMsIGFyZ3NbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkoX3RoaXMsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBfdGhyb3R0bGVUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aHJvdHRsZVRpbWVvdXQgPSB2b2lkIDA7XG4gICAgICB9LCBtcyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYW5jZWxUaHJvdHRsZSgpIHtcbiAgY2xlYXJUaW1lb3V0KF90aHJvdHRsZVRpbWVvdXQpO1xuICBfdGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxCeShlbCwgeCwgeSkge1xuICBlbC5zY3JvbGxMZWZ0ICs9IHg7XG4gIGVsLnNjcm9sbFRvcCArPSB5O1xufVxuXG5mdW5jdGlvbiBjbG9uZShlbCkge1xuICB2YXIgUG9seW1lciA9IHdpbmRvdy5Qb2x5bWVyO1xuICB2YXIgJCA9IHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvO1xuXG4gIGlmIChQb2x5bWVyICYmIFBvbHltZXIuZG9tKSB7XG4gICAgcmV0dXJuIFBvbHltZXIuZG9tKGVsKS5jbG9uZU5vZGUodHJ1ZSk7XG4gIH0gZWxzZSBpZiAoJCkge1xuICAgIHJldHVybiAkKGVsKS5jbG9uZSh0cnVlKVswXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZWwuY2xvbmVOb2RlKHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlY3QoZWwsIHJlY3QpIHtcbiAgY3NzKGVsLCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgY3NzKGVsLCAndG9wJywgcmVjdC50b3ApO1xuICBjc3MoZWwsICdsZWZ0JywgcmVjdC5sZWZ0KTtcbiAgY3NzKGVsLCAnd2lkdGgnLCByZWN0LndpZHRoKTtcbiAgY3NzKGVsLCAnaGVpZ2h0JywgcmVjdC5oZWlnaHQpO1xufVxuXG5mdW5jdGlvbiB1bnNldFJlY3QoZWwpIHtcbiAgY3NzKGVsLCAncG9zaXRpb24nLCAnJyk7XG4gIGNzcyhlbCwgJ3RvcCcsICcnKTtcbiAgY3NzKGVsLCAnbGVmdCcsICcnKTtcbiAgY3NzKGVsLCAnd2lkdGgnLCAnJyk7XG4gIGNzcyhlbCwgJ2hlaWdodCcsICcnKTtcbn1cblxudmFyIGV4cGFuZG8gPSAnU29ydGFibGUnICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbmZ1bmN0aW9uIEFuaW1hdGlvblN0YXRlTWFuYWdlcigpIHtcbiAgdmFyIGFuaW1hdGlvblN0YXRlcyA9IFtdLFxuICAgICAgYW5pbWF0aW9uQ2FsbGJhY2tJZDtcbiAgcmV0dXJuIHtcbiAgICBjYXB0dXJlQW5pbWF0aW9uU3RhdGU6IGZ1bmN0aW9uIGNhcHR1cmVBbmltYXRpb25TdGF0ZSgpIHtcbiAgICAgIGFuaW1hdGlvblN0YXRlcyA9IFtdO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSByZXR1cm47XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbXS5zbGljZS5jYWxsKHRoaXMuZWwuY2hpbGRyZW4pO1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNzcyhjaGlsZCwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNoaWxkID09PSBTb3J0YWJsZS5naG9zdCkgcmV0dXJuO1xuICAgICAgICBhbmltYXRpb25TdGF0ZXMucHVzaCh7XG4gICAgICAgICAgdGFyZ2V0OiBjaGlsZCxcbiAgICAgICAgICByZWN0OiBnZXRSZWN0KGNoaWxkKVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgZnJvbVJlY3QgPSBfb2JqZWN0U3ByZWFkKHt9LCBhbmltYXRpb25TdGF0ZXNbYW5pbWF0aW9uU3RhdGVzLmxlbmd0aCAtIDFdLnJlY3QpOyAvLyBJZiBhbmltYXRpbmc6IGNvbXBlbnNhdGUgZm9yIGN1cnJlbnQgYW5pbWF0aW9uXG5cblxuICAgICAgICBpZiAoY2hpbGQudGhpc0FuaW1hdGlvbkR1cmF0aW9uKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTWF0cml4ID0gbWF0cml4KGNoaWxkLCB0cnVlKTtcblxuICAgICAgICAgIGlmIChjaGlsZE1hdHJpeCkge1xuICAgICAgICAgICAgZnJvbVJlY3QudG9wIC09IGNoaWxkTWF0cml4LmY7XG4gICAgICAgICAgICBmcm9tUmVjdC5sZWZ0IC09IGNoaWxkTWF0cml4LmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQuZnJvbVJlY3QgPSBmcm9tUmVjdDtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYWRkQW5pbWF0aW9uU3RhdGU6IGZ1bmN0aW9uIGFkZEFuaW1hdGlvblN0YXRlKHN0YXRlKSB7XG4gICAgICBhbmltYXRpb25TdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgfSxcbiAgICByZW1vdmVBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24gcmVtb3ZlQW5pbWF0aW9uU3RhdGUodGFyZ2V0KSB7XG4gICAgICBhbmltYXRpb25TdGF0ZXMuc3BsaWNlKGluZGV4T2ZPYmplY3QoYW5pbWF0aW9uU3RhdGVzLCB7XG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICB9KSwgMSk7XG4gICAgfSxcbiAgICBhbmltYXRlQWxsOiBmdW5jdGlvbiBhbmltYXRlQWxsKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGFuaW1hdGlvbkNhbGxiYWNrSWQpO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBhbmltYXRpbmcgPSBmYWxzZSxcbiAgICAgICAgICBhbmltYXRpb25UaW1lID0gMDtcbiAgICAgIGFuaW1hdGlvblN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgdGltZSA9IDAsXG4gICAgICAgICAgICB0YXJnZXQgPSBzdGF0ZS50YXJnZXQsXG4gICAgICAgICAgICBmcm9tUmVjdCA9IHRhcmdldC5mcm9tUmVjdCxcbiAgICAgICAgICAgIHRvUmVjdCA9IGdldFJlY3QodGFyZ2V0KSxcbiAgICAgICAgICAgIHByZXZGcm9tUmVjdCA9IHRhcmdldC5wcmV2RnJvbVJlY3QsXG4gICAgICAgICAgICBwcmV2VG9SZWN0ID0gdGFyZ2V0LnByZXZUb1JlY3QsXG4gICAgICAgICAgICBhbmltYXRpbmdSZWN0ID0gc3RhdGUucmVjdCxcbiAgICAgICAgICAgIHRhcmdldE1hdHJpeCA9IG1hdHJpeCh0YXJnZXQsIHRydWUpO1xuXG4gICAgICAgIGlmICh0YXJnZXRNYXRyaXgpIHtcbiAgICAgICAgICAvLyBDb21wZW5zYXRlIGZvciBjdXJyZW50IGFuaW1hdGlvblxuICAgICAgICAgIHRvUmVjdC50b3AgLT0gdGFyZ2V0TWF0cml4LmY7XG4gICAgICAgICAgdG9SZWN0LmxlZnQgLT0gdGFyZ2V0TWF0cml4LmU7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQudG9SZWN0ID0gdG9SZWN0O1xuXG4gICAgICAgIGlmICh0YXJnZXQudGhpc0FuaW1hdGlvbkR1cmF0aW9uKSB7XG4gICAgICAgICAgLy8gQ291bGQgYWxzbyBjaGVjayBpZiBhbmltYXRpbmdSZWN0IGlzIGJldHdlZW4gZnJvbVJlY3QgYW5kIHRvUmVjdFxuICAgICAgICAgIGlmIChpc1JlY3RFcXVhbChwcmV2RnJvbVJlY3QsIHRvUmVjdCkgJiYgIWlzUmVjdEVxdWFsKGZyb21SZWN0LCB0b1JlY3QpICYmIC8vIE1ha2Ugc3VyZSBhbmltYXRpbmdSZWN0IGlzIG9uIGxpbmUgYmV0d2VlbiB0b1JlY3QgJiBmcm9tUmVjdFxuICAgICAgICAgIChhbmltYXRpbmdSZWN0LnRvcCAtIHRvUmVjdC50b3ApIC8gKGFuaW1hdGluZ1JlY3QubGVmdCAtIHRvUmVjdC5sZWZ0KSA9PT0gKGZyb21SZWN0LnRvcCAtIHRvUmVjdC50b3ApIC8gKGZyb21SZWN0LmxlZnQgLSB0b1JlY3QubGVmdCkpIHtcbiAgICAgICAgICAgIC8vIElmIHJldHVybmluZyB0byBzYW1lIHBsYWNlIGFzIHN0YXJ0ZWQgZnJvbSBhbmltYXRpb24gYW5kIG9uIHNhbWUgYXhpc1xuICAgICAgICAgICAgdGltZSA9IGNhbGN1bGF0ZVJlYWxUaW1lKGFuaW1hdGluZ1JlY3QsIHByZXZGcm9tUmVjdCwgcHJldlRvUmVjdCwgX3RoaXMub3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGlmIGZyb21SZWN0ICE9IHRvUmVjdDogYW5pbWF0ZVxuXG5cbiAgICAgICAgaWYgKCFpc1JlY3RFcXVhbCh0b1JlY3QsIGZyb21SZWN0KSkge1xuICAgICAgICAgIHRhcmdldC5wcmV2RnJvbVJlY3QgPSBmcm9tUmVjdDtcbiAgICAgICAgICB0YXJnZXQucHJldlRvUmVjdCA9IHRvUmVjdDtcblxuICAgICAgICAgIGlmICghdGltZSkge1xuICAgICAgICAgICAgdGltZSA9IF90aGlzLm9wdGlvbnMuYW5pbWF0aW9uO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzLmFuaW1hdGUodGFyZ2V0LCBhbmltYXRpbmdSZWN0LCB0b1JlY3QsIHRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgICBhbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIGFuaW1hdGlvblRpbWUgPSBNYXRoLm1heChhbmltYXRpb25UaW1lLCB0aW1lKTtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGFyZ2V0LmFuaW1hdGlvblJlc2V0VGltZXIpO1xuICAgICAgICAgIHRhcmdldC5hbmltYXRpb25SZXNldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0YXJnZXQuYW5pbWF0aW9uVGltZSA9IDA7XG4gICAgICAgICAgICB0YXJnZXQucHJldkZyb21SZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIHRhcmdldC5mcm9tUmVjdCA9IG51bGw7XG4gICAgICAgICAgICB0YXJnZXQucHJldlRvUmVjdCA9IG51bGw7XG4gICAgICAgICAgICB0YXJnZXQudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gbnVsbDtcbiAgICAgICAgICB9LCB0aW1lKTtcbiAgICAgICAgICB0YXJnZXQudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gdGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjbGVhclRpbWVvdXQoYW5pbWF0aW9uQ2FsbGJhY2tJZCk7XG5cbiAgICAgIGlmICghYW5pbWF0aW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbmltYXRpb25DYWxsYmFja0lkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcbiAgICAgICAgfSwgYW5pbWF0aW9uVGltZSk7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGlvblN0YXRlcyA9IFtdO1xuICAgIH0sXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gYW5pbWF0ZSh0YXJnZXQsIGN1cnJlbnRSZWN0LCB0b1JlY3QsIGR1cmF0aW9uKSB7XG4gICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zaXRpb24nLCAnJyk7XG4gICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAnJyk7XG4gICAgICAgIHZhciBlbE1hdHJpeCA9IG1hdHJpeCh0aGlzLmVsKSxcbiAgICAgICAgICAgIHNjYWxlWCA9IGVsTWF0cml4ICYmIGVsTWF0cml4LmEsXG4gICAgICAgICAgICBzY2FsZVkgPSBlbE1hdHJpeCAmJiBlbE1hdHJpeC5kLFxuICAgICAgICAgICAgdHJhbnNsYXRlWCA9IChjdXJyZW50UmVjdC5sZWZ0IC0gdG9SZWN0LmxlZnQpIC8gKHNjYWxlWCB8fCAxKSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVkgPSAoY3VycmVudFJlY3QudG9wIC0gdG9SZWN0LnRvcCkgLyAoc2NhbGVZIHx8IDEpO1xuICAgICAgICB0YXJnZXQuYW5pbWF0aW5nWCA9ICEhdHJhbnNsYXRlWDtcbiAgICAgICAgdGFyZ2V0LmFuaW1hdGluZ1kgPSAhIXRyYW5zbGF0ZVk7XG4gICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlM2QoJyArIHRyYW5zbGF0ZVggKyAncHgsJyArIHRyYW5zbGF0ZVkgKyAncHgsMCknKTtcbiAgICAgICAgdGhpcy5mb3JSZXBhaW50RHVtbXkgPSByZXBhaW50KHRhcmdldCk7IC8vIHJlcGFpbnRcblxuICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNpdGlvbicsICd0cmFuc2Zvcm0gJyArIGR1cmF0aW9uICsgJ21zJyArICh0aGlzLm9wdGlvbnMuZWFzaW5nID8gJyAnICsgdGhpcy5vcHRpb25zLmVhc2luZyA6ICcnKSk7XG4gICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlM2QoMCwwLDApJyk7XG4gICAgICAgIHR5cGVvZiB0YXJnZXQuYW5pbWF0ZWQgPT09ICdudW1iZXInICYmIGNsZWFyVGltZW91dCh0YXJnZXQuYW5pbWF0ZWQpO1xuICAgICAgICB0YXJnZXQuYW5pbWF0ZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNpdGlvbicsICcnKTtcbiAgICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNmb3JtJywgJycpO1xuICAgICAgICAgIHRhcmdldC5hbmltYXRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRhcmdldC5hbmltYXRpbmdYID0gZmFsc2U7XG4gICAgICAgICAgdGFyZ2V0LmFuaW1hdGluZ1kgPSBmYWxzZTtcbiAgICAgICAgfSwgZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwYWludCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldC5vZmZzZXRXaWR0aDtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlUmVhbFRpbWUoYW5pbWF0aW5nUmVjdCwgZnJvbVJlY3QsIHRvUmVjdCwgb3B0aW9ucykge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGZyb21SZWN0LnRvcCAtIGFuaW1hdGluZ1JlY3QudG9wLCAyKSArIE1hdGgucG93KGZyb21SZWN0LmxlZnQgLSBhbmltYXRpbmdSZWN0LmxlZnQsIDIpKSAvIE1hdGguc3FydChNYXRoLnBvdyhmcm9tUmVjdC50b3AgLSB0b1JlY3QudG9wLCAyKSArIE1hdGgucG93KGZyb21SZWN0LmxlZnQgLSB0b1JlY3QubGVmdCwgMikpICogb3B0aW9ucy5hbmltYXRpb247XG59XG5cbnZhciBwbHVnaW5zID0gW107XG52YXIgZGVmYXVsdHMgPSB7XG4gIGluaXRpYWxpemVCeURlZmF1bHQ6IHRydWVcbn07XG52YXIgUGx1Z2luTWFuYWdlciA9IHtcbiAgbW91bnQ6IGZ1bmN0aW9uIG1vdW50KHBsdWdpbikge1xuICAgIC8vIFNldCBkZWZhdWx0IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgZm9yICh2YXIgb3B0aW9uIGluIGRlZmF1bHRzKSB7XG4gICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0aW9uKSAmJiAhKG9wdGlvbiBpbiBwbHVnaW4pKSB7XG4gICAgICAgIHBsdWdpbltvcHRpb25dID0gZGVmYXVsdHNbb3B0aW9uXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgIGlmIChwLnBsdWdpbk5hbWUgPT09IHBsdWdpbi5wbHVnaW5OYW1lKSB7XG4gICAgICAgIHRocm93IFwiU29ydGFibGU6IENhbm5vdCBtb3VudCBwbHVnaW4gXCIuY29uY2F0KHBsdWdpbi5wbHVnaW5OYW1lLCBcIiBtb3JlIHRoYW4gb25jZVwiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgfSxcbiAgcGx1Z2luRXZlbnQ6IGZ1bmN0aW9uIHBsdWdpbkV2ZW50KGV2ZW50TmFtZSwgc29ydGFibGUsIGV2dCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmV2ZW50Q2FuY2VsZWQgPSBmYWxzZTtcblxuICAgIGV2dC5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5ldmVudENhbmNlbGVkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIGV2ZW50TmFtZUdsb2JhbCA9IGV2ZW50TmFtZSArICdHbG9iYWwnO1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICBpZiAoIXNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXSkgcmV0dXJuOyAvLyBGaXJlIGdsb2JhbCBldmVudHMgaWYgaXQgZXhpc3RzIGluIHRoaXMgc29ydGFibGVcblxuICAgICAgaWYgKHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXVtldmVudE5hbWVHbG9iYWxdKSB7XG4gICAgICAgIHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXVtldmVudE5hbWVHbG9iYWxdKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZVxuICAgICAgICB9LCBldnQpKTtcbiAgICAgIH0gLy8gT25seSBmaXJlIHBsdWdpbiBldmVudCBpZiBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGlzIHNvcnRhYmxlLFxuICAgICAgLy8gYW5kIHBsdWdpbiBoYXMgZXZlbnQgZGVmaW5lZFxuXG5cbiAgICAgIGlmIChzb3J0YWJsZS5vcHRpb25zW3BsdWdpbi5wbHVnaW5OYW1lXSAmJiBzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV1bZXZlbnROYW1lXSkge1xuICAgICAgICBzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV1bZXZlbnROYW1lXShfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICBzb3J0YWJsZTogc29ydGFibGVcbiAgICAgICAgfSwgZXZ0KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIGluaXRpYWxpemVQbHVnaW5zOiBmdW5jdGlvbiBpbml0aWFsaXplUGx1Z2lucyhzb3J0YWJsZSwgZWwsIGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIHZhciBwbHVnaW5OYW1lID0gcGx1Z2luLnBsdWdpbk5hbWU7XG4gICAgICBpZiAoIXNvcnRhYmxlLm9wdGlvbnNbcGx1Z2luTmFtZV0gJiYgIXBsdWdpbi5pbml0aWFsaXplQnlEZWZhdWx0KSByZXR1cm47XG4gICAgICB2YXIgaW5pdGlhbGl6ZWQgPSBuZXcgcGx1Z2luKHNvcnRhYmxlLCBlbCwgc29ydGFibGUub3B0aW9ucyk7XG4gICAgICBpbml0aWFsaXplZC5zb3J0YWJsZSA9IHNvcnRhYmxlO1xuICAgICAgaW5pdGlhbGl6ZWQub3B0aW9ucyA9IHNvcnRhYmxlLm9wdGlvbnM7XG4gICAgICBzb3J0YWJsZVtwbHVnaW5OYW1lXSA9IGluaXRpYWxpemVkOyAvLyBBZGQgZGVmYXVsdCBvcHRpb25zIGZyb20gcGx1Z2luXG5cbiAgICAgIF9leHRlbmRzKGRlZmF1bHRzLCBpbml0aWFsaXplZC5kZWZhdWx0cyk7XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBvcHRpb24gaW4gc29ydGFibGUub3B0aW9ucykge1xuICAgICAgaWYgKCFzb3J0YWJsZS5vcHRpb25zLmhhc093blByb3BlcnR5KG9wdGlvbikpIGNvbnRpbnVlO1xuICAgICAgdmFyIG1vZGlmaWVkID0gdGhpcy5tb2RpZnlPcHRpb24oc29ydGFibGUsIG9wdGlvbiwgc29ydGFibGUub3B0aW9uc1tvcHRpb25dKTtcblxuICAgICAgaWYgKHR5cGVvZiBtb2RpZmllZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc29ydGFibGUub3B0aW9uc1tvcHRpb25dID0gbW9kaWZpZWQ7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBnZXRFdmVudFByb3BlcnRpZXM6IGZ1bmN0aW9uIGdldEV2ZW50UHJvcGVydGllcyhuYW1lLCBzb3J0YWJsZSkge1xuICAgIHZhciBldmVudFByb3BlcnRpZXMgPSB7fTtcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgaWYgKHR5cGVvZiBwbHVnaW4uZXZlbnRQcm9wZXJ0aWVzICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG5cbiAgICAgIF9leHRlbmRzKGV2ZW50UHJvcGVydGllcywgcGx1Z2luLmV2ZW50UHJvcGVydGllcy5jYWxsKHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXSwgbmFtZSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBldmVudFByb3BlcnRpZXM7XG4gIH0sXG4gIG1vZGlmeU9wdGlvbjogZnVuY3Rpb24gbW9kaWZ5T3B0aW9uKHNvcnRhYmxlLCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBtb2RpZmllZFZhbHVlO1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICAvLyBQbHVnaW4gbXVzdCBleGlzdCBvbiB0aGUgU29ydGFibGVcbiAgICAgIGlmICghc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdKSByZXR1cm47IC8vIElmIHN0YXRpYyBvcHRpb24gbGlzdGVuZXIgZXhpc3RzIGZvciB0aGlzIG9wdGlvbiwgY2FsbCBpbiB0aGUgY29udGV4dCBvZiB0aGUgU29ydGFibGUncyBpbnN0YW5jZSBvZiB0aGlzIHBsdWdpblxuXG4gICAgICBpZiAocGx1Z2luLm9wdGlvbkxpc3RlbmVycyAmJiB0eXBlb2YgcGx1Z2luLm9wdGlvbkxpc3RlbmVyc1tuYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBtb2RpZmllZFZhbHVlID0gcGx1Z2luLm9wdGlvbkxpc3RlbmVyc1tuYW1lXS5jYWxsKHNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtb2RpZmllZFZhbHVlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KF9yZWYpIHtcbiAgdmFyIHNvcnRhYmxlID0gX3JlZi5zb3J0YWJsZSxcbiAgICAgIHJvb3RFbCA9IF9yZWYucm9vdEVsLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIHRhcmdldEVsID0gX3JlZi50YXJnZXRFbCxcbiAgICAgIGNsb25lRWwgPSBfcmVmLmNsb25lRWwsXG4gICAgICB0b0VsID0gX3JlZi50b0VsLFxuICAgICAgZnJvbUVsID0gX3JlZi5mcm9tRWwsXG4gICAgICBvbGRJbmRleCA9IF9yZWYub2xkSW5kZXgsXG4gICAgICBuZXdJbmRleCA9IF9yZWYubmV3SW5kZXgsXG4gICAgICBvbGREcmFnZ2FibGVJbmRleCA9IF9yZWYub2xkRHJhZ2dhYmxlSW5kZXgsXG4gICAgICBuZXdEcmFnZ2FibGVJbmRleCA9IF9yZWYubmV3RHJhZ2dhYmxlSW5kZXgsXG4gICAgICBvcmlnaW5hbEV2ZW50ID0gX3JlZi5vcmlnaW5hbEV2ZW50LFxuICAgICAgcHV0U29ydGFibGUgPSBfcmVmLnB1dFNvcnRhYmxlLFxuICAgICAgZXh0cmFFdmVudFByb3BlcnRpZXMgPSBfcmVmLmV4dHJhRXZlbnRQcm9wZXJ0aWVzO1xuICBzb3J0YWJsZSA9IHNvcnRhYmxlIHx8IHJvb3RFbCAmJiByb290RWxbZXhwYW5kb107XG4gIGlmICghc29ydGFibGUpIHJldHVybjtcbiAgdmFyIGV2dCxcbiAgICAgIG9wdGlvbnMgPSBzb3J0YWJsZS5vcHRpb25zLFxuICAgICAgb25OYW1lID0gJ29uJyArIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cigxKTsgLy8gU3VwcG9ydCBmb3IgbmV3IEN1c3RvbUV2ZW50IGZlYXR1cmVcblxuICBpZiAod2luZG93LkN1c3RvbUV2ZW50ICYmICFJRTExT3JMZXNzICYmICFFZGdlKSB7XG4gICAgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KG5hbWUsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZ0LmluaXRFdmVudChuYW1lLCB0cnVlLCB0cnVlKTtcbiAgfVxuXG4gIGV2dC50byA9IHRvRWwgfHwgcm9vdEVsO1xuICBldnQuZnJvbSA9IGZyb21FbCB8fCByb290RWw7XG4gIGV2dC5pdGVtID0gdGFyZ2V0RWwgfHwgcm9vdEVsO1xuICBldnQuY2xvbmUgPSBjbG9uZUVsO1xuICBldnQub2xkSW5kZXggPSBvbGRJbmRleDtcbiAgZXZ0Lm5ld0luZGV4ID0gbmV3SW5kZXg7XG4gIGV2dC5vbGREcmFnZ2FibGVJbmRleCA9IG9sZERyYWdnYWJsZUluZGV4O1xuICBldnQubmV3RHJhZ2dhYmxlSW5kZXggPSBuZXdEcmFnZ2FibGVJbmRleDtcbiAgZXZ0Lm9yaWdpbmFsRXZlbnQgPSBvcmlnaW5hbEV2ZW50O1xuICBldnQucHVsbE1vZGUgPSBwdXRTb3J0YWJsZSA/IHB1dFNvcnRhYmxlLmxhc3RQdXRNb2RlIDogdW5kZWZpbmVkO1xuXG4gIHZhciBhbGxFdmVudFByb3BlcnRpZXMgPSBfb2JqZWN0U3ByZWFkKHt9LCBleHRyYUV2ZW50UHJvcGVydGllcywgUGx1Z2luTWFuYWdlci5nZXRFdmVudFByb3BlcnRpZXMobmFtZSwgc29ydGFibGUpKTtcblxuICBmb3IgKHZhciBvcHRpb24gaW4gYWxsRXZlbnRQcm9wZXJ0aWVzKSB7XG4gICAgZXZ0W29wdGlvbl0gPSBhbGxFdmVudFByb3BlcnRpZXNbb3B0aW9uXTtcbiAgfVxuXG4gIGlmIChyb290RWwpIHtcbiAgICByb290RWwuZGlzcGF0Y2hFdmVudChldnQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnNbb25OYW1lXSkge1xuICAgIG9wdGlvbnNbb25OYW1lXS5jYWxsKHNvcnRhYmxlLCBldnQpO1xuICB9XG59XG5cbnZhciBwbHVnaW5FdmVudCA9IGZ1bmN0aW9uIHBsdWdpbkV2ZW50KGV2ZW50TmFtZSwgc29ydGFibGUpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgb3JpZ2luYWxFdmVudCA9IF9yZWYuZXZ0LFxuICAgICAgZGF0YSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJldnRcIl0pO1xuXG4gIFBsdWdpbk1hbmFnZXIucGx1Z2luRXZlbnQuYmluZChTb3J0YWJsZSkoZXZlbnROYW1lLCBzb3J0YWJsZSwgX29iamVjdFNwcmVhZCh7XG4gICAgZHJhZ0VsOiBkcmFnRWwsXG4gICAgcGFyZW50RWw6IHBhcmVudEVsLFxuICAgIGdob3N0RWw6IGdob3N0RWwsXG4gICAgcm9vdEVsOiByb290RWwsXG4gICAgbmV4dEVsOiBuZXh0RWwsXG4gICAgbGFzdERvd25FbDogbGFzdERvd25FbCxcbiAgICBjbG9uZUVsOiBjbG9uZUVsLFxuICAgIGNsb25lSGlkZGVuOiBjbG9uZUhpZGRlbixcbiAgICBkcmFnU3RhcnRlZDogbW92ZWQsXG4gICAgcHV0U29ydGFibGU6IHB1dFNvcnRhYmxlLFxuICAgIGFjdGl2ZVNvcnRhYmxlOiBTb3J0YWJsZS5hY3RpdmUsXG4gICAgb3JpZ2luYWxFdmVudDogb3JpZ2luYWxFdmVudCxcbiAgICBvbGRJbmRleDogb2xkSW5kZXgsXG4gICAgb2xkRHJhZ2dhYmxlSW5kZXg6IG9sZERyYWdnYWJsZUluZGV4LFxuICAgIG5ld0luZGV4OiBuZXdJbmRleCxcbiAgICBuZXdEcmFnZ2FibGVJbmRleDogbmV3RHJhZ2dhYmxlSW5kZXgsXG4gICAgaGlkZUdob3N0Rm9yVGFyZ2V0OiBfaGlkZUdob3N0Rm9yVGFyZ2V0LFxuICAgIHVuaGlkZUdob3N0Rm9yVGFyZ2V0OiBfdW5oaWRlR2hvc3RGb3JUYXJnZXQsXG4gICAgY2xvbmVOb3dIaWRkZW46IGZ1bmN0aW9uIGNsb25lTm93SGlkZGVuKCkge1xuICAgICAgY2xvbmVIaWRkZW4gPSB0cnVlO1xuICAgIH0sXG4gICAgY2xvbmVOb3dTaG93bjogZnVuY3Rpb24gY2xvbmVOb3dTaG93bigpIHtcbiAgICAgIGNsb25lSGlkZGVuID0gZmFsc2U7XG4gICAgfSxcbiAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQ6IGZ1bmN0aW9uIGRpc3BhdGNoU29ydGFibGVFdmVudChuYW1lKSB7XG4gICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogb3JpZ2luYWxFdmVudFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBkYXRhKSk7XG59O1xuXG5mdW5jdGlvbiBfZGlzcGF0Y2hFdmVudChpbmZvKSB7XG4gIGRpc3BhdGNoRXZlbnQoX29iamVjdFNwcmVhZCh7XG4gICAgcHV0U29ydGFibGU6IHB1dFNvcnRhYmxlLFxuICAgIGNsb25lRWw6IGNsb25lRWwsXG4gICAgdGFyZ2V0RWw6IGRyYWdFbCxcbiAgICByb290RWw6IHJvb3RFbCxcbiAgICBvbGRJbmRleDogb2xkSW5kZXgsXG4gICAgb2xkRHJhZ2dhYmxlSW5kZXg6IG9sZERyYWdnYWJsZUluZGV4LFxuICAgIG5ld0luZGV4OiBuZXdJbmRleCxcbiAgICBuZXdEcmFnZ2FibGVJbmRleDogbmV3RHJhZ2dhYmxlSW5kZXhcbiAgfSwgaW5mbykpO1xufVxuXG52YXIgZHJhZ0VsLFxuICAgIHBhcmVudEVsLFxuICAgIGdob3N0RWwsXG4gICAgcm9vdEVsLFxuICAgIG5leHRFbCxcbiAgICBsYXN0RG93bkVsLFxuICAgIGNsb25lRWwsXG4gICAgY2xvbmVIaWRkZW4sXG4gICAgb2xkSW5kZXgsXG4gICAgbmV3SW5kZXgsXG4gICAgb2xkRHJhZ2dhYmxlSW5kZXgsXG4gICAgbmV3RHJhZ2dhYmxlSW5kZXgsXG4gICAgYWN0aXZlR3JvdXAsXG4gICAgcHV0U29ydGFibGUsXG4gICAgYXdhaXRpbmdEcmFnU3RhcnRlZCA9IGZhbHNlLFxuICAgIGlnbm9yZU5leHRDbGljayA9IGZhbHNlLFxuICAgIHNvcnRhYmxlcyA9IFtdLFxuICAgIHRhcEV2dCxcbiAgICB0b3VjaEV2dCxcbiAgICBsYXN0RHgsXG4gICAgbGFzdER5LFxuICAgIHRhcERpc3RhbmNlTGVmdCxcbiAgICB0YXBEaXN0YW5jZVRvcCxcbiAgICBtb3ZlZCxcbiAgICBsYXN0VGFyZ2V0LFxuICAgIGxhc3REaXJlY3Rpb24sXG4gICAgcGFzdEZpcnN0SW52ZXJ0VGhyZXNoID0gZmFsc2UsXG4gICAgaXNDaXJjdW1zdGFudGlhbEludmVydCA9IGZhbHNlLFxuICAgIHRhcmdldE1vdmVEaXN0YW5jZSxcbiAgICAvLyBGb3IgcG9zaXRpb25pbmcgZ2hvc3QgYWJzb2x1dGVseVxuZ2hvc3RSZWxhdGl2ZVBhcmVudCxcbiAgICBnaG9zdFJlbGF0aXZlUGFyZW50SW5pdGlhbFNjcm9sbCA9IFtdLFxuICAgIC8vIChsZWZ0LCB0b3ApXG5fc2lsZW50ID0gZmFsc2UsXG4gICAgc2F2ZWRJbnB1dENoZWNrZWQgPSBbXTtcbi8qKiBAY29uc3QgKi9cblxudmFyIGRvY3VtZW50RXhpc3RzID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyxcbiAgICBQb3NpdGlvbkdob3N0QWJzb2x1dGVseSA9IElPUyxcbiAgICBDU1NGbG9hdFByb3BlcnR5ID0gRWRnZSB8fCBJRTExT3JMZXNzID8gJ2Nzc0Zsb2F0JyA6ICdmbG9hdCcsXG4gICAgLy8gVGhpcyB3aWxsIG5vdCBwYXNzIGZvciBJRTksIGJlY2F1c2UgSUU5IERuRCBvbmx5IHdvcmtzIG9uIGFuY2hvcnNcbnN1cHBvcnREcmFnZ2FibGUgPSBkb2N1bWVudEV4aXN0cyAmJiAhQ2hyb21lRm9yQW5kcm9pZCAmJiAhSU9TICYmICdkcmFnZ2FibGUnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgIHN1cHBvcnRDc3NQb2ludGVyRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWRvY3VtZW50RXhpc3RzKSByZXR1cm47IC8vIGZhbHNlIHdoZW4gPD0gSUUxMVxuXG4gIGlmIChJRTExT3JMZXNzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgneCcpO1xuICBlbC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOmF1dG8nO1xuICByZXR1cm4gZWwuc3R5bGUucG9pbnRlckV2ZW50cyA9PT0gJ2F1dG8nO1xufSgpLFxuICAgIF9kZXRlY3REaXJlY3Rpb24gPSBmdW5jdGlvbiBfZGV0ZWN0RGlyZWN0aW9uKGVsLCBvcHRpb25zKSB7XG4gIHZhciBlbENTUyA9IGNzcyhlbCksXG4gICAgICBlbFdpZHRoID0gcGFyc2VJbnQoZWxDU1Mud2lkdGgpIC0gcGFyc2VJbnQoZWxDU1MucGFkZGluZ0xlZnQpIC0gcGFyc2VJbnQoZWxDU1MucGFkZGluZ1JpZ2h0KSAtIHBhcnNlSW50KGVsQ1NTLmJvcmRlckxlZnRXaWR0aCkgLSBwYXJzZUludChlbENTUy5ib3JkZXJSaWdodFdpZHRoKSxcbiAgICAgIGNoaWxkMSA9IGdldENoaWxkKGVsLCAwLCBvcHRpb25zKSxcbiAgICAgIGNoaWxkMiA9IGdldENoaWxkKGVsLCAxLCBvcHRpb25zKSxcbiAgICAgIGZpcnN0Q2hpbGRDU1MgPSBjaGlsZDEgJiYgY3NzKGNoaWxkMSksXG4gICAgICBzZWNvbmRDaGlsZENTUyA9IGNoaWxkMiAmJiBjc3MoY2hpbGQyKSxcbiAgICAgIGZpcnN0Q2hpbGRXaWR0aCA9IGZpcnN0Q2hpbGRDU1MgJiYgcGFyc2VJbnQoZmlyc3RDaGlsZENTUy5tYXJnaW5MZWZ0KSArIHBhcnNlSW50KGZpcnN0Q2hpbGRDU1MubWFyZ2luUmlnaHQpICsgZ2V0UmVjdChjaGlsZDEpLndpZHRoLFxuICAgICAgc2Vjb25kQ2hpbGRXaWR0aCA9IHNlY29uZENoaWxkQ1NTICYmIHBhcnNlSW50KHNlY29uZENoaWxkQ1NTLm1hcmdpbkxlZnQpICsgcGFyc2VJbnQoc2Vjb25kQ2hpbGRDU1MubWFyZ2luUmlnaHQpICsgZ2V0UmVjdChjaGlsZDIpLndpZHRoO1xuXG4gIGlmIChlbENTUy5kaXNwbGF5ID09PSAnZmxleCcpIHtcbiAgICByZXR1cm4gZWxDU1MuZmxleERpcmVjdGlvbiA9PT0gJ2NvbHVtbicgfHwgZWxDU1MuZmxleERpcmVjdGlvbiA9PT0gJ2NvbHVtbi1yZXZlcnNlJyA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gIH1cblxuICBpZiAoZWxDU1MuZGlzcGxheSA9PT0gJ2dyaWQnKSB7XG4gICAgcmV0dXJuIGVsQ1NTLmdyaWRUZW1wbGF0ZUNvbHVtbnMuc3BsaXQoJyAnKS5sZW5ndGggPD0gMSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gIH1cblxuICBpZiAoY2hpbGQxICYmIGZpcnN0Q2hpbGRDU1NbXCJmbG9hdFwiXSAmJiBmaXJzdENoaWxkQ1NTW1wiZmxvYXRcIl0gIT09ICdub25lJykge1xuICAgIHZhciB0b3VjaGluZ1NpZGVDaGlsZDIgPSBmaXJzdENoaWxkQ1NTW1wiZmxvYXRcIl0gPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgcmV0dXJuIGNoaWxkMiAmJiAoc2Vjb25kQ2hpbGRDU1MuY2xlYXIgPT09ICdib3RoJyB8fCBzZWNvbmRDaGlsZENTUy5jbGVhciA9PT0gdG91Y2hpbmdTaWRlQ2hpbGQyKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gIH1cblxuICByZXR1cm4gY2hpbGQxICYmIChmaXJzdENoaWxkQ1NTLmRpc3BsYXkgPT09ICdibG9jaycgfHwgZmlyc3RDaGlsZENTUy5kaXNwbGF5ID09PSAnZmxleCcgfHwgZmlyc3RDaGlsZENTUy5kaXNwbGF5ID09PSAndGFibGUnIHx8IGZpcnN0Q2hpbGRDU1MuZGlzcGxheSA9PT0gJ2dyaWQnIHx8IGZpcnN0Q2hpbGRXaWR0aCA+PSBlbFdpZHRoICYmIGVsQ1NTW0NTU0Zsb2F0UHJvcGVydHldID09PSAnbm9uZScgfHwgY2hpbGQyICYmIGVsQ1NTW0NTU0Zsb2F0UHJvcGVydHldID09PSAnbm9uZScgJiYgZmlyc3RDaGlsZFdpZHRoICsgc2Vjb25kQ2hpbGRXaWR0aCA+IGVsV2lkdGgpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbn0sXG4gICAgX2RyYWdFbEluUm93Q29sdW1uID0gZnVuY3Rpb24gX2RyYWdFbEluUm93Q29sdW1uKGRyYWdSZWN0LCB0YXJnZXRSZWN0LCB2ZXJ0aWNhbCkge1xuICB2YXIgZHJhZ0VsUzFPcHAgPSB2ZXJ0aWNhbCA/IGRyYWdSZWN0LmxlZnQgOiBkcmFnUmVjdC50b3AsXG4gICAgICBkcmFnRWxTMk9wcCA9IHZlcnRpY2FsID8gZHJhZ1JlY3QucmlnaHQgOiBkcmFnUmVjdC5ib3R0b20sXG4gICAgICBkcmFnRWxPcHBMZW5ndGggPSB2ZXJ0aWNhbCA/IGRyYWdSZWN0LndpZHRoIDogZHJhZ1JlY3QuaGVpZ2h0LFxuICAgICAgdGFyZ2V0UzFPcHAgPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3QubGVmdCA6IHRhcmdldFJlY3QudG9wLFxuICAgICAgdGFyZ2V0UzJPcHAgPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3QucmlnaHQgOiB0YXJnZXRSZWN0LmJvdHRvbSxcbiAgICAgIHRhcmdldE9wcExlbmd0aCA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC53aWR0aCA6IHRhcmdldFJlY3QuaGVpZ2h0O1xuICByZXR1cm4gZHJhZ0VsUzFPcHAgPT09IHRhcmdldFMxT3BwIHx8IGRyYWdFbFMyT3BwID09PSB0YXJnZXRTMk9wcCB8fCBkcmFnRWxTMU9wcCArIGRyYWdFbE9wcExlbmd0aCAvIDIgPT09IHRhcmdldFMxT3BwICsgdGFyZ2V0T3BwTGVuZ3RoIC8gMjtcbn0sXG5cbi8qKlxuICogRGV0ZWN0cyBmaXJzdCBuZWFyZXN0IGVtcHR5IHNvcnRhYmxlIHRvIFggYW5kIFkgcG9zaXRpb24gdXNpbmcgZW1wdHlJbnNlcnRUaHJlc2hvbGQuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHggICAgICBYIHBvc2l0aW9uXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHkgICAgICBZIHBvc2l0aW9uXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gICBFbGVtZW50IG9mIHRoZSBmaXJzdCBmb3VuZCBuZWFyZXN0IFNvcnRhYmxlXG4gKi9cbl9kZXRlY3ROZWFyZXN0RW1wdHlTb3J0YWJsZSA9IGZ1bmN0aW9uIF9kZXRlY3ROZWFyZXN0RW1wdHlTb3J0YWJsZSh4LCB5KSB7XG4gIHZhciByZXQ7XG4gIHNvcnRhYmxlcy5zb21lKGZ1bmN0aW9uIChzb3J0YWJsZSkge1xuICAgIGlmIChsYXN0Q2hpbGQoc29ydGFibGUpKSByZXR1cm47XG4gICAgdmFyIHJlY3QgPSBnZXRSZWN0KHNvcnRhYmxlKSxcbiAgICAgICAgdGhyZXNob2xkID0gc29ydGFibGVbZXhwYW5kb10ub3B0aW9ucy5lbXB0eUluc2VydFRocmVzaG9sZCxcbiAgICAgICAgaW5zaWRlSG9yaXpvbnRhbGx5ID0geCA+PSByZWN0LmxlZnQgLSB0aHJlc2hvbGQgJiYgeCA8PSByZWN0LnJpZ2h0ICsgdGhyZXNob2xkLFxuICAgICAgICBpbnNpZGVWZXJ0aWNhbGx5ID0geSA+PSByZWN0LnRvcCAtIHRocmVzaG9sZCAmJiB5IDw9IHJlY3QuYm90dG9tICsgdGhyZXNob2xkO1xuXG4gICAgaWYgKHRocmVzaG9sZCAmJiBpbnNpZGVIb3Jpem9udGFsbHkgJiYgaW5zaWRlVmVydGljYWxseSkge1xuICAgICAgcmV0dXJuIHJldCA9IHNvcnRhYmxlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXQ7XG59LFxuICAgIF9wcmVwYXJlR3JvdXAgPSBmdW5jdGlvbiBfcHJlcGFyZUdyb3VwKG9wdGlvbnMpIHtcbiAgZnVuY3Rpb24gdG9Gbih2YWx1ZSwgcHVsbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodG8sIGZyb20sIGRyYWdFbCwgZXZ0KSB7XG4gICAgICB2YXIgc2FtZUdyb3VwID0gdG8ub3B0aW9ucy5ncm91cC5uYW1lICYmIGZyb20ub3B0aW9ucy5ncm91cC5uYW1lICYmIHRvLm9wdGlvbnMuZ3JvdXAubmFtZSA9PT0gZnJvbS5vcHRpb25zLmdyb3VwLm5hbWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIChwdWxsIHx8IHNhbWVHcm91cCkpIHtcbiAgICAgICAgLy8gRGVmYXVsdCBwdWxsIHZhbHVlXG4gICAgICAgIC8vIERlZmF1bHQgcHVsbCBhbmQgcHV0IHZhbHVlIGlmIHNhbWUgZ3JvdXBcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocHVsbCAmJiB2YWx1ZSA9PT0gJ2Nsb25lJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdG9Gbih2YWx1ZSh0bywgZnJvbSwgZHJhZ0VsLCBldnQpLCBwdWxsKSh0bywgZnJvbSwgZHJhZ0VsLCBldnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG90aGVyR3JvdXAgPSAocHVsbCA/IHRvIDogZnJvbSkub3B0aW9ucy5ncm91cC5uYW1lO1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSA9PT0gb3RoZXJHcm91cCB8fCB2YWx1ZS5qb2luICYmIHZhbHVlLmluZGV4T2Yob3RoZXJHcm91cCkgPiAtMTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGdyb3VwID0ge307XG4gIHZhciBvcmlnaW5hbEdyb3VwID0gb3B0aW9ucy5ncm91cDtcblxuICBpZiAoIW9yaWdpbmFsR3JvdXAgfHwgX3R5cGVvZihvcmlnaW5hbEdyb3VwKSAhPSAnb2JqZWN0Jykge1xuICAgIG9yaWdpbmFsR3JvdXAgPSB7XG4gICAgICBuYW1lOiBvcmlnaW5hbEdyb3VwXG4gICAgfTtcbiAgfVxuXG4gIGdyb3VwLm5hbWUgPSBvcmlnaW5hbEdyb3VwLm5hbWU7XG4gIGdyb3VwLmNoZWNrUHVsbCA9IHRvRm4ob3JpZ2luYWxHcm91cC5wdWxsLCB0cnVlKTtcbiAgZ3JvdXAuY2hlY2tQdXQgPSB0b0ZuKG9yaWdpbmFsR3JvdXAucHV0KTtcbiAgZ3JvdXAucmV2ZXJ0Q2xvbmUgPSBvcmlnaW5hbEdyb3VwLnJldmVydENsb25lO1xuICBvcHRpb25zLmdyb3VwID0gZ3JvdXA7XG59LFxuICAgIF9oaWRlR2hvc3RGb3JUYXJnZXQgPSBmdW5jdGlvbiBfaGlkZUdob3N0Rm9yVGFyZ2V0KCkge1xuICBpZiAoIXN1cHBvcnRDc3NQb2ludGVyRXZlbnRzICYmIGdob3N0RWwpIHtcbiAgICBjc3MoZ2hvc3RFbCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICB9XG59LFxuICAgIF91bmhpZGVHaG9zdEZvclRhcmdldCA9IGZ1bmN0aW9uIF91bmhpZGVHaG9zdEZvclRhcmdldCgpIHtcbiAgaWYgKCFzdXBwb3J0Q3NzUG9pbnRlckV2ZW50cyAmJiBnaG9zdEVsKSB7XG4gICAgY3NzKGdob3N0RWwsICdkaXNwbGF5JywgJycpO1xuICB9XG59OyAvLyAjMTE4NCBmaXggLSBQcmV2ZW50IGNsaWNrIGV2ZW50IG9uIGZhbGxiYWNrIGlmIGRyYWdnZWQgYnV0IGl0ZW0gbm90IGNoYW5nZWQgcG9zaXRpb25cblxuXG5pZiAoZG9jdW1lbnRFeGlzdHMpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgaWYgKGlnbm9yZU5leHRDbGljaykge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uICYmIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gJiYgZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgaWdub3JlTmV4dENsaWNrID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cblxudmFyIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50ID0gZnVuY3Rpb24gbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQoZXZ0KSB7XG4gIGlmIChkcmFnRWwpIHtcbiAgICBldnQgPSBldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0O1xuXG4gICAgdmFyIG5lYXJlc3QgPSBfZGV0ZWN0TmVhcmVzdEVtcHR5U29ydGFibGUoZXZ0LmNsaWVudFgsIGV2dC5jbGllbnRZKTtcblxuICAgIGlmIChuZWFyZXN0KSB7XG4gICAgICAvLyBDcmVhdGUgaW1pdGF0aW9uIGV2ZW50XG4gICAgICB2YXIgZXZlbnQgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSBpbiBldnQpIHtcbiAgICAgICAgaWYgKGV2dC5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgIGV2ZW50W2ldID0gZXZ0W2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnJvb3RFbCA9IG5lYXJlc3Q7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IHZvaWQgMDtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IHZvaWQgMDtcblxuICAgICAgbmVhcmVzdFtleHBhbmRvXS5fb25EcmFnT3ZlcihldmVudCk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgX2NoZWNrT3V0c2lkZVRhcmdldEVsID0gZnVuY3Rpb24gX2NoZWNrT3V0c2lkZVRhcmdldEVsKGV2dCkge1xuICBpZiAoZHJhZ0VsKSB7XG4gICAgZHJhZ0VsLnBhcmVudE5vZGVbZXhwYW5kb10uX2lzT3V0c2lkZVRoaXNFbChldnQudGFyZ2V0KTtcbiAgfVxufTtcbi8qKlxuICogQGNsYXNzICBTb3J0YWJsZVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9ICBlbFxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICBbb3B0aW9uc11cbiAqL1xuXG5cbmZ1bmN0aW9uIFNvcnRhYmxlKGVsLCBvcHRpb25zKSB7XG4gIGlmICghKGVsICYmIGVsLm5vZGVUeXBlICYmIGVsLm5vZGVUeXBlID09PSAxKSkge1xuICAgIHRocm93IFwiU29ydGFibGU6IGBlbGAgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCwgbm90IFwiLmNvbmNhdCh7fS50b1N0cmluZy5jYWxsKGVsKSk7XG4gIH1cblxuICB0aGlzLmVsID0gZWw7IC8vIHJvb3QgZWxlbWVudFxuXG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgb3B0aW9ucyk7IC8vIEV4cG9ydCBpbnN0YW5jZVxuXG4gIGVsW2V4cGFuZG9dID0gdGhpcztcbiAgdmFyIGRlZmF1bHRzID0ge1xuICAgIGdyb3VwOiBudWxsLFxuICAgIHNvcnQ6IHRydWUsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHN0b3JlOiBudWxsLFxuICAgIGhhbmRsZTogbnVsbCxcbiAgICBkcmFnZ2FibGU6IC9eW3VvXWwkL2kudGVzdChlbC5ub2RlTmFtZSkgPyAnPmxpJyA6ICc+KicsXG4gICAgc3dhcFRocmVzaG9sZDogMSxcbiAgICAvLyBwZXJjZW50YWdlOyAwIDw9IHggPD0gMVxuICAgIGludmVydFN3YXA6IGZhbHNlLFxuICAgIC8vIGludmVydCBhbHdheXNcbiAgICBpbnZlcnRlZFN3YXBUaHJlc2hvbGQ6IG51bGwsXG4gICAgLy8gd2lsbCBiZSBzZXQgdG8gc2FtZSBhcyBzd2FwVGhyZXNob2xkIGlmIGRlZmF1bHRcbiAgICByZW1vdmVDbG9uZU9uSGlkZTogdHJ1ZSxcbiAgICBkaXJlY3Rpb246IGZ1bmN0aW9uIGRpcmVjdGlvbigpIHtcbiAgICAgIHJldHVybiBfZGV0ZWN0RGlyZWN0aW9uKGVsLCB0aGlzLm9wdGlvbnMpO1xuICAgIH0sXG4gICAgZ2hvc3RDbGFzczogJ3NvcnRhYmxlLWdob3N0JyxcbiAgICBjaG9zZW5DbGFzczogJ3NvcnRhYmxlLWNob3NlbicsXG4gICAgZHJhZ0NsYXNzOiAnc29ydGFibGUtZHJhZycsXG4gICAgaWdub3JlOiAnYSwgaW1nJyxcbiAgICBmaWx0ZXI6IG51bGwsXG4gICAgcHJldmVudE9uRmlsdGVyOiB0cnVlLFxuICAgIGFuaW1hdGlvbjogMCxcbiAgICBlYXNpbmc6IG51bGwsXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gc2V0RGF0YShkYXRhVHJhbnNmZXIsIGRyYWdFbCkge1xuICAgICAgZGF0YVRyYW5zZmVyLnNldERhdGEoJ1RleHQnLCBkcmFnRWwudGV4dENvbnRlbnQpO1xuICAgIH0sXG4gICAgZHJvcEJ1YmJsZTogZmFsc2UsXG4gICAgZHJhZ292ZXJCdWJibGU6IGZhbHNlLFxuICAgIGRhdGFJZEF0dHI6ICdkYXRhLWlkJyxcbiAgICBkZWxheTogMCxcbiAgICBkZWxheU9uVG91Y2hPbmx5OiBmYWxzZSxcbiAgICB0b3VjaFN0YXJ0VGhyZXNob2xkOiAoTnVtYmVyLnBhcnNlSW50ID8gTnVtYmVyIDogd2luZG93KS5wYXJzZUludCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgMTApIHx8IDEsXG4gICAgZm9yY2VGYWxsYmFjazogZmFsc2UsXG4gICAgZmFsbGJhY2tDbGFzczogJ3NvcnRhYmxlLWZhbGxiYWNrJyxcbiAgICBmYWxsYmFja09uQm9keTogZmFsc2UsXG4gICAgZmFsbGJhY2tUb2xlcmFuY2U6IDAsXG4gICAgZmFsbGJhY2tPZmZzZXQ6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSxcbiAgICBzdXBwb3J0UG9pbnRlcjogU29ydGFibGUuc3VwcG9ydFBvaW50ZXIgIT09IGZhbHNlICYmICdQb2ludGVyRXZlbnQnIGluIHdpbmRvdyAmJiAhU2FmYXJpLFxuICAgIGVtcHR5SW5zZXJ0VGhyZXNob2xkOiA1XG4gIH07XG4gIFBsdWdpbk1hbmFnZXIuaW5pdGlhbGl6ZVBsdWdpbnModGhpcywgZWwsIGRlZmF1bHRzKTsgLy8gU2V0IGRlZmF1bHQgb3B0aW9uc1xuXG4gIGZvciAodmFyIG5hbWUgaW4gZGVmYXVsdHMpIHtcbiAgICAhKG5hbWUgaW4gb3B0aW9ucykgJiYgKG9wdGlvbnNbbmFtZV0gPSBkZWZhdWx0c1tuYW1lXSk7XG4gIH1cblxuICBfcHJlcGFyZUdyb3VwKG9wdGlvbnMpOyAvLyBCaW5kIGFsbCBwcml2YXRlIG1ldGhvZHNcblxuXG4gIGZvciAodmFyIGZuIGluIHRoaXMpIHtcbiAgICBpZiAoZm4uY2hhckF0KDApID09PSAnXycgJiYgdHlwZW9mIHRoaXNbZm5dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ZuXSA9IHRoaXNbZm5dLmJpbmQodGhpcyk7XG4gICAgfVxuICB9IC8vIFNldHVwIGRyYWcgbW9kZVxuXG5cbiAgdGhpcy5uYXRpdmVEcmFnZ2FibGUgPSBvcHRpb25zLmZvcmNlRmFsbGJhY2sgPyBmYWxzZSA6IHN1cHBvcnREcmFnZ2FibGU7XG5cbiAgaWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgLy8gVG91Y2ggc3RhcnQgdGhyZXNob2xkIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG5hdGl2ZSBkcmFnc3RhcnQgdGhyZXNob2xkXG4gICAgdGhpcy5vcHRpb25zLnRvdWNoU3RhcnRUaHJlc2hvbGQgPSAxO1xuICB9IC8vIEJpbmQgZXZlbnRzXG5cblxuICBpZiAob3B0aW9ucy5zdXBwb3J0UG9pbnRlcikge1xuICAgIG9uKGVsLCAncG9pbnRlcmRvd24nLCB0aGlzLl9vblRhcFN0YXJ0KTtcbiAgfSBlbHNlIHtcbiAgICBvbihlbCwgJ21vdXNlZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuICAgIG9uKGVsLCAndG91Y2hzdGFydCcsIHRoaXMuX29uVGFwU3RhcnQpO1xuICB9XG5cbiAgaWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgb24oZWwsICdkcmFnb3ZlcicsIHRoaXMpO1xuICAgIG9uKGVsLCAnZHJhZ2VudGVyJywgdGhpcyk7XG4gIH1cblxuICBzb3J0YWJsZXMucHVzaCh0aGlzLmVsKTsgLy8gUmVzdG9yZSBzb3J0aW5nXG5cbiAgb3B0aW9ucy5zdG9yZSAmJiBvcHRpb25zLnN0b3JlLmdldCAmJiB0aGlzLnNvcnQob3B0aW9ucy5zdG9yZS5nZXQodGhpcykgfHwgW10pOyAvLyBBZGQgYW5pbWF0aW9uIHN0YXRlIG1hbmFnZXJcblxuICBfZXh0ZW5kcyh0aGlzLCBBbmltYXRpb25TdGF0ZU1hbmFnZXIoKSk7XG59XG5cblNvcnRhYmxlLnByb3RvdHlwZSA9XG4vKiogQGxlbmRzIFNvcnRhYmxlLnByb3RvdHlwZSAqL1xue1xuICBjb25zdHJ1Y3RvcjogU29ydGFibGUsXG4gIF9pc091dHNpZGVUaGlzRWw6IGZ1bmN0aW9uIF9pc091dHNpZGVUaGlzRWwodGFyZ2V0KSB7XG4gICAgaWYgKCF0aGlzLmVsLmNvbnRhaW5zKHRhcmdldCkgJiYgdGFyZ2V0ICE9PSB0aGlzLmVsKSB7XG4gICAgICBsYXN0VGFyZ2V0ID0gbnVsbDtcbiAgICB9XG4gIH0sXG4gIF9nZXREaXJlY3Rpb246IGZ1bmN0aW9uIF9nZXREaXJlY3Rpb24oZXZ0LCB0YXJnZXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLmNhbGwodGhpcywgZXZ0LCB0YXJnZXQsIGRyYWdFbCkgOiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICB9LFxuICBfb25UYXBTdGFydDogZnVuY3Rpb24gX29uVGFwU3RhcnQoXG4gIC8qKiBFdmVudHxUb3VjaEV2ZW50ICovXG4gIGV2dCkge1xuICAgIGlmICghZXZ0LmNhbmNlbGFibGUpIHJldHVybjtcblxuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGVsID0gdGhpcy5lbCxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgcHJldmVudE9uRmlsdGVyID0gb3B0aW9ucy5wcmV2ZW50T25GaWx0ZXIsXG4gICAgICAgIHR5cGUgPSBldnQudHlwZSxcbiAgICAgICAgdG91Y2ggPSBldnQudG91Y2hlcyAmJiBldnQudG91Y2hlc1swXSB8fCBldnQucG9pbnRlclR5cGUgJiYgZXZ0LnBvaW50ZXJUeXBlID09PSAndG91Y2gnICYmIGV2dCxcbiAgICAgICAgdGFyZ2V0ID0gKHRvdWNoIHx8IGV2dCkudGFyZ2V0LFxuICAgICAgICBvcmlnaW5hbFRhcmdldCA9IGV2dC50YXJnZXQuc2hhZG93Um9vdCAmJiAoZXZ0LnBhdGggJiYgZXZ0LnBhdGhbMF0gfHwgZXZ0LmNvbXBvc2VkUGF0aCAmJiBldnQuY29tcG9zZWRQYXRoKClbMF0pIHx8IHRhcmdldCxcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG5cbiAgICBfc2F2ZUlucHV0Q2hlY2tlZFN0YXRlKGVsKTsgLy8gRG9uJ3QgdHJpZ2dlciBzdGFydCBldmVudCB3aGVuIGFuIGVsZW1lbnQgaXMgYmVlbiBkcmFnZ2VkLCBvdGhlcndpc2UgdGhlIGV2dC5vbGRpbmRleCBhbHdheXMgd3Jvbmcgd2hlbiBzZXQgb3B0aW9uLmdyb3VwLlxuXG5cbiAgICBpZiAoZHJhZ0VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKC9tb3VzZWRvd258cG9pbnRlcmRvd24vLnRlc3QodHlwZSkgJiYgZXZ0LmJ1dHRvbiAhPT0gMCB8fCBvcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47IC8vIG9ubHkgbGVmdCBidXR0b24gYW5kIGVuYWJsZWRcbiAgICB9IC8vIGNhbmNlbCBkbmQgaWYgb3JpZ2luYWwgdGFyZ2V0IGlzIGNvbnRlbnQgZWRpdGFibGVcblxuXG4gICAgaWYgKG9yaWdpbmFsVGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTYWZhcmkgaWdub3JlcyBmdXJ0aGVyIGV2ZW50IGhhbmRsaW5nIGFmdGVyIG1vdXNlZG93blxuXG5cbiAgICBpZiAoIXRoaXMubmF0aXZlRHJhZ2dhYmxlICYmIFNhZmFyaSAmJiB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NFTEVDVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0YXJnZXQgPSBjbG9zZXN0KHRhcmdldCwgb3B0aW9ucy5kcmFnZ2FibGUsIGVsLCBmYWxzZSk7XG5cbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5hbmltYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsYXN0RG93bkVsID09PSB0YXJnZXQpIHtcbiAgICAgIC8vIElnbm9yaW5nIGR1cGxpY2F0ZSBgZG93bmBcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIGRyYWdnZWQgZWxlbWVudCB3aXRoaW4gaXRzIHBhcmVudFxuXG5cbiAgICBvbGRJbmRleCA9IGluZGV4KHRhcmdldCk7XG4gICAgb2xkRHJhZ2dhYmxlSW5kZXggPSBpbmRleCh0YXJnZXQsIG9wdGlvbnMuZHJhZ2dhYmxlKTsgLy8gQ2hlY2sgZmlsdGVyXG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGZpbHRlci5jYWxsKHRoaXMsIGV2dCwgdGFyZ2V0LCB0aGlzKSkge1xuICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgc29ydGFibGU6IF90aGlzLFxuICAgICAgICAgIHJvb3RFbDogb3JpZ2luYWxUYXJnZXQsXG4gICAgICAgICAgbmFtZTogJ2ZpbHRlcicsXG4gICAgICAgICAgdGFyZ2V0RWw6IHRhcmdldCxcbiAgICAgICAgICB0b0VsOiBlbCxcbiAgICAgICAgICBmcm9tRWw6IGVsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBsdWdpbkV2ZW50KCdmaWx0ZXInLCBfdGhpcywge1xuICAgICAgICAgIGV2dDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2ZW50T25GaWx0ZXIgJiYgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjsgLy8gY2FuY2VsIGRuZFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICBmaWx0ZXIgPSBmaWx0ZXIuc3BsaXQoJywnKS5zb21lKGZ1bmN0aW9uIChjcml0ZXJpYSkge1xuICAgICAgICBjcml0ZXJpYSA9IGNsb3Nlc3Qob3JpZ2luYWxUYXJnZXQsIGNyaXRlcmlhLnRyaW0oKSwgZWwsIGZhbHNlKTtcblxuICAgICAgICBpZiAoY3JpdGVyaWEpIHtcbiAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgICAgICByb290RWw6IGNyaXRlcmlhLFxuICAgICAgICAgICAgbmFtZTogJ2ZpbHRlcicsXG4gICAgICAgICAgICB0YXJnZXRFbDogdGFyZ2V0LFxuICAgICAgICAgICAgZnJvbUVsOiBlbCxcbiAgICAgICAgICAgIHRvRWw6IGVsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBwbHVnaW5FdmVudCgnZmlsdGVyJywgX3RoaXMsIHtcbiAgICAgICAgICAgIGV2dDogZXZ0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIHByZXZlbnRPbkZpbHRlciAmJiBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuOyAvLyBjYW5jZWwgZG5kXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaGFuZGxlICYmICFjbG9zZXN0KG9yaWdpbmFsVGFyZ2V0LCBvcHRpb25zLmhhbmRsZSwgZWwsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gUHJlcGFyZSBgZHJhZ3N0YXJ0YFxuXG5cbiAgICB0aGlzLl9wcmVwYXJlRHJhZ1N0YXJ0KGV2dCwgdG91Y2gsIHRhcmdldCk7XG4gIH0sXG4gIF9wcmVwYXJlRHJhZ1N0YXJ0OiBmdW5jdGlvbiBfcHJlcGFyZURyYWdTdGFydChcbiAgLyoqIEV2ZW50ICovXG4gIGV2dCxcbiAgLyoqIFRvdWNoICovXG4gIHRvdWNoLFxuICAvKiogSFRNTEVsZW1lbnQgKi9cbiAgdGFyZ2V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgZWwgPSBfdGhpcy5lbCxcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzLm9wdGlvbnMsXG4gICAgICAgIG93bmVyRG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50LFxuICAgICAgICBkcmFnU3RhcnRGbjtcblxuICAgIGlmICh0YXJnZXQgJiYgIWRyYWdFbCAmJiB0YXJnZXQucGFyZW50Tm9kZSA9PT0gZWwpIHtcbiAgICAgIHZhciBkcmFnUmVjdCA9IGdldFJlY3QodGFyZ2V0KTtcbiAgICAgIHJvb3RFbCA9IGVsO1xuICAgICAgZHJhZ0VsID0gdGFyZ2V0O1xuICAgICAgcGFyZW50RWwgPSBkcmFnRWwucGFyZW50Tm9kZTtcbiAgICAgIG5leHRFbCA9IGRyYWdFbC5uZXh0U2libGluZztcbiAgICAgIGxhc3REb3duRWwgPSB0YXJnZXQ7XG4gICAgICBhY3RpdmVHcm91cCA9IG9wdGlvbnMuZ3JvdXA7XG4gICAgICBTb3J0YWJsZS5kcmFnZ2VkID0gZHJhZ0VsO1xuICAgICAgdGFwRXZ0ID0ge1xuICAgICAgICB0YXJnZXQ6IGRyYWdFbCxcbiAgICAgICAgY2xpZW50WDogKHRvdWNoIHx8IGV2dCkuY2xpZW50WCxcbiAgICAgICAgY2xpZW50WTogKHRvdWNoIHx8IGV2dCkuY2xpZW50WVxuICAgICAgfTtcbiAgICAgIHRhcERpc3RhbmNlTGVmdCA9IHRhcEV2dC5jbGllbnRYIC0gZHJhZ1JlY3QubGVmdDtcbiAgICAgIHRhcERpc3RhbmNlVG9wID0gdGFwRXZ0LmNsaWVudFkgLSBkcmFnUmVjdC50b3A7XG4gICAgICB0aGlzLl9sYXN0WCA9ICh0b3VjaCB8fCBldnQpLmNsaWVudFg7XG4gICAgICB0aGlzLl9sYXN0WSA9ICh0b3VjaCB8fCBldnQpLmNsaWVudFk7XG4gICAgICBkcmFnRWwuc3R5bGVbJ3dpbGwtY2hhbmdlJ10gPSAnYWxsJztcblxuICAgICAgZHJhZ1N0YXJ0Rm4gPSBmdW5jdGlvbiBkcmFnU3RhcnRGbigpIHtcbiAgICAgICAgcGx1Z2luRXZlbnQoJ2RlbGF5RW5kZWQnLCBfdGhpcywge1xuICAgICAgICAgIGV2dDogZXZ0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICAgICAgX3RoaXMuX29uRHJvcCgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIERlbGF5ZWQgZHJhZyBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgLy8gd2UgY2FuIHJlLWVuYWJsZSB0aGUgZXZlbnRzOiB0b3VjaG1vdmUvbW91c2Vtb3ZlXG5cblxuICAgICAgICBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCk7XG5cbiAgICAgICAgaWYgKCFGaXJlRm94ICYmIF90aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICAgIGRyYWdFbC5kcmFnZ2FibGUgPSB0cnVlO1xuICAgICAgICB9IC8vIEJpbmQgdGhlIGV2ZW50czogZHJhZ3N0YXJ0L2RyYWdlbmRcblxuXG4gICAgICAgIF90aGlzLl90cmlnZ2VyRHJhZ1N0YXJ0KGV2dCwgdG91Y2gpOyAvLyBEcmFnIHN0YXJ0IGV2ZW50XG5cblxuICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgc29ydGFibGU6IF90aGlzLFxuICAgICAgICAgIG5hbWU6ICdjaG9vc2UnLFxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICB9KTsgLy8gQ2hvc2VuIGl0ZW1cblxuXG4gICAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5jaG9zZW5DbGFzcywgdHJ1ZSk7XG4gICAgICB9OyAvLyBEaXNhYmxlIFwiZHJhZ2dhYmxlXCJcblxuXG4gICAgICBvcHRpb25zLmlnbm9yZS5zcGxpdCgnLCcpLmZvckVhY2goZnVuY3Rpb24gKGNyaXRlcmlhKSB7XG4gICAgICAgIGZpbmQoZHJhZ0VsLCBjcml0ZXJpYS50cmltKCksIF9kaXNhYmxlRHJhZ2dhYmxlKTtcbiAgICAgIH0pO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ2RyYWdvdmVyJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAnbW91c2V1cCcsIF90aGlzLl9vbkRyb3ApO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgX3RoaXMuX29uRHJvcCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBfdGhpcy5fb25Ecm9wKTsgLy8gTWFrZSBkcmFnRWwgZHJhZ2dhYmxlIChtdXN0IGJlIGJlZm9yZSBkZWxheSBmb3IgRmlyZUZveClcblxuICAgICAgaWYgKEZpcmVGb3ggJiYgdGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRvdWNoU3RhcnRUaHJlc2hvbGQgPSA0O1xuICAgICAgICBkcmFnRWwuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcGx1Z2luRXZlbnQoJ2RlbGF5U3RhcnQnLCB0aGlzLCB7XG4gICAgICAgIGV2dDogZXZ0XG4gICAgICB9KTsgLy8gRGVsYXkgaXMgaW1wb3NzaWJsZSBmb3IgbmF0aXZlIERuRCBpbiBFZGdlIG9yIElFXG5cbiAgICAgIGlmIChvcHRpb25zLmRlbGF5ICYmICghb3B0aW9ucy5kZWxheU9uVG91Y2hPbmx5IHx8IHRvdWNoKSAmJiAoIXRoaXMubmF0aXZlRHJhZ2dhYmxlIHx8ICEoRWRnZSB8fCBJRTExT3JMZXNzKSkpIHtcbiAgICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgICAgICB0aGlzLl9vbkRyb3AoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJZiB0aGUgdXNlciBtb3ZlcyB0aGUgcG9pbnRlciBvciBsZXQgZ28gdGhlIGNsaWNrIG9yIHRvdWNoXG4gICAgICAgIC8vIGJlZm9yZSB0aGUgZGVsYXkgaGFzIGJlZW4gcmVhY2hlZDpcbiAgICAgICAgLy8gZGlzYWJsZSB0aGUgZGVsYXllZCBkcmFnXG5cblxuICAgICAgICBvbihvd25lckRvY3VtZW50LCAnbW91c2V1cCcsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdtb3VzZW1vdmUnLCBfdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKTtcbiAgICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIF90aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgICAgICBvcHRpb25zLnN1cHBvcnRQb2ludGVyICYmIG9uKG93bmVyRG9jdW1lbnQsICdwb2ludGVybW92ZScsIF90aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgICAgICBfdGhpcy5fZHJhZ1N0YXJ0VGltZXIgPSBzZXRUaW1lb3V0KGRyYWdTdGFydEZuLCBvcHRpb25zLmRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdTdGFydEZuKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBfZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyOiBmdW5jdGlvbiBfZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKFxuICAvKiogVG91Y2hFdmVudHxQb2ludGVyRXZlbnQgKiovXG4gIGUpIHtcbiAgICB2YXIgdG91Y2ggPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXNbMF0gOiBlO1xuXG4gICAgaWYgKE1hdGgubWF4KE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSB0aGlzLl9sYXN0WCksIE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSB0aGlzLl9sYXN0WSkpID49IE1hdGguZmxvb3IodGhpcy5vcHRpb25zLnRvdWNoU3RhcnRUaHJlc2hvbGQgLyAodGhpcy5uYXRpdmVEcmFnZ2FibGUgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkpKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcoKTtcbiAgICB9XG4gIH0sXG4gIF9kaXNhYmxlRGVsYXllZERyYWc6IGZ1bmN0aW9uIF9kaXNhYmxlRGVsYXllZERyYWcoKSB7XG4gICAgZHJhZ0VsICYmIF9kaXNhYmxlRHJhZ2dhYmxlKGRyYWdFbCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKTtcblxuICAgIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZ0V2ZW50cygpO1xuICB9LFxuICBfZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzOiBmdW5jdGlvbiBfZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gdGhpcy5lbC5vd25lckRvY3VtZW50O1xuICAgIG9mZihvd25lckRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKTtcbiAgfSxcbiAgX3RyaWdnZXJEcmFnU3RhcnQ6IGZ1bmN0aW9uIF90cmlnZ2VyRHJhZ1N0YXJ0KFxuICAvKiogRXZlbnQgKi9cbiAgZXZ0LFxuICAvKiogVG91Y2ggKi9cbiAgdG91Y2gpIHtcbiAgICB0b3VjaCA9IHRvdWNoIHx8IGV2dC5wb2ludGVyVHlwZSA9PSAndG91Y2gnICYmIGV2dDtcblxuICAgIGlmICghdGhpcy5uYXRpdmVEcmFnZ2FibGUgfHwgdG91Y2gpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3VwcG9ydFBvaW50ZXIpIHtcbiAgICAgICAgb24oZG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICAgIH0gZWxzZSBpZiAodG91Y2gpIHtcbiAgICAgICAgb24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb24oZHJhZ0VsLCAnZHJhZ2VuZCcsIHRoaXMpO1xuICAgICAgb24ocm9vdEVsLCAnZHJhZ3N0YXJ0JywgdGhpcy5fb25EcmFnU3RhcnQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG4gICAgICAgIC8vIFRpbWVvdXQgbmVjY2Vzc2FyeSBmb3IgSUU5XG4gICAgICAgIF9uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge31cbiAgfSxcbiAgX2RyYWdTdGFydGVkOiBmdW5jdGlvbiBfZHJhZ1N0YXJ0ZWQoZmFsbGJhY2ssIGV2dCkge1xuXG4gICAgYXdhaXRpbmdEcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHJvb3RFbCAmJiBkcmFnRWwpIHtcbiAgICAgIHBsdWdpbkV2ZW50KCdkcmFnU3RhcnRlZCcsIHRoaXMsIHtcbiAgICAgICAgZXZ0OiBldnRcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgb24oZG9jdW1lbnQsICdkcmFnb3ZlcicsIF9jaGVja091dHNpZGVUYXJnZXRFbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBBcHBseSBlZmZlY3RcblxuICAgICAgIWZhbGxiYWNrICYmIHRvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5kcmFnQ2xhc3MsIGZhbHNlKTtcbiAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5naG9zdENsYXNzLCB0cnVlKTtcbiAgICAgIFNvcnRhYmxlLmFjdGl2ZSA9IHRoaXM7XG4gICAgICBmYWxsYmFjayAmJiB0aGlzLl9hcHBlbmRHaG9zdCgpOyAvLyBEcmFnIHN0YXJ0IGV2ZW50XG5cbiAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgIG5hbWU6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX251bGxpbmcoKTtcbiAgICB9XG4gIH0sXG4gIF9lbXVsYXRlRHJhZ092ZXI6IGZ1bmN0aW9uIF9lbXVsYXRlRHJhZ092ZXIoKSB7XG4gICAgaWYgKHRvdWNoRXZ0KSB7XG4gICAgICB0aGlzLl9sYXN0WCA9IHRvdWNoRXZ0LmNsaWVudFg7XG4gICAgICB0aGlzLl9sYXN0WSA9IHRvdWNoRXZ0LmNsaWVudFk7XG5cbiAgICAgIF9oaWRlR2hvc3RGb3JUYXJnZXQoKTtcblxuICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2hFdnQuY2xpZW50WCwgdG91Y2hFdnQuY2xpZW50WSk7XG4gICAgICB2YXIgcGFyZW50ID0gdGFyZ2V0O1xuXG4gICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5zaGFkb3dSb290KSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQodG91Y2hFdnQuY2xpZW50WCwgdG91Y2hFdnQuY2xpZW50WSk7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IHBhcmVudCkgYnJlYWs7XG4gICAgICAgIHBhcmVudCA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgZHJhZ0VsLnBhcmVudE5vZGVbZXhwYW5kb10uX2lzT3V0c2lkZVRoaXNFbCh0YXJnZXQpO1xuXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAocGFyZW50W2V4cGFuZG9dKSB7XG4gICAgICAgICAgICB2YXIgaW5zZXJ0ZWQgPSB2b2lkIDA7XG4gICAgICAgICAgICBpbnNlcnRlZCA9IHBhcmVudFtleHBhbmRvXS5fb25EcmFnT3Zlcih7XG4gICAgICAgICAgICAgIGNsaWVudFg6IHRvdWNoRXZ0LmNsaWVudFgsXG4gICAgICAgICAgICAgIGNsaWVudFk6IHRvdWNoRXZ0LmNsaWVudFksXG4gICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICByb290RWw6IHBhcmVudFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpbnNlcnRlZCAmJiAhdGhpcy5vcHRpb25zLmRyYWdvdmVyQnViYmxlKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhcmdldCA9IHBhcmVudDsgLy8gc3RvcmUgbGFzdCBlbGVtZW50XG4gICAgICAgIH1cbiAgICAgICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuICAgICAgICB3aGlsZSAocGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUpO1xuICAgICAgfVxuXG4gICAgICBfdW5oaWRlR2hvc3RGb3JUYXJnZXQoKTtcbiAgICB9XG4gIH0sXG4gIF9vblRvdWNoTW92ZTogZnVuY3Rpb24gX29uVG91Y2hNb3ZlKFxuICAvKipUb3VjaEV2ZW50Ki9cbiAgZXZ0KSB7XG4gICAgaWYgKHRhcEV2dCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgZmFsbGJhY2tUb2xlcmFuY2UgPSBvcHRpb25zLmZhbGxiYWNrVG9sZXJhbmNlLFxuICAgICAgICAgIGZhbGxiYWNrT2Zmc2V0ID0gb3B0aW9ucy5mYWxsYmFja09mZnNldCxcbiAgICAgICAgICB0b3VjaCA9IGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQsXG4gICAgICAgICAgZ2hvc3RNYXRyaXggPSBnaG9zdEVsICYmIG1hdHJpeChnaG9zdEVsLCB0cnVlKSxcbiAgICAgICAgICBzY2FsZVggPSBnaG9zdEVsICYmIGdob3N0TWF0cml4ICYmIGdob3N0TWF0cml4LmEsXG4gICAgICAgICAgc2NhbGVZID0gZ2hvc3RFbCAmJiBnaG9zdE1hdHJpeCAmJiBnaG9zdE1hdHJpeC5kLFxuICAgICAgICAgIHJlbGF0aXZlU2Nyb2xsT2Zmc2V0ID0gUG9zaXRpb25HaG9zdEFic29sdXRlbHkgJiYgZ2hvc3RSZWxhdGl2ZVBhcmVudCAmJiBnZXRSZWxhdGl2ZVNjcm9sbE9mZnNldChnaG9zdFJlbGF0aXZlUGFyZW50KSxcbiAgICAgICAgICBkeCA9ICh0b3VjaC5jbGllbnRYIC0gdGFwRXZ0LmNsaWVudFggKyBmYWxsYmFja09mZnNldC54KSAvIChzY2FsZVggfHwgMSkgKyAocmVsYXRpdmVTY3JvbGxPZmZzZXQgPyByZWxhdGl2ZVNjcm9sbE9mZnNldFswXSAtIGdob3N0UmVsYXRpdmVQYXJlbnRJbml0aWFsU2Nyb2xsWzBdIDogMCkgLyAoc2NhbGVYIHx8IDEpLFxuICAgICAgICAgIGR5ID0gKHRvdWNoLmNsaWVudFkgLSB0YXBFdnQuY2xpZW50WSArIGZhbGxiYWNrT2Zmc2V0LnkpIC8gKHNjYWxlWSB8fCAxKSArIChyZWxhdGl2ZVNjcm9sbE9mZnNldCA/IHJlbGF0aXZlU2Nyb2xsT2Zmc2V0WzFdIC0gZ2hvc3RSZWxhdGl2ZVBhcmVudEluaXRpYWxTY3JvbGxbMV0gOiAwKSAvIChzY2FsZVkgfHwgMSk7IC8vIG9ubHkgc2V0IHRoZSBzdGF0dXMgdG8gZHJhZ2dpbmcsIHdoZW4gd2UgYXJlIGFjdHVhbGx5IGRyYWdnaW5nXG5cbiAgICAgIGlmICghU29ydGFibGUuYWN0aXZlICYmICFhd2FpdGluZ0RyYWdTdGFydGVkKSB7XG4gICAgICAgIGlmIChmYWxsYmFja1RvbGVyYW5jZSAmJiBNYXRoLm1heChNYXRoLmFicyh0b3VjaC5jbGllbnRYIC0gdGhpcy5fbGFzdFgpLCBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gdGhpcy5fbGFzdFkpKSA8IGZhbGxiYWNrVG9sZXJhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25EcmFnU3RhcnQoZXZ0LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdob3N0RWwpIHtcbiAgICAgICAgaWYgKGdob3N0TWF0cml4KSB7XG4gICAgICAgICAgZ2hvc3RNYXRyaXguZSArPSBkeCAtIChsYXN0RHggfHwgMCk7XG4gICAgICAgICAgZ2hvc3RNYXRyaXguZiArPSBkeSAtIChsYXN0RHkgfHwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2hvc3RNYXRyaXggPSB7XG4gICAgICAgICAgICBhOiAxLFxuICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICAgIGM6IDAsXG4gICAgICAgICAgICBkOiAxLFxuICAgICAgICAgICAgZTogZHgsXG4gICAgICAgICAgICBmOiBkeVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3NzTWF0cml4ID0gXCJtYXRyaXgoXCIuY29uY2F0KGdob3N0TWF0cml4LmEsIFwiLFwiKS5jb25jYXQoZ2hvc3RNYXRyaXguYiwgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5jLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmQsIFwiLFwiKS5jb25jYXQoZ2hvc3RNYXRyaXguZSwgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5mLCBcIilcIik7XG4gICAgICAgIGNzcyhnaG9zdEVsLCAnd2Via2l0VHJhbnNmb3JtJywgY3NzTWF0cml4KTtcbiAgICAgICAgY3NzKGdob3N0RWwsICdtb3pUcmFuc2Zvcm0nLCBjc3NNYXRyaXgpO1xuICAgICAgICBjc3MoZ2hvc3RFbCwgJ21zVHJhbnNmb3JtJywgY3NzTWF0cml4KTtcbiAgICAgICAgY3NzKGdob3N0RWwsICd0cmFuc2Zvcm0nLCBjc3NNYXRyaXgpO1xuICAgICAgICBsYXN0RHggPSBkeDtcbiAgICAgICAgbGFzdER5ID0gZHk7XG4gICAgICAgIHRvdWNoRXZ0ID0gdG91Y2g7XG4gICAgICB9XG5cbiAgICAgIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcbiAgX2FwcGVuZEdob3N0OiBmdW5jdGlvbiBfYXBwZW5kR2hvc3QoKSB7XG4gICAgLy8gQnVnIGlmIHVzaW5nIHNjYWxlKCk6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI2MzcwNThcbiAgICAvLyBOb3QgYmVpbmcgYWRqdXN0ZWQgZm9yXG4gICAgaWYgKCFnaG9zdEVsKSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmZhbGxiYWNrT25Cb2R5ID8gZG9jdW1lbnQuYm9keSA6IHJvb3RFbCxcbiAgICAgICAgICByZWN0ID0gZ2V0UmVjdChkcmFnRWwsIHRydWUsIFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5LCB0cnVlLCBjb250YWluZXIpLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIFBvc2l0aW9uIGFic29sdXRlbHlcblxuICAgICAgaWYgKFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5KSB7XG4gICAgICAgIC8vIEdldCByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgcGFyZW50XG4gICAgICAgIGdob3N0UmVsYXRpdmVQYXJlbnQgPSBjb250YWluZXI7XG5cbiAgICAgICAgd2hpbGUgKGNzcyhnaG9zdFJlbGF0aXZlUGFyZW50LCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycgJiYgY3NzKGdob3N0UmVsYXRpdmVQYXJlbnQsICd0cmFuc2Zvcm0nKSA9PT0gJ25vbmUnICYmIGdob3N0UmVsYXRpdmVQYXJlbnQgIT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgZ2hvc3RSZWxhdGl2ZVBhcmVudCA9IGdob3N0UmVsYXRpdmVQYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnaG9zdFJlbGF0aXZlUGFyZW50ICE9PSBkb2N1bWVudC5ib2R5ICYmIGdob3N0UmVsYXRpdmVQYXJlbnQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgIGlmIChnaG9zdFJlbGF0aXZlUGFyZW50ID09PSBkb2N1bWVudCkgZ2hvc3RSZWxhdGl2ZVBhcmVudCA9IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgICAgICAgICByZWN0LnRvcCArPSBnaG9zdFJlbGF0aXZlUGFyZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICByZWN0LmxlZnQgKz0gZ2hvc3RSZWxhdGl2ZVBhcmVudC5zY3JvbGxMZWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdob3N0UmVsYXRpdmVQYXJlbnQgPSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICBnaG9zdFJlbGF0aXZlUGFyZW50SW5pdGlhbFNjcm9sbCA9IGdldFJlbGF0aXZlU2Nyb2xsT2Zmc2V0KGdob3N0UmVsYXRpdmVQYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICBnaG9zdEVsID0gZHJhZ0VsLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIHRvZ2dsZUNsYXNzKGdob3N0RWwsIG9wdGlvbnMuZ2hvc3RDbGFzcywgZmFsc2UpO1xuICAgICAgdG9nZ2xlQ2xhc3MoZ2hvc3RFbCwgb3B0aW9ucy5mYWxsYmFja0NsYXNzLCB0cnVlKTtcbiAgICAgIHRvZ2dsZUNsYXNzKGdob3N0RWwsIG9wdGlvbnMuZHJhZ0NsYXNzLCB0cnVlKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAndHJhbnNpdGlvbicsICcnKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAndHJhbnNmb3JtJywgJycpO1xuICAgICAgY3NzKGdob3N0RWwsICdib3gtc2l6aW5nJywgJ2JvcmRlci1ib3gnKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnbWFyZ2luJywgMCk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3RvcCcsIHJlY3QudG9wKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnbGVmdCcsIHJlY3QubGVmdCk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3dpZHRoJywgcmVjdC53aWR0aCk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ2hlaWdodCcsIHJlY3QuaGVpZ2h0KTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnb3BhY2l0eScsICcwLjgnKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAncG9zaXRpb24nLCBQb3NpdGlvbkdob3N0QWJzb2x1dGVseSA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnekluZGV4JywgJzEwMDAwMCcpO1xuICAgICAgY3NzKGdob3N0RWwsICdwb2ludGVyRXZlbnRzJywgJ25vbmUnKTtcbiAgICAgIFNvcnRhYmxlLmdob3N0ID0gZ2hvc3RFbDtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChnaG9zdEVsKTsgLy8gU2V0IHRyYW5zZm9ybS1vcmlnaW5cblxuICAgICAgY3NzKGdob3N0RWwsICd0cmFuc2Zvcm0tb3JpZ2luJywgdGFwRGlzdGFuY2VMZWZ0IC8gcGFyc2VJbnQoZ2hvc3RFbC5zdHlsZS53aWR0aCkgKiAxMDAgKyAnJSAnICsgdGFwRGlzdGFuY2VUb3AgLyBwYXJzZUludChnaG9zdEVsLnN0eWxlLmhlaWdodCkgKiAxMDAgKyAnJScpO1xuICAgIH1cbiAgfSxcbiAgX29uRHJhZ1N0YXJ0OiBmdW5jdGlvbiBfb25EcmFnU3RhcnQoXG4gIC8qKkV2ZW50Ki9cbiAgZXZ0LFxuICAvKipib29sZWFuKi9cbiAgZmFsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGFUcmFuc2ZlciA9IGV2dC5kYXRhVHJhbnNmZXI7XG4gICAgdmFyIG9wdGlvbnMgPSBfdGhpcy5vcHRpb25zO1xuICAgIHBsdWdpbkV2ZW50KCdkcmFnU3RhcnQnLCB0aGlzLCB7XG4gICAgICBldnQ6IGV2dFxuICAgIH0pO1xuXG4gICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgIHRoaXMuX29uRHJvcCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGx1Z2luRXZlbnQoJ3NldHVwQ2xvbmUnLCB0aGlzKTtcblxuICAgIGlmICghU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgY2xvbmVFbCA9IGNsb25lKGRyYWdFbCk7XG4gICAgICBjbG9uZUVsLmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgY2xvbmVFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnO1xuXG4gICAgICB0aGlzLl9oaWRlQ2xvbmUoKTtcblxuICAgICAgdG9nZ2xlQ2xhc3MoY2xvbmVFbCwgdGhpcy5vcHRpb25zLmNob3NlbkNsYXNzLCBmYWxzZSk7XG4gICAgICBTb3J0YWJsZS5jbG9uZSA9IGNsb25lRWw7XG4gICAgfSAvLyAjMTE0MzogSUZyYW1lIHN1cHBvcnQgd29ya2Fyb3VuZFxuXG5cbiAgICBfdGhpcy5jbG9uZUlkID0gX25leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHBsdWdpbkV2ZW50KCdjbG9uZScsIF90aGlzKTtcbiAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSByZXR1cm47XG5cbiAgICAgIGlmICghX3RoaXMub3B0aW9ucy5yZW1vdmVDbG9uZU9uSGlkZSkge1xuICAgICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGNsb25lRWwsIGRyYWdFbCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLl9oaWRlQ2xvbmUoKTtcblxuICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgIG5hbWU6ICdjbG9uZSdcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgICFmYWxsYmFjayAmJiB0b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuZHJhZ0NsYXNzLCB0cnVlKTsgLy8gU2V0IHByb3BlciBkcm9wIGV2ZW50c1xuXG4gICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICBpZ25vcmVOZXh0Q2xpY2sgPSB0cnVlO1xuICAgICAgX3RoaXMuX2xvb3BJZCA9IHNldEludGVydmFsKF90aGlzLl9lbXVsYXRlRHJhZ092ZXIsIDUwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5kbyB3aGF0IHdhcyBzZXQgaW4gX3ByZXBhcmVEcmFnU3RhcnQgYmVmb3JlIGRyYWcgc3RhcnRlZFxuICAgICAgb2ZmKGRvY3VtZW50LCAnbW91c2V1cCcsIF90aGlzLl9vbkRyb3ApO1xuICAgICAgb2ZmKGRvY3VtZW50LCAndG91Y2hlbmQnLCBfdGhpcy5fb25Ecm9wKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgX3RoaXMuX29uRHJvcCk7XG5cbiAgICAgIGlmIChkYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XG4gICAgICAgIG9wdGlvbnMuc2V0RGF0YSAmJiBvcHRpb25zLnNldERhdGEuY2FsbChfdGhpcywgZGF0YVRyYW5zZmVyLCBkcmFnRWwpO1xuICAgICAgfVxuXG4gICAgICBvbihkb2N1bWVudCwgJ2Ryb3AnLCBfdGhpcyk7IC8vICMxMjc2IGZpeDpcblxuICAgICAgY3NzKGRyYWdFbCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGVaKDApJyk7XG4gICAgfVxuXG4gICAgYXdhaXRpbmdEcmFnU3RhcnRlZCA9IHRydWU7XG4gICAgX3RoaXMuX2RyYWdTdGFydElkID0gX25leHRUaWNrKF90aGlzLl9kcmFnU3RhcnRlZC5iaW5kKF90aGlzLCBmYWxsYmFjaywgZXZ0KSk7XG4gICAgb24oZG9jdW1lbnQsICdzZWxlY3RzdGFydCcsIF90aGlzKTtcbiAgICBtb3ZlZCA9IHRydWU7XG5cbiAgICBpZiAoU2FmYXJpKSB7XG4gICAgICBjc3MoZG9jdW1lbnQuYm9keSwgJ3VzZXItc2VsZWN0JywgJ25vbmUnKTtcbiAgICB9XG4gIH0sXG4gIC8vIFJldHVybnMgdHJ1ZSAtIGlmIG5vIGZ1cnRoZXIgYWN0aW9uIGlzIG5lZWRlZCAoZWl0aGVyIGluc2VydGVkIG9yIGFub3RoZXIgY29uZGl0aW9uKVxuICBfb25EcmFnT3ZlcjogZnVuY3Rpb24gX29uRHJhZ092ZXIoXG4gIC8qKkV2ZW50Ki9cbiAgZXZ0KSB7XG4gICAgdmFyIGVsID0gdGhpcy5lbCxcbiAgICAgICAgdGFyZ2V0ID0gZXZ0LnRhcmdldCxcbiAgICAgICAgZHJhZ1JlY3QsXG4gICAgICAgIHRhcmdldFJlY3QsXG4gICAgICAgIHJldmVydCxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZ3JvdXAgPSBvcHRpb25zLmdyb3VwLFxuICAgICAgICBhY3RpdmVTb3J0YWJsZSA9IFNvcnRhYmxlLmFjdGl2ZSxcbiAgICAgICAgaXNPd25lciA9IGFjdGl2ZUdyb3VwID09PSBncm91cCxcbiAgICAgICAgY2FuU29ydCA9IG9wdGlvbnMuc29ydCxcbiAgICAgICAgZnJvbVNvcnRhYmxlID0gcHV0U29ydGFibGUgfHwgYWN0aXZlU29ydGFibGUsXG4gICAgICAgIHZlcnRpY2FsLFxuICAgICAgICBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGNvbXBsZXRlZEZpcmVkID0gZmFsc2U7XG5cbiAgICBpZiAoX3NpbGVudCkgcmV0dXJuO1xuXG4gICAgZnVuY3Rpb24gZHJhZ092ZXJFdmVudChuYW1lLCBleHRyYSkge1xuICAgICAgcGx1Z2luRXZlbnQobmFtZSwgX3RoaXMsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBldnQ6IGV2dCxcbiAgICAgICAgaXNPd25lcjogaXNPd25lcixcbiAgICAgICAgYXhpczogdmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnLFxuICAgICAgICByZXZlcnQ6IHJldmVydCxcbiAgICAgICAgZHJhZ1JlY3Q6IGRyYWdSZWN0LFxuICAgICAgICB0YXJnZXRSZWN0OiB0YXJnZXRSZWN0LFxuICAgICAgICBjYW5Tb3J0OiBjYW5Tb3J0LFxuICAgICAgICBmcm9tU29ydGFibGU6IGZyb21Tb3J0YWJsZSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIGNvbXBsZXRlZDogY29tcGxldGVkLFxuICAgICAgICBvbk1vdmU6IGZ1bmN0aW9uIG9uTW92ZSh0YXJnZXQsIGFmdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCBnZXRSZWN0KHRhcmdldCksIGV2dCwgYWZ0ZXIpO1xuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2VkOiBjaGFuZ2VkXG4gICAgICB9LCBleHRyYSkpO1xuICAgIH0gLy8gQ2FwdHVyZSBhbmltYXRpb24gc3RhdGVcblxuXG4gICAgZnVuY3Rpb24gY2FwdHVyZSgpIHtcbiAgICAgIGRyYWdPdmVyRXZlbnQoJ2RyYWdPdmVyQW5pbWF0aW9uQ2FwdHVyZScpO1xuXG4gICAgICBfdGhpcy5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcblxuICAgICAgaWYgKF90aGlzICE9PSBmcm9tU29ydGFibGUpIHtcbiAgICAgICAgZnJvbVNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgICAgfVxuICAgIH0gLy8gUmV0dXJuIGludm9jYXRpb24gd2hlbiBkcmFnRWwgaXMgaW5zZXJ0ZWQgKG9yIGNvbXBsZXRlZClcblxuXG4gICAgZnVuY3Rpb24gY29tcGxldGVkKGluc2VydGlvbikge1xuICAgICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXJDb21wbGV0ZWQnLCB7XG4gICAgICAgIGluc2VydGlvbjogaW5zZXJ0aW9uXG4gICAgICB9KTtcblxuICAgICAgaWYgKGluc2VydGlvbikge1xuICAgICAgICAvLyBDbG9uZXMgbXVzdCBiZSBoaWRkZW4gYmVmb3JlIGZvbGRpbmcgYW5pbWF0aW9uIHRvIGNhcHR1cmUgZHJhZ1JlY3RBYnNvbHV0ZSBwcm9wZXJseVxuICAgICAgICBpZiAoaXNPd25lcikge1xuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9oaWRlQ2xvbmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZS5fc2hvd0Nsb25lKF90aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdGhpcyAhPT0gZnJvbVNvcnRhYmxlKSB7XG4gICAgICAgICAgLy8gU2V0IGdob3N0IGNsYXNzIHRvIG5ldyBzb3J0YWJsZSdzIGdob3N0IGNsYXNzXG4gICAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBwdXRTb3J0YWJsZSA/IHB1dFNvcnRhYmxlLm9wdGlvbnMuZ2hvc3RDbGFzcyA6IGFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuZ2hvc3RDbGFzcywgZmFsc2UpO1xuICAgICAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5naG9zdENsYXNzLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwdXRTb3J0YWJsZSAhPT0gX3RoaXMgJiYgX3RoaXMgIT09IFNvcnRhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgIHB1dFNvcnRhYmxlID0gX3RoaXM7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMgPT09IFNvcnRhYmxlLmFjdGl2ZSAmJiBwdXRTb3J0YWJsZSkge1xuICAgICAgICAgIHB1dFNvcnRhYmxlID0gbnVsbDtcbiAgICAgICAgfSAvLyBBbmltYXRpb25cblxuXG4gICAgICAgIGlmIChmcm9tU29ydGFibGUgPT09IF90aGlzKSB7XG4gICAgICAgICAgX3RoaXMuX2lnbm9yZVdoaWxlQW5pbWF0aW5nID0gdGFyZ2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuYW5pbWF0ZUFsbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXJBbmltYXRpb25Db21wbGV0ZScpO1xuICAgICAgICAgIF90aGlzLl9pZ25vcmVXaGlsZUFuaW1hdGluZyA9IG51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChfdGhpcyAhPT0gZnJvbVNvcnRhYmxlKSB7XG4gICAgICAgICAgZnJvbVNvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgICAgICAgICBmcm9tU29ydGFibGUuX2lnbm9yZVdoaWxlQW5pbWF0aW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBOdWxsIGxhc3RUYXJnZXQgaWYgaXQgaXMgbm90IGluc2lkZSBhIHByZXZpb3VzbHkgc3dhcHBlZCBlbGVtZW50XG5cblxuICAgICAgaWYgKHRhcmdldCA9PT0gZHJhZ0VsICYmICFkcmFnRWwuYW5pbWF0ZWQgfHwgdGFyZ2V0ID09PSBlbCAmJiAhdGFyZ2V0LmFuaW1hdGVkKSB7XG4gICAgICAgIGxhc3RUYXJnZXQgPSBudWxsO1xuICAgICAgfSAvLyBubyBidWJibGluZyBhbmQgbm90IGZhbGxiYWNrXG5cblxuICAgICAgaWYgKCFvcHRpb25zLmRyYWdvdmVyQnViYmxlICYmICFldnQucm9vdEVsICYmIHRhcmdldCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgZHJhZ0VsLnBhcmVudE5vZGVbZXhwYW5kb10uX2lzT3V0c2lkZVRoaXNFbChldnQudGFyZ2V0KTsgLy8gRG8gbm90IGRldGVjdCBmb3IgZW1wdHkgaW5zZXJ0IGlmIGFscmVhZHkgaW5zZXJ0ZWRcblxuXG4gICAgICAgICFpbnNlcnRpb24gJiYgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQoZXZ0KTtcbiAgICAgIH1cblxuICAgICAgIW9wdGlvbnMuZHJhZ292ZXJCdWJibGUgJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbiAmJiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gY29tcGxldGVkRmlyZWQgPSB0cnVlO1xuICAgIH0gLy8gQ2FsbCB3aGVuIGRyYWdFbCBoYXMgYmVlbiBpbnNlcnRlZFxuXG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VkKCkge1xuICAgICAgbmV3SW5kZXggPSBpbmRleChkcmFnRWwpO1xuICAgICAgbmV3RHJhZ2dhYmxlSW5kZXggPSBpbmRleChkcmFnRWwsIG9wdGlvbnMuZHJhZ2dhYmxlKTtcblxuICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICBzb3J0YWJsZTogX3RoaXMsXG4gICAgICAgIG5hbWU6ICdjaGFuZ2UnLFxuICAgICAgICB0b0VsOiBlbCxcbiAgICAgICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICBuZXdEcmFnZ2FibGVJbmRleDogbmV3RHJhZ2dhYmxlSW5kZXgsXG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGV2dC5wcmV2ZW50RGVmYXVsdCAhPT0gdm9pZCAwKSB7XG4gICAgICBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0YXJnZXQgPSBjbG9zZXN0KHRhcmdldCwgb3B0aW9ucy5kcmFnZ2FibGUsIGVsLCB0cnVlKTtcbiAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlcicpO1xuICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSByZXR1cm4gY29tcGxldGVkRmlyZWQ7XG5cbiAgICBpZiAoZHJhZ0VsLmNvbnRhaW5zKGV2dC50YXJnZXQpIHx8IHRhcmdldC5hbmltYXRlZCAmJiB0YXJnZXQuYW5pbWF0aW5nWCAmJiB0YXJnZXQuYW5pbWF0aW5nWSB8fCBfdGhpcy5faWdub3JlV2hpbGVBbmltYXRpbmcgPT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuIGNvbXBsZXRlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWdub3JlTmV4dENsaWNrID0gZmFsc2U7XG5cbiAgICBpZiAoYWN0aXZlU29ydGFibGUgJiYgIW9wdGlvbnMuZGlzYWJsZWQgJiYgKGlzT3duZXIgPyBjYW5Tb3J0IHx8IChyZXZlcnQgPSAhcm9vdEVsLmNvbnRhaW5zKGRyYWdFbCkpIC8vIFJldmVydGluZyBpdGVtIGludG8gdGhlIG9yaWdpbmFsIGxpc3RcbiAgICA6IHB1dFNvcnRhYmxlID09PSB0aGlzIHx8ICh0aGlzLmxhc3RQdXRNb2RlID0gYWN0aXZlR3JvdXAuY2hlY2tQdWxsKHRoaXMsIGFjdGl2ZVNvcnRhYmxlLCBkcmFnRWwsIGV2dCkpICYmIGdyb3VwLmNoZWNrUHV0KHRoaXMsIGFjdGl2ZVNvcnRhYmxlLCBkcmFnRWwsIGV2dCkpKSB7XG4gICAgICB2ZXJ0aWNhbCA9IHRoaXMuX2dldERpcmVjdGlvbihldnQsIHRhcmdldCkgPT09ICd2ZXJ0aWNhbCc7XG4gICAgICBkcmFnUmVjdCA9IGdldFJlY3QoZHJhZ0VsKTtcbiAgICAgIGRyYWdPdmVyRXZlbnQoJ2RyYWdPdmVyVmFsaWQnKTtcbiAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSByZXR1cm4gY29tcGxldGVkRmlyZWQ7XG5cbiAgICAgIGlmIChyZXZlcnQpIHtcbiAgICAgICAgcGFyZW50RWwgPSByb290RWw7IC8vIGFjdHVhbGl6YXRpb25cblxuICAgICAgICBjYXB0dXJlKCk7XG5cbiAgICAgICAgdGhpcy5faGlkZUNsb25lKCk7XG5cbiAgICAgICAgZHJhZ092ZXJFdmVudCgncmV2ZXJ0Jyk7XG5cbiAgICAgICAgaWYgKCFTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICAgICAgaWYgKG5leHRFbCkge1xuICAgICAgICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShkcmFnRWwsIG5leHRFbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvb3RFbC5hcHBlbmRDaGlsZChkcmFnRWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wbGV0ZWQodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbExhc3RDaGlsZCA9IGxhc3RDaGlsZChlbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuXG4gICAgICBpZiAoIWVsTGFzdENoaWxkIHx8IF9naG9zdElzTGFzdChldnQsIHZlcnRpY2FsLCB0aGlzKSAmJiAhZWxMYXN0Q2hpbGQuYW5pbWF0ZWQpIHtcbiAgICAgICAgLy8gSWYgYWxyZWFkeSBhdCBlbmQgb2YgbGlzdDogRG8gbm90IGluc2VydFxuICAgICAgICBpZiAoZWxMYXN0Q2hpbGQgPT09IGRyYWdFbCkge1xuICAgICAgICAgIHJldHVybiBjb21wbGV0ZWQoZmFsc2UpO1xuICAgICAgICB9IC8vIGFzc2lnbiB0YXJnZXQgb25seSBpZiBjb25kaXRpb24gaXMgdHJ1ZVxuXG5cbiAgICAgICAgaWYgKGVsTGFzdENoaWxkICYmIGVsID09PSBldnQudGFyZ2V0KSB7XG4gICAgICAgICAgdGFyZ2V0ID0gZWxMYXN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgdGFyZ2V0UmVjdCA9IGdldFJlY3QodGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfb25Nb3ZlKHJvb3RFbCwgZWwsIGRyYWdFbCwgZHJhZ1JlY3QsIHRhcmdldCwgdGFyZ2V0UmVjdCwgZXZ0LCAhIXRhcmdldCkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgY2FwdHVyZSgpO1xuICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG4gICAgICAgICAgcGFyZW50RWwgPSBlbDsgLy8gYWN0dWFsaXphdGlvblxuXG4gICAgICAgICAgY2hhbmdlZCgpO1xuICAgICAgICAgIHJldHVybiBjb21wbGV0ZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnBhcmVudE5vZGUgPT09IGVsKSB7XG4gICAgICAgIHRhcmdldFJlY3QgPSBnZXRSZWN0KHRhcmdldCk7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSAwLFxuICAgICAgICAgICAgdGFyZ2V0QmVmb3JlRmlyc3RTd2FwLFxuICAgICAgICAgICAgZGlmZmVyZW50TGV2ZWwgPSBkcmFnRWwucGFyZW50Tm9kZSAhPT0gZWwsXG4gICAgICAgICAgICBkaWZmZXJlbnRSb3dDb2wgPSAhX2RyYWdFbEluUm93Q29sdW1uKGRyYWdFbC5hbmltYXRlZCAmJiBkcmFnRWwudG9SZWN0IHx8IGRyYWdSZWN0LCB0YXJnZXQuYW5pbWF0ZWQgJiYgdGFyZ2V0LnRvUmVjdCB8fCB0YXJnZXRSZWN0LCB2ZXJ0aWNhbCksXG4gICAgICAgICAgICBzaWRlMSA9IHZlcnRpY2FsID8gJ3RvcCcgOiAnbGVmdCcsXG4gICAgICAgICAgICBzY3JvbGxlZFBhc3RUb3AgPSBpc1Njcm9sbGVkUGFzdCh0YXJnZXQsICd0b3AnLCAndG9wJykgfHwgaXNTY3JvbGxlZFBhc3QoZHJhZ0VsLCAndG9wJywgJ3RvcCcpLFxuICAgICAgICAgICAgc2Nyb2xsQmVmb3JlID0gc2Nyb2xsZWRQYXN0VG9wID8gc2Nyb2xsZWRQYXN0VG9wLnNjcm9sbFRvcCA6IHZvaWQgMDtcblxuICAgICAgICBpZiAobGFzdFRhcmdldCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgdGFyZ2V0QmVmb3JlRmlyc3RTd2FwID0gdGFyZ2V0UmVjdFtzaWRlMV07XG4gICAgICAgICAgcGFzdEZpcnN0SW52ZXJ0VGhyZXNoID0gZmFsc2U7XG4gICAgICAgICAgaXNDaXJjdW1zdGFudGlhbEludmVydCA9ICFkaWZmZXJlbnRSb3dDb2wgJiYgb3B0aW9ucy5pbnZlcnRTd2FwIHx8IGRpZmZlcmVudExldmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlyZWN0aW9uID0gX2dldFN3YXBEaXJlY3Rpb24oZXZ0LCB0YXJnZXQsIHRhcmdldFJlY3QsIHZlcnRpY2FsLCBkaWZmZXJlbnRSb3dDb2wgPyAxIDogb3B0aW9ucy5zd2FwVGhyZXNob2xkLCBvcHRpb25zLmludmVydGVkU3dhcFRocmVzaG9sZCA9PSBudWxsID8gb3B0aW9ucy5zd2FwVGhyZXNob2xkIDogb3B0aW9ucy5pbnZlcnRlZFN3YXBUaHJlc2hvbGQsIGlzQ2lyY3Vtc3RhbnRpYWxJbnZlcnQsIGxhc3RUYXJnZXQgPT09IHRhcmdldCk7XG4gICAgICAgIHZhciBzaWJsaW5nO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gIT09IDApIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0YXJnZXQgaXMgYmVzaWRlIGRyYWdFbCBpbiByZXNwZWN0aXZlIGRpcmVjdGlvbiAoaWdub3JpbmcgaGlkZGVuIGVsZW1lbnRzKVxuICAgICAgICAgIHZhciBkcmFnSW5kZXggPSBpbmRleChkcmFnRWwpO1xuXG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgZHJhZ0luZGV4IC09IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnRFbC5jaGlsZHJlbltkcmFnSW5kZXhdO1xuICAgICAgICAgIH0gd2hpbGUgKHNpYmxpbmcgJiYgKGNzcyhzaWJsaW5nLCAnZGlzcGxheScpID09PSAnbm9uZScgfHwgc2libGluZyA9PT0gZ2hvc3RFbCkpO1xuICAgICAgICB9IC8vIElmIGRyYWdFbCBpcyBhbHJlYWR5IGJlc2lkZSB0YXJnZXQ6IERvIG5vdCBpbnNlcnRcblxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IDAgfHwgc2libGluZyA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBsYXN0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICB2YXIgbmV4dFNpYmxpbmcgPSB0YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nLFxuICAgICAgICAgICAgYWZ0ZXIgPSBmYWxzZTtcbiAgICAgICAgYWZ0ZXIgPSBkaXJlY3Rpb24gPT09IDE7XG5cbiAgICAgICAgdmFyIG1vdmVWZWN0b3IgPSBfb25Nb3ZlKHJvb3RFbCwgZWwsIGRyYWdFbCwgZHJhZ1JlY3QsIHRhcmdldCwgdGFyZ2V0UmVjdCwgZXZ0LCBhZnRlcik7XG5cbiAgICAgICAgaWYgKG1vdmVWZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKG1vdmVWZWN0b3IgPT09IDEgfHwgbW92ZVZlY3RvciA9PT0gLTEpIHtcbiAgICAgICAgICAgIGFmdGVyID0gbW92ZVZlY3RvciA9PT0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfc2lsZW50ID0gdHJ1ZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KF91bnNpbGVudCwgMzApO1xuICAgICAgICAgIGNhcHR1cmUoKTtcblxuICAgICAgICAgIGlmIChhZnRlciAmJiAhbmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkcmFnRWwsIGFmdGVyID8gbmV4dFNpYmxpbmcgOiB0YXJnZXQpO1xuICAgICAgICAgIH0gLy8gVW5kbyBjaHJvbWUncyBzY3JvbGwgYWRqdXN0bWVudCAoaGFzIG5vIGVmZmVjdCBvbiBvdGhlciBicm93c2VycylcblxuXG4gICAgICAgICAgaWYgKHNjcm9sbGVkUGFzdFRvcCkge1xuICAgICAgICAgICAgc2Nyb2xsQnkoc2Nyb2xsZWRQYXN0VG9wLCAwLCBzY3JvbGxCZWZvcmUgLSBzY3JvbGxlZFBhc3RUb3Auc2Nyb2xsVG9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJlbnRFbCA9IGRyYWdFbC5wYXJlbnROb2RlOyAvLyBhY3R1YWxpemF0aW9uXG4gICAgICAgICAgLy8gbXVzdCBiZSBkb25lIGJlZm9yZSBhbmltYXRpb25cblxuICAgICAgICAgIGlmICh0YXJnZXRCZWZvcmVGaXJzdFN3YXAgIT09IHVuZGVmaW5lZCAmJiAhaXNDaXJjdW1zdGFudGlhbEludmVydCkge1xuICAgICAgICAgICAgdGFyZ2V0TW92ZURpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0QmVmb3JlRmlyc3RTd2FwIC0gZ2V0UmVjdCh0YXJnZXQpW3NpZGUxXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hhbmdlZCgpO1xuICAgICAgICAgIHJldHVybiBjb21wbGV0ZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVsLmNvbnRhaW5zKGRyYWdFbCkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBsZXRlZChmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBfaWdub3JlV2hpbGVBbmltYXRpbmc6IG51bGwsXG4gIF9vZmZNb3ZlRXZlbnRzOiBmdW5jdGlvbiBfb2ZmTW92ZUV2ZW50cygpIHtcbiAgICBvZmYoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgb2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgIG9mZihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgIG9mZihkb2N1bWVudCwgJ2RyYWdvdmVyJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgIG9mZihkb2N1bWVudCwgJ21vdXNlbW92ZScsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgICBvZmYoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gIH0sXG4gIF9vZmZVcEV2ZW50czogZnVuY3Rpb24gX29mZlVwRXZlbnRzKCkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gdGhpcy5lbC5vd25lckRvY3VtZW50O1xuICAgIG9mZihvd25lckRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX29uRHJvcCk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uRHJvcCk7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdwb2ludGVydXAnLCB0aGlzLl9vbkRyb3ApO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCB0aGlzLl9vbkRyb3ApO1xuICAgIG9mZihkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgdGhpcyk7XG4gIH0sXG4gIF9vbkRyb3A6IGZ1bmN0aW9uIF9vbkRyb3AoXG4gIC8qKkV2ZW50Ki9cbiAgZXZ0KSB7XG4gICAgdmFyIGVsID0gdGhpcy5lbCxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgZHJhZ2dlZCBlbGVtZW50IHdpdGhpbiBpdHMgcGFyZW50XG5cbiAgICBuZXdJbmRleCA9IGluZGV4KGRyYWdFbCk7XG4gICAgbmV3RHJhZ2dhYmxlSW5kZXggPSBpbmRleChkcmFnRWwsIG9wdGlvbnMuZHJhZ2dhYmxlKTtcbiAgICBwbHVnaW5FdmVudCgnZHJvcCcsIHRoaXMsIHtcbiAgICAgIGV2dDogZXZ0XG4gICAgfSk7XG4gICAgcGFyZW50RWwgPSBkcmFnRWwgJiYgZHJhZ0VsLnBhcmVudE5vZGU7IC8vIEdldCBhZ2FpbiBhZnRlciBwbHVnaW4gZXZlbnRcblxuICAgIG5ld0luZGV4ID0gaW5kZXgoZHJhZ0VsKTtcbiAgICBuZXdEcmFnZ2FibGVJbmRleCA9IGluZGV4KGRyYWdFbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuXG4gICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgIHRoaXMuX251bGxpbmcoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0aW5nRHJhZ1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICBpc0NpcmN1bXN0YW50aWFsSW52ZXJ0ID0gZmFsc2U7XG4gICAgcGFzdEZpcnN0SW52ZXJ0VGhyZXNoID0gZmFsc2U7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9sb29wSWQpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9kcmFnU3RhcnRUaW1lcik7XG5cbiAgICBfY2FuY2VsTmV4dFRpY2sodGhpcy5jbG9uZUlkKTtcblxuICAgIF9jYW5jZWxOZXh0VGljayh0aGlzLl9kcmFnU3RhcnRJZCk7IC8vIFVuYmluZCBldmVudHNcblxuXG4gICAgaWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICBvZmYoZG9jdW1lbnQsICdkcm9wJywgdGhpcyk7XG4gICAgICBvZmYoZWwsICdkcmFnc3RhcnQnLCB0aGlzLl9vbkRyYWdTdGFydCk7XG4gICAgfVxuXG4gICAgdGhpcy5fb2ZmTW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5fb2ZmVXBFdmVudHMoKTtcblxuICAgIGlmIChTYWZhcmkpIHtcbiAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAndXNlci1zZWxlY3QnLCAnJyk7XG4gICAgfVxuXG4gICAgY3NzKGRyYWdFbCwgJ3RyYW5zZm9ybScsICcnKTtcblxuICAgIGlmIChldnQpIHtcbiAgICAgIGlmIChtb3ZlZCkge1xuICAgICAgICBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgIW9wdGlvbnMuZHJvcEJ1YmJsZSAmJiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGdob3N0RWwgJiYgZ2hvc3RFbC5wYXJlbnROb2RlICYmIGdob3N0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChnaG9zdEVsKTtcblxuICAgICAgaWYgKHJvb3RFbCA9PT0gcGFyZW50RWwgfHwgcHV0U29ydGFibGUgJiYgcHV0U29ydGFibGUubGFzdFB1dE1vZGUgIT09ICdjbG9uZScpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNsb25lKHMpXG4gICAgICAgIGNsb25lRWwgJiYgY2xvbmVFbC5wYXJlbnROb2RlICYmIGNsb25lRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9uZUVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyYWdFbCkge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgICBvZmYoZHJhZ0VsLCAnZHJhZ2VuZCcsIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgX2Rpc2FibGVEcmFnZ2FibGUoZHJhZ0VsKTtcblxuICAgICAgICBkcmFnRWwuc3R5bGVbJ3dpbGwtY2hhbmdlJ10gPSAnJzsgLy8gUmVtb3ZlIGNsYXNzZXNcbiAgICAgICAgLy8gZ2hvc3RDbGFzcyBpcyBhZGRlZCBpbiBkcmFnU3RhcnRlZFxuXG4gICAgICAgIGlmIChtb3ZlZCAmJiAhYXdhaXRpbmdEcmFnU3RhcnRlZCkge1xuICAgICAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCwgcHV0U29ydGFibGUgPyBwdXRTb3J0YWJsZS5vcHRpb25zLmdob3N0Q2xhc3MgOiB0aGlzLm9wdGlvbnMuZ2hvc3RDbGFzcywgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCB0aGlzLm9wdGlvbnMuY2hvc2VuQ2xhc3MsIGZhbHNlKTsgLy8gRHJhZyBzdG9wIGV2ZW50XG5cbiAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgIG5hbWU6ICd1bmNob29zZScsXG4gICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgbmV3SW5kZXg6IG51bGwsXG4gICAgICAgICAgbmV3RHJhZ2dhYmxlSW5kZXg6IG51bGwsXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyb290RWwgIT09IHBhcmVudEVsKSB7XG4gICAgICAgICAgaWYgKG5ld0luZGV4ID49IDApIHtcbiAgICAgICAgICAgIC8vIEFkZCBldmVudFxuICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICByb290RWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICBuYW1lOiAnYWRkJyxcbiAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIGZyb21FbDogcm9vdEVsLFxuICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgIH0pOyAvLyBSZW1vdmUgZXZlbnRcblxuXG4gICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgICAgICBuYW1lOiAncmVtb3ZlJyxcbiAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgfSk7IC8vIGRyYWcgZnJvbSBvbmUgbGlzdCBhbmQgZHJvcCBpbnRvIGFub3RoZXJcblxuXG4gICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgIHJvb3RFbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIG5hbWU6ICdzb3J0JyxcbiAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgIGZyb21FbDogcm9vdEVsLFxuICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgICAgICBuYW1lOiAnc29ydCcsXG4gICAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHB1dFNvcnRhYmxlICYmIHB1dFNvcnRhYmxlLnNhdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobmV3SW5kZXggIT09IG9sZEluZGV4KSB7XG4gICAgICAgICAgICBpZiAobmV3SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAvLyBkcmFnICYgZHJvcCB3aXRoaW4gdGhlIHNhbWUgbGlzdFxuICAgICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnc29ydCcsXG4gICAgICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChTb3J0YWJsZS5hY3RpdmUpIHtcbiAgICAgICAgICAvKiBqc2hpbnQgZXFudWxsOnRydWUgKi9cbiAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbnVsbCB8fCBuZXdJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gb2xkSW5kZXg7XG4gICAgICAgICAgICBuZXdEcmFnZ2FibGVJbmRleCA9IG9sZERyYWdnYWJsZUluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgICAgbmFtZTogJ2VuZCcsXG4gICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgIH0pOyAvLyBTYXZlIHNvcnRpbmdcblxuXG4gICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9udWxsaW5nKCk7XG4gIH0sXG4gIF9udWxsaW5nOiBmdW5jdGlvbiBfbnVsbGluZygpIHtcbiAgICBwbHVnaW5FdmVudCgnbnVsbGluZycsIHRoaXMpO1xuICAgIHJvb3RFbCA9IGRyYWdFbCA9IHBhcmVudEVsID0gZ2hvc3RFbCA9IG5leHRFbCA9IGNsb25lRWwgPSBsYXN0RG93bkVsID0gY2xvbmVIaWRkZW4gPSB0YXBFdnQgPSB0b3VjaEV2dCA9IG1vdmVkID0gbmV3SW5kZXggPSBuZXdEcmFnZ2FibGVJbmRleCA9IG9sZEluZGV4ID0gb2xkRHJhZ2dhYmxlSW5kZXggPSBsYXN0VGFyZ2V0ID0gbGFzdERpcmVjdGlvbiA9IHB1dFNvcnRhYmxlID0gYWN0aXZlR3JvdXAgPSBTb3J0YWJsZS5kcmFnZ2VkID0gU29ydGFibGUuZ2hvc3QgPSBTb3J0YWJsZS5jbG9uZSA9IFNvcnRhYmxlLmFjdGl2ZSA9IG51bGw7XG4gICAgc2F2ZWRJbnB1dENoZWNrZWQuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgIGVsLmNoZWNrZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHNhdmVkSW5wdXRDaGVja2VkLmxlbmd0aCA9IGxhc3REeCA9IGxhc3REeSA9IDA7XG4gIH0sXG4gIGhhbmRsZUV2ZW50OiBmdW5jdGlvbiBoYW5kbGVFdmVudChcbiAgLyoqRXZlbnQqL1xuICBldnQpIHtcbiAgICBzd2l0Y2ggKGV2dC50eXBlKSB7XG4gICAgICBjYXNlICdkcm9wJzpcbiAgICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgICB0aGlzLl9vbkRyb3AoZXZ0KTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICAgICAgaWYgKGRyYWdFbCkge1xuICAgICAgICAgIHRoaXMuX29uRHJhZ092ZXIoZXZ0KTtcblxuICAgICAgICAgIF9nbG9iYWxEcmFnT3ZlcihldnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NlbGVjdHN0YXJ0JzpcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogU2VyaWFsaXplcyB0aGUgaXRlbSBpbnRvIGFuIGFycmF5IG9mIHN0cmluZy5cbiAgICogQHJldHVybnMge1N0cmluZ1tdfVxuICAgKi9cbiAgdG9BcnJheTogZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICB2YXIgb3JkZXIgPSBbXSxcbiAgICAgICAgZWwsXG4gICAgICAgIGNoaWxkcmVuID0gdGhpcy5lbC5jaGlsZHJlbixcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIG4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgZWwgPSBjaGlsZHJlbltpXTtcblxuICAgICAgaWYgKGNsb3Nlc3QoZWwsIG9wdGlvbnMuZHJhZ2dhYmxlLCB0aGlzLmVsLCBmYWxzZSkpIHtcbiAgICAgICAgb3JkZXIucHVzaChlbC5nZXRBdHRyaWJ1dGUob3B0aW9ucy5kYXRhSWRBdHRyKSB8fCBfZ2VuZXJhdGVJZChlbCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcmRlcjtcbiAgfSxcblxuICAvKipcbiAgICogU29ydHMgdGhlIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgYXJyYXkuXG4gICAqIEBwYXJhbSAge1N0cmluZ1tdfSAgb3JkZXIgIG9yZGVyIG9mIHRoZSBpdGVtc1xuICAgKi9cbiAgc29ydDogZnVuY3Rpb24gc29ydChvcmRlciwgdXNlQW5pbWF0aW9uKSB7XG4gICAgdmFyIGl0ZW1zID0ge30sXG4gICAgICAgIHJvb3RFbCA9IHRoaXMuZWw7XG4gICAgdGhpcy50b0FycmF5KCkuZm9yRWFjaChmdW5jdGlvbiAoaWQsIGkpIHtcbiAgICAgIHZhciBlbCA9IHJvb3RFbC5jaGlsZHJlbltpXTtcblxuICAgICAgaWYgKGNsb3Nlc3QoZWwsIHRoaXMub3B0aW9ucy5kcmFnZ2FibGUsIHJvb3RFbCwgZmFsc2UpKSB7XG4gICAgICAgIGl0ZW1zW2lkXSA9IGVsO1xuICAgICAgfVxuICAgIH0sIHRoaXMpO1xuICAgIHVzZUFuaW1hdGlvbiAmJiB0aGlzLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgIG9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgICBpZiAoaXRlbXNbaWRdKSB7XG4gICAgICAgIHJvb3RFbC5yZW1vdmVDaGlsZChpdGVtc1tpZF0pO1xuICAgICAgICByb290RWwuYXBwZW5kQ2hpbGQoaXRlbXNbaWRdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB1c2VBbmltYXRpb24gJiYgdGhpcy5hbmltYXRlQWxsKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIGN1cnJlbnQgc29ydGluZ1xuICAgKi9cbiAgc2F2ZTogZnVuY3Rpb24gc2F2ZSgpIHtcbiAgICB2YXIgc3RvcmUgPSB0aGlzLm9wdGlvbnMuc3RvcmU7XG4gICAgc3RvcmUgJiYgc3RvcmUuc2V0ICYmIHN0b3JlLnNldCh0aGlzKTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgc2V0LCBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciBieSB0ZXN0aW5nIHRoZSBlbGVtZW50IGl0c2VsZiBhbmQgdHJhdmVyc2luZyB1cCB0aHJvdWdoIGl0cyBhbmNlc3RvcnMgaW4gdGhlIERPTSB0cmVlLlxuICAgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9ICBlbFxuICAgKiBAcGFyYW0gICB7U3RyaW5nfSAgICAgICBbc2VsZWN0b3JdICBkZWZhdWx0OiBgb3B0aW9ucy5kcmFnZ2FibGVgXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudWxsfVxuICAgKi9cbiAgY2xvc2VzdDogZnVuY3Rpb24gY2xvc2VzdCQxKGVsLCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBjbG9zZXN0KGVsLCBzZWxlY3RvciB8fCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLCB0aGlzLmVsLCBmYWxzZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldC9nZXQgb3B0aW9uXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtICAgeyp9ICAgICAgW3ZhbHVlXVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIG9wdGlvbjogZnVuY3Rpb24gb3B0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtb2RpZmllZFZhbHVlID0gUGx1Z2luTWFuYWdlci5tb2RpZnlPcHRpb24odGhpcywgbmFtZSwgdmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIG1vZGlmaWVkVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9wdGlvbnNbbmFtZV0gPSBtb2RpZmllZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9uc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBfcHJlcGFyZUdyb3VwKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVzdHJveVxuICAgKi9cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBwbHVnaW5FdmVudCgnZGVzdHJveScsIHRoaXMpO1xuICAgIHZhciBlbCA9IHRoaXMuZWw7XG4gICAgZWxbZXhwYW5kb10gPSBudWxsO1xuICAgIG9mZihlbCwgJ21vdXNlZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuICAgIG9mZihlbCwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vblRhcFN0YXJ0KTtcbiAgICBvZmYoZWwsICdwb2ludGVyZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuXG4gICAgaWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICBvZmYoZWwsICdkcmFnb3ZlcicsIHRoaXMpO1xuICAgICAgb2ZmKGVsLCAnZHJhZ2VudGVyJywgdGhpcyk7XG4gICAgfSAvLyBSZW1vdmUgZHJhZ2dhYmxlIGF0dHJpYnV0ZXNcblxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKCdbZHJhZ2dhYmxlXScpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnZHJhZ2dhYmxlJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9vbkRyb3AoKTtcblxuICAgIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZ0V2ZW50cygpO1xuXG4gICAgc29ydGFibGVzLnNwbGljZShzb3J0YWJsZXMuaW5kZXhPZih0aGlzLmVsKSwgMSk7XG4gICAgdGhpcy5lbCA9IGVsID0gbnVsbDtcbiAgfSxcbiAgX2hpZGVDbG9uZTogZnVuY3Rpb24gX2hpZGVDbG9uZSgpIHtcbiAgICBpZiAoIWNsb25lSGlkZGVuKSB7XG4gICAgICBwbHVnaW5FdmVudCgnaGlkZUNsb25lJywgdGhpcyk7XG4gICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkgcmV0dXJuO1xuICAgICAgY3NzKGNsb25lRWwsICdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVDbG9uZU9uSGlkZSAmJiBjbG9uZUVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgY2xvbmVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lRWwpO1xuICAgICAgfVxuXG4gICAgICBjbG9uZUhpZGRlbiA9IHRydWU7XG4gICAgfVxuICB9LFxuICBfc2hvd0Nsb25lOiBmdW5jdGlvbiBfc2hvd0Nsb25lKHB1dFNvcnRhYmxlKSB7XG4gICAgaWYgKHB1dFNvcnRhYmxlLmxhc3RQdXRNb2RlICE9PSAnY2xvbmUnKSB7XG4gICAgICB0aGlzLl9oaWRlQ2xvbmUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjbG9uZUhpZGRlbikge1xuICAgICAgcGx1Z2luRXZlbnQoJ3Nob3dDbG9uZScsIHRoaXMpO1xuICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybjsgLy8gc2hvdyBjbG9uZSBhdCBkcmFnRWwgb3Igb3JpZ2luYWwgcG9zaXRpb25cblxuICAgICAgaWYgKGRyYWdFbC5wYXJlbnROb2RlID09IHJvb3RFbCAmJiAhdGhpcy5vcHRpb25zLmdyb3VwLnJldmVydENsb25lKSB7XG4gICAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgZHJhZ0VsKTtcbiAgICAgIH0gZWxzZSBpZiAobmV4dEVsKSB7XG4gICAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgbmV4dEVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RFbC5hcHBlbmRDaGlsZChjbG9uZUVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ncm91cC5yZXZlcnRDbG9uZSkge1xuICAgICAgICB0aGlzLmFuaW1hdGUoZHJhZ0VsLCBjbG9uZUVsKTtcbiAgICAgIH1cblxuICAgICAgY3NzKGNsb25lRWwsICdkaXNwbGF5JywgJycpO1xuICAgICAgY2xvbmVIaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9nbG9iYWxEcmFnT3Zlcihcbi8qKkV2ZW50Ki9cbmV2dCkge1xuICBpZiAoZXZ0LmRhdGFUcmFuc2Zlcikge1xuICAgIGV2dC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgfVxuXG4gIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5mdW5jdGlvbiBfb25Nb3ZlKGZyb21FbCwgdG9FbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0RWwsIHRhcmdldFJlY3QsIG9yaWdpbmFsRXZlbnQsIHdpbGxJbnNlcnRBZnRlcikge1xuICB2YXIgZXZ0LFxuICAgICAgc29ydGFibGUgPSBmcm9tRWxbZXhwYW5kb10sXG4gICAgICBvbk1vdmVGbiA9IHNvcnRhYmxlLm9wdGlvbnMub25Nb3ZlLFxuICAgICAgcmV0VmFsOyAvLyBTdXBwb3J0IGZvciBuZXcgQ3VzdG9tRXZlbnQgZmVhdHVyZVxuXG4gIGlmICh3aW5kb3cuQ3VzdG9tRXZlbnQgJiYgIUlFMTFPckxlc3MgJiYgIUVkZ2UpIHtcbiAgICBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ21vdmUnLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2dC5pbml0RXZlbnQoJ21vdmUnLCB0cnVlLCB0cnVlKTtcbiAgfVxuXG4gIGV2dC50byA9IHRvRWw7XG4gIGV2dC5mcm9tID0gZnJvbUVsO1xuICBldnQuZHJhZ2dlZCA9IGRyYWdFbDtcbiAgZXZ0LmRyYWdnZWRSZWN0ID0gZHJhZ1JlY3Q7XG4gIGV2dC5yZWxhdGVkID0gdGFyZ2V0RWwgfHwgdG9FbDtcbiAgZXZ0LnJlbGF0ZWRSZWN0ID0gdGFyZ2V0UmVjdCB8fCBnZXRSZWN0KHRvRWwpO1xuICBldnQud2lsbEluc2VydEFmdGVyID0gd2lsbEluc2VydEFmdGVyO1xuICBldnQub3JpZ2luYWxFdmVudCA9IG9yaWdpbmFsRXZlbnQ7XG4gIGZyb21FbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgaWYgKG9uTW92ZUZuKSB7XG4gICAgcmV0VmFsID0gb25Nb3ZlRm4uY2FsbChzb3J0YWJsZSwgZXZ0LCBvcmlnaW5hbEV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiByZXRWYWw7XG59XG5cbmZ1bmN0aW9uIF9kaXNhYmxlRHJhZ2dhYmxlKGVsKSB7XG4gIGVsLmRyYWdnYWJsZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfdW5zaWxlbnQoKSB7XG4gIF9zaWxlbnQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX2dob3N0SXNMYXN0KGV2dCwgdmVydGljYWwsIHNvcnRhYmxlKSB7XG4gIHZhciByZWN0ID0gZ2V0UmVjdChsYXN0Q2hpbGQoc29ydGFibGUuZWwsIHNvcnRhYmxlLm9wdGlvbnMuZHJhZ2dhYmxlKSk7XG4gIHZhciBzcGFjZXIgPSAxMDtcbiAgcmV0dXJuIHZlcnRpY2FsID8gZXZ0LmNsaWVudFggPiByZWN0LnJpZ2h0ICsgc3BhY2VyIHx8IGV2dC5jbGllbnRYIDw9IHJlY3QucmlnaHQgJiYgZXZ0LmNsaWVudFkgPiByZWN0LmJvdHRvbSAmJiBldnQuY2xpZW50WCA+PSByZWN0LmxlZnQgOiBldnQuY2xpZW50WCA+IHJlY3QucmlnaHQgJiYgZXZ0LmNsaWVudFkgPiByZWN0LnRvcCB8fCBldnQuY2xpZW50WCA8PSByZWN0LnJpZ2h0ICYmIGV2dC5jbGllbnRZID4gcmVjdC5ib3R0b20gKyBzcGFjZXI7XG59XG5cbmZ1bmN0aW9uIF9nZXRTd2FwRGlyZWN0aW9uKGV2dCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCB2ZXJ0aWNhbCwgc3dhcFRocmVzaG9sZCwgaW52ZXJ0ZWRTd2FwVGhyZXNob2xkLCBpbnZlcnRTd2FwLCBpc0xhc3RUYXJnZXQpIHtcbiAgdmFyIG1vdXNlT25BeGlzID0gdmVydGljYWwgPyBldnQuY2xpZW50WSA6IGV2dC5jbGllbnRYLFxuICAgICAgdGFyZ2V0TGVuZ3RoID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LmhlaWdodCA6IHRhcmdldFJlY3Qud2lkdGgsXG4gICAgICB0YXJnZXRTMSA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC50b3AgOiB0YXJnZXRSZWN0LmxlZnQsXG4gICAgICB0YXJnZXRTMiA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC5ib3R0b20gOiB0YXJnZXRSZWN0LnJpZ2h0LFxuICAgICAgaW52ZXJ0ID0gZmFsc2U7XG5cbiAgaWYgKCFpbnZlcnRTd2FwKSB7XG4gICAgLy8gTmV2ZXIgaW52ZXJ0IG9yIGNyZWF0ZSBkcmFnRWwgc2hhZG93IHdoZW4gdGFyZ2V0IG1vdmVtZW5ldCBjYXVzZXMgbW91c2UgdG8gbW92ZSBwYXN0IHRoZSBlbmQgb2YgcmVndWxhciBzd2FwVGhyZXNob2xkXG4gICAgaWYgKGlzTGFzdFRhcmdldCAmJiB0YXJnZXRNb3ZlRGlzdGFuY2UgPCB0YXJnZXRMZW5ndGggKiBzd2FwVGhyZXNob2xkKSB7XG4gICAgICAvLyBtdWx0aXBsaWVkIG9ubHkgYnkgc3dhcFRocmVzaG9sZCBiZWNhdXNlIG1vdXNlIHdpbGwgYWxyZWFkeSBiZSBpbnNpZGUgdGFyZ2V0IGJ5ICgxIC0gdGhyZXNob2xkKSAqIHRhcmdldExlbmd0aCAvIDJcbiAgICAgIC8vIGNoZWNrIGlmIHBhc3QgZmlyc3QgaW52ZXJ0IHRocmVzaG9sZCBvbiBzaWRlIG9wcG9zaXRlIG9mIGxhc3REaXJlY3Rpb25cbiAgICAgIGlmICghcGFzdEZpcnN0SW52ZXJ0VGhyZXNoICYmIChsYXN0RGlyZWN0aW9uID09PSAxID8gbW91c2VPbkF4aXMgPiB0YXJnZXRTMSArIHRhcmdldExlbmd0aCAqIGludmVydGVkU3dhcFRocmVzaG9sZCAvIDIgOiBtb3VzZU9uQXhpcyA8IHRhcmdldFMyIC0gdGFyZ2V0TGVuZ3RoICogaW52ZXJ0ZWRTd2FwVGhyZXNob2xkIC8gMikpIHtcbiAgICAgICAgLy8gcGFzdCBmaXJzdCBpbnZlcnQgdGhyZXNob2xkLCBkbyBub3QgcmVzdHJpY3QgaW52ZXJ0ZWQgdGhyZXNob2xkIHRvIGRyYWdFbCBzaGFkb3dcbiAgICAgICAgcGFzdEZpcnN0SW52ZXJ0VGhyZXNoID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXN0Rmlyc3RJbnZlcnRUaHJlc2gpIHtcbiAgICAgICAgLy8gZHJhZ0VsIHNoYWRvdyAodGFyZ2V0IG1vdmUgZGlzdGFuY2Ugc2hhZG93KVxuICAgICAgICBpZiAobGFzdERpcmVjdGlvbiA9PT0gMSA/IG1vdXNlT25BeGlzIDwgdGFyZ2V0UzEgKyB0YXJnZXRNb3ZlRGlzdGFuY2UgLy8gb3ZlciBkcmFnRWwgc2hhZG93XG4gICAgICAgIDogbW91c2VPbkF4aXMgPiB0YXJnZXRTMiAtIHRhcmdldE1vdmVEaXN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiAtbGFzdERpcmVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW52ZXJ0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVndWxhclxuICAgICAgaWYgKG1vdXNlT25BeGlzID4gdGFyZ2V0UzEgKyB0YXJnZXRMZW5ndGggKiAoMSAtIHN3YXBUaHJlc2hvbGQpIC8gMiAmJiBtb3VzZU9uQXhpcyA8IHRhcmdldFMyIC0gdGFyZ2V0TGVuZ3RoICogKDEgLSBzd2FwVGhyZXNob2xkKSAvIDIpIHtcbiAgICAgICAgcmV0dXJuIF9nZXRJbnNlcnREaXJlY3Rpb24odGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbnZlcnQgPSBpbnZlcnQgfHwgaW52ZXJ0U3dhcDtcblxuICBpZiAoaW52ZXJ0KSB7XG4gICAgLy8gSW52ZXJ0IG9mIHJlZ3VsYXJcbiAgICBpZiAobW91c2VPbkF4aXMgPCB0YXJnZXRTMSArIHRhcmdldExlbmd0aCAqIGludmVydGVkU3dhcFRocmVzaG9sZCAvIDIgfHwgbW91c2VPbkF4aXMgPiB0YXJnZXRTMiAtIHRhcmdldExlbmd0aCAqIGludmVydGVkU3dhcFRocmVzaG9sZCAvIDIpIHtcbiAgICAgIHJldHVybiBtb3VzZU9uQXhpcyA+IHRhcmdldFMxICsgdGFyZ2V0TGVuZ3RoIC8gMiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cbi8qKlxuICogR2V0cyB0aGUgZGlyZWN0aW9uIGRyYWdFbCBtdXN0IGJlIHN3YXBwZWQgcmVsYXRpdmUgdG8gdGFyZ2V0IGluIG9yZGVyIHRvIG1ha2UgaXRcbiAqIHNlZW0gdGhhdCBkcmFnRWwgaGFzIGJlZW4gXCJpbnNlcnRlZFwiIGludG8gdGhhdCBlbGVtZW50J3MgcG9zaXRpb25cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSB0YXJnZXQgICAgICAgVGhlIHRhcmdldCB3aG9zZSBwb3NpdGlvbiBkcmFnRWwgaXMgYmVpbmcgaW5zZXJ0ZWQgYXRcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uIGRyYWdFbCBtdXN0IGJlIHN3YXBwZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZXRJbnNlcnREaXJlY3Rpb24odGFyZ2V0KSB7XG4gIGlmIChpbmRleChkcmFnRWwpIDwgaW5kZXgodGFyZ2V0KSkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAtMTtcbiAgfVxufVxuLyoqXG4gKiBHZW5lcmF0ZSBpZFxuICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBlbFxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfZ2VuZXJhdGVJZChlbCkge1xuICB2YXIgc3RyID0gZWwudGFnTmFtZSArIGVsLmNsYXNzTmFtZSArIGVsLnNyYyArIGVsLmhyZWYgKyBlbC50ZXh0Q29udGVudCxcbiAgICAgIGkgPSBzdHIubGVuZ3RoLFxuICAgICAgc3VtID0gMDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgc3VtICs9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICB9XG5cbiAgcmV0dXJuIHN1bS50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIF9zYXZlSW5wdXRDaGVja2VkU3RhdGUocm9vdCkge1xuICBzYXZlZElucHV0Q2hlY2tlZC5sZW5ndGggPSAwO1xuICB2YXIgaW5wdXRzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcbiAgdmFyIGlkeCA9IGlucHV0cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGlkeC0tKSB7XG4gICAgdmFyIGVsID0gaW5wdXRzW2lkeF07XG4gICAgZWwuY2hlY2tlZCAmJiBzYXZlZElucHV0Q2hlY2tlZC5wdXNoKGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfbmV4dFRpY2soZm4pIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoZm4sIDApO1xufVxuXG5mdW5jdGlvbiBfY2FuY2VsTmV4dFRpY2soaWQpIHtcbiAgcmV0dXJuIGNsZWFyVGltZW91dChpZCk7XG59IC8vIEZpeGVkICM5NzM6XG5cblxuaWYgKGRvY3VtZW50RXhpc3RzKSB7XG4gIG9uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgZnVuY3Rpb24gKGV2dCkge1xuICAgIGlmICgoU29ydGFibGUuYWN0aXZlIHx8IGF3YWl0aW5nRHJhZ1N0YXJ0ZWQpICYmIGV2dC5jYW5jZWxhYmxlKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0pO1xufSAvLyBFeHBvcnQgdXRpbHNcblxuXG5Tb3J0YWJsZS51dGlscyA9IHtcbiAgb246IG9uLFxuICBvZmY6IG9mZixcbiAgY3NzOiBjc3MsXG4gIGZpbmQ6IGZpbmQsXG4gIGlzOiBmdW5jdGlvbiBpcyhlbCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gISFjbG9zZXN0KGVsLCBzZWxlY3RvciwgZWwsIGZhbHNlKTtcbiAgfSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRocm90dGxlOiB0aHJvdHRsZSxcbiAgY2xvc2VzdDogY2xvc2VzdCxcbiAgdG9nZ2xlQ2xhc3M6IHRvZ2dsZUNsYXNzLFxuICBjbG9uZTogY2xvbmUsXG4gIGluZGV4OiBpbmRleCxcbiAgbmV4dFRpY2s6IF9uZXh0VGljayxcbiAgY2FuY2VsTmV4dFRpY2s6IF9jYW5jZWxOZXh0VGljayxcbiAgZGV0ZWN0RGlyZWN0aW9uOiBfZGV0ZWN0RGlyZWN0aW9uLFxuICBnZXRDaGlsZDogZ2V0Q2hpbGRcbn07XG4vKipcbiAqIEdldCB0aGUgU29ydGFibGUgaW5zdGFuY2Ugb2YgYW4gZWxlbWVudFxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnRcbiAqIEByZXR1cm4ge1NvcnRhYmxlfHVuZGVmaW5lZH0gICAgICAgICBUaGUgaW5zdGFuY2Ugb2YgU29ydGFibGVcbiAqL1xuXG5Tb3J0YWJsZS5nZXQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudFtleHBhbmRvXTtcbn07XG4vKipcbiAqIE1vdW50IGEgcGx1Z2luIHRvIFNvcnRhYmxlXG4gKiBAcGFyYW0gIHsuLi5Tb3J0YWJsZVBsdWdpbnxTb3J0YWJsZVBsdWdpbltdfSBwbHVnaW5zICAgICAgIFBsdWdpbnMgYmVpbmcgbW91bnRlZFxuICovXG5cblxuU29ydGFibGUubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwbHVnaW5zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHBsdWdpbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAocGx1Z2luc1swXS5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHBsdWdpbnMgPSBwbHVnaW5zWzBdO1xuICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIGlmICghcGx1Z2luLnByb3RvdHlwZSB8fCAhcGx1Z2luLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcikge1xuICAgICAgdGhyb3cgXCJTb3J0YWJsZTogTW91bnRlZCBwbHVnaW4gbXVzdCBiZSBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBub3QgXCIuY29uY2F0KHt9LnRvU3RyaW5nLmNhbGwocGx1Z2luKSk7XG4gICAgfVxuXG4gICAgaWYgKHBsdWdpbi51dGlscykgU29ydGFibGUudXRpbHMgPSBfb2JqZWN0U3ByZWFkKHt9LCBTb3J0YWJsZS51dGlscywgcGx1Z2luLnV0aWxzKTtcbiAgICBQbHVnaW5NYW5hZ2VyLm1vdW50KHBsdWdpbik7XG4gIH0pO1xufTtcbi8qKlxuICogQ3JlYXRlIHNvcnRhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSAgZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zXVxuICovXG5cblxuU29ydGFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgU29ydGFibGUoZWwsIG9wdGlvbnMpO1xufTsgLy8gRXhwb3J0XG5cblxuU29ydGFibGUudmVyc2lvbiA9IHZlcnNpb247XG5cbnZhciBhdXRvU2Nyb2xscyA9IFtdLFxuICAgIHNjcm9sbEVsLFxuICAgIHNjcm9sbFJvb3RFbCxcbiAgICBzY3JvbGxpbmcgPSBmYWxzZSxcbiAgICBsYXN0QXV0b1Njcm9sbFgsXG4gICAgbGFzdEF1dG9TY3JvbGxZLFxuICAgIHRvdWNoRXZ0JDEsXG4gICAgcG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWw7XG5cbmZ1bmN0aW9uIEF1dG9TY3JvbGxQbHVnaW4oKSB7XG4gIGZ1bmN0aW9uIEF1dG9TY3JvbGwoKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIHNjcm9sbDogdHJ1ZSxcbiAgICAgIHNjcm9sbFNlbnNpdGl2aXR5OiAzMCxcbiAgICAgIHNjcm9sbFNwZWVkOiAxMCxcbiAgICAgIGJ1YmJsZVNjcm9sbDogdHJ1ZVxuICAgIH07IC8vIEJpbmQgYWxsIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgZm9yICh2YXIgZm4gaW4gdGhpcykge1xuICAgICAgaWYgKGZuLmNoYXJBdCgwKSA9PT0gJ18nICYmIHR5cGVvZiB0aGlzW2ZuXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2ZuXSA9IHRoaXNbZm5dLmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQXV0b1Njcm9sbC5wcm90b3R5cGUgPSB7XG4gICAgZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uIGRyYWdTdGFydGVkKF9yZWYpIHtcbiAgICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gX3JlZi5vcmlnaW5hbEV2ZW50O1xuXG4gICAgICBpZiAodGhpcy5zb3J0YWJsZS5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgb24oZG9jdW1lbnQsICdkcmFnb3ZlcicsIHRoaXMuX2hhbmRsZUF1dG9TY3JvbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdXBwb3J0UG9pbnRlcikge1xuICAgICAgICAgIG9uKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsRXZlbnQudG91Y2hlcykge1xuICAgICAgICAgIG9uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRyYWdPdmVyQ29tcGxldGVkOiBmdW5jdGlvbiBkcmFnT3ZlckNvbXBsZXRlZChfcmVmMikge1xuICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBfcmVmMi5vcmlnaW5hbEV2ZW50O1xuXG4gICAgICAvLyBGb3Igd2hlbiBidWJibGluZyBpcyBjYW5jZWxlZCBhbmQgdXNpbmcgZmFsbGJhY2sgKGZhbGxiYWNrICd0b3VjaG1vdmUnIGFsd2F5cyByZWFjaGVkKVxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZHJhZ092ZXJCdWJibGUgJiYgIW9yaWdpbmFsRXZlbnQucm9vdEVsKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUF1dG9TY3JvbGwob3JpZ2luYWxFdmVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcm9wOiBmdW5jdGlvbiBkcm9wKCkge1xuICAgICAgaWYgKHRoaXMuc29ydGFibGUubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgIG9mZihkb2N1bWVudCwgJ2RyYWdvdmVyJywgdGhpcy5faGFuZGxlQXV0b1Njcm9sbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvZmYoZG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICAgIG9mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICAgIG9mZihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICB9XG5cbiAgICAgIGNsZWFyUG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwoKTtcbiAgICAgIGNsZWFyQXV0b1Njcm9sbHMoKTtcbiAgICAgIGNhbmNlbFRocm90dGxlKCk7XG4gICAgfSxcbiAgICBudWxsaW5nOiBmdW5jdGlvbiBudWxsaW5nKCkge1xuICAgICAgdG91Y2hFdnQkMSA9IHNjcm9sbFJvb3RFbCA9IHNjcm9sbEVsID0gc2Nyb2xsaW5nID0gcG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwgPSBsYXN0QXV0b1Njcm9sbFggPSBsYXN0QXV0b1Njcm9sbFkgPSBudWxsO1xuICAgICAgYXV0b1Njcm9sbHMubGVuZ3RoID0gMDtcbiAgICB9LFxuICAgIF9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGw6IGZ1bmN0aW9uIF9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwoZXZ0KSB7XG4gICAgICB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKGV2dCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBfaGFuZGxlQXV0b1Njcm9sbDogZnVuY3Rpb24gX2hhbmRsZUF1dG9TY3JvbGwoZXZ0LCBmYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHggPSAoZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCkuY2xpZW50WCxcbiAgICAgICAgICB5ID0gKGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQpLmNsaWVudFksXG4gICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSk7XG4gICAgICB0b3VjaEV2dCQxID0gZXZ0OyAvLyBJRSBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgbmF0aXZlIGF1dG9zY3JvbGwsXG4gICAgICAvLyBFZGdlJ3MgYXV0b3Njcm9sbCBzZWVtcyB0b28gY29uZGl0aW9uYWwsXG4gICAgICAvLyBNQUNPUyBTYWZhcmkgZG9lcyBub3QgaGF2ZSBhdXRvc2Nyb2xsLFxuICAgICAgLy8gRmlyZWZveCBhbmQgQ2hyb21lIGFyZSBnb29kXG5cbiAgICAgIGlmIChmYWxsYmFjayB8fCBFZGdlIHx8IElFMTFPckxlc3MgfHwgU2FmYXJpKSB7XG4gICAgICAgIGF1dG9TY3JvbGwoZXZ0LCB0aGlzLm9wdGlvbnMsIGVsZW0sIGZhbGxiYWNrKTsgLy8gTGlzdGVuZXIgZm9yIHBvaW50ZXIgZWxlbWVudCBjaGFuZ2VcblxuICAgICAgICB2YXIgb2dFbGVtU2Nyb2xsZXIgPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChlbGVtLCB0cnVlKTtcblxuICAgICAgICBpZiAoc2Nyb2xsaW5nICYmICghcG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwgfHwgeCAhPT0gbGFzdEF1dG9TY3JvbGxYIHx8IHkgIT09IGxhc3RBdXRvU2Nyb2xsWSkpIHtcbiAgICAgICAgICBwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCAmJiBjbGVhclBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsKCk7IC8vIERldGVjdCBmb3IgcG9pbnRlciBlbGVtIGNoYW5nZSwgZW11bGF0aW5nIG5hdGl2ZSBEbkQgYmVoYXZpb3VyXG5cbiAgICAgICAgICBwb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBuZXdFbGVtID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChuZXdFbGVtICE9PSBvZ0VsZW1TY3JvbGxlcikge1xuICAgICAgICAgICAgICBvZ0VsZW1TY3JvbGxlciA9IG5ld0VsZW07XG4gICAgICAgICAgICAgIGNsZWFyQXV0b1Njcm9sbHMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXV0b1Njcm9sbChldnQsIF90aGlzLm9wdGlvbnMsIG5ld0VsZW0sIGZhbGxiYWNrKTtcbiAgICAgICAgICB9LCAxMCk7XG4gICAgICAgICAgbGFzdEF1dG9TY3JvbGxYID0geDtcbiAgICAgICAgICBsYXN0QXV0b1Njcm9sbFkgPSB5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBEbkQgaXMgZW5hYmxlZCAoYW5kIGJyb3dzZXIgaGFzIGdvb2QgYXV0b3Njcm9sbGluZyksIGZpcnN0IGF1dG9zY3JvbGwgd2lsbCBhbHJlYWR5IHNjcm9sbCwgc28gZ2V0IHBhcmVudCBhdXRvc2Nyb2xsIG9mIGZpcnN0IGF1dG9zY3JvbGxcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYnViYmxlU2Nyb2xsIHx8IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGVsZW0sIHRydWUpID09PSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCkpIHtcbiAgICAgICAgICBjbGVhckF1dG9TY3JvbGxzKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXV0b1Njcm9sbChldnQsIHRoaXMub3B0aW9ucywgZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWxlbSwgZmFsc2UpLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoQXV0b1Njcm9sbCwge1xuICAgIHBsdWdpbk5hbWU6ICdzY3JvbGwnLFxuICAgIGluaXRpYWxpemVCeURlZmF1bHQ6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyQXV0b1Njcm9sbHMoKSB7XG4gIGF1dG9TY3JvbGxzLmZvckVhY2goZnVuY3Rpb24gKGF1dG9TY3JvbGwpIHtcbiAgICBjbGVhckludGVydmFsKGF1dG9TY3JvbGwucGlkKTtcbiAgfSk7XG4gIGF1dG9TY3JvbGxzID0gW107XG59XG5cbmZ1bmN0aW9uIGNsZWFyUG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwoKSB7XG4gIGNsZWFySW50ZXJ2YWwocG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwpO1xufVxuXG52YXIgYXV0b1Njcm9sbCA9IHRocm90dGxlKGZ1bmN0aW9uIChldnQsIG9wdGlvbnMsIHJvb3RFbCwgaXNGYWxsYmFjaykge1xuICAvLyBCdWc6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTUyMVxuICBpZiAoIW9wdGlvbnMuc2Nyb2xsKSByZXR1cm47XG4gIHZhciB4ID0gKGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQpLmNsaWVudFgsXG4gICAgICB5ID0gKGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQpLmNsaWVudFksXG4gICAgICBzZW5zID0gb3B0aW9ucy5zY3JvbGxTZW5zaXRpdml0eSxcbiAgICAgIHNwZWVkID0gb3B0aW9ucy5zY3JvbGxTcGVlZCxcbiAgICAgIHdpblNjcm9sbGVyID0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICB2YXIgc2Nyb2xsVGhpc0luc3RhbmNlID0gZmFsc2UsXG4gICAgICBzY3JvbGxDdXN0b21GbjsgLy8gTmV3IHNjcm9sbCByb290LCBzZXQgc2Nyb2xsRWxcblxuICBpZiAoc2Nyb2xsUm9vdEVsICE9PSByb290RWwpIHtcbiAgICBzY3JvbGxSb290RWwgPSByb290RWw7XG4gICAgY2xlYXJBdXRvU2Nyb2xscygpO1xuICAgIHNjcm9sbEVsID0gb3B0aW9ucy5zY3JvbGw7XG4gICAgc2Nyb2xsQ3VzdG9tRm4gPSBvcHRpb25zLnNjcm9sbEZuO1xuXG4gICAgaWYgKHNjcm9sbEVsID09PSB0cnVlKSB7XG4gICAgICBzY3JvbGxFbCA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KHJvb3RFbCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxheWVyc091dCA9IDA7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gc2Nyb2xsRWw7XG5cbiAgZG8ge1xuICAgIHZhciBlbCA9IGN1cnJlbnRQYXJlbnQsXG4gICAgICAgIHJlY3QgPSBnZXRSZWN0KGVsKSxcbiAgICAgICAgdG9wID0gcmVjdC50b3AsXG4gICAgICAgIGJvdHRvbSA9IHJlY3QuYm90dG9tLFxuICAgICAgICBsZWZ0ID0gcmVjdC5sZWZ0LFxuICAgICAgICByaWdodCA9IHJlY3QucmlnaHQsXG4gICAgICAgIHdpZHRoID0gcmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gcmVjdC5oZWlnaHQsXG4gICAgICAgIGNhblNjcm9sbFggPSB2b2lkIDAsXG4gICAgICAgIGNhblNjcm9sbFkgPSB2b2lkIDAsXG4gICAgICAgIHNjcm9sbFdpZHRoID0gZWwuc2Nyb2xsV2lkdGgsXG4gICAgICAgIHNjcm9sbEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodCxcbiAgICAgICAgZWxDU1MgPSBjc3MoZWwpLFxuICAgICAgICBzY3JvbGxQb3NYID0gZWwuc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsUG9zWSA9IGVsLnNjcm9sbFRvcDtcblxuICAgIGlmIChlbCA9PT0gd2luU2Nyb2xsZXIpIHtcbiAgICAgIGNhblNjcm9sbFggPSB3aWR0aCA8IHNjcm9sbFdpZHRoICYmIChlbENTUy5vdmVyZmxvd1ggPT09ICdhdXRvJyB8fCBlbENTUy5vdmVyZmxvd1ggPT09ICdzY3JvbGwnIHx8IGVsQ1NTLm92ZXJmbG93WCA9PT0gJ3Zpc2libGUnKTtcbiAgICAgIGNhblNjcm9sbFkgPSBoZWlnaHQgPCBzY3JvbGxIZWlnaHQgJiYgKGVsQ1NTLm92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IGVsQ1NTLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcgfHwgZWxDU1Mub3ZlcmZsb3dZID09PSAndmlzaWJsZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW5TY3JvbGxYID0gd2lkdGggPCBzY3JvbGxXaWR0aCAmJiAoZWxDU1Mub3ZlcmZsb3dYID09PSAnYXV0bycgfHwgZWxDU1Mub3ZlcmZsb3dYID09PSAnc2Nyb2xsJyk7XG4gICAgICBjYW5TY3JvbGxZID0gaGVpZ2h0IDwgc2Nyb2xsSGVpZ2h0ICYmIChlbENTUy5vdmVyZmxvd1kgPT09ICdhdXRvJyB8fCBlbENTUy5vdmVyZmxvd1kgPT09ICdzY3JvbGwnKTtcbiAgICB9XG5cbiAgICB2YXIgdnggPSBjYW5TY3JvbGxYICYmIChNYXRoLmFicyhyaWdodCAtIHgpIDw9IHNlbnMgJiYgc2Nyb2xsUG9zWCArIHdpZHRoIDwgc2Nyb2xsV2lkdGgpIC0gKE1hdGguYWJzKGxlZnQgLSB4KSA8PSBzZW5zICYmICEhc2Nyb2xsUG9zWCk7XG4gICAgdmFyIHZ5ID0gY2FuU2Nyb2xsWSAmJiAoTWF0aC5hYnMoYm90dG9tIC0geSkgPD0gc2VucyAmJiBzY3JvbGxQb3NZICsgaGVpZ2h0IDwgc2Nyb2xsSGVpZ2h0KSAtIChNYXRoLmFicyh0b3AgLSB5KSA8PSBzZW5zICYmICEhc2Nyb2xsUG9zWSk7XG5cbiAgICBpZiAoIWF1dG9TY3JvbGxzW2xheWVyc091dF0pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGxheWVyc091dDsgaSsrKSB7XG4gICAgICAgIGlmICghYXV0b1Njcm9sbHNbaV0pIHtcbiAgICAgICAgICBhdXRvU2Nyb2xsc1tpXSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF1dG9TY3JvbGxzW2xheWVyc091dF0udnggIT0gdnggfHwgYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS52eSAhPSB2eSB8fCBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLmVsICE9PSBlbCkge1xuICAgICAgYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS5lbCA9IGVsO1xuICAgICAgYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS52eCA9IHZ4O1xuICAgICAgYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS52eSA9IHZ5O1xuICAgICAgY2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnBpZCk7XG5cbiAgICAgIGlmICh2eCAhPSAwIHx8IHZ5ICE9IDApIHtcbiAgICAgICAgc2Nyb2xsVGhpc0luc3RhbmNlID0gdHJ1ZTtcbiAgICAgICAgLyoganNoaW50IGxvb3BmdW5jOnRydWUgKi9cblxuICAgICAgICBhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnBpZCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBlbXVsYXRlIGRyYWcgb3ZlciBkdXJpbmcgYXV0b3Njcm9sbCAoZmFsbGJhY2spLCBlbXVsYXRpbmcgbmF0aXZlIERuRCBiZWhhdmlvdXJcbiAgICAgICAgICBpZiAoaXNGYWxsYmFjayAmJiB0aGlzLmxheWVyID09PSAwKSB7XG4gICAgICAgICAgICBTb3J0YWJsZS5hY3RpdmUuX29uVG91Y2hNb3ZlKHRvdWNoRXZ0JDEpOyAvLyBUbyBtb3ZlIGdob3N0IGlmIGl0IGlzIHBvc2l0aW9uZWQgYWJzb2x1dGVseVxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldFkgPSBhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS52eSA/IGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLnZ5ICogc3BlZWQgOiAwO1xuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXRYID0gYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0udnggPyBhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS52eCAqIHNwZWVkIDogMDtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygc2Nyb2xsQ3VzdG9tRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChzY3JvbGxDdXN0b21Gbi5jYWxsKFNvcnRhYmxlLmRyYWdnZWQucGFyZW50Tm9kZVtleHBhbmRvXSwgc2Nyb2xsT2Zmc2V0WCwgc2Nyb2xsT2Zmc2V0WSwgZXZ0LCB0b3VjaEV2dCQxLCBhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS5lbCkgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjcm9sbEJ5KGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLmVsLCBzY3JvbGxPZmZzZXRYLCBzY3JvbGxPZmZzZXRZKTtcbiAgICAgICAgfS5iaW5kKHtcbiAgICAgICAgICBsYXllcjogbGF5ZXJzT3V0XG4gICAgICAgIH0pLCAyNCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGF5ZXJzT3V0Kys7XG4gIH0gd2hpbGUgKG9wdGlvbnMuYnViYmxlU2Nyb2xsICYmIGN1cnJlbnRQYXJlbnQgIT09IHdpblNjcm9sbGVyICYmIChjdXJyZW50UGFyZW50ID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoY3VycmVudFBhcmVudCwgZmFsc2UpKSk7XG5cbiAgc2Nyb2xsaW5nID0gc2Nyb2xsVGhpc0luc3RhbmNlOyAvLyBpbiBjYXNlIGFub3RoZXIgZnVuY3Rpb24gY2F0Y2hlcyBzY3JvbGxpbmcgYXMgZmFsc2UgaW4gYmV0d2VlbiB3aGVuIGl0IGlzIG5vdFxufSwgMzApO1xuXG52YXIgZHJvcCA9IGZ1bmN0aW9uIGRyb3AoX3JlZikge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IF9yZWYub3JpZ2luYWxFdmVudCxcbiAgICAgIHB1dFNvcnRhYmxlID0gX3JlZi5wdXRTb3J0YWJsZSxcbiAgICAgIGRyYWdFbCA9IF9yZWYuZHJhZ0VsLFxuICAgICAgYWN0aXZlU29ydGFibGUgPSBfcmVmLmFjdGl2ZVNvcnRhYmxlLFxuICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50ID0gX3JlZi5kaXNwYXRjaFNvcnRhYmxlRXZlbnQsXG4gICAgICBoaWRlR2hvc3RGb3JUYXJnZXQgPSBfcmVmLmhpZGVHaG9zdEZvclRhcmdldCxcbiAgICAgIHVuaGlkZUdob3N0Rm9yVGFyZ2V0ID0gX3JlZi51bmhpZGVHaG9zdEZvclRhcmdldDtcbiAgaWYgKCFvcmlnaW5hbEV2ZW50KSByZXR1cm47XG4gIHZhciB0b1NvcnRhYmxlID0gcHV0U29ydGFibGUgfHwgYWN0aXZlU29ydGFibGU7XG4gIGhpZGVHaG9zdEZvclRhcmdldCgpO1xuICB2YXIgdG91Y2ggPSBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoID8gb3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSA6IG9yaWdpbmFsRXZlbnQ7XG4gIHZhciB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFkpO1xuICB1bmhpZGVHaG9zdEZvclRhcmdldCgpO1xuXG4gIGlmICh0b1NvcnRhYmxlICYmICF0b1NvcnRhYmxlLmVsLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQoJ3NwaWxsJyk7XG4gICAgdGhpcy5vblNwaWxsKHtcbiAgICAgIGRyYWdFbDogZHJhZ0VsLFxuICAgICAgcHV0U29ydGFibGU6IHB1dFNvcnRhYmxlXG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFJldmVydCgpIHt9XG5cblJldmVydC5wcm90b3R5cGUgPSB7XG4gIHN0YXJ0SW5kZXg6IG51bGwsXG4gIGRyYWdTdGFydDogZnVuY3Rpb24gZHJhZ1N0YXJ0KF9yZWYyKSB7XG4gICAgdmFyIG9sZERyYWdnYWJsZUluZGV4ID0gX3JlZjIub2xkRHJhZ2dhYmxlSW5kZXg7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gb2xkRHJhZ2dhYmxlSW5kZXg7XG4gIH0sXG4gIG9uU3BpbGw6IGZ1bmN0aW9uIG9uU3BpbGwoX3JlZjMpIHtcbiAgICB2YXIgZHJhZ0VsID0gX3JlZjMuZHJhZ0VsLFxuICAgICAgICBwdXRTb3J0YWJsZSA9IF9yZWYzLnB1dFNvcnRhYmxlO1xuICAgIHRoaXMuc29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG5cbiAgICBpZiAocHV0U29ydGFibGUpIHtcbiAgICAgIHB1dFNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgIH1cblxuICAgIHZhciBuZXh0U2libGluZyA9IGdldENoaWxkKHRoaXMuc29ydGFibGUuZWwsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChuZXh0U2libGluZykge1xuICAgICAgdGhpcy5zb3J0YWJsZS5lbC5pbnNlcnRCZWZvcmUoZHJhZ0VsLCBuZXh0U2libGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ydGFibGUuZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRhYmxlLmFuaW1hdGVBbGwoKTtcblxuICAgIGlmIChwdXRTb3J0YWJsZSkge1xuICAgICAgcHV0U29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgIH1cbiAgfSxcbiAgZHJvcDogZHJvcFxufTtcblxuX2V4dGVuZHMoUmV2ZXJ0LCB7XG4gIHBsdWdpbk5hbWU6ICdyZXZlcnRPblNwaWxsJ1xufSk7XG5cbmZ1bmN0aW9uIFJlbW92ZSgpIHt9XG5cblJlbW92ZS5wcm90b3R5cGUgPSB7XG4gIG9uU3BpbGw6IGZ1bmN0aW9uIG9uU3BpbGwoX3JlZjQpIHtcbiAgICB2YXIgZHJhZ0VsID0gX3JlZjQuZHJhZ0VsLFxuICAgICAgICBwdXRTb3J0YWJsZSA9IF9yZWY0LnB1dFNvcnRhYmxlO1xuICAgIHZhciBwYXJlbnRTb3J0YWJsZSA9IHB1dFNvcnRhYmxlIHx8IHRoaXMuc29ydGFibGU7XG4gICAgcGFyZW50U29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgZHJhZ0VsLnBhcmVudE5vZGUgJiYgZHJhZ0VsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZHJhZ0VsKTtcbiAgICBwYXJlbnRTb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gIH0sXG4gIGRyb3A6IGRyb3Bcbn07XG5cbl9leHRlbmRzKFJlbW92ZSwge1xuICBwbHVnaW5OYW1lOiAncmVtb3ZlT25TcGlsbCdcbn0pO1xuXG52YXIgbGFzdFN3YXBFbDtcblxuZnVuY3Rpb24gU3dhcFBsdWdpbigpIHtcbiAgZnVuY3Rpb24gU3dhcCgpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc3dhcENsYXNzOiAnc29ydGFibGUtc3dhcC1oaWdobGlnaHQnXG4gICAgfTtcbiAgfVxuXG4gIFN3YXAucHJvdG90eXBlID0ge1xuICAgIGRyYWdTdGFydDogZnVuY3Rpb24gZHJhZ1N0YXJ0KF9yZWYpIHtcbiAgICAgIHZhciBkcmFnRWwgPSBfcmVmLmRyYWdFbDtcbiAgICAgIGxhc3RTd2FwRWwgPSBkcmFnRWw7XG4gICAgfSxcbiAgICBkcmFnT3ZlclZhbGlkOiBmdW5jdGlvbiBkcmFnT3ZlclZhbGlkKF9yZWYyKSB7XG4gICAgICB2YXIgY29tcGxldGVkID0gX3JlZjIuY29tcGxldGVkLFxuICAgICAgICAgIHRhcmdldCA9IF9yZWYyLnRhcmdldCxcbiAgICAgICAgICBvbk1vdmUgPSBfcmVmMi5vbk1vdmUsXG4gICAgICAgICAgYWN0aXZlU29ydGFibGUgPSBfcmVmMi5hY3RpdmVTb3J0YWJsZSxcbiAgICAgICAgICBjaGFuZ2VkID0gX3JlZjIuY2hhbmdlZCxcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmMi5jYW5jZWw7XG4gICAgICBpZiAoIWFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuc3dhcCkgcmV0dXJuO1xuICAgICAgdmFyIGVsID0gdGhpcy5zb3J0YWJsZS5lbCxcbiAgICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgdmFyIHByZXZTd2FwRWwgPSBsYXN0U3dhcEVsO1xuXG4gICAgICAgIGlmIChvbk1vdmUodGFyZ2V0KSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB0b2dnbGVDbGFzcyh0YXJnZXQsIG9wdGlvbnMuc3dhcENsYXNzLCB0cnVlKTtcbiAgICAgICAgICBsYXN0U3dhcEVsID0gdGFyZ2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RTd2FwRWwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZTd2FwRWwgJiYgcHJldlN3YXBFbCAhPT0gbGFzdFN3YXBFbCkge1xuICAgICAgICAgIHRvZ2dsZUNsYXNzKHByZXZTd2FwRWwsIG9wdGlvbnMuc3dhcENsYXNzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hhbmdlZCgpO1xuICAgICAgY29tcGxldGVkKHRydWUpO1xuICAgICAgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBkcm9wOiBmdW5jdGlvbiBkcm9wKF9yZWYzKSB7XG4gICAgICB2YXIgYWN0aXZlU29ydGFibGUgPSBfcmVmMy5hY3RpdmVTb3J0YWJsZSxcbiAgICAgICAgICBwdXRTb3J0YWJsZSA9IF9yZWYzLnB1dFNvcnRhYmxlLFxuICAgICAgICAgIGRyYWdFbCA9IF9yZWYzLmRyYWdFbDtcbiAgICAgIHZhciB0b1NvcnRhYmxlID0gcHV0U29ydGFibGUgfHwgdGhpcy5zb3J0YWJsZTtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgbGFzdFN3YXBFbCAmJiB0b2dnbGVDbGFzcyhsYXN0U3dhcEVsLCBvcHRpb25zLnN3YXBDbGFzcywgZmFsc2UpO1xuXG4gICAgICBpZiAobGFzdFN3YXBFbCAmJiAob3B0aW9ucy5zd2FwIHx8IHB1dFNvcnRhYmxlICYmIHB1dFNvcnRhYmxlLm9wdGlvbnMuc3dhcCkpIHtcbiAgICAgICAgaWYgKGRyYWdFbCAhPT0gbGFzdFN3YXBFbCkge1xuICAgICAgICAgIHRvU29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgICAgICAgaWYgKHRvU29ydGFibGUgIT09IGFjdGl2ZVNvcnRhYmxlKSBhY3RpdmVTb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBzd2FwTm9kZXMoZHJhZ0VsLCBsYXN0U3dhcEVsKTtcbiAgICAgICAgICB0b1NvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgICAgICAgICBpZiAodG9Tb3J0YWJsZSAhPT0gYWN0aXZlU29ydGFibGUpIGFjdGl2ZVNvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbnVsbGluZzogZnVuY3Rpb24gbnVsbGluZygpIHtcbiAgICAgIGxhc3RTd2FwRWwgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKFN3YXAsIHtcbiAgICBwbHVnaW5OYW1lOiAnc3dhcCcsXG4gICAgZXZlbnRQcm9wZXJ0aWVzOiBmdW5jdGlvbiBldmVudFByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzd2FwSXRlbTogbGFzdFN3YXBFbFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzd2FwTm9kZXMobjEsIG4yKSB7XG4gIHZhciBwMSA9IG4xLnBhcmVudE5vZGUsXG4gICAgICBwMiA9IG4yLnBhcmVudE5vZGUsXG4gICAgICBpMSxcbiAgICAgIGkyO1xuICBpZiAoIXAxIHx8ICFwMiB8fCBwMS5pc0VxdWFsTm9kZShuMikgfHwgcDIuaXNFcXVhbE5vZGUobjEpKSByZXR1cm47XG4gIGkxID0gaW5kZXgobjEpO1xuICBpMiA9IGluZGV4KG4yKTtcblxuICBpZiAocDEuaXNFcXVhbE5vZGUocDIpICYmIGkxIDwgaTIpIHtcbiAgICBpMisrO1xuICB9XG5cbiAgcDEuaW5zZXJ0QmVmb3JlKG4yLCBwMS5jaGlsZHJlbltpMV0pO1xuICBwMi5pbnNlcnRCZWZvcmUobjEsIHAyLmNoaWxkcmVuW2kyXSk7XG59XG5cbnZhciBtdWx0aURyYWdFbGVtZW50cyA9IFtdLFxuICAgIG11bHRpRHJhZ0Nsb25lcyA9IFtdLFxuICAgIGxhc3RNdWx0aURyYWdTZWxlY3QsXG4gICAgLy8gZm9yIHNlbGVjdGlvbiB3aXRoIG1vZGlmaWVyIGtleSBkb3duIChTSElGVClcbm11bHRpRHJhZ1NvcnRhYmxlLFxuICAgIGluaXRpYWxGb2xkaW5nID0gZmFsc2UsXG4gICAgLy8gSW5pdGlhbCBtdWx0aS1kcmFnIGZvbGQgd2hlbiBkcmFnIHN0YXJ0ZWRcbmZvbGRpbmcgPSBmYWxzZSxcbiAgICAvLyBGb2xkaW5nIGFueSBvdGhlciB0aW1lXG5kcmFnU3RhcnRlZCA9IGZhbHNlLFxuICAgIGRyYWdFbCQxLFxuICAgIGNsb25lc0Zyb21SZWN0LFxuICAgIGNsb25lc0hpZGRlbjtcblxuZnVuY3Rpb24gTXVsdGlEcmFnUGx1Z2luKCkge1xuICBmdW5jdGlvbiBNdWx0aURyYWcoc29ydGFibGUpIHtcbiAgICAvLyBCaW5kIGFsbCBwcml2YXRlIG1ldGhvZHNcbiAgICBmb3IgKHZhciBmbiBpbiB0aGlzKSB7XG4gICAgICBpZiAoZm4uY2hhckF0KDApID09PSAnXycgJiYgdHlwZW9mIHRoaXNbZm5dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbZm5dID0gdGhpc1tmbl0uYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ydGFibGUub3B0aW9ucy5zdXBwb3J0UG9pbnRlcikge1xuICAgICAgb24oZG9jdW1lbnQsICdwb2ludGVydXAnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICAgIG9uKGRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgfVxuXG4gICAgb24oZG9jdW1lbnQsICdrZXlkb3duJywgdGhpcy5fY2hlY2tLZXlEb3duKTtcbiAgICBvbihkb2N1bWVudCwgJ2tleXVwJywgdGhpcy5fY2hlY2tLZXlVcCk7XG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIHNlbGVjdGVkQ2xhc3M6ICdzb3J0YWJsZS1zZWxlY3RlZCcsXG4gICAgICBtdWx0aURyYWdLZXk6IG51bGwsXG4gICAgICBzZXREYXRhOiBmdW5jdGlvbiBzZXREYXRhKGRhdGFUcmFuc2ZlciwgZHJhZ0VsKSB7XG4gICAgICAgIHZhciBkYXRhID0gJyc7XG5cbiAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCAmJiBtdWx0aURyYWdTb3J0YWJsZSA9PT0gc29ydGFibGUpIHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50LCBpKSB7XG4gICAgICAgICAgICBkYXRhICs9ICghaSA/ICcnIDogJywgJykgKyBtdWx0aURyYWdFbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGEgPSBkcmFnRWwudGV4dENvbnRlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgnVGV4dCcsIGRhdGEpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBNdWx0aURyYWcucHJvdG90eXBlID0ge1xuICAgIG11bHRpRHJhZ0tleURvd246IGZhbHNlLFxuICAgIGlzTXVsdGlEcmFnOiBmYWxzZSxcbiAgICBkZWxheVN0YXJ0R2xvYmFsOiBmdW5jdGlvbiBkZWxheVN0YXJ0R2xvYmFsKF9yZWYpIHtcbiAgICAgIHZhciBkcmFnZ2VkID0gX3JlZi5kcmFnRWw7XG4gICAgICBkcmFnRWwkMSA9IGRyYWdnZWQ7XG4gICAgfSxcbiAgICBkZWxheUVuZGVkOiBmdW5jdGlvbiBkZWxheUVuZGVkKCkge1xuICAgICAgdGhpcy5pc011bHRpRHJhZyA9IH5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGRyYWdFbCQxKTtcbiAgICB9LFxuICAgIHNldHVwQ2xvbmU6IGZ1bmN0aW9uIHNldHVwQ2xvbmUoX3JlZjIpIHtcbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWYyLnNvcnRhYmxlLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWYyLmNhbmNlbDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG11bHRpRHJhZ0Nsb25lcy5wdXNoKGNsb25lKG11bHRpRHJhZ0VsZW1lbnRzW2ldKSk7XG4gICAgICAgIG11bHRpRHJhZ0Nsb25lc1tpXS5zb3J0YWJsZUluZGV4ID0gbXVsdGlEcmFnRWxlbWVudHNbaV0uc29ydGFibGVJbmRleDtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzW2ldLmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgICBtdWx0aURyYWdDbG9uZXNbaV0uc3R5bGVbJ3dpbGwtY2hhbmdlJ10gPSAnJztcbiAgICAgICAgdG9nZ2xlQ2xhc3MobXVsdGlEcmFnQ2xvbmVzW2ldLCB0aGlzLm9wdGlvbnMuc2VsZWN0ZWRDbGFzcywgZmFsc2UpO1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50c1tpXSA9PT0gZHJhZ0VsJDEgJiYgdG9nZ2xlQ2xhc3MobXVsdGlEcmFnQ2xvbmVzW2ldLCB0aGlzLm9wdGlvbnMuY2hvc2VuQ2xhc3MsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgc29ydGFibGUuX2hpZGVDbG9uZSgpO1xuXG4gICAgICBjYW5jZWwoKTtcbiAgICB9LFxuICAgIGNsb25lOiBmdW5jdGlvbiBjbG9uZShfcmVmMykge1xuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjMuc29ydGFibGUsXG4gICAgICAgICAgcm9vdEVsID0gX3JlZjMucm9vdEVsLFxuICAgICAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCA9IF9yZWYzLmRpc3BhdGNoU29ydGFibGVFdmVudCxcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmMy5jYW5jZWw7XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcpIHJldHVybjtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUpIHtcbiAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCAmJiBtdWx0aURyYWdTb3J0YWJsZSA9PT0gc29ydGFibGUpIHtcbiAgICAgICAgICBpbnNlcnRNdWx0aURyYWdDbG9uZXModHJ1ZSwgcm9vdEVsKTtcbiAgICAgICAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQoJ2Nsb25lJyk7XG4gICAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3dDbG9uZTogZnVuY3Rpb24gc2hvd0Nsb25lKF9yZWY0KSB7XG4gICAgICB2YXIgY2xvbmVOb3dTaG93biA9IF9yZWY0LmNsb25lTm93U2hvd24sXG4gICAgICAgICAgcm9vdEVsID0gX3JlZjQucm9vdEVsLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWY0LmNhbmNlbDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuICAgICAgaW5zZXJ0TXVsdGlEcmFnQ2xvbmVzKGZhbHNlLCByb290RWwpO1xuICAgICAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgIGNzcyhjbG9uZSwgJ2Rpc3BsYXknLCAnJyk7XG4gICAgICB9KTtcbiAgICAgIGNsb25lTm93U2hvd24oKTtcbiAgICAgIGNsb25lc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBoaWRlQ2xvbmU6IGZ1bmN0aW9uIGhpZGVDbG9uZShfcmVmNSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjUuc29ydGFibGUsXG4gICAgICAgICAgY2xvbmVOb3dIaWRkZW4gPSBfcmVmNS5jbG9uZU5vd0hpZGRlbixcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmNS5jYW5jZWw7XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcpIHJldHVybjtcbiAgICAgIG11bHRpRHJhZ0Nsb25lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICBjc3MoY2xvbmUsICdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5yZW1vdmVDbG9uZU9uSGlkZSAmJiBjbG9uZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgY2xvbmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY2xvbmVOb3dIaWRkZW4oKTtcbiAgICAgIGNsb25lc0hpZGRlbiA9IHRydWU7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9LFxuICAgIGRyYWdTdGFydEdsb2JhbDogZnVuY3Rpb24gZHJhZ1N0YXJ0R2xvYmFsKF9yZWY2KSB7XG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmNi5zb3J0YWJsZTtcblxuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnICYmIG11bHRpRHJhZ1NvcnRhYmxlKSB7XG4gICAgICAgIG11bHRpRHJhZ1NvcnRhYmxlLm11bHRpRHJhZy5fZGVzZWxlY3RNdWx0aURyYWcoKTtcbiAgICAgIH1cblxuICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50LnNvcnRhYmxlSW5kZXggPSBpbmRleChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgIH0pOyAvLyBTb3J0IG11bHRpLWRyYWcgZWxlbWVudHNcblxuICAgICAgbXVsdGlEcmFnRWxlbWVudHMgPSBtdWx0aURyYWdFbGVtZW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhLnNvcnRhYmxlSW5kZXggLSBiLnNvcnRhYmxlSW5kZXg7XG4gICAgICB9KTtcbiAgICAgIGRyYWdTdGFydGVkID0gdHJ1ZTtcbiAgICB9LFxuICAgIGRyYWdTdGFydGVkOiBmdW5jdGlvbiBkcmFnU3RhcnRlZChfcmVmNykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWY3LnNvcnRhYmxlO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc29ydCkge1xuICAgICAgICAvLyBDYXB0dXJlIHJlY3RzLFxuICAgICAgICAvLyBoaWRlIG11bHRpIGRyYWcgZWxlbWVudHMgKGJ5IHBvc2l0aW9uaW5nIHRoZW0gYWJzb2x1dGUpLFxuICAgICAgICAvLyBzZXQgbXVsdGkgZHJhZyBlbGVtZW50cyByZWN0cyB0byBkcmFnUmVjdCxcbiAgICAgICAgLy8gc2hvdyBtdWx0aSBkcmFnIGVsZW1lbnRzLFxuICAgICAgICAvLyBhbmltYXRlIHRvIHJlY3RzLFxuICAgICAgICAvLyB1bnNldCByZWN0cyAmIHJlbW92ZSBmcm9tIERPTVxuICAgICAgICBzb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50ID09PSBkcmFnRWwkMSkgcmV0dXJuO1xuICAgICAgICAgICAgY3NzKG11bHRpRHJhZ0VsZW1lbnQsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBkcmFnUmVjdCA9IGdldFJlY3QoZHJhZ0VsJDEsIGZhbHNlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudCA9PT0gZHJhZ0VsJDEpIHJldHVybjtcbiAgICAgICAgICAgIHNldFJlY3QobXVsdGlEcmFnRWxlbWVudCwgZHJhZ1JlY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvbGRpbmcgPSB0cnVlO1xuICAgICAgICAgIGluaXRpYWxGb2xkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzb3J0YWJsZS5hbmltYXRlQWxsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9sZGluZyA9IGZhbHNlO1xuICAgICAgICBpbml0aWFsRm9sZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChfdGhpczIub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICB1bnNldFJlY3QobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gUmVtb3ZlIGFsbCBhdXhpbGlhcnkgbXVsdGlkcmFnIGl0ZW1zIGZyb20gZWwsIGlmIHNvcnRpbmcgZW5hYmxlZFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLnNvcnQpIHtcbiAgICAgICAgICByZW1vdmVNdWx0aURyYWdFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGRyYWdPdmVyOiBmdW5jdGlvbiBkcmFnT3ZlcihfcmVmOCkge1xuICAgICAgdmFyIHRhcmdldCA9IF9yZWY4LnRhcmdldCxcbiAgICAgICAgICBjb21wbGV0ZWQgPSBfcmVmOC5jb21wbGV0ZWQsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjguY2FuY2VsO1xuXG4gICAgICBpZiAoZm9sZGluZyAmJiB+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZih0YXJnZXQpKSB7XG4gICAgICAgIGNvbXBsZXRlZChmYWxzZSk7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmV2ZXJ0OiBmdW5jdGlvbiByZXZlcnQoX3JlZjkpIHtcbiAgICAgIHZhciBmcm9tU29ydGFibGUgPSBfcmVmOS5mcm9tU29ydGFibGUsXG4gICAgICAgICAgcm9vdEVsID0gX3JlZjkucm9vdEVsLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjkuc29ydGFibGUsXG4gICAgICAgICAgZHJhZ1JlY3QgPSBfcmVmOS5kcmFnUmVjdDtcblxuICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgLy8gU2V0dXAgdW5mb2xkIGFuaW1hdGlvblxuICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgc29ydGFibGUuYWRkQW5pbWF0aW9uU3RhdGUoe1xuICAgICAgICAgICAgdGFyZ2V0OiBtdWx0aURyYWdFbGVtZW50LFxuICAgICAgICAgICAgcmVjdDogZm9sZGluZyA/IGdldFJlY3QobXVsdGlEcmFnRWxlbWVudCkgOiBkcmFnUmVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVuc2V0UmVjdChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50LmZyb21SZWN0ID0gZHJhZ1JlY3Q7XG4gICAgICAgICAgZnJvbVNvcnRhYmxlLnJlbW92ZUFuaW1hdGlvblN0YXRlKG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9sZGluZyA9IGZhbHNlO1xuICAgICAgICBpbnNlcnRNdWx0aURyYWdFbGVtZW50cyghdGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlLCByb290RWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZHJhZ092ZXJDb21wbGV0ZWQ6IGZ1bmN0aW9uIGRyYWdPdmVyQ29tcGxldGVkKF9yZWYxMCkge1xuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjEwLnNvcnRhYmxlLFxuICAgICAgICAgIGlzT3duZXIgPSBfcmVmMTAuaXNPd25lcixcbiAgICAgICAgICBpbnNlcnRpb24gPSBfcmVmMTAuaW5zZXJ0aW9uLFxuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlID0gX3JlZjEwLmFjdGl2ZVNvcnRhYmxlLFxuICAgICAgICAgIHBhcmVudEVsID0gX3JlZjEwLnBhcmVudEVsLFxuICAgICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjEwLnB1dFNvcnRhYmxlO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmIChpbnNlcnRpb24pIHtcbiAgICAgICAgLy8gQ2xvbmVzIG11c3QgYmUgaGlkZGVuIGJlZm9yZSBmb2xkaW5nIGFuaW1hdGlvbiB0byBjYXB0dXJlIGRyYWdSZWN0QWJzb2x1dGUgcHJvcGVybHlcbiAgICAgICAgaWYgKGlzT3duZXIpIHtcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZS5faGlkZUNsb25lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0aWFsRm9sZGluZyA9IGZhbHNlOyAvLyBJZiBsZWF2aW5nIHNvcnQ6ZmFsc2Ugcm9vdCwgb3IgYWxyZWFkeSBmb2xkaW5nIC0gRm9sZCB0byBuZXcgbG9jYXRpb25cblxuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gJiYgbXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoID4gMSAmJiAoZm9sZGluZyB8fCAhaXNPd25lciAmJiAhYWN0aXZlU29ydGFibGUub3B0aW9ucy5zb3J0ICYmICFwdXRTb3J0YWJsZSkpIHtcbiAgICAgICAgICAvLyBGb2xkOiBTZXQgYWxsIG11bHRpIGRyYWcgZWxlbWVudHMncyByZWN0cyB0byBkcmFnRWwncyByZWN0IHdoZW4gbXVsdGktZHJhZyBlbGVtZW50cyBhcmUgaW52aXNpYmxlXG4gICAgICAgICAgdmFyIGRyYWdSZWN0QWJzb2x1dGUgPSBnZXRSZWN0KGRyYWdFbCQxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgPT09IGRyYWdFbCQxKSByZXR1cm47XG4gICAgICAgICAgICBzZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQsIGRyYWdSZWN0QWJzb2x1dGUpOyAvLyBNb3ZlIGVsZW1lbnQocykgdG8gZW5kIG9mIHBhcmVudEVsIHNvIHRoYXQgaXQgZG9lcyBub3QgaW50ZXJmZXJlIHdpdGggbXVsdGktZHJhZyBjbG9uZXMgaW5zZXJ0aW9uIGlmIHRoZXkgYXJlIGluc2VydGVkXG4gICAgICAgICAgICAvLyB3aGlsZSBmb2xkaW5nLCBhbmQgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGVtIGFnYWluIGJlY2F1c2Ugb2xkIHNvcnRhYmxlIHdpbGwgbm8gbG9uZ2VyIGJlIGZyb21Tb3J0YWJsZVxuXG4gICAgICAgICAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgICAgICAgfSAvLyBDbG9uZXMgbXVzdCBiZSBzaG93biAoYW5kIGNoZWNrIHRvIHJlbW92ZSBtdWx0aSBkcmFncykgYWZ0ZXIgZm9sZGluZyB3aGVuIGludGVyZmVyaW5nIG11bHRpRHJhZ0VsZW1lbnRzIGFyZSBtb3ZlZCBvdXRcblxuXG4gICAgICAgIGlmICghaXNPd25lcikge1xuICAgICAgICAgIC8vIE9ubHkgcmVtb3ZlIGlmIG5vdCBmb2xkaW5nIChmb2xkaW5nIHdpbGwgcmVtb3ZlIHRoZW0gYW55d2F5cylcbiAgICAgICAgICBpZiAoIWZvbGRpbmcpIHtcbiAgICAgICAgICAgIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBjbG9uZXNIaWRkZW5CZWZvcmUgPSBjbG9uZXNIaWRkZW47XG5cbiAgICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlLl9zaG93Q2xvbmUoc29ydGFibGUpOyAvLyBVbmZvbGQgYW5pbWF0aW9uIGZvciBjbG9uZXMgaWYgc2hvd2luZyBmcm9tIGhpZGRlblxuXG5cbiAgICAgICAgICAgIGlmIChhY3RpdmVTb3J0YWJsZS5vcHRpb25zLmFuaW1hdGlvbiAmJiAhY2xvbmVzSGlkZGVuICYmIGNsb25lc0hpZGRlbkJlZm9yZSkge1xuICAgICAgICAgICAgICBtdWx0aURyYWdDbG9uZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVTb3J0YWJsZS5hZGRBbmltYXRpb25TdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0YXJnZXQ6IGNsb25lLFxuICAgICAgICAgICAgICAgICAgcmVjdDogY2xvbmVzRnJvbVJlY3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjbG9uZS5mcm9tUmVjdCA9IGNsb25lc0Zyb21SZWN0O1xuICAgICAgICAgICAgICAgIGNsb25lLnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3RpdmVTb3J0YWJsZS5fc2hvd0Nsb25lKHNvcnRhYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRyYWdPdmVyQW5pbWF0aW9uQ2FwdHVyZTogZnVuY3Rpb24gZHJhZ092ZXJBbmltYXRpb25DYXB0dXJlKF9yZWYxMSkge1xuICAgICAgdmFyIGRyYWdSZWN0ID0gX3JlZjExLmRyYWdSZWN0LFxuICAgICAgICAgIGlzT3duZXIgPSBfcmVmMTEuaXNPd25lcixcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZSA9IF9yZWYxMS5hY3RpdmVTb3J0YWJsZTtcbiAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudC50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhY3RpdmVTb3J0YWJsZS5vcHRpb25zLmFuaW1hdGlvbiAmJiAhaXNPd25lciAmJiBhY3RpdmVTb3J0YWJsZS5tdWx0aURyYWcuaXNNdWx0aURyYWcpIHtcbiAgICAgICAgY2xvbmVzRnJvbVJlY3QgPSBfZXh0ZW5kcyh7fSwgZHJhZ1JlY3QpO1xuICAgICAgICB2YXIgZHJhZ01hdHJpeCA9IG1hdHJpeChkcmFnRWwkMSwgdHJ1ZSk7XG4gICAgICAgIGNsb25lc0Zyb21SZWN0LnRvcCAtPSBkcmFnTWF0cml4LmY7XG4gICAgICAgIGNsb25lc0Zyb21SZWN0LmxlZnQgLT0gZHJhZ01hdHJpeC5lO1xuICAgICAgfVxuICAgIH0sXG4gICAgZHJhZ092ZXJBbmltYXRpb25Db21wbGV0ZTogZnVuY3Rpb24gZHJhZ092ZXJBbmltYXRpb25Db21wbGV0ZSgpIHtcbiAgICAgIGlmIChmb2xkaW5nKSB7XG4gICAgICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRyb3A6IGZ1bmN0aW9uIGRyb3AoX3JlZjEyKSB7XG4gICAgICB2YXIgZXZ0ID0gX3JlZjEyLm9yaWdpbmFsRXZlbnQsXG4gICAgICAgICAgcm9vdEVsID0gX3JlZjEyLnJvb3RFbCxcbiAgICAgICAgICBwYXJlbnRFbCA9IF9yZWYxMi5wYXJlbnRFbCxcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWYxMi5zb3J0YWJsZSxcbiAgICAgICAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQgPSBfcmVmMTIuZGlzcGF0Y2hTb3J0YWJsZUV2ZW50LFxuICAgICAgICAgIG9sZEluZGV4ID0gX3JlZjEyLm9sZEluZGV4LFxuICAgICAgICAgIHB1dFNvcnRhYmxlID0gX3JlZjEyLnB1dFNvcnRhYmxlO1xuICAgICAgdmFyIHRvU29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCB0aGlzLnNvcnRhYmxlO1xuICAgICAgaWYgKCFldnQpIHJldHVybjtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICAgIGNoaWxkcmVuID0gcGFyZW50RWwuY2hpbGRyZW47IC8vIE11bHRpLWRyYWcgc2VsZWN0aW9uXG5cbiAgICAgIGlmICghZHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMubXVsdGlEcmFnS2V5ICYmICF0aGlzLm11bHRpRHJhZ0tleURvd24pIHtcbiAgICAgICAgICB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9nZ2xlQ2xhc3MoZHJhZ0VsJDEsIG9wdGlvbnMuc2VsZWN0ZWRDbGFzcywgIX5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGRyYWdFbCQxKSk7XG5cbiAgICAgICAgaWYgKCF+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihkcmFnRWwkMSkpIHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5wdXNoKGRyYWdFbCQxKTtcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZSxcbiAgICAgICAgICAgIHJvb3RFbDogcm9vdEVsLFxuICAgICAgICAgICAgbmFtZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB0YXJnZXRFbDogZHJhZ0VsJDEsXG4gICAgICAgICAgICBvcmlnaW5hbEV2dDogZXZ0XG4gICAgICAgICAgfSk7IC8vIE1vZGlmaWVyIGFjdGl2YXRlZCwgc2VsZWN0IGZyb20gbGFzdCB0byBkcmFnRWxcblxuICAgICAgICAgIGlmIChldnQuc2hpZnRLZXkgJiYgbGFzdE11bHRpRHJhZ1NlbGVjdCAmJiBzb3J0YWJsZS5lbC5jb250YWlucyhsYXN0TXVsdGlEcmFnU2VsZWN0KSkge1xuICAgICAgICAgICAgdmFyIGxhc3RJbmRleCA9IGluZGV4KGxhc3RNdWx0aURyYWdTZWxlY3QpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGluZGV4KGRyYWdFbCQxKTtcblxuICAgICAgICAgICAgaWYgKH5sYXN0SW5kZXggJiYgfmN1cnJlbnRJbmRleCAmJiBsYXN0SW5kZXggIT09IGN1cnJlbnRJbmRleCkge1xuICAgICAgICAgICAgICAvLyBNdXN0IGluY2x1ZGUgbGFzdE11bHRpRHJhZ1NlbGVjdCAoc2VsZWN0IGl0KSwgaW4gY2FzZSBtb2RpZmllZCBzZWxlY3Rpb24gZnJvbSBubyBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgLy8gKGJ1dCBwcmV2aW91cyBzZWxlY3Rpb24gZXhpc3RlZClcbiAgICAgICAgICAgICAgdmFyIG4sIGk7XG5cbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgIGkgPSBsYXN0SW5kZXg7XG4gICAgICAgICAgICAgICAgbiA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpID0gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIG4gPSBsYXN0SW5kZXggKyAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAofm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoY2hpbGRyZW5baV0pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhjaGlsZHJlbltpXSwgb3B0aW9ucy5zZWxlY3RlZENsYXNzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgIHJvb3RFbDogcm9vdEVsLFxuICAgICAgICAgICAgICAgICAgbmFtZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICB0YXJnZXRFbDogY2hpbGRyZW5baV0sXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2dDogZXZ0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdE11bHRpRHJhZ1NlbGVjdCA9IGRyYWdFbCQxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG11bHRpRHJhZ1NvcnRhYmxlID0gdG9Tb3J0YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5zcGxpY2UobXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihkcmFnRWwkMSksIDEpO1xuICAgICAgICAgIGxhc3RNdWx0aURyYWdTZWxlY3QgPSBudWxsO1xuICAgICAgICAgIGRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgICAgICAgcm9vdEVsOiByb290RWwsXG4gICAgICAgICAgICBuYW1lOiAnZGVzZWxlY3QnLFxuICAgICAgICAgICAgdGFyZ2V0RWw6IGRyYWdFbCQxLFxuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGV2dFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IC8vIE11bHRpLWRyYWcgZHJvcFxuXG5cbiAgICAgIGlmIChkcmFnU3RhcnRlZCAmJiB0aGlzLmlzTXVsdGlEcmFnKSB7XG4gICAgICAgIC8vIERvIG5vdCBcInVuZm9sZFwiIGFmdGVyIGFyb3VuZCBkcmFnRWwgaWYgcmV2ZXJ0ZWRcbiAgICAgICAgaWYgKChwYXJlbnRFbFtleHBhbmRvXS5vcHRpb25zLnNvcnQgfHwgcGFyZW50RWwgIT09IHJvb3RFbCkgJiYgbXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHZhciBkcmFnUmVjdCA9IGdldFJlY3QoZHJhZ0VsJDEpLFxuICAgICAgICAgICAgICBtdWx0aURyYWdJbmRleCA9IGluZGV4KGRyYWdFbCQxLCAnOm5vdCguJyArIHRoaXMub3B0aW9ucy5zZWxlY3RlZENsYXNzICsgJyknKTtcbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2xkaW5nICYmIG9wdGlvbnMuYW5pbWF0aW9uKSBkcmFnRWwkMS50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuICAgICAgICAgIHRvU29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG5cbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2xkaW5nKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgZHJhZ0VsJDEuZnJvbVJlY3QgPSBkcmFnUmVjdDtcbiAgICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnQudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50ICE9PSBkcmFnRWwkMSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmb2xkaW5nID8gZ2V0UmVjdChtdWx0aURyYWdFbGVtZW50KSA6IGRyYWdSZWN0O1xuICAgICAgICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudC5mcm9tUmVjdCA9IHJlY3Q7IC8vIFByZXBhcmUgdW5mb2xkIGFuaW1hdGlvblxuXG4gICAgICAgICAgICAgICAgICB0b1NvcnRhYmxlLmFkZEFuaW1hdGlvblN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBtdWx0aURyYWdFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICByZWN0OiByZWN0XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSAvLyBNdWx0aSBkcmFnIGVsZW1lbnRzIGFyZSBub3QgbmVjZXNzYXJpbHkgcmVtb3ZlZCBmcm9tIHRoZSBET00gb24gZHJvcCwgc28gdG8gcmVpbnNlcnRcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHRoZXkgbXVzdCBhbGwgYmUgcmVtb3ZlZFxuXG5cbiAgICAgICAgICAgIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCk7XG4gICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZHJlblttdWx0aURyYWdJbmRleF0pIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRFbC5pbnNlcnRCZWZvcmUobXVsdGlEcmFnRWxlbWVudCwgY2hpbGRyZW5bbXVsdGlEcmFnSW5kZXhdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG11bHRpRHJhZ0luZGV4Kys7XG4gICAgICAgICAgICB9KTsgLy8gSWYgaW5pdGlhbCBmb2xkaW5nIGlzIGRvbmUsIHRoZSBlbGVtZW50cyBtYXkgaGF2ZSBjaGFuZ2VkIHBvc2l0aW9uIGJlY2F1c2UgdGhleSBhcmUgbm93XG4gICAgICAgICAgICAvLyB1bmZvbGRpbmcgYXJvdW5kIGRyYWdFbCwgZXZlbiB0aG91Z2ggZHJhZ0VsIG1heSBub3QgaGF2ZSBoaXMgaW5kZXggY2hhbmdlZCwgc28gdXBkYXRlIGV2ZW50XG4gICAgICAgICAgICAvLyBtdXN0IGJlIGZpcmVkIGhlcmUgYXMgU29ydGFibGUgd2lsbCBub3QuXG5cbiAgICAgICAgICAgIGlmIChvbGRJbmRleCA9PT0gaW5kZXgoZHJhZ0VsJDEpKSB7XG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50LnNvcnRhYmxlSW5kZXggIT09IGluZGV4KG11bHRpRHJhZ0VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCgndXBkYXRlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIE11c3QgYmUgZG9uZSBhZnRlciBjYXB0dXJpbmcgaW5kaXZpZHVhbCByZWN0cyAoc2Nyb2xsIGJhcilcblxuXG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgdW5zZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRvU29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbXVsdGlEcmFnU29ydGFibGUgPSB0b1NvcnRhYmxlO1xuICAgICAgfSAvLyBSZW1vdmUgY2xvbmVzIGlmIG5lY2Vzc2FyeVxuXG5cbiAgICAgIGlmIChyb290RWwgPT09IHBhcmVudEVsIHx8IHB1dFNvcnRhYmxlICYmIHB1dFNvcnRhYmxlLmxhc3RQdXRNb2RlICE9PSAnY2xvbmUnKSB7XG4gICAgICAgIG11bHRpRHJhZ0Nsb25lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgIGNsb25lLnBhcmVudE5vZGUgJiYgY2xvbmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgbnVsbGluZ0dsb2JhbDogZnVuY3Rpb24gbnVsbGluZ0dsb2JhbCgpIHtcbiAgICAgIHRoaXMuaXNNdWx0aURyYWcgPSBkcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgbXVsdGlEcmFnQ2xvbmVzLmxlbmd0aCA9IDA7XG4gICAgfSxcbiAgICBkZXN0cm95R2xvYmFsOiBmdW5jdGlvbiBkZXN0cm95R2xvYmFsKCkge1xuICAgICAgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcoKTtcblxuICAgICAgb2ZmKGRvY3VtZW50LCAncG9pbnRlcnVwJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgICAgb2ZmKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgICAgb2ZmKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX2NoZWNrS2V5RG93bik7XG4gICAgICBvZmYoZG9jdW1lbnQsICdrZXl1cCcsIHRoaXMuX2NoZWNrS2V5VXApO1xuICAgIH0sXG4gICAgX2Rlc2VsZWN0TXVsdGlEcmFnOiBmdW5jdGlvbiBfZGVzZWxlY3RNdWx0aURyYWcoZXZ0KSB7XG4gICAgICBpZiAodHlwZW9mIGRyYWdTdGFydGVkICE9PSBcInVuZGVmaW5lZFwiICYmIGRyYWdTdGFydGVkKSByZXR1cm47IC8vIE9ubHkgZGVzZWxlY3QgaWYgc2VsZWN0aW9uIGlzIGluIHRoaXMgc29ydGFibGVcblxuICAgICAgaWYgKG11bHRpRHJhZ1NvcnRhYmxlICE9PSB0aGlzLnNvcnRhYmxlKSByZXR1cm47IC8vIE9ubHkgZGVzZWxlY3QgaWYgdGFyZ2V0IGlzIG5vdCBpdGVtIGluIHRoaXMgc29ydGFibGVcblxuICAgICAgaWYgKGV2dCAmJiBjbG9zZXN0KGV2dC50YXJnZXQsIHRoaXMub3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuc29ydGFibGUuZWwsIGZhbHNlKSkgcmV0dXJuOyAvLyBPbmx5IGRlc2VsZWN0IGlmIGxlZnQgY2xpY2tcblxuICAgICAgaWYgKGV2dCAmJiBldnQuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICAgIHdoaWxlIChtdWx0aURyYWdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGVsID0gbXVsdGlEcmFnRWxlbWVudHNbMF07XG4gICAgICAgIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLm9wdGlvbnMuc2VsZWN0ZWRDbGFzcywgZmFsc2UpO1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5zaGlmdCgpO1xuICAgICAgICBkaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICBzb3J0YWJsZTogdGhpcy5zb3J0YWJsZSxcbiAgICAgICAgICByb290RWw6IHRoaXMuc29ydGFibGUuZWwsXG4gICAgICAgICAgbmFtZTogJ2Rlc2VsZWN0JyxcbiAgICAgICAgICB0YXJnZXRFbDogZWwsXG4gICAgICAgICAgb3JpZ2luYWxFdnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9jaGVja0tleURvd246IGZ1bmN0aW9uIF9jaGVja0tleURvd24oZXZ0KSB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gdGhpcy5vcHRpb25zLm11bHRpRHJhZ0tleSkge1xuICAgICAgICB0aGlzLm11bHRpRHJhZ0tleURvd24gPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgX2NoZWNrS2V5VXA6IGZ1bmN0aW9uIF9jaGVja0tleVVwKGV2dCkge1xuICAgICAgaWYgKGV2dC5rZXkgPT09IHRoaXMub3B0aW9ucy5tdWx0aURyYWdLZXkpIHtcbiAgICAgICAgdGhpcy5tdWx0aURyYWdLZXlEb3duID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoTXVsdGlEcmFnLCB7XG4gICAgLy8gU3RhdGljIG1ldGhvZHMgJiBwcm9wZXJ0aWVzXG4gICAgcGx1Z2luTmFtZTogJ211bHRpRHJhZycsXG4gICAgdXRpbHM6IHtcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTZWxlY3RzIHRoZSBwcm92aWRlZCBtdWx0aS1kcmFnIGl0ZW1cclxuICAgICAgICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsICAgIFRoZSBlbGVtZW50IHRvIGJlIHNlbGVjdGVkXHJcbiAgICAgICAqL1xuICAgICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoZWwpIHtcbiAgICAgICAgdmFyIHNvcnRhYmxlID0gZWwucGFyZW50Tm9kZVtleHBhbmRvXTtcbiAgICAgICAgaWYgKCFzb3J0YWJsZSB8fCAhc29ydGFibGUub3B0aW9ucy5tdWx0aURyYWcgfHwgfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZWwpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKG11bHRpRHJhZ1NvcnRhYmxlICYmIG11bHRpRHJhZ1NvcnRhYmxlICE9PSBzb3J0YWJsZSkge1xuICAgICAgICAgIG11bHRpRHJhZ1NvcnRhYmxlLm11bHRpRHJhZy5fZGVzZWxlY3RNdWx0aURyYWcoKTtcblxuICAgICAgICAgIG11bHRpRHJhZ1NvcnRhYmxlID0gc29ydGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2dnbGVDbGFzcyhlbCwgc29ydGFibGUub3B0aW9ucy5zZWxlY3RlZENsYXNzLCB0cnVlKTtcbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMucHVzaChlbCk7XG4gICAgICB9LFxuXG4gICAgICAvKipcclxuICAgICAgICogRGVzZWxlY3RzIHRoZSBwcm92aWRlZCBtdWx0aS1kcmFnIGl0ZW1cclxuICAgICAgICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsICAgIFRoZSBlbGVtZW50IHRvIGJlIGRlc2VsZWN0ZWRcclxuICAgICAgICovXG4gICAgICBkZXNlbGVjdDogZnVuY3Rpb24gZGVzZWxlY3QoZWwpIHtcbiAgICAgICAgdmFyIHNvcnRhYmxlID0gZWwucGFyZW50Tm9kZVtleHBhbmRvXSxcbiAgICAgICAgICAgIGluZGV4ID0gbXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihlbCk7XG4gICAgICAgIGlmICghc29ydGFibGUgfHwgIXNvcnRhYmxlLm9wdGlvbnMubXVsdGlEcmFnIHx8ICF+aW5kZXgpIHJldHVybjtcbiAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHNvcnRhYmxlLm9wdGlvbnMuc2VsZWN0ZWRDbGFzcywgZmFsc2UpO1xuICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXZlbnRQcm9wZXJ0aWVzOiBmdW5jdGlvbiBldmVudFByb3BlcnRpZXMoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIG9sZEluZGljaWVzID0gW10sXG4gICAgICAgICAgbmV3SW5kaWNpZXMgPSBbXTtcbiAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgb2xkSW5kaWNpZXMucHVzaCh7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudDogbXVsdGlEcmFnRWxlbWVudCxcbiAgICAgICAgICBpbmRleDogbXVsdGlEcmFnRWxlbWVudC5zb3J0YWJsZUluZGV4XG4gICAgICAgIH0pOyAvLyBtdWx0aURyYWdFbGVtZW50cyB3aWxsIGFscmVhZHkgYmUgc29ydGVkIGlmIGZvbGRpbmdcblxuICAgICAgICB2YXIgbmV3SW5kZXg7XG5cbiAgICAgICAgaWYgKGZvbGRpbmcgJiYgbXVsdGlEcmFnRWxlbWVudCAhPT0gZHJhZ0VsJDEpIHtcbiAgICAgICAgICBuZXdJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKGZvbGRpbmcpIHtcbiAgICAgICAgICBuZXdJbmRleCA9IGluZGV4KG11bHRpRHJhZ0VsZW1lbnQsICc6bm90KC4nICsgX3RoaXMzLm9wdGlvbnMuc2VsZWN0ZWRDbGFzcyArICcpJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3SW5kZXggPSBpbmRleChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0luZGljaWVzLnB1c2goe1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnQ6IG11bHRpRHJhZ0VsZW1lbnQsXG4gICAgICAgICAgaW5kZXg6IG5ld0luZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogX3RvQ29uc3VtYWJsZUFycmF5KG11bHRpRHJhZ0VsZW1lbnRzKSxcbiAgICAgICAgY2xvbmVzOiBbXS5jb25jYXQobXVsdGlEcmFnQ2xvbmVzKSxcbiAgICAgICAgb2xkSW5kaWNpZXM6IG9sZEluZGljaWVzLFxuICAgICAgICBuZXdJbmRpY2llczogbmV3SW5kaWNpZXNcbiAgICAgIH07XG4gICAgfSxcbiAgICBvcHRpb25MaXN0ZW5lcnM6IHtcbiAgICAgIG11bHRpRHJhZ0tleTogZnVuY3Rpb24gbXVsdGlEcmFnS2V5KGtleSkge1xuICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoa2V5ID09PSAnY3RybCcpIHtcbiAgICAgICAgICBrZXkgPSAnQ29udHJvbCc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBrZXkgPSBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRNdWx0aURyYWdFbGVtZW50cyhjbG9uZXNJbnNlcnRlZCwgcm9vdEVsKSB7XG4gIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQsIGkpIHtcbiAgICB2YXIgdGFyZ2V0ID0gcm9vdEVsLmNoaWxkcmVuW211bHRpRHJhZ0VsZW1lbnQuc29ydGFibGVJbmRleCArIChjbG9uZXNJbnNlcnRlZCA/IE51bWJlcihpKSA6IDApXTtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUobXVsdGlEcmFnRWxlbWVudCwgdGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59XG4vKipcclxuICogSW5zZXJ0IG11bHRpLWRyYWcgY2xvbmVzXHJcbiAqIEBwYXJhbSAge1tCb29sZWFuXX0gZWxlbWVudHNJbnNlcnRlZCAgV2hldGhlciB0aGUgbXVsdGktZHJhZyBlbGVtZW50cyBhcmUgaW5zZXJ0ZWRcclxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IHJvb3RFbFxyXG4gKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRNdWx0aURyYWdDbG9uZXMoZWxlbWVudHNJbnNlcnRlZCwgcm9vdEVsKSB7XG4gIG11bHRpRHJhZ0Nsb25lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbG9uZSwgaSkge1xuICAgIHZhciB0YXJnZXQgPSByb290RWwuY2hpbGRyZW5bY2xvbmUuc29ydGFibGVJbmRleCArIChlbGVtZW50c0luc2VydGVkID8gTnVtYmVyKGkpIDogMCldO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShjbG9uZSwgdGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNdWx0aURyYWdFbGVtZW50cygpIHtcbiAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgIGlmIChtdWx0aURyYWdFbGVtZW50ID09PSBkcmFnRWwkMSkgcmV0dXJuO1xuICAgIG11bHRpRHJhZ0VsZW1lbnQucGFyZW50Tm9kZSAmJiBtdWx0aURyYWdFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobXVsdGlEcmFnRWxlbWVudCk7XG4gIH0pO1xufVxuXG5Tb3J0YWJsZS5tb3VudChuZXcgQXV0b1Njcm9sbFBsdWdpbigpKTtcblNvcnRhYmxlLm1vdW50KFJlbW92ZSwgUmV2ZXJ0KTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydGFibGU7XG5leHBvcnQgeyBNdWx0aURyYWdQbHVnaW4gYXMgTXVsdGlEcmFnLCBTb3J0YWJsZSwgU3dhcFBsdWdpbiBhcyBTd2FwIH07XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJvb2xlYW5DaGVja2JveCBleHRlbmRzIEJvb2xlYW4ge31cblxuVnVlLmNvbXBvbmVudChcInN2LWJvb2xlYW4tY2hlY2tib3hcIiwgQm9vbGVhbkNoZWNrYm94KTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcImNoZWNrYm94XCIsXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuQ2hlY2tib3g7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBCb29sZWFuU3dpdGNoIGV4dGVuZHMgQm9vbGVhbiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LWJvb2xlYW5cIiwgQm9vbGVhblN3aXRjaCk7XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2g7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQnV0dG9uR3JvdXAgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw+IHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuXG4gIGdldE1vZGVsKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbn1cbi8vIFZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktYnV0dG9uZ3JvdXBcIiwgQnV0dG9uR3JvdXApO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXA7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7XG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxuICBJdGVtVmFsdWUsXG4gIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwSXRlbSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuICBAUHJvcCgpIGluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBtb2RlbDogQnV0dG9uR3JvdXBJdGVtTW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEJ1dHRvbkdyb3VwSXRlbU1vZGVsKHRoaXMucXVlc3Rpb24sIHRoaXMuaXRlbSwgdGhpcy5pbmRleCk7XG4gIH1cbiAgZ2V0TW9kZWwoKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdi1idXR0b24tZ3JvdXAtaXRlbVwiLCBCdXR0b25Hcm91cEl0ZW0pO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXBJdGVtO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDaGVja2JveCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQ2hlY2tib3hNb2RlbD4ge1xuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNoZWNrYm94XCIsIENoZWNrYm94KTtcbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgSXRlbVZhbHVlLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ2hlY2tib3hJdGVtIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IGFueTtcbiAgQFByb3AoKSBpdGVtOiBJdGVtVmFsdWU7XG4gIEBQcm9wKCkgaW5kZXg6IGFueTtcbiAgQFByb3AoKSBoaWRlTGFiZWw6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIGdldCBpc0FsbFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzQWxsU2VsZWN0ZWQ7XG4gIH1cbiAgc2V0IGlzQWxsU2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5pc0FsbFNlbGVjdGVkID0gdmFsO1xuICB9XG4gIGdldExhYmVsQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyhpdGVtKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIENoZWNrYm94SXRlbSk7XG5leHBvcnQgZGVmYXVsdCBDaGVja2JveEl0ZW07XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDb21tZW50IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21tZW50TW9kZWw+IHtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNvbW1lbnRcIiwgQ29tbWVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1lbnQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xyXG5pbXBvcnQgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0udnVlXCI7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwgZXh0ZW5kcyBBY3Rpb25CYXJJdGVtVmlld01vZGVsIHt9XHJcblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIiwgQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsKTtcclxuZXhwb3J0IGRlZmF1bHQgQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsO1xyXG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi9iYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJJdGVtVmlld01vZGVsIGV4dGVuZHMgQmFzZVZ1ZSB7XHJcbiAgQFByb3AoKSBwdWJsaWMgaXRlbTogQWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlcjtcclxuXHJcbiAgZ2V0TW9kZWwoKTogQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtLnN0YXRlSXRlbTtcclxuICB9XHJcbn1cclxuXHJcblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIiwgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCk7XHJcbmV4cG9ydCBkZWZhdWx0IEFjdGlvbkJhckl0ZW1WaWV3TW9kZWw7XHJcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGl0ZW06IGFueTtcblxuICBwdWJsaWMgZ2V0IGlubmVyQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0uaW5uZXJDc3M7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsIEFjdGlvbkJhclNlcGFyYXRvclZpZXdNb2RlbCk7XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWw7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25CYXIsIElBY3Rpb25CYXJJdGVtIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0udnVlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWVcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlXCI7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJWaWV3TW9kZWwgZXh0ZW5kcyBWdWUge1xyXG4gIEBQcm9wKCkgaXRlbXM6IEFycmF5PElBY3Rpb25CYXJJdGVtPjtcclxuICBwcml2YXRlIG1vZGVsID0gbmV3IEFjdGlvbkJhcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLm1vZGVsLnNldEl0ZW1zKHRoaXMuaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdyYXBwZWRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLml0ZW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50TmFtZShpdGVtOiBhbnkpIHtcclxuICAgIHJldHVybiBpdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0l0ZW1zKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLm1vZGVsLml0ZW1zIHx8IFtdKS5sZW5ndGggPiAwO1xyXG4gIH1cclxufVxyXG5cclxuVnVlLmNvbXBvbmVudChcInN2LWFjdGlvbi1iYXJcIiwgQWN0aW9uQmFyVmlld01vZGVsKTtcclxuZXhwb3J0IGRlZmF1bHQgQWN0aW9uQmFyVmlld01vZGVsO1xyXG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInZ1ZS1jbGFzcy1jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRGVmYXVsdFRpdGxlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBhbnk7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIGdldCBzaG93SWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmlzRXhwYW5kZWQgfHwgdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNoYW5nZUV4cGFuZGVkKCkge1xuICAgIHRoaXMuZWxlbWVudC50b2dnbGVTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0SWNvbkNzcyhpc0NvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNzcy5xdWVzdGlvbi5pY29uO1xuICAgIGlmICghaXNDb2xsYXBzZWQpIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzLnF1ZXN0aW9uLmljb25FeHBhbmRlZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkO1xuXG4gICAgdGhpcy5lbGVtZW50LnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRoaXMuZWxlbWVudC5pc0NvbGxhcHNlZDtcbiAgICB9O1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdi1kZWZhdWx0LXRpdGxlXCIsIERlZmF1bHRUaXRsZSk7XG5leHBvcnQgZGVmYXVsdCBEZWZhdWx0VGl0bGU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBCYXNlVnVlIHtcclxuICBAUHJvcCgpIG1vZGVsOiBMaXN0TW9kZWw7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxufVxyXG5cclxuVnVlLmNvbXBvbmVudChcInN2LWxpc3RcIiwgTGlzdCk7XHJcbmV4cG9ydCBkZWZhdWx0IExpc3Q7XHJcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkJhckl0ZW1XcmFwcGVyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgQmFzZVZ1ZSBmcm9tIFwiLi4vLi4vLi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBwdWJsaWMgaXRlbTogQWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlcjtcblxuICBnZXQgcXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG5cbiAgZ2V0IHJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGEucm93O1xuICB9XG5cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3YtbWF0cml4LWRldGFpbC1idXR0b25cIiwgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24pO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQmFySXRlbVdyYXBwZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi8uLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBwdWJsaWMgaXRlbTogQWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlcjtcblxuICBnZXQgcXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG5cbiAgZ2V0IHJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGEucm93O1xuICB9XG5cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFxuICBcInN2LW1hdHJpeC1yZW1vdmUtYnV0dG9uXCIsXG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvblxuKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBQcm9wLCBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUG9wdXBCYXNlVmlld01vZGVsLCBQb3B1cE1vZGVsLCBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXIgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBtb2RlbDogUG9wdXBCYXNlVmlld01vZGVsO1xuICBwcml2YXRlIHByZXZJc1Zpc2libGU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjbGlja0luc2lkZShldmVudDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgb25VcGRhdGVkKCkge1xuICAgIGlmICghdGhpcy5wcmV2SXNWaXNpYmxlICYmIHRoaXMubW9kZWwuaXNWaXNpYmxlICYmICF0aGlzLm1vZGVsLmlzTW9kYWwpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlUG9zaXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2SXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc1Zpc2libGU7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBzaG93TW9kYWwoXG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgZGF0YTogYW55LFxuICBvbkFwcGx5OiAoKSA9PiB2b2lkLFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWRcbikge1xuICBjb25zdCBwb3B1cE1vZGVsID0gbmV3IFBvcHVwTW9kZWwoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIFwidG9wXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgZmFsc2UsXG4gICAgdHJ1ZSxcbiAgICBvbkNhbmNlbCxcbiAgICBvbkFwcGx5XG4gICk7XG4gIGNvbnN0IHBvcHVwVmlld01vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWwgPSBuZXcgUG9wdXBCYXNlVmlld01vZGVsKFxuICAgIHBvcHVwTW9kZWwsXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHBvcHVwVmlld01vZGVsLmluaXRpYWxpemVQb3B1cENvbnRhaW5lcigpO1xuICBjb25zdCBwb3B1cCA9IG5ldyBQb3B1cENvbnRhaW5lcih7XG4gICAgZWw6IHBvcHVwVmlld01vZGVsLmNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxcbiAgICBwcm9wc0RhdGE6IHsgbW9kZWw6IHBvcHVwVmlld01vZGVsIH0sXG4gIH0pO1xuICBwb3B1cE1vZGVsLm9uSGlkZSA9ICgpID0+IHtcbiAgICBwb3B1cC4kZGVzdHJveSgpO1xuICAgIHBvcHVwVmlld01vZGVsLmRlc3Ryb3lQb3B1cENvbnRhaW5lcigpO1xuICB9O1xuICBwb3B1cFZpZXdNb2RlbC5tb2RlbC5pc1Zpc2libGUgPSB0cnVlO1xufVxuc2V0dGluZ3Muc2hvd01vZGFsID0gc2hvd01vZGFsO1xuVnVlLmNvbXBvbmVudChcInN2LXBvcHVwLWNvbnRhaW5lclwiLCBQb3B1cENvbnRhaW5lcik7XG5leHBvcnQgZGVmYXVsdCBQb3B1cENvbnRhaW5lcjtcbiIsIlxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBQcm9wLCBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUG9wdXBCYXNlVmlld01vZGVsLCBQb3B1cE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQb3B1cENvbnRhaW5lciB9IGZyb20gXCIuL3BvcHVwLWNvbnRhaW5lci52dWVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFBvcHVwIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgbW9kZWw6IFBvcHVwTW9kZWw7XG4gIEBQcm9wKCkgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgcG9wdXBDb250YWluZXI6IGFueTtcbiAgcHJpdmF0ZSBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgb25Nb3VudGVkKCkge1xuICAgIHRoaXMucG9wdXBWaWV3TW9kZWwgPSBuZXcgUG9wdXBCYXNlVmlld01vZGVsKFxuICAgICAgdGhpcy5tb2RlbCxcbiAgICAgIHRoaXMuJGVsLnBhcmVudEVsZW1lbnRcbiAgICApO1xuICAgIHRoaXMucG9wdXBWaWV3TW9kZWwuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gICAgdGhpcy5wb3B1cENvbnRhaW5lciA9IG5ldyBQb3B1cENvbnRhaW5lcih7XG4gICAgICBlbDogdGhpcy5wb3B1cFZpZXdNb2RlbC5jb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgICAgICksXG4gICAgICBwcm9wc0RhdGE6IHsgbW9kZWw6IHRoaXMucG9wdXBWaWV3TW9kZWwgfSxcbiAgICB9KTtcbiAgfVxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy5wb3B1cENvbnRhaW5lci4kZGVzdHJveSgpO1xuICAgIHRoaXMucG9wdXBWaWV3TW9kZWwuZGVzdHJveVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1wb3B1cFwiLCBQb3B1cCk7XG5leHBvcnQgZGVmYXVsdCBQb3B1cDtcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN2Z0ljb24gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKVxuICBzaXplOiBudW1iZXI7XG4gIEBQcm9wKClcbiAgd2lkdGg6IG51bWJlcjtcbiAgQFByb3AoKVxuICBoZWlnaHQ6IG51bWJlcjtcbiAgQFByb3AoKSBpY29uTmFtZTogc3RyaW5nO1xuICBzdmdJY29uRWxlbWVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgQFdhdGNoKFwic2l6ZVwiKVxuICBvblNpemVQcm9wZXJ0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgfVxuICBAV2F0Y2goXCJ3aWR0aFwiKVxuICBvbldpZHRoUHJvcGVydHlDaGFuZ2VkKCkge1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbiAgQFdhdGNoKFwiaGVpZ2h0XCIpXG4gIG9uSGVpZ2h0UHJvcGVydHlDaGFuZ2VkKCkge1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbiAgQFdhdGNoKFwiaWNvbk5hbWVcIilcbiAgb25JY29uTmFtZVByb3BlcnR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG5cbiAgb25VcGRhdGVkKCkge1xuICAgIGNyZWF0ZVN2ZyhcbiAgICAgIHRoaXMuc2l6ZSxcbiAgICAgIHRoaXMud2lkdGgsXG4gICAgICB0aGlzLmhlaWdodCxcbiAgICAgIHRoaXMuaWNvbk5hbWUsXG4gICAgICB0aGlzLnN2Z0ljb25FbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIG9uTW91bnRlZCgpIHtcbiAgICB0aGlzLnN2Z0ljb25FbGVtZW50ID0gdGhpcy4kcmVmc1tcInN2Z0ljb25cIl07XG4gICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3Ytc3ZnLWljb25cIiwgU3ZnSWNvbik7XG5cbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBJU3VydmV5RWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50O1xuICBAUHJvcCgpIGNzczogYW55O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldFRpdGxlQWN0aW9ucygpO1xuICB9XG59XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImVsZW1lbnRcIixcbiAgXCJ0aXRsZS1hY3Rpb25zXCIsXG4gIFwic3YtdGl0bGUtYWN0aW9uc1wiXG4pO1xuXG5WdWUuY29tcG9uZW50KFwic3YtdGl0bGUtYWN0aW9uc1wiLCBUaXRsZUFjdGlvbnMpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVBY3Rpb25zO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBnZXQgY29udGVudFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jb21wb3NpdGVcIiwgQ29tcG9zaXRlKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DdXN0b21Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ3VzdG9tIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBnZXQgY29udGVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jdXN0b21cIiwgQ3VzdG9tKTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlLCB7IENvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBnZXQgaGFzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyIHx8IHRoaXMuaGFzVnVlQ29tcG9uZW50O1xuICB9XG4gIGdldCBoYXNIdG1sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgZ2V0IGN1c3RvbUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlO1xuICB9XG4gIGdldCBoYXNWdWVDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSAoPGFueT5WdWUpW1wib3B0aW9uc1wiXTtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgb3B0aW9ucy5jb21wb25lbnRzICYmIG9wdGlvbnMuY29tcG9uZW50c1t0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lXVxuICAgICk7XG4gIH1cbiAgZ2V0IGNvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNWdWVDb21wb25lbnQpIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lO1xuICAgIHJldHVybiBcInN1cnZleS1cIiArIHRoaXMucXVlc3Rpb24uZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgfVxuICB1cGRhdGVkKCkge1xuICAgIC8vdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWN1c3RvbXdpZGdldFwiLCBDdXN0b21XaWRnZXQpO1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21XaWRnZXQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBEcmFnRHJvcFREIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xufVxuVnVlLmNvbXBvbmVudChcImRyYWctZHJvcC10ZFwiLCBEcmFnRHJvcFREKTtcbmV4cG9ydCBkZWZhdWx0IERyYWdEcm9wVEQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkRyb3Bkb3duTW9kZWw+IHtcbiAgZ2V0IGlzT3RoZXJTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1kcm9wZG93blwiLCBEcm9wZG93bik7XG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElFbGVtZW50IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRWdWUgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGNzczogYW55O1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgZWxlbWVudDogSUVsZW1lbnQ7XG4gIGdldENvbXBvbmVudE5hbWUoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudC5jdXN0b21XaWRnZXQpIHJldHVybiBcInN1cnZleS1jdXN0b213aWRnZXRcIjtcbiAgICBpZiAoZWxlbWVudC5nZXRUeXBlKCkgPT09IFwicGFuZWxcIiB8fCBlbGVtZW50LmlzRGVmYXVsdFJlbmRlcmluZygpKSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktXCIgKyBlbGVtZW50LmdldFRlbXBsYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LmdldENvbXBvbmVudE5hbWUoKTtcbiAgfVxuICBnZXRSb290Q2xhc3MoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBsZXQgY3NzUm9vdCA9IGVsZW1lbnQuY3NzUm9vdDtcbiAgICBpZiAoZWxlbWVudC5pc1JlYWRPbmx5KSB7XG4gICAgICBjc3NSb290ICs9IFwiIFwiICsgKDxhbnk+dGhpcy5lbGVtZW50KS5jc3NDbGFzc2VzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHJldHVybiBjc3NSb290O1xuICB9XG4gIGdldENvbnRlbnRDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc0NvbnRlbnQ7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiAhdGhpcy5lbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPbkJvdHRvbSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA9PT0gXCJib3R0b21cIlxuICAgICk7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICAoPFF1ZXN0aW9uPnRoaXMuZWxlbWVudCkuYWZ0ZXJSZW5kZXIodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbGVtZW50XCIsIFN1cnZleUVsZW1lbnRWdWUpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5RWxlbWVudFZ1ZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElFbGVtZW50IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRWxlbWVudEhlYWRlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogSUVsZW1lbnQ7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVsZW1lbnQuc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICB9XG5cbiAgZ2V0VGl0bGVDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc1RpdGxlO1xuICB9XG4gIGdldEhlYWRlckNsYXNzKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY3NzSGVhZGVyO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIEVsZW1lbnRIZWFkZXIpO1xuZXhwb3J0IGRlZmF1bHQgRWxlbWVudEhlYWRlcjtcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25FbXB0eU1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbXB0eVwiLCBFbXB0eSk7XG5leHBvcnQgZGVmYXVsdCBFbXB0eTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRXJyb3JzIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wKCkgbG9jYXRpb246IFN0cmluZztcblxuICBnZXQgY2xhc3NlcygpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgPyBxdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLnJvb3RcbiAgICAgIDogXCJwYW5lbC1lcnJvci1yb290XCI7XG5cbiAgICB2YXIgYWRkaXRpb25hbENsYXNzZXMgPSBcIlwiO1xuXG4gICAgaWYgKHRoaXMubG9jYXRpb24gPT09IFwidG9wXCIpIHtcbiAgICAgIGFkZGl0aW9uYWxDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvblRvcDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIGFkZGl0aW9uYWxDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvbkJvdHRvbTtcbiAgICB9XG5cbiAgICBpZiAoYWRkaXRpb25hbENsYXNzZXMpIGNsYXNzZXMgKz0gXCIgXCIgKyBhZGRpdGlvbmFsQ2xhc3NlcztcblxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVycm9yc1wiLCBFcnJvcnMpO1xuZXhwb3J0IGRlZmF1bHQgRXJyb3JzO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbD4ge31cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZXhwcmVzc2lvblwiLCBFeHByZXNzaW9uKTtcbmV4cG9ydCBkZWZhdWx0IEV4cHJlc3Npb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmlsZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBjb25maXJtQWN0aW9uLCBkZXRlY3RJRU9yRWRnZSwgbG9hZEZpbGVGcm9tQmFzZTY0IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRmlsZSBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uRmlsZU1vZGVsPiB7XG4gIG9uRHJhZ092ZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJjb3B5XCI7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcbiAgb25Ecm9wID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCBzcmMgPSBldmVudC5kYXRhVHJhbnNmZXI7XG4gICAgdGhpcy5vbkNoYW5nZShzcmMpO1xuICB9O1xuICBkb0NoYW5nZShldmVudDogYW55KSB7XG4gICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgIHRoaXMub25DaGFuZ2Uoc3JjKTtcbiAgfVxuICBkb0NsZWFuKGV2ZW50OiBhbnkpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBzcmMgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgICBpZiAocXVlc3Rpb24ubmVlZENvbmZpcm1SZW1vdmVGaWxlKSB7XG4gICAgICB2YXIgaXNDb25maXJtZWQgPSBjb25maXJtQWN0aW9uKHF1ZXN0aW9uLmNvbmZpcm1SZW1vdmVBbGxNZXNzYWdlKTtcbiAgICAgIGlmICghaXNDb25maXJtZWQpIHJldHVybjtcbiAgICB9XG4gICAgcXVlc3Rpb24uY2xlYXIoKTtcbiAgICBzcmMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIilbMF0udmFsdWUgPSBcIlwiO1xuICB9XG4gIGRvUmVtb3ZlRmlsZShkYXRhOiBhbnkpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIGlmIChxdWVzdGlvbi5uZWVkQ29uZmlybVJlbW92ZUZpbGUpIHtcbiAgICAgIHZhciBpc0NvbmZpcm1lZCA9IGNvbmZpcm1BY3Rpb24oXG4gICAgICAgIHF1ZXN0aW9uLmdldENvbmZpcm1SZW1vdmVNZXNzYWdlKGRhdGEubmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAoIWlzQ29uZmlybWVkKSByZXR1cm47XG4gICAgfVxuICAgIHF1ZXN0aW9uLnJlbW92ZUZpbGUoZGF0YSk7XG4gIH1cbiAgZG9Eb3dubG9hZEZpbGUoZXZlbnQ6IGFueSwgZGF0YTogYW55KSB7XG4gICAgaWYgKGRldGVjdElFT3JFZGdlKCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsb2FkRmlsZUZyb21CYXNlNjQoZGF0YS5jb250ZW50LCBkYXRhLm5hbWUpO1xuICAgIH1cbiAgfVxuICBnZXRQbGFjZWhvbGRlckNsYXNzKCkge1xuICAgIHJldHVybiBcImZvcm0tY29udHJvbCBcIiArIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wbGFjZWhvbGRlcklucHV0O1xuICB9XG4gIHByaXZhdGUgb25DaGFuZ2Uoc3JjOiBhbnkpIHtcbiAgICBpZiAoISg8YW55PndpbmRvdylbXCJGaWxlUmVhZGVyXCJdKSByZXR1cm47XG4gICAgaWYgKCFzcmMgfHwgIXNyYy5maWxlcyB8fCBzcmMuZmlsZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgIGxldCBmaWxlcyA9IFtdO1xuICAgIGxldCBhbGxvd0NvdW50ID0gdGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlID8gc3JjLmZpbGVzLmxlbmd0aCA6IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxvd0NvdW50OyBpKyspIHtcbiAgICAgIGZpbGVzLnB1c2goc3JjLmZpbGVzW2ldKTtcbiAgICB9XG4gICAgc3JjLnZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvYWRGaWxlcyhmaWxlcyk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZmlsZVwiLCBGaWxlKTtcbmV4cG9ydCBkZWZhdWx0IEZpbGU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSVN1cnZleSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEZsb3dQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBGbG93UGFuZWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBGbG93UGFuZWxNb2RlbDtcbiAgQFByb3AoKSBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBwcml2YXRlIGlzQ29sbGFwc2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByb290Tm9kZVZhbHVlOiBOb2RlO1xuXG4gIGdldCByb290Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZVZhbHVlO1xuICB9XG4gIGJlZm9yZU1vdW50KCkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnF1ZXN0aW9uLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IHNlbGYucmVuZGVyUXVlc3Rpb247XG4gICAgdGhpcy5zZXRSb290Tm9kZSgpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRSb290Tm9kZSgpIHtcbiAgICBsZXQgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLnF1ZXN0aW9uLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBsZXQgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucm9vdE5vZGVWYWx1ZSA9XG4gICAgICAhIWRvYyAmJiBkb2MuY2hpbGROb2Rlcy5sZW5ndGggPiAwID8gZG9jLmNoaWxkTm9kZXNbMF0gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjxxdWVzdGlvbj5cIiArIHF1ZXN0aW9uLm5hbWUgKyBcIjwvcXVlc3Rpb24+XCI7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic3RhdGVcIixcbiAgICAgIGZ1bmN0aW9uICh2YWw6IGFueSkge1xuICAgICAgICBzZWxmLmlzQ29sbGFwc2VkID0gc2VsZi5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGdldCByb290U3R5bGUoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoKSB7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleEJhc2lzXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4R3Jvd1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleFNocmlua1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1pbldpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5taW5XaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJtYXhXaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWF4V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0IHNob3dJY29uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmICh0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZClcbiAgICApO1xuICB9XG4gIGdldCByb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gIH1cbiAgZ2V0IGljb25Dc3MoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFwic3ZfcGFuZWxfaWNvblwiO1xuICAgIGlmICghdGhpcy5pc0NvbGxhcHNlZCkgcmVzdWx0ICs9IFwiIHN2X2V4cGFuZGVkXCI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG4gIGNoYW5nZUV4cGFuZGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkIHx8IHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCkge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5leHBhbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29sbGFwc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0VGl0bGVTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jc3MucGFuZWwudGl0bGU7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0V4cGFuZGVkKSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzcy5wYW5lbC50aXRsZUV4cGFuZGFibGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1mbG93cGFuZWxcIiwgRmxvd1BhbmVsKTtcbmV4cG9ydCBkZWZhdWx0IEZsb3dQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEZsb3dQYW5lbEVsZW1lbnQgZXh0ZW5kcyBWdWUge1xuICBzdGF0aWMgaWRWYWx1ZTogbnVtYmVyO1xuICBAUHJvcCgpIG5vZGU6IE5vZGU7XG4gIEBQcm9wKCkgcGFuZWw6IEZsb3dQYW5lbE1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBwcml2YXRlIGVsZW1lbnRJZFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb24gPSBudWxsO1xuICBwdWJsaWMgdGFnTmFtZTogc3RyaW5nID0gXCJzcGFuXCI7XG4gIHB1YmxpYyBub2RlczogQXJyYXk8Tm9kZT4gPSBbXTtcbiAgcHVibGljIHRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzdHlsZTogYW55ID0ge307XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiaVwiKSB7XG4gICAgICBzdHlsZS5mb250U3R5bGUgPSBcIml0YWxpY1wiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1XCIpIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIHB1YmxpYyBnZXQgZWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRJZFZhbHVlKSB7XG4gICAgICBpZiAoIUZsb3dQYW5lbEVsZW1lbnQuaWRWYWx1ZSkge1xuICAgICAgICBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlKys7XG4gICAgICB0aGlzLmVsZW1lbnRJZFZhbHVlID0gXCJmcF9lbFwiICsgRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50SWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIDxTdXJ2ZXlNb2RlbD50aGlzLnBhbmVsLnN1cnZleTtcbiAgfVxuICBiZWZvcmVNb3VudCgpIHtcbiAgICBpZiAoIXRoaXMucGFuZWwgfHwgIXRoaXMubm9kZSkgcmV0dXJuO1xuICAgIHZhciBub2RlVHlwZSA9IHRoaXMubm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghdGhpcy5oYXNUZXh0Q2hpbGROb2Rlc09ubHkodGhpcy5ub2RlKSkge1xuICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuZ2V0Q2hpbGREb21Ob2Rlcyh0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZVR5cGUgPT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSB0aGlzLnBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKHRoaXMubm9kZS50ZXh0Q29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLm5vZGUudGV4dENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlVHlwZSA9PSBcImRpdlwiICYmICF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnRhZ05hbWUgPSBcImRpdlwiO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5nZXRTdHlsZShub2RlVHlwZSk7XG4gIH1cbiAgLy9kdXBsaWNhdGVkIGNvZGUgZnJvbSBlbGVtZW50LnZ1ZVxuICBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICAvLyBkdXBsaWNhdGVkIGNvZGUgZnJvbSByZWFjdHBhZ2VzLnRzeFxuICBwcml2YXRlIGhhc1RleHRDaGlsZE5vZGVzT25seShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgdmFyIG5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2Rlc1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDaGlsZERvbU5vZGVzKG5vZGU6IE5vZGUpOiBBcnJheTxOb2RlPiB7XG4gICAgdmFyIGRvbU5vZGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZmxvd3BhbmVsZWxlbWVudFwiLCBGbG93UGFuZWxFbGVtZW50KTtcbmV4cG9ydCBkZWZhdWx0IEZsb3dQYW5lbEVsZW1lbnQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgYXMgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5SGVhZGVyIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuXG4gIG1vdW50ZWQoKSB7XG4gICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5kb0FmdGVyUmVuZGVySGVhZGVyKGVsKTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LWhlYWRlclwiLCBTdXJ2ZXlIZWFkZXIpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5SGVhZGVyO1xuIiwiXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBIdG1sIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25IdG1sTW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWh0bWxcIiwgSHRtbCk7XG5leHBvcnQgZGVmYXVsdCBIdG1sO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaW1hZ2VcIiwgUXVlc3Rpb25JbWFnZSk7XG5leHBvcnQgZGVmYXVsdCBRdWVzdGlvbkltYWdlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgSW1hZ2VQaWNrZXIgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw+IHtcbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1pbWFnZXBpY2tlclwiLCBJbWFnZVBpY2tlcik7XG5leHBvcnQgZGVmYXVsdCBJbWFnZVBpY2tlcjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNYXRyaXggZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeE1vZGVsPiB7XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkpIHJldHVybjtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4XCIsIE1hdHJpeCk7XG5leHBvcnQgZGVmYXVsdCBNYXRyaXg7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNYXRyaXhDZWxsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wKCkgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbDtcblxuICBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIGlmIChlbGVtZW50LmN1c3RvbVdpZGdldCkge1xuICAgICAgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdXJ2ZXktXCIgKyBlbGVtZW50LmdldFR5cGUoKTtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5zaG93RXJyb3JPblRvcDtcbiAgfVxuICBnZXQgaGFzRXJyb3JzT25Cb3R0b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5zaG93RXJyb3JPbkJvdHRvbTtcbiAgfVxuICBnZXRIZWFkZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5oZWFkZXJzO1xuICB9XG4gIGdldENlbGxTdHlsZSgpIHtcbiAgICBpZiAoISF0aGlzLmNlbGwud2lkdGggfHwgISF0aGlzLmNlbGwubWluV2lkdGgpXG4gICAgICByZXR1cm4geyB3aWR0aDogdGhpcy5jZWxsLndpZHRoLCBtaW5XaWR0aDogdGhpcy5jZWxsLm1pbldpZHRoIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMuY2VsbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlO1xuICAgIHZhciBhbGxvd0hvdmVyID0gIWlzRGlzYWJsZWQgJiYgIWlzQ2hlY2tlZDtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBpZiAoYWxsb3dIb3ZlcikgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5jZWxsLmhhc1F1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLnN1cnZleSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jZWxsLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJpc1Zpc2libGVcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbC5jZWxsLFxuICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLmNlbGwucXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogdGhpcy4kZWwsXG4gICAgICByb3c6IHRoaXMuY2VsbC5yb3csXG4gICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uc3VydmV5Lm1hdHJpeEFmdGVyQ2VsbFJlbmRlcih0aGlzLnF1ZXN0aW9uLCBvcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIG9uVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNWaXNpYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCBNYXRyaXhDZWxsKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeENlbGw7XG4iLCJcblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWw+IHt9XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHJvcGRvd25cIiwgTWF0cml4RHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4RHJvcGRvd247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE1hdHJpeER5bmFtaWMgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbD4ge1xuICBhZGRSb3dDbGljaygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmFkZFJvdygpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeGR5bmFtaWNcIiwgTWF0cml4RHluYW1pYyk7XG5leHBvcnQgZGVmYXVsdCBNYXRyaXhEeW5hbWljO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNYXRyaXhUYWJsZSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICBnZXQgdGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXh0YWJsZVwiLCBNYXRyaXhUYWJsZSk7XG5leHBvcnQgZGVmYXVsdCBNYXRyaXhUYWJsZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE11bHRpcGxlVGV4dCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWw+IHtcbiAgZ2V0Q29tcG9uZW50TmFtZShxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAocXVlc3Rpb24uY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS10ZXh0XCI7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbXVsdGlwbGV0ZXh0XCIsIE11bHRpcGxlVGV4dCk7XG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZVRleHQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgQmFzZSwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbiBleHRlbmRzIEJhc2VWdWUge1xuICBwcml2YXRlIG1vdXNlRG93blBhZ2U6IFBhZ2VNb2RlbDtcbiAgc2hvd1ByZXZCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93TmV4dEJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dDb21wbGV0ZUJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBAV2F0Y2goXCJzdXJ2ZXlcIilcbiAgb25Qcm9wZXJ0eUNoYW5nZWQodmFsdWU6IHN0cmluZywgb2xkVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub25DcmVhdGVkKCk7XG4gICAgdGhpcy51cGRhdGVTaG93QnV0dG9ucygpO1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkub25DdXJyZW50UGFnZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU2hvd0J1dHRvbnMoKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVNob3dCdXR0b25zKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTaG93QnV0dG9ucygpIHtcbiAgICB0aGlzLnNob3dQcmV2QnRuID0gIXRoaXMuc3VydmV5LmlzRmlyc3RQYWdlICYmIHRoaXMuc3VydmV5LmlzU2hvd1ByZXZCdXR0b247XG4gICAgdGhpcy5zaG93TmV4dEJ0biA9ICF0aGlzLnN1cnZleS5pc0xhc3RQYWdlO1xuICAgIHRoaXMuc2hvd0NvbXBsZXRlQnRuID0gdGhpcy5zdXJ2ZXkuaXNMYXN0UGFnZTtcbiAgfVxuICBuZXh0QnV0dG9uTW91c2VEb3duKCkge1xuICAgIHRoaXMubW91c2VEb3duUGFnZSA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5uYXZpZ2F0aW9uTW91c2VEb3duKCk7XG4gIH1cbiAgYnV0dG9uTW91c2VEb3duKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5uYXZpZ2F0aW9uTW91c2VEb3duKCk7XG4gIH1cbiAgcHJldlBhZ2UoKSB7XG4gICAgdGhpcy5zdXJ2ZXkucHJldlBhZ2UoKTtcbiAgfVxuICBuZXh0UGFnZSgpIHtcbiAgICBpZiAoISF0aGlzLm1vdXNlRG93blBhZ2UgJiYgdGhpcy5tb3VzZURvd25QYWdlICE9PSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm1vdXNlRG93blBhZ2UgPSBudWxsO1xuICAgIHRoaXMuc3VydmV5Lm5leHRQYWdlKCk7XG4gIH1cbiAgY29tcGxldGVMYXN0UGFnZSgpIHtcbiAgICB0aGlzLnN1cnZleS5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gIH1cbiAgc2hvd1ByZXZpZXcoKSB7XG4gICAgdGhpcy5zdXJ2ZXkuc2hvd1ByZXZpZXcoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1uYXZpZ2F0aW9uXCIsIE5hdmlnYXRpb24pO1xuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE90aGVyQ2hvaWNlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wKCkgY29tbWVudENsYXNzOiBhbnk7XG4gIGNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jb21tZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNTdXJ2ZXlJbnB1dFRleHRVcGRhdGUpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uLmNvbW1lbnQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIE90aGVyQ2hvaWNlKTtcbmV4cG9ydCBkZWZhdWx0IE90aGVyQ2hvaWNlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYWdlIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBwYWdlOiBQYWdlTW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBPYmplY3Q7XG5cbiAgaXNDdXJyZW50UGFnZUNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQFdhdGNoKFwicGFnZVwiKVxuICBvblBhZ2VQcm9wZXJ0eUNoYW5nZWQodmFsdWU6IHN0cmluZywgb2xkVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlO1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhZ2UodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25VcGRhdGVkKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLnN1cnZleS5hZnRlclJlbmRlclBhZ2UodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5pc0N1cnJlbnRQYWdlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBzZWxmLnN1cnZleS5zY3JvbGxUb1RvcE9uUGFnZUNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGdldCBzaG93SGVhZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UuX3Nob3dUaXRsZTtcbiAgfVxuICBnZXQgc2hvd0Rlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbjtcbiAgfVxuICBnZXQgbnVtKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UubnVtID4gMCA/IHRoaXMucGFnZS5udW0gKyBcIi4gXCIgOiBcIlwiO1xuICB9XG4gIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2Uucm93cztcbiAgfVxuICBnZXQgcmVuZGVyVGl0bGVBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5yZW5kZXJUaXRsZUFjdGlvbnModGhpcy5wYWdlKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYWdlXCIsIFBhZ2UpO1xuZXhwb3J0IGRlZmF1bHQgUGFnZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWwgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUGFuZWxNb2RlbDtcbiAgQFByb3AoKSBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCgpIGNzczogYW55O1xuXG4gIHByaXZhdGUgaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwoXG4gICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgIHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcblxuICAgIHRoaXMucXVlc3Rpb24uc3RhdGVDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB9O1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5zdGF0ZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgZ2V0IHJvb3RTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGgpIHtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4QmFzaXNcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhHcm93XCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4U2hyaW5rXCJdID0gMTtcbiAgICAgICg8YW55PnJlc3VsdClbXCJ3aWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wibWluV2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1pbldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1heFdpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgc2hvd0ljb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICB9XG4gIGdldCByb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gIH1cbiAgZ2V0IGljb25Dc3MoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzLnBhbmVsLmljb247XG4gICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKSByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzcy5wYW5lbC5pY29uRXhwYW5kZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBjaGFuZ2VFeHBhbmRlZCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnRvZ2dsZVN0YXRlKCk7XG4gIH1cbiAgY2FuY2VsUHJldmlldygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNhbmNlbFByZXZpZXcoKTtcbiAgfVxuICBnZXRUaXRsZVN0eWxlKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNzcy5wYW5lbC50aXRsZTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzLnBhbmVsLnRpdGxlRXhwYW5kYWJsZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY29udGFpbnNFcnJvcnMpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC50aXRsZU9uRXJyb3I7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRUZXh0Q3NzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IHx8XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0XG4gICAgKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbFwiLCBQYW5lbCk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbD4ge1xuICBnZXQgcmVuZGVyZWRQYW5lbHMoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCkgcmV0dXJuIHRoaXMucXVlc3Rpb24ucGFuZWxzO1xuICAgIHZhciBwYW5lbHMgPSBbXTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwpIHtcbiAgICAgIHBhbmVscy5wdXNoKHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhbmVscztcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWwoKTtcbiAgfVxuICBnZXRCdXR0b25BZGRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPVxuICAgICAgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gKyBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIGJ0bkNsYXNzZXMgKz0gXCIgXCIgKyBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZCArIFwiLS1saXN0LW1vZGVcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gYnRuQ2xhc3NlcztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbGR5bmFtaWNcIiwgUGFuZWxEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IFBhbmVsRHluYW1pYztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuXG4gIGdldCBjc3NDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICB9XG4gIGdldCByYW5nZU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50IC0gMTtcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByZXZQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIG5leHRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub05leHRQYW5lbCgpO1xuICB9XG5cbiAgY2hhbmdlUmFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgZ2V0QnV0dG9uQWRkQ3NzKHF1ZXN0aW9uOiBRdWVzdGlvbikge31cblxuICBnZXRCdXR0b25QcmV2Q3NzKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHZhciBidG5DbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25QcmV2O1xuICAgIGlmICghcXVlc3Rpb24uaXNQcmV2QnV0dG9uU2hvd2luZykge1xuICAgICAgYnRuQ2xhc3NlcyArPSBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUHJldiArIFwiLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gYnRuQ2xhc3NlcztcbiAgfVxuXG4gIGdldEJ1dHRvbk5leHRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbk5leHQ7XG4gICAgaWYgKCFxdWVzdGlvbi5pc05leHRCdXR0b25TaG93aW5nKSB7XG4gICAgICBidG5DbGFzc2VzICs9IFwiIFwiICsgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25OZXh0ICsgXCItLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBidG5DbGFzc2VzO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiAodGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggLyB0aGlzLnJhbmdlTWF4KSAqIDEwMCArIFwiJVwiO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUHJvZ3Jlc3M7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYW5lbER5bmFtaWNSZW1vdmUgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICBAUHJvcCgpIHBhbmVsOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGlzQ29sbGFwc2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnBhbmVsLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzdGF0ZVwiLFxuICAgICAgZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgc2VsZi5pc0NvbGxhcHNlZCA9IHNlbGYucGFuZWwuaXNDb2xsYXBzZWQ7XG4gICAgICB9LFxuICAgICAgXCJidXR0b25cIlxuICAgICk7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnBhbmVsLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzdGF0ZVwiLCBcImJ1dHRvblwiKTtcbiAgfVxuICByZW1vdmVQYW5lbENsaWNrKHBhbmVsOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVBhbmVsVUkocGFuZWwpO1xuICAgIH1cbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCBQYW5lbER5bmFtaWNSZW1vdmUpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUmVtb3ZlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQcm9ncmVzcyBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlICsgXCIlXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBQcm9ncmVzcyk7XG5WdWUuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1jb3JyZWN0UXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1yZXF1aXJlZFF1ZXN0aW9uc1wiLCBQcm9ncmVzcyk7XG5leHBvcnQgZGVmYXVsdCBQcm9ncmVzcztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0J1dHRvbnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIHB1YmxpYyBoYXNTY3JvbGxlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgbGV0IGxpc3RDb250YWluZXJFbGVtZW50OiBhbnkgPSB0aGlzLiRyZWZzW1wicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiXTtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5oYXNTY3JvbGxlciA9XG4gICAgICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbFdpZHRoID4gbGlzdENvbnRhaW5lckVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBwdWJsaWMgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCk7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KTtcbiAgfVxuICBwdWJsaWMgY2xpY2tMaXN0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5jbGlja0xpc3RFbGVtZW50KGluZGV4KTtcbiAgfVxuICBwdWJsaWMgZ2V0U2Nyb2xsQnV0dG9uQ3NzKGhhc1Njcm9sbGVyOiBib29sZWFuLCBpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBhbnkge1xuICAgIGxldCBzY3JvbGxDc3M6IHN0cmluZyA9IGlzTGVmdFNjcm9sbFxuICAgICAgPyB0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnRcbiAgICAgIDogdGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDtcbiAgICBpZiAoIWhhc1Njcm9sbGVyKVxuICAgICAgc2Nyb2xsQ3NzICs9IFwiIFwiICsgdGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW47XG4gICAgcmV0dXJuIHNjcm9sbENzcztcbiAgfVxuICBwdWJsaWMgY2xpY2tTY3JvbGxCdXR0b24oaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IGxpc3RDb250YWluZXJFbGVtZW50OiBhbnkgPSB0aGlzLiRyZWZzW1wicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiXTtcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlU2Nyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVTY3JvbGxlcik7XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCBQcm9ncmVzc0J1dHRvbnMpO1xuZXhwb3J0IGRlZmF1bHQgUHJvZ3Jlc3NCdXR0b25zO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhZGlvZ3JvdXAgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbD4ge1xuICBnZXQgY2hvaWNlc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aCAtIDE7XG4gIH1cbiAgZ2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYWRpb2dyb3VwXCIsIFJhZGlvZ3JvdXApO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9ncm91cDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgSXRlbVZhbHVlLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFkaW9ncm91cEl0ZW0gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBpbmRleDogYW55O1xuICBAUHJvcCgpIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG4gIGdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCBSYWRpb2dyb3VwSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYWRpb2dyb3VwSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhbmtpbmdJdGVtIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBpbmRleDogbnVtYmVyO1xuICBAUHJvcCgpIHRleHQ6IHN0cmluZztcbiAgQFByb3AoKSBoYW5kbGVLZXlkb3duOiAoKT0+e307XG4gIEBQcm9wKCkgY3NzQ2xhc3NlczogYW55XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCBSYW5raW5nSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFua2luZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmFua2luZ01vZGVsPiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmdcIiwgUmFua2luZyk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhdGluZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgZ2V0Q3NzKHF1ZXN0aW9uOiBRdWVzdGlvblJhdGluZ01vZGVsLCBpdGVtOiBhbnkpIHtcbiAgICBsZXQgY3NzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIHZhciBkaXNhYmxlZCA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKHF1ZXN0aW9uLnZhbHVlID09IGl0ZW0udmFsdWUpIHtcbiAgICAgIGNzcyA9IGNzcyArIFwiIFwiICsgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZWxlY3RlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgY3NzID0gY3NzICsgXCIgXCIgKyBkaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIGNzcztcbiAgfVxuICBnZXRSb290Q2xhc3MocXVlc3Rpb246IFF1ZXN0aW9uUmF0aW5nTW9kZWwpIHtcbiAgICBjb25zdCBjbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seSkgcmV0dXJuIGNsYXNzZXMucm9vdCArIFwiIFwiICsgY2xhc3Nlcy5kaXNhYmxlZDtcbiAgICByZXR1cm4gY2xhc3Nlcy5yb290O1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhdGluZ1wiLCBSYXRpbmcpO1xuZXhwb3J0IGRlZmF1bHQgUmF0aW5nO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleU1vZGVsXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJvdyBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHJvdzogUXVlc3Rpb25Sb3dNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuXG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICBpZiAoISF0aGlzLnJvdykge1xuICAgICAgaWYgKCF0aGlzLnJvdy5pc05lZWRSZW5kZXIpIHtcbiAgICAgICAgdmFyIHJvd0NvbnRhaW5lckRpdiA9IHRoaXMuJGVsO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvdy5zdGFydExhenlSZW5kZXJpbmcocm93Q29udGFpbmVyRGl2IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfSwgMTApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICghIXRoaXMucm93KSB7XG4gICAgICB0aGlzLnJvdy5pc05lZWRSZW5kZXIgPSAhdGhpcy5yb3cuaXNMYXp5UmVuZGVyaW5nO1xuICAgIH1cbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yb3dcIiwgUm93KTtcbmV4cG9ydCBkZWZhdWx0IFJvdztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFNpZ25hdHVyZVBhZCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWw+IHt9XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXNpZ25hdHVyZXBhZFwiLCBTaWduYXR1cmVQYWQpO1xuZXhwb3J0IGRlZmF1bHQgU2lnbmF0dXJlUGFkO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVN0cmluZ0VkaXRvciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgbG9jU3RyaW5nOiBMb2NhbGl6YWJsZVN0cmluZztcblxuICBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmxvY1N0cmluZy50ZXh0ID0gZXZlbnQudGFyZ2V0LmlubmVyVGV4dDtcbiAgfTtcbiAgb25DbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbn1cblxuVnVlLmNvbXBvbmVudChMb2NhbGl6YWJsZVN0cmluZy5lZGl0YWJsZVJlbmRlcmVyLCBTdXJ2ZXlTdHJpbmdFZGl0b3IpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5U3RyaW5nRWRpdG9yO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVN0cmluZ1ZpZXdlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgbG9jU3RyaW5nOiBMb2NhbGl6YWJsZVN0cmluZztcbn1cblxuVnVlLmNvbXBvbmVudChMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXIsIFN1cnZleVN0cmluZ1ZpZXdlcik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlTdHJpbmdWaWV3ZXI7XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVN0cmluZyBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgbG9jU3RyaW5nOiBMb2NhbGl6YWJsZVN0cmluZztcbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1zdHJpbmdcIiwgU3VydmV5U3RyaW5nKTtcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVN0cmluZztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgYXMgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuaW1wb3J0IHsgU3R5bGVzTWFuYWdlciwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHByb2Nlc3NlZENvbXBsZXRlZEh0bWxWYWx1ZTogc3RyaW5nO1xuICBjdXJyZW50UGFnZUlkOiBudW1iZXIgPSAxO1xuICBnZXQgcGFnZUlkKCkge1xuICAgIHJldHVybiBcInBhZ2VcIiArIHRoaXMuY3VycmVudFBhZ2VJZC50b1N0cmluZygpO1xuICB9XG4gIGdldCBuYXZJZCgpIHtcbiAgICByZXR1cm4gXCJuYXZcIiArIHRoaXMuY3VycmVudFBhZ2VJZC50b1N0cmluZygpO1xuICB9XG5cbiAgZm9yY2VVcGRhdGUoKSB7XG4gICAgdGhpcy4kZm9yY2VVcGRhdGUoKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlSWQrKztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBAV2F0Y2goXCJzdXJ2ZXlcIilcbiAgb25Qcm9wZXJ0eUNoYW5nZWQodmFsdWU6IHN0cmluZywgb2xkVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub25DcmVhdGVkKCk7XG4gICAgdGhpcy5zdXJ2ZXlPbk1vdW50ZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIHRoaXMuc3VydmV5T25Nb3VudGVkKCk7XG4gIH1cbiAgcHJpdmF0ZSBzdXJ2ZXlPbk1vdW50ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIFZ1ZS5zZXQodGhpcy5zdXJ2ZXksIFwiY3VycmVudFBhZ2VcIiwgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UpO1xuICAgIHRoaXMuc3VydmV5Lm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSWQrKztcbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gICAgfSk7XG4gICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgaWYgKGVsKSB0aGlzLnN1cnZleS5kb0FmdGVyUmVuZGVyU3VydmV5KGVsKTtcbiAgICB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjayA9IHRoaXMuZm9yY2VVcGRhdGU7XG4gICAgdGhpcy5zdXJ2ZXkuc3RhcnRUaW1lckZyb21VSSgpO1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5zdXJ2ZXkuc3RvcFRpbWVyKCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaGFzVGl0bGUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkudGl0bGUgJiYgdGhpcy5zdXJ2ZXkuc2hvd1RpdGxlO1xuICB9XG4gIGdldCBoYXNDb21wbGV0ZWRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5zaG93Q29tcGxldGVkUGFnZSAmJiB0aGlzLnN1cnZleS5zdGF0ZSA9PT0gXCJjb21wbGV0ZWRcIjtcbiAgfVxuICBnZXQgY3NzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cbiAgZ2V0Q29tcGxldGVkUGFnZUNsYXNzZXMoKSB7XG4gICAgdmFyIGNzcyA9IHRoaXMuY3NzO1xuICAgIHJldHVybiBjc3MuYm9keSArIFwiIFwiICsgY3NzLmNvbXBsZXRlZFBhZ2U7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkQ29tcGxldGVkSHRtbCgpIHtcbiAgICBpZiAoIXRoaXMuaGFzQ29tcGxldGVkUGFnZSkgcmV0dXJuIFwiXCI7XG4gICAgaWYgKCF0aGlzLnByb2Nlc3NlZENvbXBsZXRlZEh0bWxWYWx1ZSkge1xuICAgICAgdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWUgPSB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWU7XG4gIH1cbiAgZ2V0Q29tcGxldGVkU3RhdGVDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gIH1cbiAgc3RhcnQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkuc3RhcnQoKTtcbiAgfVxuICBkb1RyeVNhdmVBZ2FpbigpIHtcbiAgICB0aGlzLnN1cnZleS5kb0NvbXBsZXRlKCk7XG4gIH1cbn1cblxuLy8gVE9ETzogbWFrZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlIHZpYSBzdXJ2ZXlDc3MgaW4gYWxsIGV4YW1wbGVzXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU3VydmV5LCBcImNzc1R5cGVcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzdXJ2ZXlDc3MuY3VycmVudFR5cGU7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24obmV3VHlwZSkge1xuICAgIFN0eWxlc01hbmFnZXIuYXBwbHlUaGVtZShuZXdUeXBlKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZSxcbn0pO1xuXG5WdWUuY29tcG9uZW50KFwic3VydmV5XCIsIFN1cnZleSk7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXk7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVGV4dCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uVGV4dE1vZGVsPiB7XG4gIGNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBrZXl1cChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSByZXR1cm47XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBnZXQgaW5wdXRTdHlsZSgpOiBhbnkge1xuICAgIHZhciBzdHlsZTogYW55ID0ge307XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbi5pbnB1dFdpZHRoKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IHRoaXMucXVlc3Rpb24uaW5wdXRXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXRleHRcIiwgUXVlc3Rpb25UZXh0KTtcbmV4cG9ydCBkZWZhdWx0IFF1ZXN0aW9uVGV4dDtcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgVGltZXJQYW5lbCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgZ2V0IHRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnRpbWVySW5mb1RleHQ7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktdGltZXJwYW5lbFwiLCBUaW1lclBhbmVsKTtcbmV4cG9ydCBkZWZhdWx0IFRpbWVyUGFuZWw7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogSUVsZW1lbnQ7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXF1ZXN0aW9uLXRpdGxlLWNvbnRlbnRcIiwgVGl0bGVDb250ZW50KTtcbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFZ1ZVN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4vc3VydmV5TW9kZWxcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFdpbmRvdyBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCgpIGlzRXhwYW5kZWQ6IGJvb2xlYW47XG4gIEBQcm9wKCkgaXNleHBhbmRlZDogYm9vbGVhbjtcbiAgQFByb3AoKSBjbG9zZU9uQ29tcGxldGVUaW1lb3V0OiBudW1iZXI7XG5cbiAgc3VydmV5V2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAodGhpcy53aW5kb3cpIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93ID0gdGhpcy53aW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93ID0gbmV3IFZ1ZVN1cnZleVdpbmRvd01vZGVsKG51bGwsIHRoaXMuc3VydmV5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNleHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkID0gdGhpcy5pc2V4cGFuZGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9IHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXlXaW5kb3cuY2xvc2VXaW5kb3dPbkNvbXBsZXRlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmRvSGlkZSgpO1xuICAgIH07XG4gIH1cbiAgZ2V0IHdpbmRvd1N1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5V2luZG93LnN1cnZleTtcbiAgfVxuICBnZXQgY3NzKCkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICBnZXQgZXhwYW5kZWRDc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWRcbiAgICAgID8gdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25Db2xsYXBzZWRcbiAgICAgIDogdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25FeHBhbmRlZDtcbiAgfVxuICBnZXQgaXNFeHBhbmRlZFN1cnZleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZDtcbiAgfVxuICBzZXQgaXNFeHBhbmRlZFN1cnZleSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkID0gdmFsO1xuICB9XG4gIGRvRXhwYW5kKCkge1xuICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSAhdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZDtcbiAgfVxuICBkb0hpZGUoKSB7XG4gICAgVnVlLnNldCh0aGlzLnN1cnZleVdpbmRvdywgXCJpc1Nob3dpbmdcIiwgZmFsc2UpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXdpbmRvd1wiLCBXaW5kb3cpO1xuZXhwb3J0IGRlZmF1bHQgV2luZG93O1xuIiwiLyoqXG4gICogdnVlLWNsYXNzLWNvbXBvbmVudCB2Ny4yLjZcbiAgKiAoYykgMjAxNS1wcmVzZW50IEV2YW4gWW91XG4gICogQGxpY2Vuc2UgTUlUXG4gICovXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbi8vIFRoZSByYXRpb25hbCBiZWhpbmQgdGhlIHZlcmJvc2UgUmVmbGVjdC1mZWF0dXJlIGNoZWNrIGJlbG93IGlzIHRoZSBmYWN0IHRoYXQgdGhlcmUgYXJlIHBvbHlmaWxsc1xuLy8gd2hpY2ggYWRkIGFuIGltcGxlbWVudGF0aW9uIGZvciBSZWZsZWN0LmRlZmluZU1ldGFkYXRhIGJ1dCBub3QgZm9yIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzLlxuLy8gV2l0aG91dCB0aGlzIGNoZWNrIGNvbnN1bWVycyB3aWxsIGVuY291bnRlciBoYXJkIHRvIHRyYWNrIGRvd24gcnVudGltZSBlcnJvcnMuXG5mdW5jdGlvbiByZWZsZWN0aW9uSXNTdXBwb3J0ZWQoKSB7XG4gIHJldHVybiB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSAmJiBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cztcbn1cbmZ1bmN0aW9uIGNvcHlSZWZsZWN0aW9uTWV0YWRhdGEodG8sIGZyb20pIHtcbiAgZm9yd2FyZE1ldGFkYXRhKHRvLCBmcm9tKTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZnJvbS5wcm90b3R5cGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGZvcndhcmRNZXRhZGF0YSh0by5wcm90b3R5cGUsIGZyb20ucHJvdG90eXBlLCBrZXkpO1xuICB9KTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZm9yd2FyZE1ldGFkYXRhKHRvLCBmcm9tLCBrZXkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZE1ldGFkYXRhKHRvLCBmcm9tLCBwcm9wZXJ0eUtleSkge1xuICB2YXIgbWV0YUtleXMgPSBwcm9wZXJ0eUtleSA/IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKGZyb20sIHByb3BlcnR5S2V5KSA6IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKGZyb20pO1xuICBtZXRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRhS2V5KSB7XG4gICAgdmFyIG1ldGFkYXRhID0gcHJvcGVydHlLZXkgPyBSZWZsZWN0LmdldE93bk1ldGFkYXRhKG1ldGFLZXksIGZyb20sIHByb3BlcnR5S2V5KSA6IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEobWV0YUtleSwgZnJvbSk7XG5cbiAgICBpZiAocHJvcGVydHlLZXkpIHtcbiAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEobWV0YUtleSwgbWV0YWRhdGEsIHRvLCBwcm9wZXJ0eUtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEobWV0YUtleSwgbWV0YWRhdGEsIHRvKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgZmFrZUFycmF5ID0ge1xuICBfX3Byb3RvX186IFtdXG59O1xudmFyIGhhc1Byb3RvID0gZmFrZUFycmF5IGluc3RhbmNlb2YgQXJyYXk7XG5mdW5jdGlvbiBjcmVhdGVEZWNvcmF0b3IoZmFjdG9yeSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5LCBpbmRleCkge1xuICAgIHZhciBDdG9yID0gdHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHRhcmdldCA6IHRhcmdldC5jb25zdHJ1Y3RvcjtcblxuICAgIGlmICghQ3Rvci5fX2RlY29yYXRvcnNfXykge1xuICAgICAgQ3Rvci5fX2RlY29yYXRvcnNfXyA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICBpbmRleCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBDdG9yLl9fZGVjb3JhdG9yc19fLnB1c2goZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KG9wdGlvbnMsIGtleSwgaW5kZXgpO1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gbWl4aW5zKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgQ3RvcnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgQ3RvcnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gVnVlLmV4dGVuZCh7XG4gICAgbWl4aW5zOiBDdG9yc1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gX3R5cGVvZih2YWx1ZSk7XG5cbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZSAhPT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS53YXJuKCdbdnVlLWNsYXNzLWNvbXBvbmVudF0gJyArIG1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUNvbnN0cnVjdG9yKHZtLCBDb21wb25lbnQpIHtcbiAgLy8gb3ZlcnJpZGUgX2luaXQgdG8gcHJldmVudCB0byBpbml0IGFzIFZ1ZSBpbnN0YW5jZVxuICB2YXIgb3JpZ2luYWxJbml0ID0gQ29tcG9uZW50LnByb3RvdHlwZS5faW5pdDtcblxuICBDb21wb25lbnQucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBwcm94eSB0byBhY3R1YWwgdm1cbiAgICB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZtKTsgLy8gMi4yLjAgY29tcGF0IChwcm9wcyBhcmUgbm8gbG9uZ2VyIGV4cG9zZWQgYXMgc2VsZiBwcm9wZXJ0aWVzKVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgaWYgKCF2bS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBrZXksIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHZtW2tleV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdm1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9OyAvLyBzaG91bGQgYmUgYWNxdWlyZWQgY2xhc3MgcHJvcGVydHkgdmFsdWVzXG5cblxuICB2YXIgZGF0YSA9IG5ldyBDb21wb25lbnQoKTsgLy8gcmVzdG9yZSBvcmlnaW5hbCBfaW5pdCB0byBhdm9pZCBtZW1vcnkgbGVhayAoIzIwOSlcblxuICBDb21wb25lbnQucHJvdG90eXBlLl9pbml0ID0gb3JpZ2luYWxJbml0OyAvLyBjcmVhdGUgcGxhaW4gZGF0YSBvYmplY3RcblxuICB2YXIgcGxhaW5EYXRhID0ge307XG4gIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGxhaW5EYXRhW2tleV0gPSBkYXRhW2tleV07XG4gICAgfVxuICB9KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghKENvbXBvbmVudC5wcm90b3R5cGUgaW5zdGFuY2VvZiBWdWUpICYmIE9iamVjdC5rZXlzKHBsYWluRGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgd2FybignQ29tcG9uZW50IGNsYXNzIG11c3QgaW5oZXJpdCBWdWUgb3IgaXRzIGRlc2NlbmRhbnQgY2xhc3MgJyArICd3aGVuIGNsYXNzIHByb3BlcnR5IGlzIHVzZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBsYWluRGF0YTtcbn1cblxudmFyICRpbnRlcm5hbEhvb2tzID0gWydkYXRhJywgJ2JlZm9yZUNyZWF0ZScsICdjcmVhdGVkJywgJ2JlZm9yZU1vdW50JywgJ21vdW50ZWQnLCAnYmVmb3JlRGVzdHJveScsICdkZXN0cm95ZWQnLCAnYmVmb3JlVXBkYXRlJywgJ3VwZGF0ZWQnLCAnYWN0aXZhdGVkJywgJ2RlYWN0aXZhdGVkJywgJ3JlbmRlcicsICdlcnJvckNhcHR1cmVkJywgJ3NlcnZlclByZWZldGNoJyAvLyAyLjZcbl07XG5mdW5jdGlvbiBjb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCBDb21wb25lbnQuX2NvbXBvbmVudFRhZyB8fCBDb21wb25lbnQubmFtZTsgLy8gcHJvdG90eXBlIHByb3BzLlxuXG4gIHZhciBwcm90byA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBob29rc1xuXG5cbiAgICBpZiAoJGludGVybmFsSG9va3MuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgIG9wdGlvbnNba2V5XSA9IHByb3RvW2tleV07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBrZXkpO1xuXG4gICAgaWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHZvaWQgMCkge1xuICAgICAgLy8gbWV0aG9kc1xuICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIChvcHRpb25zLm1ldGhvZHMgfHwgKG9wdGlvbnMubWV0aG9kcyA9IHt9KSlba2V5XSA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0eXBlc2NyaXB0IGRlY29yYXRlZCBkYXRhXG4gICAgICAgIChvcHRpb25zLm1peGlucyB8fCAob3B0aW9ucy5taXhpbnMgPSBbXSkpLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmdldCB8fCBkZXNjcmlwdG9yLnNldCkge1xuICAgICAgLy8gY29tcHV0ZWQgcHJvcGVydGllc1xuICAgICAgKG9wdGlvbnMuY29tcHV0ZWQgfHwgKG9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tleV0gPSB7XG4gICAgICAgIGdldDogZGVzY3JpcHRvci5nZXQsXG4gICAgICAgIHNldDogZGVzY3JpcHRvci5zZXRcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbiAgKG9wdGlvbnMubWl4aW5zIHx8IChvcHRpb25zLm1peGlucyA9IFtdKSkucHVzaCh7XG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0RGF0YUZyb21Db25zdHJ1Y3Rvcih0aGlzLCBDb21wb25lbnQpO1xuICAgIH1cbiAgfSk7IC8vIGRlY29yYXRlIG9wdGlvbnNcblxuICB2YXIgZGVjb3JhdG9ycyA9IENvbXBvbmVudC5fX2RlY29yYXRvcnNfXztcblxuICBpZiAoZGVjb3JhdG9ycykge1xuICAgIGRlY29yYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmbihvcHRpb25zKTtcbiAgICB9KTtcbiAgICBkZWxldGUgQ29tcG9uZW50Ll9fZGVjb3JhdG9yc19fO1xuICB9IC8vIGZpbmQgc3VwZXJcblxuXG4gIHZhciBzdXBlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbXBvbmVudC5wcm90b3R5cGUpO1xuICB2YXIgU3VwZXIgPSBzdXBlclByb3RvIGluc3RhbmNlb2YgVnVlID8gc3VwZXJQcm90by5jb25zdHJ1Y3RvciA6IFZ1ZTtcbiAgdmFyIEV4dGVuZGVkID0gU3VwZXIuZXh0ZW5kKG9wdGlvbnMpO1xuICBmb3J3YXJkU3RhdGljTWVtYmVycyhFeHRlbmRlZCwgQ29tcG9uZW50LCBTdXBlcik7XG5cbiAgaWYgKHJlZmxlY3Rpb25Jc1N1cHBvcnRlZCgpKSB7XG4gICAgY29weVJlZmxlY3Rpb25NZXRhZGF0YShFeHRlbmRlZCwgQ29tcG9uZW50KTtcbiAgfVxuXG4gIHJldHVybiBFeHRlbmRlZDtcbn1cbnZhciByZXNlcnZlZFByb3BlcnR5TmFtZXMgPSBbLy8gVW5pcXVlIGlkXG4nY2lkJywgLy8gU3VwZXIgVnVlIGNvbnN0cnVjdG9yXG4nc3VwZXInLCAvLyBDb21wb25lbnQgb3B0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgY29tcG9uZW50XG4nb3B0aW9ucycsICdzdXBlck9wdGlvbnMnLCAnZXh0ZW5kT3B0aW9ucycsICdzZWFsZWRPcHRpb25zJywgLy8gUHJpdmF0ZSBhc3NldHNcbidjb21wb25lbnQnLCAnZGlyZWN0aXZlJywgJ2ZpbHRlciddO1xudmFyIHNob3VsZElnbm9yZSA9IHtcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBmb3J3YXJkU3RhdGljTWVtYmVycyhFeHRlbmRlZCwgT3JpZ2luYWwsIFN1cGVyKSB7XG4gIC8vIFdlIGhhdmUgdG8gdXNlIGdldE93blByb3BlcnR5TmFtZXMgc2luY2UgQmFiZWwgcmVnaXN0ZXJzIG1ldGhvZHMgYXMgbm9uLWVudW1lcmFibGVcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT3JpZ2luYWwpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIC8vIFNraXAgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGJlIG92ZXJ3cml0dGVuXG4gICAgaWYgKHNob3VsZElnbm9yZVtrZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTb21lIGJyb3dzZXJzIGRvZXMgbm90IGFsbG93IHJlY29uZmlndXJlIGJ1aWx0LWluIHByb3BlcnRpZXNcblxuXG4gICAgdmFyIGV4dGVuZGVkRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXh0ZW5kZWQsIGtleSk7XG5cbiAgICBpZiAoZXh0ZW5kZWREZXNjcmlwdG9yICYmICFleHRlbmRlZERlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9yaWdpbmFsLCBrZXkpOyAvLyBJZiB0aGUgdXNlciBhZ2VudCBkb2VzIG5vdCBzdXBwb3J0IGBfX3Byb3RvX19gIG9yIGl0cyBmYW1pbHkgKElFIDw9IDEwKSxcbiAgICAvLyB0aGUgc3ViIGNsYXNzIHByb3BlcnRpZXMgbWF5IGJlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN1cGVyIGNsYXNzIGluIFR5cGVTY3JpcHQuXG4gICAgLy8gV2UgbmVlZCB0byBleGNsdWRlIHN1Y2ggcHJvcGVydGllcyB0byBwcmV2ZW50IHRvIG92ZXJ3cml0ZVxuICAgIC8vIHRoZSBjb21wb25lbnQgb3B0aW9ucyBvYmplY3Qgd2hpY2ggc3RvcmVkIG9uIHRoZSBleHRlbmRlZCBjb25zdHJ1Y3RvciAoU2VlICMxOTIpLlxuICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZWQgdmFsdWUgKG9iamVjdCBvciBmdW5jdGlvbiksXG4gICAgLy8gd2UgY2FuIGNoZWNrIGVxdWFsaXR5IG9mIHRoZW0gYW5kIGV4Y2x1ZGUgaXQgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHJlZmVyZW5jZS5cbiAgICAvLyBJZiBpdCBpcyBhIHByaW1pdGl2ZSB2YWx1ZSwgaXQgd2lsbCBiZSBmb3J3YXJkZWQgZm9yIHNhZmV0eS5cblxuICAgIGlmICghaGFzUHJvdG8pIHtcbiAgICAgIC8vIE9ubHkgYGNpZGAgaXMgZXhwbGljaXRseSBleGx1ZGVkIGZyb20gcHJvcGVydHkgZm9yd2FyZGluZ1xuICAgICAgLy8gYmVjYXVzZSB3ZSBjYW5ub3QgZGV0ZWN0IHdoZXRoZXIgaXQgaXMgYSBpbmhlcml0ZWQgcHJvcGVydHkgb3Igbm90XG4gICAgICAvLyBvbiB0aGUgbm8gYF9fcHJvdG9fX2AgZW52aXJvbm1lbnQgZXZlbiB0aG91Z2ggdGhlIHByb3BlcnR5IGlzIHJlc2VydmVkLlxuICAgICAgaWYgKGtleSA9PT0gJ2NpZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3VwZXJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdXBlciwga2V5KTtcblxuICAgICAgaWYgKCFpc1ByaW1pdGl2ZShkZXNjcmlwdG9yLnZhbHVlKSAmJiBzdXBlckRlc2NyaXB0b3IgJiYgc3VwZXJEZXNjcmlwdG9yLnZhbHVlID09PSBkZXNjcmlwdG9yLnZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIFdhcm4gaWYgdGhlIHVzZXJzIG1hbnVhbGx5IGRlY2xhcmUgcmVzZXJ2ZWQgcHJvcGVydGllc1xuXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiByZXNlcnZlZFByb3BlcnR5TmFtZXMuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgIHdhcm4oXCJTdGF0aWMgcHJvcGVydHkgbmFtZSAnXCIuY29uY2F0KGtleSwgXCInIGRlY2xhcmVkIG9uIGNsYXNzICdcIikuY29uY2F0KE9yaWdpbmFsLm5hbWUsIFwiJyBcIikgKyAnY29uZmxpY3RzIHdpdGggcmVzZXJ2ZWQgcHJvcGVydHkgbmFtZSBvZiBWdWUgaW50ZXJuYWwuICcgKyAnSXQgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIGNvbXBvbmVudC4gQ29uc2lkZXIgcmVuYW1pbmcgdGhlIHByb3BlcnR5LicpO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHRlbmRlZCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudChvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb21wb25lbnQpIHtcbiAgICByZXR1cm4gY29tcG9uZW50RmFjdG9yeShDb21wb25lbnQsIG9wdGlvbnMpO1xuICB9O1xufVxuXG5Db21wb25lbnQucmVnaXN0ZXJIb29rcyA9IGZ1bmN0aW9uIHJlZ2lzdGVySG9va3Moa2V5cykge1xuICAkaW50ZXJuYWxIb29rcy5wdXNoLmFwcGx5KCRpbnRlcm5hbEhvb2tzLCBfdG9Db25zdW1hYmxlQXJyYXkoa2V5cykpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50O1xuZXhwb3J0IHsgY3JlYXRlRGVjb3JhdG9yLCBtaXhpbnMgfTtcbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0uaXRlbUNsYXNzIH0sIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uY2hlY2tlZFZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IF92bS5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKVxuICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSwgX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSkgPiAtMVxuICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICQkaSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJjaGVja2VkVmFsdWVcIiwgJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgIF92bS4kc2V0KFxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIFwiY2hlY2tlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJjaGVja2VkVmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnVuY2hlY2tlZFBhdGgsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHg6IFwiNVwiLCB5OiBcIjEwXCIsIHdpZHRoOiBcIjE0XCIsIGhlaWdodDogXCI0XCIgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJwb2x5Z29uXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNoZWNrZWRQYXRoLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHBvaW50czpcbiAgICAgICAgICAgICAgICAgIFwiMTksMTAgMTQsMTAgMTQsNSAxMCw1IDEwLDEwIDUsMTAgNSwxNCAxMCwxNCAxMCwxOSAxNCwxOSAxNCwxNCAxOSwxNCBcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW5kZXRlcm1pbmF0ZVBhdGgsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgIFwiTTIyLDBIMkMwLjksMCwwLDAuOSwwLDJ2MjBjMCwxLjEsMC45LDIsMiwyaDIwYzEuMSwwLDItMC45LDItMlYyQzI0LDAuOSwyMy4xLDAsMjIsMHogTTIxLDE4TDYsM2gxNVYxOHogTTMsNmwxNSwxNUgzVjZ6XCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSlcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmxhYmVsIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jRGlzcGxheUxhYmVsIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLml0ZW1DbGFzcyB9LCBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgbmFtZTogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIiA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBfdm0ucXVlc3Rpb24uaXNJbmRldGVybWluYXRlLFxuICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSlcbiAgICAgICAgICAgID8gX3ZtLl9pKF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsIF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUpID4gLTFcbiAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwiY2hlY2tlZFZhbHVlXCIsICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBcImNoZWNrZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwiY2hlY2tlZFZhbHVlXCIsICQkYylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0TGFiZWxDbGFzcyhmYWxzZSksXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkxhYmVsQ2xpY2soJGV2ZW50LCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zd2l0Y2gsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5vblN3aXRjaENsaWNrKCRldmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2xpZGVyIH0pXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3ModHJ1ZSksXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkxhYmVsQ2xpY2soJGV2ZW50LCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NMYWJlbFRydWUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LCBhdHRyczogeyByb2xlOiBcImdyb3VwXCIgfSB9LFxuICAgIFtcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgX2MoXCJzdi1idXR0b24tZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICBrZXk6IF92bS5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBpbmRleCxcbiAgICAgICAgICAgIGF0dHJzOiB7IGl0ZW06IGl0ZW0sIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJsYWJlbFwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY3NzLmxhYmVsLFxuICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbCB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuY3NzLmNvbnRyb2wsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgIG5hbWU6IF92bS5tb2RlbC5uYW1lLFxuICAgICAgICAgIGlkOiBfdm0ubW9kZWwuaWQsXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5tb2RlbC5pc1JlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgcm9sZTogXCJyYWRpb1wiLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5tb2RlbC5oYXNFcnJvcnMsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5tb2RlbC5kZXNjcmliZUJ5LFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0ubW9kZWwucmVhZE9ubHlcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLnZhbHVlLFxuICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ubW9kZWwucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSwgX3ZtLm1vZGVsLnZhbHVlKVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3ZtLiRzZXQoXG4gICAgICAgICAgICAgIF92bS5tb2RlbC5xdWVzdGlvbixcbiAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgIF92bS5tb2RlbC52YWx1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgY2xhc3M6IF92bS5tb2RlbC5jc3MuZGVjb3JhdG9yIH0sXG4gICAgICAgIFtcbiAgICAgICAgICAhIV92bS5tb2RlbC5pY29uTmFtZVxuICAgICAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmNzcy5pY29uLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpY29uTmFtZTogX3ZtLm1vZGVsLmljb25OYW1lLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogX3ZtLm1vZGVsLmljb25TaXplXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5tb2RlbC5zaG93Q2FwdGlvblxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ubW9kZWwuY3NzLmNhcHRpb24gfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5tb2RlbC5jYXB0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJmaWVsZHNldFwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSxcbiAgICBbXG4gICAgICBfYyhcImxlZ2VuZFwiLCB7XG4gICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXggfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLmNvbHVtbnMsIGZ1bmN0aW9uKGNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCkgfSxcbiAgICAgICAgICAgICAgX3ZtLl9sKGNvbHVtbiwgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBcIlwiICsgY29sSW5kZXggKyBpbmRleFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5nZXRMYWJlbENsYXNzKF92bS5pdGVtKSB9LCBbXG4gICAgICAgIF92bS5pdGVtID09IF92bS5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBfdm0uaW5kZXgsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfHwgIV92bS5pdGVtLmlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5pdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5pc0FsbFNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLmlzQWxsU2VsZWN0ZWQsIF92bS5pc0FsbFNlbGVjdGVkKSA+IC0xXG4gICAgICAgICAgICAgICAgICA6IF92bS5pc0FsbFNlbGVjdGVkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0uaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLmlzQWxsU2VsZWN0ZWQgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5pc0FsbFNlbGVjdGVkID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAkJGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmlzQWxsU2VsZWN0ZWQgPSAkJGNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLml0ZW0gIT0gX3ZtLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB8fCAhX3ZtLml0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUpXG4gICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSwgX3ZtLml0ZW0udmFsdWUpID4gLTFcbiAgICAgICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRhLmNvbmNhdChbJCR2XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJyZW5kZXJlZFZhbHVlXCIsICQkYylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogXCJNNSwxM2wyLTJsMywzbDctN2wyLDJsLTksOUw1LDEzelwiIH0gfSldXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSlcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICFfdm0uaGlkZUxhYmVsXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbExhYmVsLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0uaXRlbS5sb2NUZXh0LnRleHQgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uaXRlbS5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0udmFsdWUgPT0gX3ZtLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZVxuICAgICAgICA/IF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc090aGVyICYmXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOlxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBxdWVzdGlvbi5oYXNPdGhlciAmJiBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmIHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxcbiAgICBcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3RcbiAgICAgICAgICAgIDogXCJwYW5lbC1jb21tZW50LXJvb3RcIixcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICByZWFkb25seTogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgbWF4bGVuZ3RoOiBfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCksXG4gICAgICAgICAgICBjb2xzOiBfdm0ucXVlc3Rpb24uY29scyxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgcm93czogX3ZtLnF1ZXN0aW9uLnJvd3MsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLnBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnZhbHVlKSldKVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIHsgXCJzdi1hY3Rpb24tYmFyLWl0ZW0tLWFjdGl2ZVwiOiBfdm0uaXRlbS5pc0FjdGl2ZSB9LFxuICAgICAgICBfdm0uaXRlbS5pbm5lckNzc1xuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGRpc2FibGVkOiBfdm0uaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgX3ZtLml0ZW0uZW5hYmxlZCxcbiAgICAgICAgdGl0bGU6IF92bS5pdGVtLnRvb2x0aXAgfHwgX3ZtLml0ZW0udGl0bGVcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3ZtLml0ZW0uYWN0aW9uKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItaXRlbV9faWNvblwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLCBzaXplOiAyNCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS5zaG93VGl0bGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlIHx8XG4gICAgICAhX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlLS13aXRoLWljb25cIjogISFfdm0uaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLml0ZW0udGl0bGUpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1wb3B1cFwiLCB7IGF0dHJzOiB7IG1vZGVsOiBfdm0uaXRlbS5wb3B1cE1vZGVsIH0gfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIHsgXCJzdi1hY3Rpb24tYmFyLWl0ZW0tLWFjdGl2ZVwiOiBfdm0uaXRlbS5pc0FjdGl2ZSB9LFxuICAgICAgICBfdm0uaXRlbS5pbm5lckNzc1xuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGRpc2FibGVkOiBfdm0uaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgX3ZtLml0ZW0uZW5hYmxlZCxcbiAgICAgICAgdGl0bGU6IF92bS5pdGVtLnRvb2x0aXAgfHwgX3ZtLml0ZW0udGl0bGVcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3ZtLml0ZW0uYWN0aW9uKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItaXRlbV9faWNvblwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLCBzaXplOiAyNCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS5zaG93VGl0bGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlIHx8XG4gICAgICAhX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlLS13aXRoLWljb25cIjogISFfdm0uaXRlbS5pY29uTmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLml0ZW0udGl0bGUpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gICAgY2xhc3M6IF92bS5pbm5lckNzc1xuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLmhhc0l0ZW1zXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJjb250YWluZXJcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyXCIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3ZtLl9sKF92bS53cmFwcGVkSXRlbXMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZpc2libGUgfHwgaXRlbS52aXNpYmxlID09PSB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIml0ZW0udmlzaWJsZSB8fCBpdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvblwiLFxuICAgICAgICAgICAgICBjbGFzczogeyBcInN2LWFjdGlvbi0taGlkZGVuXCI6ICFpdGVtLmlzVmlzaWJsZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBpdGVtLm5lZWRTZXBhcmF0b3IgPyBfYyhcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIpIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKF92bS5nZXRDb21wb25lbnROYW1lKGl0ZW0pLCB7XG4gICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICAwXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfYyhcInN1cnZleS1xdWVzdGlvbi10aXRsZS1jb250ZW50XCIsIHtcbiAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93SWNvbixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0ljb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5nZXRJY29uQ3NzKF92bS5pc0NvbGxhcHNlZCksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdGFiaW5kZXg6IFwiMFwiLFxuICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uaXNDb2xsYXBzZWQgPyBcImZhbHNlXCIgOiBcInRydWVcIixcbiAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogIV92bS5pc0NvbGxhcHNlZCA/IF92bS5lbGVtZW50LmNvbnRlbnRJZCA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBrZXl1cDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEkZXZlbnQudHlwZS5pbmRleE9mKFwia2V5XCIpICYmXG4gICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZtLmNoYW5nZUV4cGFuZGVkLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidWxcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJzdi1saXN0XCIsXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uKGRhdGEsIGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgX3ZtLl9sKF92bS5tb2RlbC5pdGVtcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIF9jKFxuICAgICAgICBcImxpXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtbGlzdF9faXRlbVwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0ubW9kZWwuZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0ubW9kZWwuc2VsZWN0SXRlbShpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIGl0ZW0uaWNvbk5hbWVcbiAgICAgICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtbGlzdF9faXRlbS1pY29uXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IGl0ZW0uaWNvbk5hbWUsIHNpemU6IDI0IH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoaXRlbS50aXRsZSkpXSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIH0pLFxuICAgIDBcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsQnV0dG9uQ3NzKF92bS5yb3cpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5xdWVzdGlvbi5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhfdm0ucm93KVxuICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICA6IFwiZmFsc2VcIixcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF92bS5xdWVzdGlvbi5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhfdm0ucm93KVxuICAgICAgICAgID8gX3ZtLnJvdy5kZXRhaWxQYW5lbElkXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBfdm0ucm93LnNob3dIaWRlRGV0YWlsUGFuZWxDbGljaygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbkNzcyhfdm0ucm93KSB9KV1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBjbGFzczpcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uICtcbiAgICAgICAgXCIgXCIgK1xuICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmUsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ucmVtb3ZlUm93VUkoX3ZtLnJvdylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jUmVtb3ZlUm93VGV4dCB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZSB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5pc1Zpc2libGUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbC5pc1Zpc2libGVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBcIixcbiAgICAgIGNsYXNzOiBfdm0ubW9kZWwuc3R5bGVDbGFzcyxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdm0ubW9kZWwuY2xpY2tPdXRzaWRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fY29udGFpbmVyXCIsXG4gICAgICAgICAgc3R5bGU6IHsgbGVmdDogX3ZtLm1vZGVsLmxlZnQsIHRvcDogX3ZtLm1vZGVsLnRvcCB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tJbnNpZGUgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5zaG93UG9pbnRlcixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLnNob3dQb2ludGVyXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19wb2ludGVyXCIsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBsZWZ0OiBfdm0ubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgICAgICB0b3A6IF92bS5tb2RlbC5wb2ludGVyVGFyZ2V0LnRvcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19oZWFkZXJcIiB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9fY29udGVudFwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jb250ZW50Q29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwuaXNNb2RhbCxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbC5pc01vZGFsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19mb290ZXJcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jYW5jZWwoKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ubW9kZWwuY2FuY2VsQnV0dG9uVGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5hcHBseSgpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RlbC5hcHBseUJ1dHRvblRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIilcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3ZnXCIsIHsgcmVmOiBcInN2Z0ljb25cIiwgc3RhdGljQ2xhc3M6IFwic3Ytc3ZnLWljb25cIiB9LCBbX2MoXCJ1c2VcIildKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXRpdGxlLWFjdGlvbnNcIiB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uZWxlbWVudC5pc1BhZ2VcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaXNQYWdlXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LXF1ZXN0aW9uLXRpdGxlLWNvbnRlbnRcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3YtYWN0aW9uLWJhclwiLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXRpdGxlLWFjdGlvbnNfX2JhclwiLFxuICAgICAgICBhdHRyczogeyBpdGVtczogX3ZtLml0ZW1zIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3VydmV5LXBhbmVsXCIsIHtcbiAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNvbnRlbnRQYW5lbCwgY3NzOiBfdm0uY3NzIH1cbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKF92bS5nZXRDb21wb25lbnROYW1lKF92bS5jb250ZW50UXVlc3Rpb24pLCB7XG4gICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY29udGVudFF1ZXN0aW9uLCBjc3M6IF92bS5jc3MgfVxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uaGFzSHRtbFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmN1c3RvbUh0bWwpIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaGFzRGVmYXVsdFJlbmRlclxuICAgICAgICA/IF9jKF92bS5jb21wb25lbnROYW1lLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0ZFwiLFxuICAgIHsga2V5OiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiLXRkLWQmZFwiLCBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbCB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInN2Z1wiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtSWNvbiArXG4gICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtSWNvbkhvdmVyTW9kLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB3aWR0aDogXCIxMFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMCAxNlwiLFxuICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBkOlxuICAgICAgICAgICAgICAgIFwiTTYgMkM2IDAuOSA2LjkgMCA4IDBDOS4xIDAgMTAgMC45IDEwIDJDMTAgMy4xIDkuMSA0IDggNEM2LjkgNCA2IDMuMSA2IDJaTTIgMEMwLjkgMCAwIDAuOSAwIDJDMCAzLjEgMC45IDQgMiA0QzMuMSA0IDQgMy4xIDQgMkM0IDAuOSAzLjEgMCAyIDBaTTggNkM2LjkgNiA2IDYuOSA2IDhDNiA5LjEgNi45IDEwIDggMTBDOS4xIDEwIDEwIDkuMSAxMCA4QzEwIDYuOSA5LjEgNiA4IDZaTTIgNkMwLjkgNiAwIDYuOSAwIDhDMCA5LjEgMC45IDEwIDIgMTBDMy4xIDEwIDQgOS4xIDQgOEM0IDYuOSAzLjEgNiAyIDZaTTggMTJDNi45IDEyIDYgMTIuOSA2IDE0QzYgMTUuMSA2LjkgMTYgOCAxNkM5LjEgMTYgMTAgMTUuMSAxMCAxNEMxMCAxMi45IDkuMSAxMiA4IDEyWk0yIDEyQzAuOSAxMiAwIDEyLjkgMCAxNEMwIDE1LjEgMC45IDE2IDIgMTZDMy4xIDE2IDQgMTUuMSA0IDE0QzQgMTIuOSAzLjEgMTIgMiAxMlpcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5xdWVzdGlvbi5hdXRvQ29tcGxldGUsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gby5zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvblxuICAgICAgICAgICAgICAgICAgPyBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiB1bmRlZmluZWQgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRpc2FibGVkOiAhaXRlbS5pc0VuYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogaXRlbS52YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKGl0ZW0udGV4dCkgKyBcIlxcbiAgICAgIFwiKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAyXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogXCJcIiwgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICBcIlxcbiAgICBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgIF92bS5pc090aGVyU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5vdGhlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5xdWVzdGlvbi5kaXNwbGF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG4gIFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLmlzT3RoZXJTZWxlY3RlZCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNPdGhlclNlbGVjdGVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0uZ2V0Um9vdENsYXNzKF92bS5lbGVtZW50KSB9LFxuICAgIFtcbiAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5lbGVtZW50Lmhhc1RpdGxlT25MZWZ0VG9wXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudC1oZWFkZXJcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZWxlbWVudC5pc1BhbmVsIHx8ICFfdm0uZWxlbWVudC5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJlbGVtZW50LmlzUGFuZWwgfHwgIWVsZW1lbnQuaXNDb2xsYXBzZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5nZXRDb250ZW50Q2xhc3MoX3ZtLmVsZW1lbnQpXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uaGFzRXJyb3JzT25Ub3BcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmVsZW1lbnQsIGxvY2F0aW9uOiBcInRvcFwiIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uZWxlbWVudCksIHtcbiAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5lbGVtZW50Lmhhc0NvbW1lbnRcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLmZvcm1Hcm91cCB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LmNvbW1lbnRUZXh0KSldKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRDbGFzczogX3ZtLmNzcy5jb21tZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmhhc0Vycm9yc09uQm90dG9tXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5lbGVtZW50LCBsb2NhdGlvbjogXCJib3R0b21cIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5kZXNjcmlwdGlvblVuZGVySW5wdXQgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uZWxlbWVudC5oYXNUaXRsZU9uQm90dG9tXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudC1oZWFkZXJcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0uZ2V0SGVhZGVyQ2xhc3MoX3ZtLmVsZW1lbnQpLFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChfdm0uZWxlbWVudC5oYXNJbnB1dCkge1xuICAgICAgICAgICAgX3ZtLmVsZW1lbnQuZm9jdXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uZWxlbWVudC5oYXNUaXRsZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJoNVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldFRpdGxlQ2xhc3MoX3ZtLmVsZW1lbnQpLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0uZWxlbWVudC5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgaWQ6IF92bS5lbGVtZW50LmFyaWFUaXRsZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLmVsZW1lbnQudG9nZ2xlU3RhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoX3ZtLmVsZW1lbnQuZ2V0VGl0bGVDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uZWxlbWVudC5sb2NEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIilcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Zpc2libGVFcnJvcnMsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5oYXNWaXNpYmxlRXJyb3JzXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNsYXNzOiBfdm0uY2xhc3NlcyxcbiAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYWxlcnRcIiwgaWQ6IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZXJyb3JzLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3IuaWNvblxuICAgICAgICAgICAgOiBcInBhbmVsLWVycm9yLWljb25cIixcbiAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVycm9yLml0ZW1cbiAgICAgICAgICAgICAgOiBcInBhbmVsLWVycm9yLWl0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogZXJyb3IubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy50ZXh0IH0sIFtcbiAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5kaXNwbGF5VmFsdWUpKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG11bHRpcGxlOiBfdm0ucXVlc3Rpb24uYWxsb3dNdWx0aXBsZSA/IFwibXVsdGlwbGVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRpdGxlOiBfdm0ucXVlc3Rpb24uaW5wdXRUaXRsZSxcbiAgICAgICAgICAgIGFjY2VwdDogX3ZtLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmRvQ2hhbmdlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLmdldFBsYWNlaG9sZGVyQ2xhc3MoKSxcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH0sXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJmaWxlXCIsIGRpc2FibGVkOiBcIlwiLCBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnRpdGxlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlRGVjb3JhdG9yLFxuICAgICAgICBvbjogeyBkcm9wOiBfdm0ub25Ecm9wLCBkcmFnb3ZlcjogX3ZtLm9uRHJhZ092ZXIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMud3JhcHBlciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGUgK1xuICAgICAgICAgICAgICAgIChfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBcIiBcIiArIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgOiBcIlwiKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIGZvcjogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9uXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbikpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNFbXB0eSgpXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW4gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb24pKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdKVxuICAgICAgXVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSwgZnVuY3Rpb24odmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcmV2aWV3XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YWwubmFtZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmFsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZG9Eb3dubG9hZEZpbGUoJGV2ZW50LCB2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3ModmFsLm5hbWUpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNhblByZXZpZXdJbWFnZSh2YWwpXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0OiBcIkZpbGUgcHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIHZhbC5uYW1lICYmICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbikpXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNOCwyQzQuNywyLDIsNC43LDIsOHMyLjcsNiw2LDZzNi0yLjcsNi02UzExLjMsMiw4LDJ6IE0xMSwxMGwtMSwxTDgsOWwtMiwybC0xLTFsMi0yTDUsNmwxLTFsMiwybDItMmwxLDFMOSw4IEwxMSwxMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgdmFsLm5hbWVcbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kb0Rvd25sb2FkRmlsZSgkZXZlbnQsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHZhbC5uYW1lKSldXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0ucXVlc3Rpb24uaXNWaXNpYmxlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250YWluZXIsXG4gICAgICAgICAgc3R5bGU6IF92bS5yb290U3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJoNFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYXNUaXRsZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFzVGl0bGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRUaXRsZVN0eWxlKCksXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2hhbmdlRXhwYW5kZWQgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NUaXRsZSB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd0ljb24sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5pY29uQ3NzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJmLXBhbmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHBhZGRpbmdMZWZ0OiBfdm0ucXVlc3Rpb24uaW5uZXJQYWRkaW5nTGVmdCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBub2RlOiBfdm0ucm9vdE5vZGUsIHBhbmVsOiBfdm0ucXVlc3Rpb24sIGNzczogXCJjc3NcIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIHsgc3R5bGU6IF92bS5zdHlsZSB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIF92bS50YWdOYW1lLFxuICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5ub2RlcywgZnVuY3Rpb24oZWxOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3VydmV5LWZsb3dwYW5lbGVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBlbE5vZGUuZWxlbWVudElkLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbm9kZTogZWxOb2RlLCBwYW5lbDogX3ZtLnBhbmVsLCBjc3M6IFwiY3NzXCIgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnRleHQpICsgXCJcXG4gIFwiKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IF92bS5xdWVzdGlvbi5pZFZhbHVlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IF92bS5xdWVzdGlvbi5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBtaW5XaWR0aDogX3ZtLnF1ZXN0aW9uLm1pbldpZHRoLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IF92bS5xdWVzdGlvbi5tYXhXaWR0aFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiAoX3ZtLnN1cnZleS5sb2NUaXRsZS5yZW5kZXJlZEh0bWwubGVuZ3RoID4gMCAmJlxuICAgIF92bS5zdXJ2ZXkuc2hvd1RpdGxlKSB8fFxuICAgIF92bS5zdXJ2ZXkuaGFzTG9nb1xuICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5jc3MuaGVhZGVyIH0sIFtcbiAgICAgICAgX3ZtLnN1cnZleS5pc0xvZ29CZWZvcmVcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5zdXJ2ZXkubG9nb0NsYXNzTmFtZXMgfSwgW1xuICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmxvZ29JbWFnZSxcbiAgICAgICAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5zdXJ2ZXkubG9nb0ZpdCB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IF92bS5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnN1cnZleS5sb2dvV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnN1cnZleS5sb2dvSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnN1cnZleS5sb2dvSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgYWx0OiBfdm0uc3VydmV5LmxvY1RpdGxlLnJlbmRlcmVkSHRtbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnN1cnZleS5sb2NUaXRsZS5yZW5kZXJlZEh0bWwubGVuZ3RoID4gMCAmJiBfdm0uc3VydmV5LnNob3dUaXRsZVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MuaGVhZGVyVGV4dCxcbiAgICAgICAgICAgICAgICBzdHlsZTogeyBtYXhXaWR0aDogX3ZtLnN1cnZleS50aXRsZU1heFdpZHRoIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJoM1wiLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnN1cnZleS5jc3MudGl0bGUgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5zdXJ2ZXkubG9jVGl0bGUgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImg1XCIsXG4gICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnN1cnZleS5sb2NEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5zdXJ2ZXkuaXNMb2dvQWZ0ZXJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5zdXJ2ZXkubG9nb0NsYXNzTmFtZXMgfSwgW1xuICAgICAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmxvZ29JbWFnZSxcbiAgICAgICAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5zdXJ2ZXkubG9nb0ZpdCB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IF92bS5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnN1cnZleS5sb2dvV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnN1cnZleS5sb2dvSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnN1cnZleS5sb2dvSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgYWx0OiBfdm0uc3VydmV5LmxvY1RpdGxlLnJlbmRlcmVkSHRtbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnN1cnZleS5pc0xvZ29BZnRlclxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzdi1sb2dvLS1yaWdodC10YWlsXCIgfSlcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHtcbiAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCxcbiAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jSHRtbC5yZW5kZXJlZEh0bWwpIH1cbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiXG4gICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgc3JjOiBfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgYWx0OiBfdm0ucXVlc3Rpb24udGV4dCB8fCBfdm0ucXVlc3Rpb24udGl0bGUsXG4gICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJ2aWRlb1wiXG4gICAgICA/IF9jKFwiZW1iZWRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZSxcbiAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5xdWVzdGlvbi5pbWFnZUZpdCB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBzcmM6IF92bS5xdWVzdGlvbi5pbWFnZUxpbmssXG4gICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJmaWVsZHNldFwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSxcbiAgICBbXG4gICAgICBfYyhcImxlZ2VuZFwiLCB7XG4gICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfYyhcImRpdlwiLCB7IGtleTogaXRlbS52YWx1ZSwgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSkgfSwgW1xuICAgICAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubGFiZWwgfSwgW1xuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLm11bHRpU2VsZWN0XG4gICAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfHwgIWl0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLnF1ZXN0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5xdWVzdGlvbi52YWx1ZSwgaXRlbS52YWx1ZSkgPiAtMVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLnZhbHVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInZhbHVlXCIsICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwidmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfHwgIWl0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ucXVlc3Rpb24udmFsdWUsIGl0ZW0udmFsdWUpXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInZhbHVlXCIsIGl0ZW0udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBzcmM6IGl0ZW0uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ6IGl0ZW0udGV4dCB8fCBpdGVtLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCJcbiAgICAgICAgICAgICAgICA/IF9jKFwiZW1iZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3JjOiBpdGVtLmltYWdlTGluayxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd0xhYmVsXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IGl0ZW0udGV4dCB8fCBpdGVtLnZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbS50ZXh0IHx8IGl0ZW0udmFsdWUpKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXIgfSwgW1xuICAgIF9jKFwiZmllbGRzZXRcIiwgW1xuICAgICAgX2MoXCJsZWdlbmRcIiwge1xuICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInRhYmxlXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd0hlYWRlclxuICAgICAgICAgID8gX2MoXCJ0aGVhZFwiLCBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uYWxsb3dSb3dzRHJhZ0FuZERyb3AgPyBfYyhcInRkXCIpIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ0ZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucywgZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBjb2x1bW4ubG9jVGV4dCB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGJvZHlcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVSb3dzLCBmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJyb3ctXCIgKyByb3cubmFtZSArIFwiLVwiICsgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHJvdy5yb3dDbGFzc2VzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uYWxsb3dSb3dzRHJhZ0FuZERyb3BcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJkcmFnLWRyb3AtdGRcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uaGFzUm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzUm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IHJvdy5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmdldENlbGxEaXNwbGF5TG9jVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IGNvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInJvdy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByb3cuZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaW5wdXRJZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0uX3Eocm93LnZhbHVlLCBjb2x1bW4udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChyb3csIFwidmFsdWVcIiwgY29sdW1uLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIi0xMiAtMTIgMjQgMjRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcjogXCI2XCIsIGN4OiBcIjBcIiwgY3k6IFwiMFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2lyY2xlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGRcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmNlbGwuY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IF92bS5nZXRDZWxsU3R5bGUoKSxcbiAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0uZ2V0SGVhZGVycygpLCBjb2xzcGFuOiBfdm0uY2VsbC5jb2xTcGFucyB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY2VsbC5pc0FjdGlvbnNDZWxsXG4gICAgICAgID8gX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHsgYXR0cnM6IHsgaXRlbXM6IF92bS5jZWxsLml0ZW0uZ2V0RGF0YSgpIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uY2VsbC5oYXNQYW5lbFxuICAgICAgICA/IF9jKF92bS5nZXRDb21wb25lbnROYW1lKF92bS5jZWxsLnBhbmVsKSwge1xuICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnBhbmVsLCBjc3M6IF92bS5xdWVzdGlvbi5zdXJ2ZXkuY3NzIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmhhc1F1ZXN0aW9uXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uaGFzRXJyb3JzT25Ub3BcbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbiwgbG9jYXRpb246IFwidG9wXCIgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAhX3ZtLmNlbGwuaXNDaG9pY2UgJiYgX3ZtLmNlbGwucXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgICAgICAgICA/IF9jKF92bS5nZXRDb21wb25lbnROYW1lKF92bS5jZWxsLnF1ZXN0aW9uKSwge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc1Zpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzVmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICFfdm0uY2VsbC5pc0Nob2ljZSAmJiAhX3ZtLmNlbGwucXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgICAgICAgICA/IF9jKF92bS5jZWxsLnF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSwge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc1Zpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzVmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5jZWxsLmlzQ2hvaWNlICYmICFfdm0uY2VsbC5pc0NoZWNrYm94XG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5jZWxsLml0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKF92bS5jZWxsLml0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBfdm0uY2VsbC5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBcIlwiICsgX3ZtLmNlbGwuaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgaGlkZUxhYmVsOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmNlbGwuaXNDaG9pY2UgJiYgX3ZtLmNlbGwuaXNDaGVja2JveFxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLmNlbGwuaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoX3ZtLmNlbGwuaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IF92bS5jZWxsLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBfdm0uY2VsbC5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlTGFiZWw6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uaGFzRXJyb3JzT25Cb3R0b21cbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbiwgbG9jYXRpb246IFwiYm90dG9tXCIgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uY2VsbC5oYXNUaXRsZVxuICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmNlbGwubG9jVGl0bGUgfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICEhX3ZtLmNlbGwucmVxdWlyZWRUZXh0XG4gICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jZWxsLnJlcXVpcmVkVGV4dCkpXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3R5bGU6IHsgb3ZlcmZsb3dYOiBfdm0ucXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbCA/IFwic2Nyb2xsXCIgOiBcIlwiIH0gfSxcbiAgICBbX2MoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSldLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0eWxlOiB7IG92ZXJmbG93WDogX3ZtLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwgPyBcInNjcm9sbFwiIDogXCJcIiB9IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uVG9wXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gK1xuICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFJvd0NsaWNrIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NBZGRSb3dUZXh0IH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uQWRkIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dUYWJsZVxuICAgICAgICA/IF9jKFwic3VydmV5LW1hdHJpeHRhYmxlXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dUYWJsZVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVtcHR5Um93c1NlY3Rpb24gfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVtcHR5Um93c1RleHQgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NFbXB0eVJvd3NUZXh0IH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gK1xuICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkICtcbiAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmVtcHR5Um93c0J1dHRvbixcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jQWRkUm93VGV4dCB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkFkZCB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Cb3R0b21cbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uYWRkUm93Q2xpY2sgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0FkZFJvd1RleHQgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25BZGQgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJ0YWJsZVwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfdm0udGFibGUuc2hvd0hlYWRlclxuICAgICAgPyBfYyhcInRoZWFkXCIsIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmFsbG93Um93c0RyYWdBbmREcm9wID8gX2MoXCJ0aFwiKSA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlLmhlYWRlclJvdy5jZWxscywgZnVuY3Rpb24oY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBcImhlYWRlcl9cIiArIGNlbGwuaWQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oZWFkZXJDZWxsLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBtaW5XaWR0aDogY2VsbC5taW5XaWR0aCwgd2lkdGg6IGNlbGwud2lkdGggfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IGNlbGwubG9jVGl0bGUgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgISFjZWxsLnJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKGNlbGwucmVxdWlyZWRUZXh0KSldKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcInRib2R5XCIsXG4gICAgICBfdm0uX2woX3ZtLnRhYmxlLnJvd3MsIGZ1bmN0aW9uKHJvdykge1xuICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgIHsga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93LmlkLCBjbGFzczogcm93LmNsYXNzTmFtZSB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5hbGxvd1Jvd3NEcmFnQW5kRHJvcFxuICAgICAgICAgICAgICA/IF9jKFwiZHJhZy1kcm9wLXRkXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLl9sKHJvdy5jZWxscywgZnVuY3Rpb24oY2VsbCwgY2VsbEluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1tYXRyaXhjZWxsXCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IHJvdy5pZCArIFwiX1wiICsgY2VsbEluZGV4LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNlbGw6IGNlbGwsIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICAwXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS50YWJsZS5zaG93Rm9vdGVyXG4gICAgICA/IF9jKFwidGZvb3RcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZS5mb290ZXJSb3cuY2VsbHMsIGZ1bmN0aW9uKGNlbGwsIGNlbGxJbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyBjZWxsOiBjZWxsLCBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5nZXRSb3dzKCksIGZ1bmN0aW9uKHJvdywgcm93aW5kZXgpIHtcbiAgICAgIHJldHVybiBfYyhcbiAgICAgICAgXCJ0clwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwicm93a2V5XCIgKyByb3dpbmRleCxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm93XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uX2wocm93LCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxhYmVsXCIgKyBpdGVtLmVkaXRvci5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSB8fFxuICAgICAgICAgICAgICAgICAgaXRlbS5lZGl0b3IuaXNSZXF1aXJlVGV4dE9uU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBpdGVtLmxvY1RpdGxlIH0gfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgaXRlbS5lZGl0b3IuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLmVkaXRvci5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS5lZGl0b3IuaWQsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBjc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGwgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBpdGVtLmVkaXRvciwgbG9jYXRpb246IFwidG9wXCIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoaXRlbS5lZGl0b3IpLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IGl0ZW0uZWRpdG9yIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogaXRlbS5lZGl0b3IsIGxvY2F0aW9uOiBcImJvdHRvbVwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1ByZXZCdG4sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UHJldkJ0blwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uUHJldixcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0uc3VydmV5LnBhZ2VQcmV2VGV4dCB9LFxuICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLnByZXZQYWdlIH1cbiAgICB9KSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dOZXh0QnRuLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd05leHRCdG5cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbk5leHQsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5wYWdlTmV4dFRleHQgfSxcbiAgICAgIG9uOiB7IG1vdXNlZG93bjogX3ZtLm5leHRCdXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0ubmV4dFBhZ2UgfVxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LmlzTGFzdFBhZ2UsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic3VydmV5LmlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXcsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkucHJldmlld1RleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uc2hvd1ByZXZpZXcgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93Q29tcGxldGVCdG4sXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0NvbXBsZXRlQnRuXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25Db21wbGV0ZSxcbiAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5jb21wbGV0ZVRleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uY29tcGxldGVMYXN0UGFnZSB9XG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImZvcm0tZ3JvdXBcIiB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyIHx8IF92bS5jb21tZW50Q2xhc3MsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRPdGhlcnNNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ub3RoZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNvbW1lbnQgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpKV0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dIZWFkZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiaDRcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS50aXRsZSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAhX3ZtLnJlbmRlclRpdGxlQWN0aW9uc1xuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucGFnZS5sb2NUaXRsZSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5yZW5kZXJUaXRsZUFjdGlvbnNcbiAgICAgICAgICAgICAgICA/IF9jKFwic3YtdGl0bGUtYWN0aW9uc1wiLCB7IGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5wYWdlIH0gfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uc2hvd0Rlc2NyaXB0aW9uXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnBhZ2UuY3NzQ2xhc3Nlcy5wYWdlLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucGFnZS5sb2NEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uKHJvdywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJvdy52aXNpYmxlXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBrZXk6IF92bS5wYWdlLmlkICsgXCJfXCIgKyBpbmRleCwgY2xhc3M6IF92bS5jc3Mucm93IH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1yb3dcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcm93OiByb3csIHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmlzVmlzaWJsZVxuICAgID8gX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwuY29udGFpbmVyLFxuICAgICAgICAgIHN0eWxlOiBfdm0ucm9vdFN0eWxlXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiaDRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFzVGl0bGUsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhc1RpdGxlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0VGl0bGVTdHlsZSgpLFxuICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNoYW5nZUV4cGFuZGVkIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5yZXF1aXJlZFRleHRDc3MgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZXF1aXJlZFRleHQpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ubm9cbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ubm8pKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlXG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnJlcXVpcmVkVGV4dENzcyB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnJlcXVpcmVkVGV4dCkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZVRleHRBZnRlclRpdGxlXG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnJlcXVpcmVkVGV4dENzcyB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLnJlcXVpcmVkVGV4dCkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93SWNvbixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93SWNvblwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmljb25Dc3MsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uaXNDb2xsYXBzZWQgPyBcImZhbHNlXCIgOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAhX3ZtLmlzQ29sbGFwc2VkXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNvbnRlbnRJZFxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhJGV2ZW50LnR5cGUuaW5kZXhPZihcImtleVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMywgJGV2ZW50LmtleSwgXCJFbnRlclwiKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2hhbmdlRXhwYW5kZWQuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5pc0NvbGxhcHNlZFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmNvbnRlbnRJZCB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uKHJvdywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlkICsgXCJfXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXJvd1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc0VkaXRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5mb290ZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbkVkaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5lZGl0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jYW5jZWxQcmV2aWV3IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnJlbmRlcmVkUGFuZWxzLCBmdW5jdGlvbihwYW5lbCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsga2V5OiBwYW5lbC5pZCwgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYW5lbFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBwYW5lbCwgY3NzOiBfdm0uY3NzIH0gfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwiaHJcIiwge1xuICAgICAgICAgICAga2V5OiBcInNlcGFyYXRvclwiICsgcGFuZWwuaWQsXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiBfdm0ucXVlc3Rpb24uY2FuQWRkUGFuZWxcbiAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0QnV0dG9uQWRkQ3NzKF92bS5xdWVzdGlvbiksXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dCB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRQYW5lbENsaWNrIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IHRoaXMuY3NzQ2xhc3MsIHN0YXRpY1N0eWxlOiB7IGNsZWFyOiBcImJvdGhcIiB9IH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxQcmV2VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvblByZXZDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldlBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3MgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ucHJvZ3Jlc3MgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcm9ncmVzc2JhclwiIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxOZXh0VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvbk5leHRDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5jYW5BZGRQYW5lbFxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQgfSxcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFBhbmVsQ2xpY2sgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVGV4dCB9LCBbXG4gICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLnByb2dyZXNzVGV4dCkgKyBcIlxcbiAgXCIpXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCAmJiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6ICFfdm0uaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIiFpc0NvbGxhcHNlZFwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCksXG4gICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0ucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0IH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5yZW1vdmVQYW5lbENsaWNrKF92bS5wYW5lbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzcyB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0JhcixcbiAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5wcm9ncmVzcyB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgICAgXCJhcmlhLXZhbHVlbWF4XCI6IFwiMTAwXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc1RleHQgKyBcIiBcIiArIF92bS5jc3MucHJvZ3Jlc3NUZXh0SW5CYXIgfSxcbiAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uc3VydmV5LnByb2dyZXNzVGV4dCkpXVxuICAgICAgICApXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJzcGFuXCIsXG4gICAgICB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzVGV4dCArIFwiIFwiICsgX3ZtLmNzcy5wcm9ncmVzc1RleHRVbmRlckJhciB9LFxuICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9ncmVzc1RleHQpKV1cbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlciB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogX3ZtLmdldFNjcm9sbEJ1dHRvbkNzcyhfdm0uaGFzU2Nyb2xsZXIsIHRydWUpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbih0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0IH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnN1cnZleS52aXNpYmxlUGFnZXMsIGZ1bmN0aW9uKHBhZ2UsIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxpc3RlbGVtZW50XCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0uY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFnZS5sb2NOYXZpZ2F0aW9uRGVzY3JpcHRpb24ucmVuZGVyZWRIdG1sXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uZ2V0U2Nyb2xsQnV0dG9uQ3NzKF92bS5oYXNTY3JvbGxlciwgZmFsc2UpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbihmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LCBhdHRyczogeyByb2xlOiBcInJhZGlvZ3JvdXBcIiB9IH0sXG4gICAgW1xuICAgICAgIV92bS5xdWVzdGlvbi5oYXNUaXRsZVxuICAgICAgICA/IF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uY29sdW1ucywgZnVuY3Rpb24oY29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKSB9LFxuICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIGNvbEluZGV4ICsgaW5kZXhcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5jYW5TaG93Q2xlYXJCdXR0b25cbiAgICAgICAgPyBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbiB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jbGVhclZhbHVlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFfdm0uaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSwgX3ZtLml0ZW0udmFsdWUpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJyZW5kZXJlZFZhbHVlXCIsIF92bS5pdGVtLnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCItMTIgLTEyIDI0IDI0XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcImNpcmNsZVwiLCB7IGF0dHJzOiB7IHI6IFwiNlwiLCBjeDogXCIwXCIsIGN5OiBcIjBcIiB9IH0pXVxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICFfdm0uaGlkZUxhYmVsXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbnRyb2xMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLml0ZW0ubG9jVGV4dC50ZXh0IH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLml0ZW0ubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5pdGVtLnZhbHVlID09IF92bS5xdWVzdGlvbi5vdGhlckl0ZW0udmFsdWVcbiAgICAgICAgPyBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5oYXNPdGhlciAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgcXVlc3Rpb24uaGFzT3RoZXIgJiYgcXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcXG4gICAgXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGF0dHJzOiB7IHRhYmluZGV4OiBcIjBcIiB9LCBvbjogeyBrZXlkb3duOiBfdm0uaGFuZGxlS2V5ZG93biB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljU3R5bGU6IHsgb3V0bGluZTogXCJub25lXCIgfSwgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiB9IH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICBfdm0uY3NzQ2xhc3Nlcy5pdGVtSWNvbiArXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Ib3Zlck1vZCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxNlwiLFxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMCAxNlwiLFxuICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBcIk02IDJDNiAwLjkgNi45IDAgOCAwQzkuMSAwIDEwIDAuOSAxMCAyQzEwIDMuMSA5LjEgNCA4IDRDNi45IDQgNiAzLjEgNiAyWk0yIDBDMC45IDAgMCAwLjkgMCAyQzAgMy4xIDAuOSA0IDIgNEMzLjEgNCA0IDMuMSA0IDJDNCAwLjkgMy4xIDAgMiAwWk04IDZDNi45IDYgNiA2LjkgNiA4QzYgOS4xIDYuOSAxMCA4IDEwQzkuMSAxMCAxMCA5LjEgMTAgOEMxMCA2LjkgOS4xIDYgOCA2Wk0yIDZDMC45IDYgMCA2LjkgMCA4QzAgOS4xIDAuOSAxMCAyIDEwQzMuMSAxMCA0IDkuMSA0IDhDNCA2LjkgMy4xIDYgMiA2Wk04IDEyQzYuOSAxMiA2IDEyLjkgNiAxNEM2IDE1LjEgNi45IDE2IDggMTZDOS4xIDE2IDEwIDE1LjEgMTAgMTRDMTAgMTIuOSA5LjEgMTIgOCAxMlpNMiAxMkMwLjkgMTIgMCAxMi45IDAgMTRDMCAxNS4xIDAuOSAxNiAyIDE2QzMuMSAxNiA0IDE1LjEgNCAxNEM0IDEyLjkgMy4xIDEyIDIgMTJaXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgIF92bS5jc3NDbGFzc2VzLml0ZW1JY29uICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uY3NzQ2xhc3Nlcy5pdGVtSWNvbkZvY3VzTW9kLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwIDI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7IGF0dHJzOiB7IGQ6IFwiTTEwIDVMNSAwTDAgNUg0VjlINlY1SDEwWlwiIH0gfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogXCJNNiAxOVYxNUg0VjE5SDBMNSAyNEwxMCAxOUg2WlwiIH0gfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3NDbGFzc2VzLml0ZW1JbmRleCB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmluZGV4KSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnRleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5yb290Q2xhc3MgfSxcbiAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIF9jKFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCB7XG4gICAgICAgIGtleTogaXRlbS52YWx1ZSArIFwiLVwiICsgaW5kZXggKyBcIi1pdGVtXCIsXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRleHQ6IGl0ZW0ubG9jVGV4dCxcbiAgICAgICAgICBpbmRleDogX3ZtLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaW5kZXgpLFxuICAgICAgICAgIGhhbmRsZUtleWRvd246IF92bS5xdWVzdGlvbi5oYW5kbGVLZXlkb3duLFxuICAgICAgICAgIGNzc0NsYXNzZXM6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSksXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRSb290Q2xhc3MoX3ZtLnF1ZXN0aW9uKSB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZmllbGRzZXRcIixcbiAgICAgICAgICB7IGF0dHJzOiB7IHJvbGU6IFwicmFkaW9ncm91cFwiIH0gfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImxlZ2VuZFwiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0uZ2V0Q3NzKF92bS5xdWVzdGlvbiwgaXRlbSkgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGl0ZW0ubG9jVGV4dC50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogaXRlbS52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLnNldFZhbHVlRnJvbUNsaWNrKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWluVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NNaW5SYXRlRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBpdGVtLmxvY1RleHQgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgaW5kZXggPT09IF92bS5xdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1heFRleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTWF4UmF0ZURlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc090aGVyLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5oYXNPdGhlclwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMub3RoZXIsXG4gICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXZ1ZS1yb3ctYWRkaXRpb25hbC1kaXZcIiB9LFxuICAgIF92bS5fbChfdm0ucm93LmVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gX3ZtLnJvdy5pc05lZWRSZW5kZXIgJiYgZWxlbWVudC5pc1Zpc2libGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogZWxlbWVudC5pZFZhbHVlLFxuICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGZsZXhCYXNpczogZWxlbWVudC5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAxLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBlbGVtZW50LnJlbmRlcldpZHRoLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbGVtZW50Lm1pbldpZHRoLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBlbGVtZW50Lm1heFdpZHRoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LWVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogZWxlbWVudC5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogZWxlbWVudC5wYWRkaW5nUmlnaHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgIHJvbGU6IGVsZW1lbnQuYXJpYVJvbGUsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBlbGVtZW50Lmhhc1RpdGxlXG4gICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5hcmlhVGl0bGVJZFxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF92bS5fbSgwKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xzIH0sIFtcbiAgICAgIF9jKFxuICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uLFxuICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHRpdGxlOiBfdm0ucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9uIH1cbiAgICAgICAgfSxcbiAgICAgICAgW192bS5fdihcIlxcbiAgICAgIOKcllxcbiAgICBcIildXG4gICAgICApXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIFtfYyhcImNhbnZhc1wiLCB7IGF0dHJzOiB7IHRhYmluZGV4OiBcIjBcIiB9IH0pXSlcbiAgfVxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgIF92bS5sb2NTdHJpbmcuaGFzSHRtbFxuICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9LFxuICAgICAgICAgIGF0dHJzOiB7IGNvbnRlbnRlZGl0YWJsZTogXCJ0cnVlXCIgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkgfSxcbiAgICAgICAgICBvbjogeyBibHVyOiBfdm0ub25JbnB1dCwgY2xpY2s6IF92bS5vbkNsaWNrIH1cbiAgICAgICAgfSlcbiAgICAgIDogX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3Ytc3RyaW5nLWVkaXRvclwiLFxuICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7IGNvbnRlbnRlZGl0YWJsZTogXCJ0cnVlXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGJsdXI6IF92bS5vbklucHV0LCBjbGljazogX3ZtLm9uQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpKV1cbiAgICAgICAgKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJzcGFuXCIsIHsgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSB9LCBbXG4gICAgX3ZtLmxvY1N0cmluZy5oYXNIdG1sXG4gICAgICA/IF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkgfVxuICAgICAgICB9KVxuICAgICAgOiBfYyhcInNwYW5cIiwgeyBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9IH0sIFtcbiAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKSlcbiAgICAgICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKF92bS5sb2NTdHJpbmcucmVuZGVyQXMsIHtcbiAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ubG9jU3RyaW5nIH1cbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Mucm9vdCB9LCBbXG4gICAgX2MoXCJmb3JtXCIsIHsgYXR0cnM6IHsgb25zdWJtaXQ6IFwicmV0dXJuIGZhbHNlO1wiIH0gfSwgW1xuICAgICAgIV92bS5zdXJ2ZXkuaGFzTG9nb1xuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3ZfY3VzdG9tX2hlYWRlclwiIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgY2xhc3M6IF92bS5jc3MuY29udGFpbmVyIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInN1cnZleS1oZWFkZXJcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXkgfSB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwic3RhcnRpbmdcIlxuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5ib2R5IH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPblRvcFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleS5zdGFydFN1cnZleVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc3RhcnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYWdlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF92bS5zdXJ2ZXkuc3RhcnRlZFBhZ2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBfdm0uc3VydmV5LnN0YXJ0ZWRQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LnN0YXJ0U3VydmV5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5zdGFydCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJydW5uaW5nXCIgfHwgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJwcmV2aWV3XCJcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3MuYm9keSB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3BcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2LXByb2dyZXNzLVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS10aW1lcnBhbmVsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Ub3BcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LW5hdmlnYXRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5uYXZJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYWdlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5wYWdlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF92bS5zdXJ2ZXkuY3VycmVudFBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktdGltZXJwYW5lbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Cb3R0b21cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LW5hdmlnYXRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5uYXZJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5oYXNDb21wbGV0ZWRQYWdlXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbXBsZXRlZFBhZ2VDbGFzc2VzKCksXG4gICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0uZ2V0UHJvY2Vzc2VkQ29tcGxldGVkSHRtbCgpKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSAhPSBcIlwiXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Muc2F2ZURhdGEucm9vdCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmdldENvbXBsZXRlZFN0YXRlQ2xhc3NlcygpIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5jb21wbGV0ZWRTdGF0ZVRleHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnNhdmVEYXRhLnNhdmVBZ2FpbkJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LmdldExvY1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhdmVBZ2FpbkJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvVHJ5U2F2ZUFnYWluIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImNvbXBsZXRlZGJlZm9yZVwiXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5ib2R5LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0uc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwibG9hZGluZ1wiXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5ib2R5LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5zdXJ2ZXkucHJvY2Vzc2VkTG9hZGluZ0h0bWwpIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImVtcHR5XCJcbiAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5ib2R5RW1wdHkgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArIF92bS5fcyhfdm0uc3VydmV5LmVtcHR5U3VydmV5VGV4dCkgKyBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LFxuICAgICAgc3R5bGU6IF92bS5pbnB1dFN0eWxlLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIHR5cGU6IF92bS5xdWVzdGlvbi5pbnB1dFR5cGUsXG4gICAgICAgIG1heGxlbmd0aDogX3ZtLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpLFxuICAgICAgICBtaW46IF92bS5xdWVzdGlvbi5yZW5kZXJlZE1pbixcbiAgICAgICAgbWF4OiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRNYXgsXG4gICAgICAgIHN0ZXA6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFN0ZXAsXG4gICAgICAgIHNpemU6IF92bS5xdWVzdGlvbi5pbnB1dFNpemUsXG4gICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgbGlzdDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQsXG4gICAgICAgIHBsYWNlaG9sZGVyOlxuICAgICAgICAgIF92bS5xdWVzdGlvbi5pbnB1dFR5cGUgPT09IFwicmFuZ2VcIiB8fCBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICA6IF92bS5xdWVzdGlvbi5wbGFjZUhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0ucXVlc3Rpb24uYXV0b0NvbXBsZXRlLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiIDogbnVsbFxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUgfSxcbiAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmNoYW5nZSwga2V5dXA6IF92bS5rZXl1cCB9XG4gICAgfSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uZGF0YUxpc3RJZFxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRhdGFsaXN0XCIsXG4gICAgICAgICAgeyBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmRhdGFMaXN0SWQgfSB9LFxuICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZGF0YUxpc3QsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiBpdGVtIH0gfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50ZXh0KSldKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQubm9cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5udW1iZXIsXG4gICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQubm8pKV1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0LFxuICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0gfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnN1cnZleVdpbmRvdy5pc1Nob3dpbmcsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXlXaW5kb3cuaXNTaG93aW5nXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5yb290LFxuICAgICAgc3RhdGljU3R5bGU6IHtcbiAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgYm90dG9tOiBcIjNweFwiLFxuICAgICAgICByaWdodDogXCIxMHB4XCIsXG4gICAgICAgIFwibWF4LXdpZHRoXCI6IFwiNjAlXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Mud2luZG93LmhlYWRlci5yb290IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6IFwiMTAwJVwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgXCJwYWRkaW5nLXJpZ2h0XCI6IFwiMTBweFwiIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS53aW5kb3dTdXJ2ZXkubG9jVGl0bGUgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5leHBhbmRlZENzcyxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLmlzRXhwYW5kZWRTdXJ2ZXlcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IFwicGFkZGluZy1yaWdodFwiOiBcIjEwcHhcIiB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihcIlhcIildXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzRXhwYW5kZWRTdXJ2ZXksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNFeHBhbmRlZFN1cnZleVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuYm9keVxuICAgICAgICB9LFxuICAgICAgICBbX2MoXCJzdXJ2ZXlcIiwgeyBhdHRyczogeyBzdXJ2ZXk6IF92bS53aW5kb3dTdXJ2ZXkgfSB9KV0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKG9wdGlvbnMuZnVuY3Rpb25hbCA/IHRoaXMucGFyZW50IDogdGhpcykuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdFxuICAgICAgICApXG4gICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuIiwidmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG4vLyBDb2RlIGNvcGllZCBmcm9tIFZ1ZS9zcmMvc2hhcmVkL3V0aWwuanNcbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpOyB9O1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYW4gZXZlbnQtZW1pdHRlciBmdW5jdGlvblxuICogQHBhcmFtICBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEByZXR1cm4gTWV0aG9kRGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWl0KGV2ZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfdGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICB2YXIga2V5ID0gaHlwaGVuYXRlKHByb3BlcnR5S2V5KTtcbiAgICAgICAgdmFyIG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVtaXQgPSBmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW1pdE5hbWUgPSBldmVudCB8fCBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdChlbWl0TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0KGVtaXROYW1lLCBhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhbZW1pdE5hbWVdLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhbZW1pdE5hbWVdLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXR1cm5WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKGVtaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZW1pdChyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUHJvbWlzZSB8fCAob2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGFuIGluamVjdFxuICogQHBhcmFtIGZyb20ga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Qob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtrZXldID0gb3B0aW9ucyB8fCBrZXk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgcmVhY3RpdmVJbmplY3RLZXkgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSByZWFjdGl2ZSBpbmplY3RcbiAqIEBwYXJhbSBmcm9tIGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0UmVhY3RpdmUob3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICB2YXIgZnJvbUtleV8xID0gISFvcHRpb25zID8gb3B0aW9ucy5mcm9tIHx8IG9wdGlvbnMgOiBrZXk7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFZhbF8xID0gKCEhb3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHQpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZClcbiAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge307XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXNbcmVhY3RpdmVJbmplY3RLZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogPyBvYmpbZnJvbUtleV8xXSA6IGRlZmF1bHRWYWxfMTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtyZWFjdGl2ZUluamVjdEtleV0gPSByZWFjdGl2ZUluamVjdEtleTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBhcHBseU1ldGFkYXRhIH0gZnJvbSAnLi4vaGVscGVycy9tZXRhZGF0YSc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBtb2RlbFxuICogQHBhcmFtICBldmVudCBldmVudCBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbChldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5tb2RlbCA9IHsgcHJvcDogaywgZXZlbnQ6IGV2ZW50IHx8IGsgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIHN5bmNlZCBtb2RlbCBhbmQgcHJvcFxuICogQHBhcmFtIHByb3BOYW1lIHRoZSBuYW1lIHRvIGludGVyZmFjZSB3aXRoIGZyb20gb3V0c2lkZSwgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSAgZXZlbnQgZXZlbnQgbmFtZVxuICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxTeW5jKHByb3BOYW1lLCBldmVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbcHJvcE5hbWVdID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMubW9kZWwgPSB7IHByb3A6IHByb3BOYW1lLCBldmVudDogZXZlbnQgfHwgayB9O1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tdID0ge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoZXZlbnQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcHJvcFxuICogQHBhcmFtICBvcHRpb25zIHRoZSBvcHRpb25zIGZvciB0aGUgcHJvcFxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3Aob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlba10gPSBvcHRpb25zO1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgYXBwbHlNZXRhZGF0YSB9IGZyb20gJy4uL2hlbHBlcnMvbWV0YWRhdGEnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBzeW5jZWQgcHJvcFxuICogQHBhcmFtIHByb3BOYW1lIHRoZSBuYW1lIHRvIGludGVyZmFjZSB3aXRoIGZyb20gb3V0c2lkZSwgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIGZvciB0aGUgc3luY2VkIHByb3BcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm9wU3luYyhwcm9wTmFtZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBhcHBseU1ldGFkYXRhKG9wdGlvbnMsIHRhcmdldCwga2V5KTtcbiAgICAgICAgY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbcHJvcE5hbWVdID0gb3B0aW9ucztcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkIHx8IChjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkID0ge30pKVtrXSA9IHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTpcIiArIHByb3BOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKHRhcmdldCwga2V5KTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmhlcml0SW5qZWN0ZWQsIG5lZWRUb1Byb2R1Y2VQcm92aWRlLCBwcm9kdWNlUHJvdmlkZSwgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBwcm92aWRlXG4gKiBAcGFyYW0ga2V5IGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGUoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICB2YXIgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZTtcbiAgICAgICAgaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFRvUHJvZHVjZVByb3ZpZGUocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBwcm9kdWNlUHJvdmlkZShwcm92aWRlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlLm1hbmFnZWRba10gPSBrZXkgfHwgaztcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgaW5oZXJpdEluamVjdGVkLCBuZWVkVG9Qcm9kdWNlUHJvdmlkZSwgcHJvZHVjZVByb3ZpZGUsIH0gZnJvbSAnLi4vaGVscGVycy9wcm92aWRlSW5qZWN0Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcmVhY3RpdmUgcHJvdmlkZVxuICogQHBhcmFtIGtleSBrZXlcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3IgfCB2b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm92aWRlUmVhY3RpdmUoa2V5KSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICB2YXIgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZTtcbiAgICAgICAgaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFRvUHJvZHVjZVByb3ZpZGUocHJvdmlkZSkpIHtcbiAgICAgICAgICAgIHByb3ZpZGUgPSBjb21wb25lbnRPcHRpb25zLnByb3ZpZGUgPSBwcm9kdWNlUHJvdmlkZShwcm92aWRlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtrXSA9IGtleSB8fCBrO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHJlZiBwcm9wXG4gKiBAcGFyYW0gcmVmS2V5IHRoZSByZWYga2V5IGRlZmluZWQgaW4gdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlZihyZWZLZXkpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChvcHRpb25zLCBrZXkpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQgfHwge307XG4gICAgICAgIG9wdGlvbnMuY29tcHV0ZWRba2V5XSA9IHtcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRyZWZzW3JlZktleSB8fCBrZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuLyoqXG4gKiBkZWNvcmF0b3IgZm9yIGNhcHR1cmluZ3Mgdi1tb2RlbCBiaW5kaW5nIHRvIGNvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWTW9kZWwob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHZhbHVlS2V5ID0gJ3ZhbHVlJztcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrZXkpIHtcbiAgICAgICAgO1xuICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyB8fCAoY29tcG9uZW50T3B0aW9ucy5wcm9wcyA9IHt9KSlbdmFsdWVLZXldID0gb3B0aW9ucztcbiAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tleV0gPSB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t2YWx1ZUtleV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgd2F0Y2ggZnVuY3Rpb25cbiAqIEBwYXJhbSAgcGF0aCB0aGUgcGF0aCBvciB0aGUgZXhwcmVzc2lvbiB0byBvYnNlcnZlXG4gKiBAcGFyYW0gIFdhdGNoT3B0aW9uXG4gKiBAcmV0dXJuIE1ldGhvZERlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gV2F0Y2gocGF0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIF9hID0gb3B0aW9ucy5kZWVwLCBkZWVwID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5pbW1lZGlhdGUsIGltbWVkaWF0ZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLndhdGNoICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdhdGNoID0gY29tcG9uZW50T3B0aW9ucy53YXRjaDtcbiAgICAgICAgaWYgKHR5cGVvZiB3YXRjaFtwYXRoXSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkod2F0Y2hbcGF0aF0pKSB7XG4gICAgICAgICAgICB3YXRjaFtwYXRoXSA9IFt3YXRjaFtwYXRoXV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdhdGNoW3BhdGhdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2F0Y2hbcGF0aF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB3YXRjaFtwYXRoXS5wdXNoKHsgaGFuZGxlcjogaGFuZGxlciwgZGVlcDogZGVlcCwgaW1tZWRpYXRlOiBpbW1lZGlhdGUgfSk7XG4gICAgfSk7XG59XG4iLCIvKiogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGFzcy1jb21wb25lbnQvYmxvYi9tYXN0ZXIvc3JjL3JlZmxlY3QudHN9ICovXG52YXIgcmVmbGVjdE1ldGFkYXRhSXNTdXBwb3J0ZWQgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJlZmxlY3QuZ2V0TWV0YWRhdGEgIT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpIHtcbiAgICBpZiAocmVmbGVjdE1ldGFkYXRhSXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmXG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBuZWVkVG9Qcm9kdWNlUHJvdmlkZShvcmlnaW5hbCkge1xuICAgIHJldHVybiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICghb3JpZ2luYWwubWFuYWdlZCAmJiAhb3JpZ2luYWwubWFuYWdlZFJlYWN0aXZlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjZVByb3ZpZGUob3JpZ2luYWwpIHtcbiAgICB2YXIgcHJvdmlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJ2ID0gdHlwZW9mIG9yaWdpbmFsID09PSAnZnVuY3Rpb24nID8gb3JpZ2luYWwuY2FsbCh0aGlzKSA6IG9yaWdpbmFsO1xuICAgICAgICBydiA9IE9iamVjdC5jcmVhdGUocnYgfHwgbnVsbCk7XG4gICAgICAgIC8vIHNldCByZWFjdGl2ZSBzZXJ2aWNlcyAocHJvcGFnYXRlcyBwcmV2aW91cyBzZXJ2aWNlcyBpZiBuZWNlc3NhcnkpXG4gICAgICAgIHJ2W3JlYWN0aXZlSW5qZWN0S2V5XSA9IE9iamVjdC5jcmVhdGUodGhpc1tyZWFjdGl2ZUluamVjdEtleV0gfHwge30pO1xuICAgICAgICBmb3IgKHZhciBpIGluIHByb3ZpZGUubWFuYWdlZCkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkW2ldXSA9IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcnZbcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmVbaV1dID0gdGhpc18xW2ldOyAvLyBEdXBsaWNhdGVzIHRoZSBiZWhhdmlvciBvZiBgQFByb3ZpZGVgXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocnZbcmVhY3RpdmVJbmplY3RLZXldLCBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtpXSwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXNbaV07IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgIGZvciAodmFyIGkgaW4gcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUpIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgIH07XG4gICAgcHJvdmlkZS5tYW5hZ2VkID0ge307XG4gICAgcHJvdmlkZS5tYW5hZ2VkUmVhY3RpdmUgPSB7fTtcbiAgICByZXR1cm4gcHJvdmlkZTtcbn1cbi8qKiBVc2VkIGZvciBrZXlpbmcgcmVhY3RpdmUgcHJvdmlkZS9pbmplY3QgcHJvcGVydGllcyAqL1xuZXhwb3J0IHZhciByZWFjdGl2ZUluamVjdEtleSA9ICdfX3JlYWN0aXZlSW5qZWN0X18nO1xuZXhwb3J0IGZ1bmN0aW9uIGluaGVyaXRJbmplY3RlZChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgLy8gaW5qZWN0IHBhcmVudCByZWFjdGl2ZSBzZXJ2aWNlcyAoaWYgYW55KVxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wb25lbnRPcHRpb25zLmluamVjdCkpIHtcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSBjb21wb25lbnRPcHRpb25zLmluamVjdCB8fCB7fTtcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3RbcmVhY3RpdmVJbmplY3RLZXldID0ge1xuICAgICAgICAgICAgZnJvbTogcmVhY3RpdmVJbmplY3RLZXksXG4gICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCIvKiogdnVlLXByb3BlcnR5LWRlY29yYXRvciB2ZXJzb24gOS4xLjIgTUlUIExJQ0VOU0UgY29weXJpZ2h0IDIwMjAga2FvcnVuMzQzICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz0ncmVmbGVjdC1tZXRhZGF0YScvPlxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IENvbXBvbmVudCwgeyBtaXhpbnMgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmV4cG9ydCB7IENvbXBvbmVudCwgVnVlLCBtaXhpbnMgYXMgTWl4aW5zIH07XG5leHBvcnQgeyBFbWl0IH0gZnJvbSAnLi9kZWNvcmF0b3JzL0VtaXQnO1xuZXhwb3J0IHsgSW5qZWN0IH0gZnJvbSAnLi9kZWNvcmF0b3JzL0luamVjdCc7XG5leHBvcnQgeyBJbmplY3RSZWFjdGl2ZSB9IGZyb20gJy4vZGVjb3JhdG9ycy9JbmplY3RSZWFjdGl2ZSc7XG5leHBvcnQgeyBNb2RlbCB9IGZyb20gJy4vZGVjb3JhdG9ycy9Nb2RlbCc7XG5leHBvcnQgeyBNb2RlbFN5bmMgfSBmcm9tICcuL2RlY29yYXRvcnMvTW9kZWxTeW5jJztcbmV4cG9ydCB7IFByb3AgfSBmcm9tICcuL2RlY29yYXRvcnMvUHJvcCc7XG5leHBvcnQgeyBQcm9wU3luYyB9IGZyb20gJy4vZGVjb3JhdG9ycy9Qcm9wU3luYyc7XG5leHBvcnQgeyBQcm92aWRlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3ZpZGUnO1xuZXhwb3J0IHsgUHJvdmlkZVJlYWN0aXZlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3ZpZGVSZWFjdGl2ZSc7XG5leHBvcnQgeyBSZWYgfSBmcm9tICcuL2RlY29yYXRvcnMvUmVmJztcbmV4cG9ydCB7IFZNb2RlbCB9IGZyb20gJy4vZGVjb3JhdG9ycy9WTW9kZWwnO1xuZXhwb3J0IHsgV2F0Y2ggfSBmcm9tICcuL2RlY29yYXRvcnMvV2F0Y2gnO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHByb3BlcnR5LCBwcm9wZXJ0eUFycmF5IH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcIi4vbGlzdFwiO1xuaW1wb3J0IHsgUG9wdXBNb2RlbCB9IGZyb20gXCIuL3BvcHVwXCI7XG5pbXBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuXG4vKipcbiAqIERlZmluZXMgYW4gaW5kaXZpZHVhbCBhY3Rpb24uIEFjdGlvbiBpdGVtcyBjYW4gYmUgZGlzcGxheWVkIGluIGNlcnRhaW4gc3VydmV5IGVsZW1lbnRzIC0gaW4gVG9vbGJhciAob3IgYWN0aW9uIGJhciksIGluIHRpdGxlcyAob2YgcGFnZXMsIHBhbmVscywgcXVlc3Rpb25zKSwgaW4gbWF0cml4IHJvd3MgKGFzICdleHBhbmQgZGV0YWlscycgb3IgJ3JlbW92ZSByb3cnIGJ1dHRvbnMpLCBhbmQgZXRjLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25CYXJJdGVtIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBzdHJpbmcgaWRcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBtYWtlIHRoZSB0b29sYmFyIGl0ZW0gaW52aXNpYmxlLlxuICAgKi9cbiAgdmlzaWJsZT86ICgoKSA9PiBib29sZWFuKSB8IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb29sYmFyIGl0ZW0gdGl0bGVcbiAgICovXG4gIHRpdGxlPzogKCgpID0+IHN0cmluZykgfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBUb29sYmFyIGl0ZW0gdG9vbHRpcFxuICAgKi9cbiAgdG9vbHRpcD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGRpc2FibGUgdGhlIHRvb2xiYXIgaXRlbS5cbiAgICovXG4gIGVuYWJsZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gaGlkZSB0aGUgdG9vbGJhciBpdGVtIHRpdGxlLlxuICAgKi9cbiAgc2hvd1RpdGxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgdGhhdCBjYWxscyBvbiB0b29sYmFyIGl0ZW0gY2xpY2suXG4gICAqL1xuICBhY3Rpb24/OiAoY29udGV4dD86IGFueSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFRvb2xiYXIgaXRlbSBjc3MgY2xhc3NcbiAgICovXG4gIGNzcz86ICgoKSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICAvKipcbiAgICogVG9vbGJhciBpbm5lciBlbGVtZW50IGNzcyBjbGFzc1xuICAgKi9cbiAgaW5uZXJDc3M/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUb29sYmFyIGl0ZW0gZGF0YSBvYmplY3QuIFVzZWQgYXMgZGF0YSBmb3IgY3VzdG9tIHRlbXBsYXRlIG9yIGNvbXBvbmVudCByZW5kZXJpbmdcbiAgICovXG4gIGRhdGE/OiBhbnk7XG4gIHBvcHVwTW9kZWw/OiBhbnk7IC8vVE9ETzogdGVtcCwgdXNlIGRhdGEgaW5zdGVhZFxuICBuZWVkU2VwYXJhdG9yPzogYm9vbGVhbjsgLy9UT0RPOiB0ZW1wXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGFjdGl2YXRlIHRoZSB0b29sYmFyIGl0ZW0gKHBhZ2UpXG4gICAqL1xuICBhY3RpdmU/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuICAvKipcbiAgICogVG9vbGJhciBpdGVtIHRlbXBsYXRlIG5hbWVcbiAgICovXG4gIHRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogVG9vbGJhciBpdGVtIGNvbXBvbmVudCBuYW1lXG4gICAqL1xuICBjb21wb25lbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUb29sYmFyIGl0ZW0gaWNvbiBuYW1lXG4gICAqL1xuICBpY29uTmFtZT86ICgoKSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICAvKipcbiAgICogVG9vbGJhciBpdGVtIGNoaWxkIGl0ZW1zLiBDYW4gYmUgdXNlZCBhcyBjb250aWFuZXIgZm9yIG9wdGlvbnNcbiAgICovXG4gIGl0ZW1zPzogYW55O1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGFjdGlvbidzIGxvY2F0aW9uIGluIGEgbWF0cml4IHF1ZXN0aW9uJ3Mgcm93LlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgc3RhcnRgIC0gQW4gYWN0aW9uIGlzIGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJvdy5cbiAgICogLSBgZW5kYCAtIEFuIGFjdGlvbiBpcyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgYSByb3cuXG4gICAqL1xuICBsb2NhdGlvbj86IHN0cmluZztcbiAgdmlzaWJsZUluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQmFySXRlbSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJQWN0aW9uQmFySXRlbSB7XG4gIGNvbnN0cnVjdG9yKGl0ZW06IElBY3Rpb25CYXJJdGVtKSB7XG4gICAgc3VwZXIoKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGl0ZW0pO1xuICB9XG4gIGxvY2F0aW9uPzogc3RyaW5nO1xuICBAcHJvcGVydHkoKSBpZDogc3RyaW5nO1xuICBAcHJvcGVydHkoKSB2aXNpYmxlPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcbiAgQHByb3BlcnR5KCkgdGl0bGU/OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgQHByb3BlcnR5KCkgdG9vbHRpcD86IHN0cmluZztcbiAgQHByb3BlcnR5KCkgZW5hYmxlZD86ICgoKSA9PiBib29sZWFuKSB8IGJvb2xlYW47XG4gIEBwcm9wZXJ0eSgpIHNob3dUaXRsZT86IGJvb2xlYW47XG4gIEBwcm9wZXJ0eSgpIGFjdGlvbj86IChjb250ZXh0PzogYW55KSA9PiB2b2lkO1xuICBAcHJvcGVydHkoKSBjc3M/OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgQHByb3BlcnR5KCkgaW5uZXJDc3M/OiBzdHJpbmc7XG4gIEBwcm9wZXJ0eSgpIGRhdGE/OiBhbnk7XG4gIEBwcm9wZXJ0eSgpIHBvcHVwTW9kZWw/OiBhbnk7XG4gIEBwcm9wZXJ0eSgpIG5lZWRTZXBhcmF0b3I/OiBib29sZWFuO1xuICBAcHJvcGVydHkoKSBhY3RpdmU/OiBib29sZWFuIHwgKCgpID0+IGJvb2xlYW4pO1xuICBAcHJvcGVydHkoKSB0ZW1wbGF0ZT86IHN0cmluZztcbiAgQHByb3BlcnR5KCkgY29tcG9uZW50Pzogc3RyaW5nO1xuICBAcHJvcGVydHkoKSBpY29uTmFtZT86ICgoKSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBAcHJvcGVydHkoKSBpdGVtcz86IGFueTtcbiAgQHByb3BlcnR5KCkgdmlzaWJsZUluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlciBleHRlbmRzIEJhc2VcbiAgaW1wbGVtZW50cyBJQWN0aW9uQmFySXRlbSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3duZXI6IEFkYXB0aXZlRWxlbWVudCwgcHJpdmF0ZSBpdGVtOiBJQWN0aW9uQmFySXRlbSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uZWVkU2VwYXJhdG9yID0gaXRlbS5uZWVkU2VwYXJhdG9yO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnZpc2libGVJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd3JhcHBlZEl0ZW0oKTogSUFjdGlvbkJhckl0ZW0ge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBzdGF0ZUl0ZW0oKTogQmFzZSB7XG4gICAgdmFyIGl0ZW06IGFueSA9IHRoaXMuaXRlbTtcbiAgICByZXR1cm4gISFpdGVtICYmIGl0ZW1bXCJnZXRUeXBlXCJdID8gaXRlbSA6IHRoaXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pZDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHVud3JhcCh0aGlzLml0ZW0udmlzaWJsZSk7XG4gIH1cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bndyYXAodGhpcy5pdGVtLnRpdGxlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdW53cmFwKHRoaXMuaXRlbS50b29sdGlwKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHVud3JhcCh0aGlzLml0ZW0uZW5hYmxlZCk7XG4gIH1cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0VuYWJsZWQgPSB0aGlzLmVuYWJsZWQ7XG4gICAgaWYgKGlzRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFpc0VuYWJsZWQ7XG4gIH1cbiAgcHVibGljIGdldCBzaG93VGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMub3duZXIuc2hvd1RpdGxlcyAmJlxuICAgICAgKHRoaXMuaXRlbS5zaG93VGl0bGUgfHwgdGhpcy5pdGVtLnNob3dUaXRsZSA9PT0gdW5kZWZpbmVkKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcbiAgICB0aGlzLml0ZW0uYWN0aW9uICYmIHRoaXMuaXRlbS5hY3Rpb24oY29udGV4dCk7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKTogKCgpID0+IHN0cmluZykgfCBzdHJpbmcge1xuICAgIHJldHVybiB1bndyYXAodGhpcy5pdGVtLmNzcyk7XG4gIH1cbiAgcHVibGljIGdldCBpbm5lckNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bndyYXAodGhpcy5pdGVtLmlubmVyQ3NzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdW53cmFwKHRoaXMuaXRlbS5kYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBvcHVwTW9kZWwoKTogYW55IHtcbiAgICByZXR1cm4gdW53cmFwKHRoaXMuaXRlbS5wb3B1cE1vZGVsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdW53cmFwKHRoaXMuaXRlbS5hY3RpdmUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnRlbXBsYXRlO1xuICB9XG4gIHB1YmxpYyBnZXQgY29tcG9uZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVud3JhcCh0aGlzLml0ZW0uY29tcG9uZW50KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGljb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVud3JhcCh0aGlzLml0ZW0uaWNvbk5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55IHtcbiAgICByZXR1cm4gdW53cmFwKHRoaXMuaXRlbS5pdGVtcyk7XG4gIH1cbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiB0cnVlIH0pIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgQHByb3BlcnR5KCkgbmVlZFNlcGFyYXRvcjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlRWxlbWVudCBleHRlbmRzIEJhc2Uge1xuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IHRydWUgfSkgc2hvd1RpdGxlczogYm9vbGVhbjtcbiAgQHByb3BlcnR5QXJyYXkoKSBpdGVtczogQXJyYXk8QWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlcj47XG4gIEBwcm9wZXJ0eUFycmF5KHtcbiAgICBvblNldDogKHZhbDogYW55LCB0YXJnZXQ6IEFkYXB0aXZlRWxlbWVudCkgPT4ge1xuICAgICAgdGFyZ2V0LmludmlzaWJsZUl0ZW1zTGlzdE1vZGVsLml0ZW1zID0gdGFyZ2V0LmludmlzaWJsZUl0ZW1zO1xuICAgIH0sXG4gIH0pXG4gIGludmlzaWJsZUl0ZW1zOiBBcnJheTxBZGFwdGl2ZUFjdGlvbkJhckl0ZW1XcmFwcGVyPjtcblxuICBwcm90ZWN0ZWQgZG90c0l0ZW06IEFkYXB0aXZlQWN0aW9uQmFySXRlbVdyYXBwZXI7IC8vICguLi4pIGJ1dHRvblxuICBwdWJsaWMgZG90c0l0ZW1Qb3B1cE1vZGVsOiBQb3B1cE1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kb3RzSXRlbVBvcHVwTW9kZWwgPSBuZXcgUG9wdXBNb2RlbChcInN2LWxpc3RcIiwge1xuICAgICAgbW9kZWw6IHRoaXMuaW52aXNpYmxlSXRlbXNMaXN0TW9kZWwsXG4gICAgfSk7XG4gICAgdGhpcy5kb3RzSXRlbSA9IG5ldyBBZGFwdGl2ZUFjdGlvbkJhckl0ZW1XcmFwcGVyKFxuICAgICAgdGhpcyxcbiAgICAgIG5ldyBBY3Rpb25CYXJJdGVtKHtcbiAgICAgICAgaWQ6IFwiZG90c0l0ZW0taWRcIixcbiAgICAgICAgY29tcG9uZW50OiBcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLFxuICAgICAgICBjc3M6IFwic3YtZG90c1wiLFxuICAgICAgICBpbm5lckNzczogXCJzdi1kb3RzX19pdGVtXCIsXG4gICAgICAgIGljb25OYW1lOiBcImljb24tZG90c1wiLFxuICAgICAgICAvLyBzaG93VGl0bGU6IHRydWUsXG4gICAgICAgIC8vIHRpdGxlOiBcIi4uLlwiLFxuICAgICAgICBhY3Rpb246IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmRvdHNJdGVtUG9wdXBNb2RlbC50b2dnbGVWaXNpYmlsaXR5KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvcHVwTW9kZWw6IHRoaXMuZG90c0l0ZW1Qb3B1cE1vZGVsLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuaXRlbXMgfHwgW10pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgaW52aXNpYmxlSXRlbVNlbGVjdGVkKGl0ZW06IEFkYXB0aXZlQWN0aW9uQmFySXRlbVdyYXBwZXIpOiB2b2lkIHtcbiAgICBpZiAoISFpdGVtICYmIHR5cGVvZiBpdGVtLmFjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpdGVtLmFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpbnZpc2libGVJdGVtc0xpc3RNb2RlbDogTGlzdE1vZGVsID0gbmV3IExpc3RNb2RlbChcbiAgICBbXSxcbiAgICAoaXRlbTogQWRhcHRpdmVBY3Rpb25CYXJJdGVtV3JhcHBlcikgPT4ge1xuICAgICAgdGhpcy5pbnZpc2libGVJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gICAgICB0aGlzLmRvdHNJdGVtUG9wdXBNb2RlbC50b2dnbGVWaXNpYmlsaXR5KCk7XG4gICAgfSxcbiAgICBmYWxzZVxuICApO1xuXG4gIHB1YmxpYyBzaG93Rmlyc3ROKHZpc2libGVJdGVtc0NvdW50OiBudW1iZXIpIHtcbiAgICBsZXQgbGVmdEl0ZW1zVG9TaG93ID0gdmlzaWJsZUl0ZW1zQ291bnQ7XG4gICAgY29uc3QgaW52aXNpYmxlSXRlbXM6IEFkYXB0aXZlQWN0aW9uQmFySXRlbVdyYXBwZXJbXSA9IFtdO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuZG90c0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS5pc1Zpc2libGUgPSBsZWZ0SXRlbXNUb1Nob3cgPiAwO1xuICAgICAgaWYgKGxlZnRJdGVtc1RvU2hvdyA8PSAwKSB7XG4gICAgICAgIGludmlzaWJsZUl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICBsZWZ0SXRlbXNUb1Nob3ctLTtcbiAgICB9KTtcbiAgICB0aGlzLmludmlzaWJsZUl0ZW1zID0gaW52aXNpYmxlSXRlbXM7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHRoaXMuZG90c0l0ZW0pO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKHZpc2libGVJdGVtc0NvdW50IDwgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHZpc2libGVJdGVtc0NvdW50LCAwLCB0aGlzLmRvdHNJdGVtKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblNocmluaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGl0bGVzO1xuICB9XG4gIHB1YmxpYyByZWFkb25seSBjYW5Hcm93ID0gdHJ1ZTtcbiAgcHVibGljIHNocmluaygpIHtcbiAgICB0aGlzLnNob3dUaXRsZXMgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ3JvdygpIHtcbiAgICB0aGlzLnNob3dUaXRsZXMgPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXIgZXh0ZW5kcyBBZGFwdGl2ZUVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBzZXRJdGVtcyhpdGVtczogQXJyYXk8SUFjdGlvbkJhckl0ZW0+KSB7XG4gICAgdmFyIHNldEl0ZW1zID0gdGhpcy53cmFwSXRlbXMoaXRlbXMpO1xuICAgIHNldEl0ZW1zID0gdGhpcy5zb3J0SXRlbXMoc2V0SXRlbXMpO1xuICAgIHRoaXMuaXRlbXMgPSBzZXRJdGVtcztcbiAgfVxuICBwcml2YXRlIHdyYXBJdGVtcyhcbiAgICBpdGVtczogQXJyYXk8SUFjdGlvbkJhckl0ZW0+XG4gICk6IEFycmF5PEFkYXB0aXZlQWN0aW9uQmFySXRlbVdyYXBwZXI+IHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJQWN0aW9uQmFySXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBBZGFwdGl2ZUFjdGlvbkJhckl0ZW1XcmFwcGVyKHRoaXMsIGl0ZW0pO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc29ydEl0ZW1zKGl0ZW1zOiBBcnJheTxJQWN0aW9uQmFySXRlbT4pIHtcbiAgICByZXR1cm4gW11cbiAgICAgIC5jb25jYXQoXG4gICAgICAgIGl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS52aXNpYmxlSW5kZXggPj0gMCB8fCBpdGVtLnZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zb3J0KChmaXJzdEl0ZW0sIHNlY29uZEl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGZpcnN0SXRlbS52aXNpYmxlSW5kZXggLSBzZWNvbmRJdGVtLnZpc2libGVJbmRleDtcbiAgICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24sXG4gIEpzb25PYmplY3QsXG4gIEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgcHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcIi4vcmVuZGVyZXJGYWN0b3J5XCI7XG5pbXBvcnQgeyBJQWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5RGF0YSB7XG4gIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnksXG4gICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQ/OiBib29sZWFuXG4gICk6IGFueTtcbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55O1xuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiB2b2lkO1xuICBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcsIGxvY05vdGlmaWNhdGlvbjogYW55KTogYW55O1xuICBnZXRBbGxWYWx1ZXMoKTogYW55O1xuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnk7XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIElUZXh0UHJvY2Vzc29yIHtcbiAgcHJvY2Vzc1RleHQodGV4dDogc3RyaW5nLCByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW4pOiBzdHJpbmc7XG4gIHByb2Nlc3NUZXh0RXgoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbixcbiAgICBkb0VuY29kaW5nOiBib29sZWFuXG4gICk6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUVycm9yT3duZXIgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciB7XG4gIGdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvcik6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5IGV4dGVuZHMgSVRleHRQcm9jZXNzb3IsIElTdXJ2ZXlFcnJvck93bmVyIHtcbiAgY3VycmVudFBhZ2U6IElQYWdlO1xuICBwYWdlczogQXJyYXk8SVBhZ2U+O1xuICBnZXRDc3MoKTogYW55O1xuICBpc1BhZ2VTdGFydGVkKHBhZ2U6IElQYWdlKTogYm9vbGVhbjtcbiAgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogSVF1ZXN0aW9uO1xuICBwYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZTogSVBhZ2UsIG5ld1ZhbHVlOiBib29sZWFuKTogYW55O1xuICBwYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHBhbmVsOiBJUGFuZWwsIG5ld1ZhbHVlOiBib29sZWFuKTogYW55O1xuICBxdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBib29sZWFuKTogYW55O1xuICBpc0VkaXRpbmdTdXJ2ZXlFbGVtZW50OiBib29sZWFuO1xuICBpc0NsZWFyVmFsdWVPbkhpZGRlbjogYm9vbGVhbjtcbiAgaXNDbGVhclZhbHVlT25IaWRkZW5Db250YWluZXI6IGJvb2xlYW47XG4gIHF1ZXN0aW9uc09yZGVyOiBzdHJpbmc7XG4gIHF1ZXN0aW9uQ3JlYXRlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYW55O1xuICBxdWVzdGlvbkFkZGVkKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYXJlbnRQYW5lbDogYW55LFxuICAgIHJvb3RQYW5lbDogYW55XG4gICk6IGFueTtcbiAgcGFuZWxBZGRlZChcbiAgICBwYW5lbDogSUVsZW1lbnQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYXJlbnRQYW5lbDogYW55LFxuICAgIHJvb3RQYW5lbDogYW55XG4gICk6IGFueTtcbiAgcXVlc3Rpb25SZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBhbnk7XG4gIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpOiBhbnk7XG4gIHF1ZXN0aW9uUmVuYW1lZChcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIG9sZE5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZU5hbWU6IHN0cmluZ1xuICApOiBhbnk7XG4gIHZhbGlkYXRlUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFN1cnZleUVycm9yO1xuICB2YWxpZGF0ZVBhbmVsKHBhbmVsOiBJUGFuZWwpOiBTdXJ2ZXlFcnJvcjtcbiAgaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBxdWVzdGlvbkNvdW50QnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0U3VydmV5TWFya2Rvd25IdG1sKGVsZW1lbnQ6IEJhc2UsIHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRSZW5kZXJlckZvclN0cmluZyhlbGVtZW50OiBCYXNlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGlzRGlzcGxheU1vZGU6IGJvb2xlYW47XG4gIGlzRGVzaWduTW9kZTogYm9vbGVhbjtcbiAgYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nOiBib29sZWFuO1xuICBhcmVFbXB0eUVsZW1lbnRzSGlkZGVuOiBib29sZWFuO1xuICBpc0xvYWRpbmdGcm9tSnNvbjogYm9vbGVhbjtcbiAgaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZzogYm9vbGVhbjtcblxuICBzdGF0ZTogc3RyaW5nO1xuICBpc0xhenlSZW5kZXJpbmc6IGJvb2xlYW47XG4gIGNhbmNlbFByZXZpZXdCeVBhZ2UocGFuZWw6IElQYW5lbCk6IGFueTtcblxuICByZXF1aXJlZFRleHQ6IHN0cmluZztcbiAgYmVmb3JlU2V0dGluZ1F1ZXN0aW9uRXJyb3JzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj5cbiAgKTogdm9pZDtcbiAgYmVmb3JlU2V0dGluZ1BhbmVsRXJyb3JzKHF1ZXN0aW9uOiBJUGFuZWwsIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KTogdm9pZDtcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm46IHN0cmluZztcbiAgZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGUocXVlc3Rpb246IElRdWVzdGlvbiwgdGl0bGU6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0VXBkYXRlZFF1ZXN0aW9uTm8ocXVlc3Rpb246IElRdWVzdGlvbiwgbm86IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGVBY3Rpb25zKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uQmFySXRlbT5cbiAgKTogQXJyYXk8SUFjdGlvbkJhckl0ZW0+O1xuICBnZXRVcGRhdGVkUGFuZWxUaXRsZUFjdGlvbnMoXG4gICAgcXVlc3Rpb246IElQYW5lbCxcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb25CYXJJdGVtPlxuICApOiBBcnJheTxJQWN0aW9uQmFySXRlbT47XG4gIGdldFVwZGF0ZWRQYWdlVGl0bGVBY3Rpb25zKFxuICAgIHF1ZXN0aW9uOiBJUGFnZSxcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb25CYXJJdGVtPlxuICApOiBBcnJheTxJQWN0aW9uQmFySXRlbT47XG4gIGdldFVwZGF0ZWRNYXRyaXhSb3dBY3Rpb25zKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgYWN0aW9uczogQXJyYXk8SUFjdGlvbkJhckl0ZW0+XG4gICk6IEFycmF5PElBY3Rpb25CYXJJdGVtPjtcbiAgcXVlc3Rpb25TdGFydEluZGV4OiBzdHJpbmc7XG4gIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogc3RyaW5nO1xuICBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb246IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBzdHJpbmc7XG4gIHN0b3JlT3RoZXJzQXNDb21tZW50OiBib29sZWFuO1xuXG4gIG1heFRleHRMZW5ndGg6IG51bWJlcjtcbiAgbWF4T3RoZXJzTGVuZ3RoOiBudW1iZXI7XG4gIGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtczogYm9vbGVhbjtcblxuICB1cGxvYWRGaWxlcyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmaWxlczogRmlsZVtdLFxuICAgIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICk6IGFueTtcbiAgZG93bmxvYWRGaWxlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnlcbiAgKTogYW55O1xuICBjbGVhckZpbGVzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcbiAgICBjbGVhckNhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICk6IGFueTtcbiAgdXBkYXRlQ2hvaWNlc0Zyb21TZXJ2ZXIoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBjaG9pY2VzOiBBcnJheTxhbnk+LFxuICAgIHNlcnZlclJlc3VsdDogYW55XG4gICk6IEFycmF5PGFueT47XG4gIHVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBjc3NDbGFzc2VzOiBhbnkpOiBhbnk7XG4gIHVwZGF0ZVBhbmVsQ3NzQ2xhc3NlcyhwYW5lbDogSVBhbmVsLCBjc3NDbGFzc2VzOiBhbnkpOiBhbnk7XG4gIHVwZGF0ZVBhZ2VDc3NDbGFzc2VzKHBhbmVsOiBJUGFuZWwsIGNzc0NsYXNzZXM6IGFueSk6IGFueTtcbiAgYWZ0ZXJSZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBhbnk7XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dChxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBhbnk7XG4gIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBhbnk7XG4gIGFmdGVyUmVuZGVyUGFnZShodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBhbnk7XG5cbiAgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBJUXVlc3Rpb247XG4gIG1hdHJpeFJvd0FkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvdzogYW55KTogYW55O1xuICBtYXRyaXhCZWZvcmVSb3dBZGRlZChvcHRpb25zOiB7XG4gICAgcXVlc3Rpb246IElRdWVzdGlvbjtcbiAgICBjYW5BZGRSb3c6IGJvb2xlYW47XG4gIH0pOiBhbnk7XG4gIG1hdHJpeFJvd1JlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcm93SW5kZXg6IG51bWJlciwgcm93OiBhbnkpOiBhbnk7XG4gIG1hdHJpeFJvd1JlbW92aW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvd0luZGV4OiBudW1iZXIsIHJvdzogYW55KTogYm9vbGVhbjtcbiAgbWF0cml4QWxsb3dSZW1vdmVSb3coXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHJvdzogYW55XG4gICk6IGJvb2xlYW47XG4gIG1hdHJpeENlbGxDcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcbiAgbWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcbiAgbWF0cml4Q2VsbFZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpOiBhbnk7XG4gIG1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcbiAgaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZzogYm9vbGVhbjtcbiAgbWF0cml4Q2VsbFZhbGlkYXRlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IFN1cnZleUVycm9yO1xuICBkeW5hbWljUGFuZWxBZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYW55O1xuICBkeW5hbWljUGFuZWxSZW1vdmVkKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcGFuZWxJbmRleDogbnVtYmVyLFxuICAgIHBhbmVsOiBJUGFuZWxcbiAgKTogYW55O1xuICBkeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICBkcmFnQW5kRHJvcEFsbG93KG9wdGlvbnM6IGFueSk6IGJvb2xlYW47XG5cbiAgc2Nyb2xsRWxlbWVudFRvVG9wKFxuICAgIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcGFnZTogSVBhZ2UsXG4gICAgaWQ6IHN0cmluZ1xuICApOiBhbnk7XG4gIHJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYW55O1xuICByZW5kZXJUaXRsZUFjdGlvbnMoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiBib29sZWFuO1xuICBlbGVtZW50Q29udGVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KTogdm9pZDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUltcGwge1xuICBnZXRTdXJ2ZXlEYXRhKCk6IElTdXJ2ZXlEYXRhO1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3Nvcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmRpdGlvblJ1bm5lciB7XG4gIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pik6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUVsZW1lbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgaXNSZWFkT25seTogYm9vbGVhbjtcbiAgaXNQYWdlOiBib29sZWFuO1xuICBpc1BhbmVsOiBib29sZWFuO1xuICBjb250YWluc0Vycm9yczogYm9vbGVhbjtcbiAgcGFyZW50OiBJUGFuZWw7XG4gIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKTogYW55O1xuICBvblN1cnZleUxvYWQoKTogYW55O1xuICBvbkZpcnN0UmVuZGVyaW5nKCk6IGFueTtcbiAgZ2V0VHlwZSgpOiBzdHJpbmc7XG4gIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyO1xuICBsb2NTdHJzQ2hhbmdlZCgpOiBhbnk7XG4gIGRlbGV0ZSgpOiBhbnk7XG4gIHRvZ2dsZVN0YXRlKCk6IHZvaWQ7XG4gIHN0YXRlQ2hhbmdlZENhbGxiYWNrKCk6IHZvaWQ7XG4gIGdldFRpdGxlQWN0aW9ucygpOiBBcnJheTxhbnk+O1xufVxuZXhwb3J0IGludGVyZmFjZSBJRWxlbWVudCBleHRlbmRzIElDb25kaXRpb25SdW5uZXIsIElTdXJ2ZXlFbGVtZW50IHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgcmVuZGVyV2lkdGg6IHN0cmluZztcbiAgd2lkdGg6IHN0cmluZztcbiAgbWluV2lkdGg/OiBzdHJpbmc7XG4gIG1heFdpZHRoPzogc3RyaW5nO1xuICBpc0V4cGFuZGVkOiBib29sZWFuO1xuICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgcmlnaHRJbmRlbnQ6IG51bWJlcjtcbiAgc3RhcnRXaXRoTmV3TGluZTogYm9vbGVhbjtcbiAgcmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZ1bmM6IGFueSxcbiAgICBrZXk6IHN0cmluZ1xuICApOiB2b2lkO1xuICB1blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcpOiB2b2lkO1xuICBnZXRQYW5lbCgpOiBJUGFuZWw7XG4gIGdldExheW91dFR5cGUoKTogc3RyaW5nO1xuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgcmVtb3ZlRWxlbWVudChlbDogSUVsZW1lbnQpOiBib29sZWFuO1xuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpOiBhbnk7XG4gIHVwZGF0ZUN1c3RvbVdpZGdldHMoKTogYW55O1xuICBjbGVhckluY29ycmVjdFZhbHVlcygpOiBhbnk7XG4gIGNsZWFyRXJyb3JzKCk6IGFueTtcbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElRdWVzdGlvbiBleHRlbmRzIElFbGVtZW50LCBJU3VydmV5RXJyb3JPd25lciB7XG4gIGhhc1RpdGxlOiBib29sZWFuO1xuICBpc0VtcHR5KCk6IGJvb2xlYW47XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpOiBhbnk7XG4gIHVwZGF0ZVZhbHVlRnJvbVN1cnZleShuZXdWYWx1ZTogYW55KTogYW55O1xuICB1cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZTogYW55KTogYW55O1xuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpOiBib29sZWFuO1xuICBjbGVhclVudXNlZFZhbHVlcygpOiBhbnk7XG4gIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55O1xuICBnZXRWYWx1ZU5hbWUoKTogc3RyaW5nO1xuICBjbGVhclZhbHVlKCk6IGFueTtcbiAgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk6IGFueTtcbiAgaXNBbnN3ZXJDb3JyZWN0KCk6IGJvb2xlYW47XG4gIHVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk6IGFueTtcbiAgZ2V0UXVlc3Rpb25Gcm9tQXJyYXkobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogSVF1ZXN0aW9uO1xuICB2YWx1ZTogYW55O1xuICBzdXJ2ZXk6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcmVudEVsZW1lbnQge1xuICBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKTogYW55O1xuICByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbjtcbiAgaXNSZWFkT25seTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGFuZWwgZXh0ZW5kcyBJU3VydmV5RWxlbWVudCwgSVBhcmVudEVsZW1lbnQge1xuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nO1xuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nO1xuICBwYXJlbnQ6IElQYW5lbDtcbiAgZWxlbWVudFdpZHRoQ2hhbmdlZChlbDogSUVsZW1lbnQpOiBhbnk7XG4gIGluZGV4T2YoZWw6IElFbGVtZW50KTogbnVtYmVyO1xuICBlbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+O1xuICBlbnN1cmVSb3dzVmlzaWJpbGl0eSgpOiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBJUGFnZSBleHRlbmRzIElQYW5lbCwgSUNvbmRpdGlvblJ1bm5lciB7XG4gIGlzU3RhcnRlZDogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRpdGxlT3duZXIge1xuICBuYW1lOiBzdHJpbmc7XG4gIG5vOiBzdHJpbmc7XG4gIHJlcXVpcmVkVGV4dDogc3RyaW5nO1xuICBpc1JlcXVpcmVUZXh0T25TdGFydDogYm9vbGVhbjtcbiAgaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlOiBib29sZWFuO1xuICBpc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZTogYm9vbGVhbjtcbiAgbG9jVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBJUHJvZ3Jlc3NJbmZvIHtcbiAgcXVlc3Rpb25Db3VudDogbnVtYmVyO1xuICBhbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IG51bWJlcjtcbiAgcmVxdWlyZWRRdWVzdGlvbkNvdW50OiBudW1iZXI7XG4gIHJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdyYXBwZXJPYmplY3Qge1xuICBnZXRPcmlnaW5hbE9iaigpOiBCYXNlO1xuICBnZXRDbGFzc05hbWVQcm9wZXJ0eSgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpbmRFbGVtZW50IHtcbiAgZWxlbWVudDogQmFzZTtcbiAgc3RyOiBMb2NhbGl6YWJsZVN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRpbmdzIHtcbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+ID0gbnVsbDtcbiAgcHJpdmF0ZSB2YWx1ZXM6IGFueSA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb2JqOiBCYXNlKSB7fVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJpbmRpbmdzXCI7XG4gIH1cbiAgcHVibGljIGdldE5hbWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0uaXNWaXNpYmxlKFwiXCIsIHRoaXMub2JqKSkge1xuICAgICAgICByZXMucHVzaCh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnRpZXMoKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHJlczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IFtdO1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2godGhpcy5wcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0QmluZGluZyhwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMudmFsdWVzKSB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGlmICghIXZhbHVlTmFtZSkge1xuICAgICAgdGhpcy52YWx1ZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyQmluZGluZyhwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QmluZGluZyhwcm9wZXJ0eU5hbWUsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy52YWx1ZXM7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlTmFtZUJ5UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMudmFsdWVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMudmFsdWVzKSByZXR1cm4gW107XG4gICAgdmFyIHJlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgaWYgKHRoaXMudmFsdWVzW2tleV0gPT0gdmFsdWVOYW1lKSB7XG4gICAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldEpzb24oKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBudWxsO1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlcykge1xuICAgICAgcmVzW2tleV0gPSB0aGlzLnZhbHVlc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWVba2V5XTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmaWxsUHJvcGVydGllcygpIHtcbiAgICBpZiAodGhpcy5wcm9wZXJ0aWVzICE9PSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW107XG4gICAgdmFyIG9ialByb3BlcnRpZXMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXNCeU9iaih0aGlzLm9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2JqUHJvcGVydGllc1tpXS5pc0JpbmRhYmxlKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcy5wdXNoKG9ialByb3BlcnRpZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgU3VydmV5SlMgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2Uge1xuICBwdWJsaWMgc3RhdGljIGlzU3VydmV5RWxlbWVudCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgaWYgKHZhbC5sZW5ndGggPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIEJhc2UuaXNTdXJ2ZXlFbGVtZW50KHZhbFswXSk7XG4gICAgfVxuICAgIHJldHVybiAhIXZhbC5nZXRUeXBlICYmICEhdmFsLm9uUHJvcGVydHlDaGFuZ2VkO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNvbW1lbnRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuY29tbWVudFByZWZpeDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBjb21tZW50UHJlZml4KHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MuY29tbWVudFByZWZpeCA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUl0ZW1WYWx1ZTogKGl0ZW06IGFueSwgdHlwZT86IHN0cmluZykgPT4gYW55O1xuICBwdWJsaWMgc3RhdGljIGl0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQ6IChhcnI6IEFycmF5PGFueT4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSB1bmRlcmZpbmVkLCBudWxsLCBlbXB0eSBzdHJpbmcgb3IgZW1wdHkgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gdHJpbVN0cmluZyBhIGJvb2xlYW4gcGFyYW1ldGVyLCBkZWZhdWx0IHZhbHVlIHRydWUuIElmIHRydWUgdGhlbiBpdCB0cmltcyB0aGUgc3RyaW5nIGFuZCBmdW5jdGlvbnMgcmV0dXJucyB0cnVlIGZvciBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIHdoaXRlIHNwYWNlcyBvbmx5LlxuICAgKi9cbiAgcHVibGljIGlzVmFsdWVFbXB0eSh2YWx1ZTogYW55LCB0cmltU3RyaW5nOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0cmltU3RyaW5nKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMudHJpbVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgdHJpbVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpKVxuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIElzUHJvcGVydHlFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSBcIlwiICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvcGVydHlIYXNoOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBsb2NhbGl6YWJsZVN0cmluZ3M6IHsgW2luZGV4OiBzdHJpbmddOiBMb2NhbGl6YWJsZVN0cmluZyB9O1xuICBwcml2YXRlIGFycmF5c0luZm86IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfTtcbiAgcHJpdmF0ZSBldmVudExpc3Q6IEFycmF5PEV2ZW50QmFzZTxhbnk+PiA9IFtdO1xuICBwcml2YXRlIGJpbmRpbmdzVmFsdWU6IEJpbmRpbmdzO1xuICBwcml2YXRlIGlzRGlzcG9zZWRWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBvblByb3BDaGFuZ2VGdW5jdGlvbnM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZnVuYzogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuICAgIGtleTogc3RyaW5nO1xuICB9PjtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZ0Zyb21Kc29uVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxvYWRpbmdPd25lcjogQmFzZSA9IG51bGw7XG4gIC8qKlxuICAgKiBFdmVudCB0aGF0IHJhaXNlIG9uIHByb3BlcnR5IGNoYW5nZSBvZiB0aGUgc2VuZGVyIG9iamVjdFxuICAgKiBzZW5kZXIgLSB0aGUgb2JqZWN0IHRoYXQgb3ducyB0aGUgcHJvcGVydHlcbiAgICogb3B0aW9ucy5uYW1lIC0gdGhlIHByb3BlcnR5IG5hbWUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkXG4gICAqIG9wdGlvbnMub2xkVmFsdWUgLSBvbGQgdmFsdWUuIFBsZWFzZSBub3RlLCBpdCBlcXVhbHMgdG8gb3B0aW9ucy5uZXdWYWx1ZSBpZiBwcm9wZXJ0eSBpcyBhbiBhcnJheVxuICAgKiBvcHRpb25zLm5ld1ZhbHVlIC0gbmV3IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG9uUHJvcGVydHlDaGFuZ2VkOiBFdmVudEJhc2U8QmFzZT4gPSB0aGlzLmFkZEV2ZW50PEJhc2U+KCk7XG4gIC8qKlxuICAgKiBFdmVudCB0aGF0IHJhaXNlZCBvbiBjaGFuZ2luZyBwcm9wZXJ0eSBvZiB0aGUgSXRlbVZhbHVlIG9iamVjdC5cbiAgICogc2VuZGVyIC0gdGhlIG9iamVjdCB0aGF0IG93bnMgdGhlIHByb3BlcnR5XG4gICAqIG9wdGlvbnMucHJvcGVydHlOYW1lIC0gdGhlIHByb3BlcnR5IG5hbWUgdG8gd2hpY2ggSXRlbVZhbHVlIGFycmF5IGlzIGJlbG9uZy4gSXQgY2FuIGJlIFwiY2hvaWNlc1wiIGZvciBkcm9wZG93biBxdWVzdGlvblxuICAgKiBvcHRpb25zLm9iaiAtIHRoZSBpbnN0YW5jZSBvZiBJdGVtVmFsdWUgb2JqZWN0IHdoaWNoIHByb3BlcnR5IGhhcyBiZWVuIGNoYW5nZWRcbiAgICogb3B0aW9ucy5uYW1lIC0gdGhlIHByb3BlcnR5IG9mIEl0ZW1PYmplY3QgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkXG4gICAqIG9wdGlvbnMub2xkVmFsdWUgLSBvbGQgdmFsdWVcbiAgICogb3B0aW9ucy5uZXdWYWx1ZSAtIG5ldyB2YWx1ZVxuICAgKi9cbiAgcHVibGljIG9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IHRoaXMuYWRkRXZlbnQ8QmFzZT4oKTtcblxuICBnZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXI6IChwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcpID0+IGFueTtcblxuICBzZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXI6IChcbiAgICBwcm9wZXJ0aWVzSGFzaDogYW55LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWw6IGFueVxuICApID0+IHZvaWQ7XG4gIGNyZWF0ZUFycmF5Q29yZUhhbmRsZXI6IChwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcpID0+IEFycmF5PGFueT47XG4gIHN1cnZleUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGlzQ3JlYXRpbmcgPSB0cnVlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJpbmRpbmdzVmFsdWUgPSBuZXcgQmluZGluZ3ModGhpcyk7XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllcyh0aGlzKTtcbiAgICB0aGlzLm9uQmFzZUNyZWF0aW5nKCk7XG4gICAgdGhpcy5pc0NyZWF0aW5nID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5ldmVudExpc3RbaV0uY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy5pc0Rpc3Bvc2VkVmFsdWUgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNEaXNwb3NlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc3Bvc2VkVmFsdWUgPT09IHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGFkZEV2ZW50PFQ+KCk6IEV2ZW50QmFzZTxUPiB7XG4gICAgdmFyIHJlcyA9IG5ldyBFdmVudEJhc2U8VD4oKTtcbiAgICB0aGlzLmV2ZW50TGlzdC5wdXNoKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgb25CYXNlQ3JlYXRpbmcoKSB7fVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nIGFzIGl0IHJlcHJlc2VudHMgaW4gdGhlIGpzb24uIEl0IHNob3VsZCBiZSBpbiBsb3djYXNlLlxuICAgKi9cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiYXNlXCI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShpc0xpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBpbmx1ZGVkIGludG8gc3VydmV5LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRTdXJ2ZXkodHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBiaW5kaW5ncygpOiBCaW5kaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYmluZGluZ3NWYWx1ZTtcbiAgfVxuICBjaGVja0JpbmRpbmdzKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7fVxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ3MocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgdmFsdWVOYW1lID0gdGhpcy5iaW5kaW5ncy5nZXRWYWx1ZU5hbWVCeVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xuICAgIGlmICghIXZhbHVlTmFtZSkge1xuICAgICAgdGhpcy51cGRhdGVCaW5kaW5nVmFsdWUodmFsdWVOYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVCaW5kaW5nVmFsdWUodmFsdWVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHt9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IHRlbXBsYXRlIG5hbWUgd2l0aG91dCBwcmVmaXguIFR5cGljYWxseSBpdCBlcXVhbHMgdG8gZ2V0VHlwZSgpLlxuICAgKiBAc2VlIGdldFR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgbG9hZGluZyBmcm9tIEpzb24gYXQgdGhlIGN1cnJlbnQgbW9tZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBpc0xvYWRpbmdGcm9tSnNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJc0xvYWRpbmdGcm9tSnNvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0xvYWRpbmdGcm9tSnNvbigpOiBib29sZWFuIHtcbiAgICBpZiAoISF0aGlzLmxvYWRpbmdPd25lciAmJiB0aGlzLmxvYWRpbmdPd25lci5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZTtcbiAgfVxuXG4gIHN0YXJ0TG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IHRydWU7XG4gIH1cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZWQgdGhlIGN1cnJlbnQgb2JqZWN0IGludG8gSlNPTlxuICAgKiBAc2VlIGZyb21KU09OXG4gICAqL1xuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBMb2FkIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBlbGVtZW50cy4gSXQgZG9lc24ndCByZXNldCBwcm9wZXJ0aWVzIHRoYXQgd2FzIGNoYW5nZWQgYmVmb3JlIGFuZCB0aGV5IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUganNvbiBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBqc29uIHRoZSBvYmplY3QgSlNPTiBkZWZpbml0aW9uXG4gICAqIEBzZWUgdG9KU09OXG4gICAqL1xuICBwdWJsaWMgZnJvbUpTT04oanNvbjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgdGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1ha2UgYSBjbG9uZSBvZiB0aGUgZXhpc3Rpbmcgb2JqZWN0LiBDcmVhdGUgYSBuZXcgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIGxvYWQgYWxsIHByb3BlcnRpZXMgaW50byBpdC5cbiAgICovXG4gIHB1YmxpYyBjbG9uZSgpOiBCYXNlIHtcbiAgICB2YXIgY2xvbmVkT2JqID0gPEJhc2U+U2VyaWFsaXplci5jcmVhdGVDbGFzcyh0aGlzLmdldFR5cGUoKSk7XG4gICAgY2xvbmVkT2JqLmZyb21KU09OKHRoaXMudG9KU09OKCkpO1xuICAgIHJldHVybiBjbG9uZWRPYmo7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudC5jcmVhdGVQcm9ncmVzc0luZm8oKTtcbiAgfVxuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZCgpIHt9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBpZiAoISF0aGlzLmFycmF5c0luZm8pIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmFycmF5c0luZm8pIHtcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmFycmF5c0luZm9ba2V5XTtcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0l0ZW1WYWx1ZXMpIHtcbiAgICAgICAgICB2YXIgYXJyID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleSk7XG4gICAgICAgICAgaWYgKGFyciAmJiAhIUJhc2UuaXRlbVZhbHVlTG9jU3RyQ2hhbmdlZClcbiAgICAgICAgICAgIEJhc2UuaXRlbVZhbHVlTG9jU3RyQ2hhbmdlZChhcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIXRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gICAgICAgIGlmIChpdGVtKSBpdGVtLnN0ckNoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIGJ5IG5hbWVcbiAgICogQHBhcmFtIG5hbWUgcHJvcGVydHkgbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5VmFsdWUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGFueSA9IG51bGwpOiBhbnkge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlKHRoaXMucHJvcGVydHlIYXNoLCBuYW1lKTtcbiAgICBpZiAodGhpcy5Jc1Byb3BlcnR5RW1wdHkocmVzKSkge1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLmdldFR5cGUoKSwgbmFtZSk7XG4gICAgICBpZiAoISFwcm9wICYmICghcHJvcC5pc0N1c3RvbSB8fCAhdGhpcy5pc0NyZWF0aW5nKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuSXNQcm9wZXJ0eUVtcHR5KHByb3AuZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KHByb3AuZGVmYXVsdFZhbHVlKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHByb3AuZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAocHJvcC50eXBlID09IFwiYm9vbGVhblwiIHx8IHByb3AudHlwZSA9PSBcInN3aXRjaFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChwcm9wLmlzQ3VzdG9tICYmICEhcHJvcC5vbkdldFZhbHVlKSByZXR1cm4gcHJvcC5vbkdldFZhbHVlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQcm9wZXJ0eVZhbHVlQ29yZShwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIpXG4gICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIocHJvcGVydGllc0hhc2gsIG5hbWUpO1xuICAgIGVsc2UgcmV0dXJuIHByb3BlcnRpZXNIYXNoW25hbWVdO1xuICB9XG4gIHB1YmxpYyBnZVZhbHVlRnJvbUhhc2goKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eUhhc2hbXCJ2YWx1ZVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UHJvcGVydHlWYWx1ZUNvcmUocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgIGlmICh0aGlzLnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciAmJiAhdGhpcy5pc0Rpc3Bvc2VkVmFsdWUpXG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcihwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgICBlbHNlIHByb3BlcnRpZXNIYXNoW25hbWVdID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpdGVyYXRlUHJvcGVydGllc0hhc2goZnVuYzogKGhhc2g6IGFueSwga2V5OiBhbnkpID0+IHZvaWQpIHtcbiAgICB2YXIga2V5czogYW55W10gPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0eUhhc2gpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4gZnVuYyh0aGlzLnByb3BlcnR5SGFzaCwga2V5KSk7XG4gIH1cbiAgLyoqXG4gICAqIHNldCBwcm9wZXJ0eSB2YWx1ZVxuICAgKiBAcGFyYW0gbmFtZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB2YWwgbmV3IHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc2V0UHJvcGVydHlWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xuICAgIGlmIChvbGRWYWx1ZSAmJiBBcnJheS5pc0FycmF5KG9sZFZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgdmFsKSkgcmV0dXJuO1xuICAgICAgdmFyIGFycmF5SW5mbyA9IHRoaXMuYXJyYXlzSW5mb1tuYW1lXTtcbiAgICAgIHRoaXMuc2V0QXJyYXkoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG9sZFZhbHVlLFxuICAgICAgICB2YWwsXG4gICAgICAgIGFycmF5SW5mbyA/IGFycmF5SW5mby5pc0l0ZW1WYWx1ZXMgOiBmYWxzZSxcbiAgICAgICAgYXJyYXlJbmZvID8gYXJyYXlJbmZvLm9uUHVzaCA6IG51bGxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIHZhbCk7XG4gICAgICBpZiAoIXRoaXMuaXNEaXNwb3NlZFZhbHVlICYmICF0aGlzLmlzVHdvVmFsdWVFcXVhbHMob2xkVmFsdWUsIHZhbCkpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyUHJvcGVydHlWYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWVDb3JlKHRoaXMucHJvcGVydHlIYXNoLCBuYW1lLCBudWxsKTtcbiAgICBkZWxldGUgdGhpcy5wcm9wZXJ0eUhhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHNlbmRlcjogQmFzZSxcbiAgICBhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlc1xuICApIHt9XG4gIHB1YmxpYyBpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIG9iajogaXRlbSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICBwcm9wZXJ0eU5hbWU6IGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHt9XG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIGFycmF5Q2hhbmdlcz86IEFycmF5Q2hhbmdlcyxcbiAgICB0YXJnZXQ/OiBCYXNlXG4gICkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVCaW5kaW5ncyhuYW1lLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgIG5hbWUsXG4gICAgICBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICAgYXJyYXlDaGFuZ2VzLFxuICAgICAgdGhpc1xuICAgICk7XG5cbiAgICBpZiAoIXRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV0uZnVuYyhuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNJbnRlcm5hbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBkb1Byb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBhcnJheUNoYW5nZXM/OiBBcnJheUNoYW5nZXMsXG4gICAgdGFyZ2V0PzogQmFzZVxuICApIHtcbiAgICBpZiAodGhpcy5pc0ludGVybmFsKSByZXR1cm47XG4gICAgaWYgKCF0YXJnZXQpIHRhcmdldCA9IHRoaXM7XG4gICAgdmFyIG5vdGlmaWVyOiBhbnkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgIGlmICghbm90aWZpZXIpIG5vdGlmaWVyID0gdGhpcztcbiAgICBpZiAoISFub3RpZmllci5kb1Byb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgIG5vdGlmaWVyLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGFycmF5Q2hhbmdlc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBhIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQuXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB3aXRoIG5vIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBwcm9wZXJ0eSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ga2V5IGFuIG9wdGlvbmFsIHBhcmFtZXRlci4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgZnVuY3Rpb24gZm9yIHRoaXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBrZXksIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZ1bmM6IGFueSxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucykge1xuICAgICAgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKGtleSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldO1xuICAgICAgICBpZiAoaXRlbS5uYW1lID09IG5hbWUgJiYgaXRlbS5rZXkgPT0ga2V5KSB7XG4gICAgICAgICAgaXRlbS5mdW5jID0gZnVuYztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMucHVzaCh7IG5hbWU6IG5hbWUsIGZ1bmM6IGZ1bmMsIGtleToga2V5IH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gYSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VkIGZyb20gdGhlIG5hbWVzIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG5hbWVzXG4gICAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB3aXRoIG5vIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBwcm9wZXJ0eSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ga2V5IGFuIG9wdGlvbmFsIHBhcmFtZXRlci4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgZnVuY3Rpb24gZm9yIHRoaXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBrZXksIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPixcbiAgICBmdW5jOiBhbnksXG4gICAga2V5OiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZXNbaV0sIGZ1bmMsIGtleSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIG5vdGlmaWNhdGlvbiBvbiBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VkXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleSB3aXRoIHdoaWNoIHlvdSBoYXZlIHJlZ2lzdGVyZWQgdGhlIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eS4gSXQgY2FuIGJlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdW5SZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmICghdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldO1xuICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBuYW1lICYmIGl0ZW0ua2V5ID09IGtleSkge1xuICAgICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgbm90aWZpY2F0aW9uIG9uIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQgZm9yIGFsbCBwcm9wZXJ0aWVzIGluIHRoZSBuYW1lcyBsaXN0LlxuICAgKiBAcGFyYW0gbmFtZXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBuYW1lc1xuICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgd2l0aCB3aGljaCB5b3UgaGF2ZSByZWdpc3RlcmVkIHRoZSBub3RpZmljYXRpb24gZm9yIHRoaXMgcHJvcGVydHkuIEl0IGNhbiBiZSBudWxsLlxuICAgKi9cbiAgcHVibGljIHVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPixcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWVzW2ldLCBrZXkpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY3JlYXRlQ3VzdG9tTG9jYWxpemFibGVPYmoobmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKGxvY1N0ciB8fCAhKDxhbnk+dGhpcykuZ2V0TG9jYWxlKSByZXR1cm47XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhuYW1lLCA8SUxvY2FsaXphYmxlT3duZXI+KDxhbnk+dGhpcykpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyLFxuICAgIHVzZU1hcmtEb3duOiBib29sZWFuID0gZmFsc2VcbiAgKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBsb2NTdHIgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcob3duZXIsIHVzZU1hcmtEb3duLCBuYW1lKTtcbiAgICBsb2NTdHIub25TdHJDaGFuZ2VkID0gKG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIGlmICghdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIHRoaXMubG9jYWxpemFibGVTdHJpbmdzID0ge307XG4gICAgfVxuICAgIHRoaXMubG9jYWxpemFibGVTdHJpbmdzW25hbWVdID0gbG9jU3RyO1xuICAgIHJldHVybiBsb2NTdHI7XG4gIH1cbiAgcHVibGljIGdldExvY2FsaXphYmxlU3RyaW5nKG5hbWU6IHN0cmluZyk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncyA/IHRoaXMubG9jYWxpemFibGVTdHJpbmdzW25hbWVdIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZWZhdWx0U3RyOiBzdHJpbmcgPSBcIlwiXG4gICk6IHN0cmluZyB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKCFsb2NTdHIpIHJldHVybiBcIlwiO1xuICAgIHZhciByZXMgPSBsb2NTdHIudGV4dDtcbiAgICByZXR1cm4gcmVzID8gcmVzIDogZGVmYXVsdFN0cjtcbiAgfVxuICBwdWJsaWMgc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHZhciBsb2NTdHIgPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKG5hbWUpO1xuICAgIGlmICghbG9jU3RyKSByZXR1cm47XG4gICAgbG9jU3RyLnRleHQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmICghIXRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gICAgICAgIGlmIChpdGVtKSB0aGlzLkFkZExvY1N0cmluZ1RvVXNlZExvY2FsZXMoaXRlbSwgbG9jYWxlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5hZGRVc2VkTG9jYWxlcykge1xuICAgICAgICAgICAgaXRlbS5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nLCBmb3VuZGVkOiBBcnJheTxJRmluZEVsZW1lbnQ+KSB7XG4gICAgdmFyIHN0cnM6IEFycmF5PExvY2FsaXphYmxlU3RyaW5nPiA9IFtdO1xuICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUxvY2FsaXplZFN0cmluZ3Moc3Rycyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3Ryc1tpXS5zZXRGaW5kVGV4dCh0ZXh0KSkge1xuICAgICAgICBmb3VuZGVkLnB1c2goeyBlbGVtZW50OiB0aGlzLCBzdHI6IHN0cnNbaV0gfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0U2VhcmNoYWJsZUxvY2FsaXplZFN0cmluZ3MoYXJyOiBBcnJheTxMb2NhbGl6YWJsZVN0cmluZz4pIHtcbiAgICBpZiAoISF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgbGV0IGtleXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUxvY0tleXMoa2V5cyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKGtleXNbaV0pO1xuICAgICAgICBpZiAoaXRlbSkgYXJyLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5hcnJheXNJbmZvKSByZXR1cm47XG4gICAgbGV0IGtleXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICB0aGlzLmdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW1zID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleXNbaV0pO1xuICAgICAgaWYgKCFpdGVtcykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGFyci5wdXNoKGl0ZW1zW2pdLmxvY1RleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUxvY0tleXMoa2V5czogQXJyYXk8c3RyaW5nPikge31cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHt9XG4gIHByb3RlY3RlZCBBZGRMb2NTdHJpbmdUb1VzZWRMb2NhbGVzKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgbG9jYWxlczogQXJyYXk8c3RyaW5nPlxuICApIHtcbiAgICB2YXIgbG9jcyA9IGxvY1N0ci5nZXRMb2NhbGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobG9jYWxlcy5pbmRleE9mKGxvY3NbaV0pIDwgMCkge1xuICAgICAgICBsb2NhbGVzLnB1c2gobG9jc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVJdGVtVmFsdWVzKG5hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jcmVhdGVOZXdBcnJheShuYW1lLCBmdW5jdGlvbihpdGVtOiBhbnkpIHtcbiAgICAgIGl0ZW0ubG9jT3duZXIgPSBzZWxmO1xuICAgICAgaXRlbS5vd25lclByb3BlcnR5TmFtZSA9IG5hbWU7XG4gICAgfSk7XG4gICAgdGhpcy5hcnJheXNJbmZvW25hbWVdLmlzSXRlbVZhbHVlcyA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIG5vdGlmeUFycmF5Q2hhbmdlZChhcjogYW55LCBhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlcykge1xuICAgICEhYXIub25BcnJheUNoYW5nZWQgJiYgYXIub25BcnJheUNoYW5nZWQoYXJyYXlDaGFuZ2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3QXJyYXlDb3JlKG5hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZXMgPSBudWxsO1xuICAgIGlmICghIXRoaXMuY3JlYXRlQXJyYXlDb3JlSGFuZGxlcikge1xuICAgICAgcmVzID0gdGhpcy5jcmVhdGVBcnJheUNvcmVIYW5kbGVyKHRoaXMucHJvcGVydHlIYXNoLCBuYW1lKTtcbiAgICB9XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJlcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWVDb3JlKHRoaXMucHJvcGVydHlIYXNoLCBuYW1lLCByZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBlbnN1cmVBcnJheShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb25QdXNoOiBhbnkgPSBudWxsLFxuICAgIG9uUmVtb3ZlOiBhbnkgPSBudWxsXG4gICkge1xuICAgIGlmICh0aGlzLmFycmF5c0luZm8gJiYgdGhpcy5hcnJheXNJbmZvW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTmV3QXJyYXkobmFtZSwgb25QdXNoLCBvblJlbW92ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3QXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9uUHVzaDogYW55ID0gbnVsbCxcbiAgICBvblJlbW92ZTogYW55ID0gbnVsbFxuICApOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgbmV3QXJyYXkgPSB0aGlzLmNyZWF0ZU5ld0FycmF5Q29yZShuYW1lKTtcbiAgICBpZiAoIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgdGhpcy5hcnJheXNJbmZvID0ge307XG4gICAgfVxuICAgIHRoaXMuYXJyYXlzSW5mb1tuYW1lXSA9IHsgb25QdXNoOiBvblB1c2gsIGlzSXRlbVZhbHVlczogZmFsc2UgfTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgbmV3QXJyYXkucHVzaCA9IGZ1bmN0aW9uKHZhbHVlKTogbnVtYmVyIHtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnB1c2guY2FsbChuZXdBcnJheSwgdmFsdWUpO1xuICAgICAgaWYgKCFzZWxmLmlzRGlzcG9zZWRWYWx1ZSkge1xuICAgICAgICBpZiAob25QdXNoKSBvblB1c2godmFsdWUsIG5ld0FycmF5Lmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKFxuICAgICAgICAgIG5ld0FycmF5Lmxlbmd0aCAtIDEsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBbdmFsdWVdLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBuZXdBcnJheS51bnNoaWZ0ID0gZnVuY3Rpb24odmFsdWUpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkudW5zaGlmdC5jYWxsKFxuICAgICAgICBuZXdBcnJheSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaCh2YWx1ZSwgbmV3QXJyYXkubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMoMCwgMCwgW3ZhbHVlXSwgW10pO1xuICAgICAgICBzZWxmLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG5ld0FycmF5LCBuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgbmV3QXJyYXkucG9wID0gZnVuY3Rpb24oKTogbnVtYmVyIHtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnBvcC5jYWxsKG5ld0FycmF5KTtcbiAgICAgIGlmICghc2VsZi5pc0Rpc3Bvc2VkVmFsdWUpIHtcbiAgICAgICAgaWYgKG9uUmVtb3ZlKSBvblJlbW92ZShyZXN1bHQpO1xuICAgICAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKG5ld0FycmF5Lmxlbmd0aCAtIDEsIDEsIFtdLCBbXSk7XG4gICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBuZXdBcnJheS5zcGxpY2UgPSBmdW5jdGlvbihcbiAgICAgIHN0YXJ0PzogbnVtYmVyLFxuICAgICAgZGVsZXRlQ291bnQ/OiBudW1iZXIsXG4gICAgICAuLi5pdGVtczogYW55W11cbiAgICApOiBhbnlbXSB7XG4gICAgICBpZiAoIXN0YXJ0KSBzdGFydCA9IDA7XG4gICAgICBpZiAoIWRlbGV0ZUNvdW50KSBkZWxldGVDb3VudCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS5zcGxpY2UuY2FsbChcbiAgICAgICAgbmV3QXJyYXksXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgLi4uaXRlbXNcbiAgICAgICk7XG4gICAgICBpZiAoIWl0ZW1zKSBpdGVtcyA9IFtdO1xuICAgICAgaWYgKCFzZWxmLmlzRGlzcG9zZWRWYWx1ZSkge1xuICAgICAgICBpZiAob25SZW1vdmUgJiYgcmVzdWx0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9uUmVtb3ZlKHJlc3VsdFtpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvblB1c2gpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvblB1c2goaXRlbXNbaV0sIHN0YXJ0ICsgaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMoXG4gICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgZGVsZXRlQ291bnQsXG4gICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgICk7XG4gICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNldEFycmF5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzcmM6IGFueVtdLFxuICAgIGRlc3Q6IGFueVtdLFxuICAgIGlzSXRlbVZhbHVlczogYm9vbGVhbixcbiAgICBvblB1c2g6IGFueVxuICApIHtcbiAgICB2YXIgZGVsZXRlZEl0ZW1zID0gW10uY29uY2F0KHNyYyk7XG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykuc3BsaWNlLmNhbGwoc3JjLCAwLCBzcmMubGVuZ3RoKTtcbiAgICBpZiAoISFkZXN0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBkZXN0W2ldO1xuICAgICAgICBpZiAoaXNJdGVtVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKCEhQmFzZS5jcmVhdGVJdGVtVmFsdWUpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBCYXNlLmNyZWF0ZUl0ZW1WYWx1ZShpdGVtLCB0aGlzLmdldEl0ZW1WYWx1ZVR5cGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihzcmMpLnB1c2guY2FsbChzcmMsIGl0ZW0pO1xuICAgICAgICBpZiAob25QdXNoKSBvblB1c2goc3JjW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhcbiAgICAgIDAsXG4gICAgICBkZWxldGVkSXRlbXMubGVuZ3RoLFxuICAgICAgc3JjLFxuICAgICAgZGVsZXRlZEl0ZW1zXG4gICAgKTtcbiAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIGRlbGV0ZWRJdGVtcywgc3JjLCBhcnJheUNoYW5nZXMpO1xuICAgIHRoaXMubm90aWZ5QXJyYXlDaGFuZ2VkKHNyYywgYXJyYXlDaGFuZ2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNUd29WYWx1ZUVxdWFscyhcbiAgICB4OiBhbnksXG4gICAgeTogYW55LFxuICAgIGNhc2VJblNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHRyaW1TdHJpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoY2FzZUluU2Vuc2l0aXZlKSB7XG4gICAgICB4ID0gdGhpcy5nZXRWYWx1ZUluTG93Q2FzZSh4KTtcbiAgICAgIHkgPSB0aGlzLmdldFZhbHVlSW5Mb3dDYXNlKHkpO1xuICAgIH1cbiAgICBpZiAodHJpbVN0cmluZykge1xuICAgICAgeCA9IHRoaXMudHJpbVZhbHVlKHgpO1xuICAgICAgeSA9IHRoaXMudHJpbVZhbHVlKHkpO1xuICAgIH1cbiAgICByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHgsIHkpO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGNvcHlPYmplY3QoZHN0OiBhbnksIHNyYzogYW55KSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgdmFyIHNvdXJjZSA9IHNyY1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc291cmNlID0ge307XG4gICAgICAgIHRoaXMuY29weU9iamVjdChzb3VyY2UsIHNyY1trZXldKTtcbiAgICAgIH1cbiAgICAgIGRzdFtrZXldID0gc291cmNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY29weUNzc0NsYXNzZXMoZGVzdDogYW55LCBzb3VyY2U6IGFueSkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIgfHwgc291cmNlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBkZXN0W1wicm9vdFwiXSA9IHNvdXJjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgU3VydmV5RWxlbWVudC5jb3B5T2JqZWN0KGRlc3QsIHNvdXJjZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVJbkxvd0Nhc2UodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXZhbCAmJiB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIpIHJldHVybiB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcnJheUNoYW5nZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICBwdWJsaWMgZGVsZXRlQ291bnQ6IG51bWJlcixcbiAgICBwdWJsaWMgaXRlbXNUb0FkZDogYW55W10sXG4gICAgcHVibGljIGRlbGV0ZWRJdGVtczogYW55W11cbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5RXJyb3Ige1xuICBwcml2YXRlIGxvY1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHB1YmxpYyB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHt9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpIHtcbiAgICBpZiAoIXRoaXMubG9jVGV4dFZhbHVlKSB7XG4gICAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLmVycm9yT3duZXIsIHRydWUpO1xuICAgICAgdGhpcy5sb2NUZXh0VmFsdWUudGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy50ZXh0O1xuICAgIGlmICghcmVzKSByZXMgPSB0aGlzLmdldERlZmF1bHRUZXh0KCk7XG4gICAgaWYgKCEhdGhpcy5lcnJvck93bmVyKSB7XG4gICAgICByZXMgPSB0aGlzLmVycm9yT3duZXIuZ2V0RXJyb3JDdXN0b21UZXh0KHJlcywgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJhc2VcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3Mgb2YgU3VydmV5SlMgRWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElTdXJ2ZXlFbGVtZW50IHtcbiAgcHJvdGVjdGVkIHRpdGxlQWN0aW9uczogYW55W10gPSBbXTtcbiAgc3RhdGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBxdWVzdGlvbkNvdW50OiAwLFxuICAgICAgYW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgcmVxdWlyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgcmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgY2hpbGRyZW46IEFycmF5PFN1cnZleUVsZW1lbnQ+LFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW5cbiAgKTogSVByb2dyZXNzSW5mbyB7XG4gICAgdmFyIGluZm8gPSBTdXJ2ZXlFbGVtZW50LmNyZWF0ZVByb2dyZXNzSW5mbygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghY2hpbGRyZW5baV0uaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHZhciBjaGlsZEluZm8gPSBjaGlsZHJlbltpXS5nZXRQcm9ncmVzc0luZm8oKTtcbiAgICAgIGluZm8ucXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucXVlc3Rpb25Db3VudDtcbiAgICAgIGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50ICs9IGNoaWxkSW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQ7XG4gICAgICBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50O1xuICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCArPVxuICAgICAgICBjaGlsZEluZm8ucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQ7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkICYmIGluZm8ucXVlc3Rpb25Db3VudCA+IDApIHtcbiAgICAgIGlmIChpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudCA9PSAwKSBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudCA9IDE7XG4gICAgICBpZiAoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPiAwKVxuICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH1cbiAgcHJpdmF0ZSBzdXJ2ZXlJbXBsVmFsdWU6IElTdXJ2ZXlJbXBsO1xuICBwcml2YXRlIHN1cnZleURhdGFWYWx1ZTogSVN1cnZleURhdGE7XG4gIHByaXZhdGUgc3VydmV5VmFsdWU6IElTdXJ2ZXk7XG4gIHByaXZhdGUgdGV4dFByb2Nlc3NvclZhbHVlOiBJVGV4dFByb2Nlc3NvcjtcbiAgcHJpdmF0ZSBzZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlOiBTdXJ2ZXlFbGVtZW50ID0gdGhpcztcbiAgcHVibGljIHJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBzdGF0aWMgU2Nyb2xsRWxlbWVudFRvVG9wKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFlbGVtZW50SWQgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICBpZiAoIWVsIHx8ICFlbC5zY3JvbGxJbnRvVmlldykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBlbGVtVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIGlmIChlbGVtVG9wIDwgMCkgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICByZXR1cm4gZWxlbVRvcCA8IDA7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBHZXRGaXJzdE5vblRleHRFbGVtZW50KFxuICAgIGVsZW1lbnRzOiBhbnksXG4gICAgcmVtb3ZlU3BhY2VzOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoIHx8IGVsZW1lbnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICBpZiAocmVtb3ZlU3BhY2VzKSB7XG4gICAgICB2YXIgdEVsID0gZWxlbWVudHNbMF07XG4gICAgICBpZiAodEVsLm5vZGVOYW1lID09PSBcIiN0ZXh0XCIpIHRFbC5kYXRhID0gXCJcIjtcbiAgICAgIHRFbCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKHRFbC5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiN0ZXh0XCIgJiYgZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjY29tbWVudFwiKVxuICAgICAgICByZXR1cm4gZWxlbWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgRm9jdXNFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFlbGVtZW50SWQgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmZvY3VzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGlzYWJsZURlc2lnbkFjdGlvbnM6IGJvb2xlYW4gPVxuICAgIFN1cnZleUVsZW1lbnQuQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50cztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJlcnJvcnNcIik7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzUmVhZE9ubHlcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzdGF0ZVwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZUNoYW5nZWRDYWxsYmFjaykgdGhpcy5zdGF0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJlcnJvcnNcIiwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlRXJyb3JzKCk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwiY29sbGFwc2VkXCIgdG8gcmVuZGVyIG9ubHkgUGFuZWwgdGl0bGUgYW5kIGV4cGFuZGVkIGJ1dHRvbiBhbmQgdG8gXCJleHBhbmRlZFwiIHRvIHJlbmRlciB0aGUgY29sbGFwc2VkIGJ1dHRvbiBpbiB0aGUgUGFuZWwgY2FwdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBzdGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RhdGVcIiwgdmFsKTtcbiAgICB0aGlzLm5vdGlmeVN0YXRlQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgbm90aWZ5U3RhdGVDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuZWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgRWxlbWVudCBpcyBpbiB0aGUgY29sbGFwc2VkIHN0YXRlXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBjb2xsYXBzZVxuICAgKiBAc2VlIGlzRXhwYW5kZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT0gXCJjb2xsYXBzZWRcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBFbGVtZW50IGlzIGluIHRoZSBleHBhbmRlZCBzdGF0ZVxuICAgKiBAc2VlIHN0YXRlXG4gICAqIEBzZWUgZXhwYW5kXG4gICAqIEBzZWUgaXNDb2xsYXBzZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PSBcImV4cGFuZGVkXCI7XG4gIH1cbiAgLyoqXG4gICAqIENvbGxhcHNlIHRoZSBFbGVtZW50XG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICB0aGlzLnN0YXRlID0gXCJjb2xsYXBzZWRcIjtcbiAgfVxuICAvKipcbiAgICogRXhwYW5kIHRoZSBFbGVtZW50XG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IFwiZXhwYW5kZWRcIjtcbiAgfVxuICAvKipcbiAgICogVG9nZ2xlIGVsZW1lbnQncyBzdGF0ZVxuICAgKiBAc2VlIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGl0bGVBY3Rpb25zKCk6IEFycmF5PGFueT4ge1xuICAgIHRoaXMudGl0bGVBY3Rpb25zID0gW107XG4gICAgdmFyIGV4cGFuZEFjdGlvbjogYW55ID0ge1xuICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2dnbGVTdGF0ZSgpO1xuICAgICAgfSxcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGV4cGFuZEFjdGlvbiwge1xuICAgICAgaW5uZXJDc3M6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgdmFyIGNzcyA9IFwic3YtZXhwYW5kLWFjdGlvblwiO1xuICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIGNzcyArPSBcIiBzdi1leHBhbmQtYWN0aW9uLS1leHBhbmRlZFwiO1xuICAgICAgICAgIHJldHVybiBjc3M7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmlzaWJsZToge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkIHx8IHRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy50aXRsZUFjdGlvbnMucHVzaChleHBhbmRBY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLnRpdGxlQWN0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRUaXRsZUNvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IFwiZGVmYXVsdFwiO1xuICAgIGlmICh0aGlzLnN1cnZleS5yZW5kZXJUaXRsZUFjdGlvbnModGhpcykpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBSZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UuZ2V0UmVuZGVyZXIoXG4gICAgICAgIFwiZWxlbWVudFwiLFxuICAgICAgICBcInRpdGxlLWFjdGlvbnNcIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudE5hbWUgPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIHJldHVybiBcInN2LWRlZmF1bHQtdGl0bGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudE5hbWU7XG4gIH1cblxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcbiAgICB0aGlzLnN1cnZleUltcGxWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghdGhpcy5zdXJ2ZXlJbXBsVmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0U3VydmV5Q29yZShudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlEYXRhVmFsdWUgPSB0aGlzLnN1cnZleUltcGxWYWx1ZS5nZXRTdXJ2ZXlEYXRhKCk7XG4gICAgICB0aGlzLnNldFN1cnZleUNvcmUodGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5KCkpO1xuICAgICAgdGhpcy50ZXh0UHJvY2Vzc29yVmFsdWUgPSB0aGlzLnN1cnZleUltcGxWYWx1ZS5nZXRUZXh0UHJvY2Vzc29yKCk7XG4gICAgICB0aGlzLm9uU2V0RGF0YSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleUltcGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5SW1wbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5RGF0YVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICBpZiAoISF0aGlzLnN1cnZleVZhbHVlKSByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcbiAgICBpZiAoISF0aGlzLnN1cnZleUltcGxWYWx1ZSkge1xuICAgICAgdGhpcy5zZXRTdXJ2ZXlDb3JlKHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFN1cnZleSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFN1cnZleUNvcmUodmFsdWU6IElTdXJ2ZXkpIHtcbiAgICB0aGlzLnN1cnZleVZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXlDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuc3VydmV5Q2hhbmdlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZTtcbiAgfVxuICBwdWJsaWMgaXNDb250ZW50RWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgZ2V0IGlzSW50ZXJuYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb250ZW50RWxlbWVudDtcbiAgfVxuICBwdWJsaWMgZ2V0IGFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nICYmXG4gICAgICAhdGhpcy5pc0NvbnRlbnRFbGVtZW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBtYWtlIGFuIGVsZW1lbnQgcXVlc3Rpb24vcGFuZWwvcGFnZSByZWFkb25seS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGVuYWJsZUlmXG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVhZE9ubHlcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVhZE9ubHlcIiwgdmFsKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgdGhpcy5pc1JlYWRPbmx5KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MocmVOZXc/OiBib29sZWFuKSB7fVxuICBwcm90ZWN0ZWQgZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzTG9hZGluZ0Zyb21Kc29uKCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzTG9hZGluZ0Zyb21Kc29uIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgYSBzdXJ2ZXkgZWxlbWVudCAtIHF1ZXN0aW9uIG9yIHBhbmVsLlxuICAgKiBAc2VlIHZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5uYW1lO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdGhpcy5nZXRWYWxpZE5hbWUodmFsKSk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmICEhb2xkVmFsdWUpIHtcbiAgICAgIHRoaXMub25OYW1lQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWxpZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25OYW1lQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7fVxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmRhdGEgJiZcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuZGF0YS5nZXRWYWx1ZSh2YWx1ZU5hbWUpKVxuICAgICkge1xuICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKHZhbHVlTmFtZSwgdmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVycm9ycy4gSXQgaXMgY3JlYXRlZCBieSBjYWxsaWcgaGFzRXJyb3JzIGZ1bmN0aW9uc1xuICAgKiBAc2VlIGhhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGdldCBlcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXJyb3JzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXJyb3JzKHZhbDogQXJyYXk8U3VydmV5RXJyb3I+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXJyb3JzXCIsIHZhbCk7XG4gIH1cbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBoYXNWaXNpYmxlRXJyb3JzOiBib29sZWFuO1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVFcnJvcnMoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmVycm9yc1tpXS52aXNpYmxlKSBjb3VudGVyKys7XG4gICAgfVxuICAgIHRoaXMuaGFzVmlzaWJsZUVycm9ycyA9IGNvdW50ZXIgPiAwO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBxdWVzdGlvbiBvciBhIGNvbnRhaW5lciAocGFuZWwvcGFnZSkgb3IgdGhlaXIgY2hpZHJlbiBoYXZlIGFuIGVycm9yLlxuICAgKiBUaGUgdmFsdWUgY2FuIGJlIG91dCBvZiBkYXRlLiBoYXNFcnJvcnMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNvbnRhaW5zRXJyb3JzKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRhaW5zRXJyb3JzXCIsIHRoaXMuZ2V0Q29udGFpbnNFcnJvcnMoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ24oKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRWxlbWVudEluRGVzaWduKHZhbDogU3VydmV5RWxlbWVudCkge1xuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgdXBkYXRlQ3VzdG9tV2lkZ2V0cygpIHt9XG5cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHt9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge31cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMub25TdXJ2ZXlMb2FkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHVibGljIGdldCBpc1BhZ2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gZmFsc2UgaWYgaXQgaXMgbm90IHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1BhbmVsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge31cbiAgcHJvdGVjdGVkIHJlbW92ZVNlbGZGcm9tTGlzdChsaXN0OiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKCFsaXN0IHx8ICFBcnJheS5pc0FycmF5KGxpc3QpKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvclZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQcm9jZXNzZWRIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFodG1sIHx8ICF0aGlzLnRleHRQcm9jZXNzb3IpIHJldHVybiBodG1sO1xuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQoaHRtbCwgdHJ1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU2V0RGF0YSgpIHt9XG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYW5lbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IElQYW5lbCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCB2YWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2UocGFyZW50OiBJUGFuZWwpOiBJUGFnZSB7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50KSBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIDxJUGFnZT4oPGFueT5wYXJlbnQpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBtb3ZlVG9CYXNlKFxuICAgIHBhcmVudDogSVBhbmVsLFxuICAgIGNvbnRhaW5lcjogSVBhbmVsLFxuICAgIGluc2VydEJlZm9yZTogYW55ID0gbnVsbFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIGZhbHNlO1xuICAgIHBhcmVudC5yZW1vdmVFbGVtZW50KDxJRWxlbWVudD4oPGFueT50aGlzKSk7XG4gICAgdmFyIGluZGV4ID0gLTE7XG4gICAgaWYgKEhlbHBlcnMuaXNOdW1iZXIoaW5zZXJ0QmVmb3JlKSkge1xuICAgICAgaW5kZXggPSBwYXJzZUludChpbnNlcnRCZWZvcmUpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT0gLTEgJiYgISFpbnNlcnRCZWZvcmUgJiYgISFpbnNlcnRCZWZvcmUuZ2V0VHlwZSkge1xuICAgICAgaW5kZXggPSBjb250YWluZXIuaW5kZXhPZihpbnNlcnRCZWZvcmUpO1xuICAgIH1cbiAgICBjb250YWluZXIuYWRkRWxlbWVudCg8SUVsZW1lbnQ+KDxhbnk+dGhpcyksIGluZGV4KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQYWdlKHBhcmVudDogSVBhbmVsLCB2YWw6IElQYWdlKSB7XG4gICAgdmFyIG9sZFBhZ2UgPSB0aGlzLmdldFBhZ2UocGFyZW50KTtcbiAgICBpZiAob2xkUGFnZSA9PT0gdmFsKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpKTtcbiAgICBpZiAodmFsKSB7XG4gICAgICB2YWwuYWRkRWxlbWVudCg8SUVsZW1lbnQ+KDxhbnk+dGhpcyksIC0xKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVMb2NLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBrZXlzLnB1c2goXCJ0aXRsZVwiKTtcbiAgICBrZXlzLnB1c2goXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZlbnQ8VCBleHRlbmRzIEZ1bmN0aW9uLCBPcHRpb25zPiB7XG4gIHB1YmxpYyBvbkNhbGxiYWNrc0NoYW5nZWQ6ICgpID0+IHZvaWQ7XG4gIHByb3RlY3RlZCBjYWxsYmFja3M6IEFycmF5PFQ+O1xuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNhbGxiYWNrcyB8fCB0aGlzLmNhbGxiYWNrcy5sZW5ndGggPT0gMDtcbiAgfVxuICBwdWJsaWMgZmlyZShzZW5kZXI6IGFueSwgb3B0aW9uczogT3B0aW9ucykge1xuICAgIGlmICghdGhpcy5jYWxsYmFja3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrc1tpXShzZW5kZXIsIG9wdGlvbnMpO1xuICAgICAgaWYgKCF0aGlzLmNhbGxiYWNrcykgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jYWxsYmFja3MgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIGFkZChmdW5jOiBUKSB7XG4gICAgaWYgKHRoaXMuaGFzRnVuYyhmdW5jKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5jYWxsYmFja3MpIHtcbiAgICAgIHRoaXMuY2FsbGJhY2tzID0gbmV3IEFycmF5PFQ+KCk7XG4gICAgfVxuICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZnVuYyk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2tDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIHJlbW92ZShmdW5jOiBUKSB7XG4gICAgaWYgKHRoaXMuaGFzRnVuYyhmdW5jKSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5jYWxsYmFja3MuaW5kZXhPZihmdW5jLCAwKTtcbiAgICAgIHRoaXMuY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmZpcmVDYWxsYmFja0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGhhc0Z1bmMoZnVuYzogVCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoZnVuYywgMCkgPiAtMTtcbiAgfVxuICBwcml2YXRlIGZpcmVDYWxsYmFja0NoYW5nZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5vbkNhbGxiYWNrc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMub25DYWxsYmFja3NDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudEJhc2U8VD4gZXh0ZW5kcyBFdmVudDxcbiAgKHNlbmRlcjogVCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gIGFueVxuPiB7fVxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQmFzZSwgSVN1cnZleSwgSVN1cnZleURhdGEgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcblxuLyoqXG4gKiBUaGUgY2FsY3VsYXRlZCB2YWx1ZSBpcyBhIHdheSB0byBkZWZpbmUgdGhlIHZhcmlhYmxlIGluIFN1cnZleSBDcmVhdG9yLlxuICogSXQgaGFzIHR3byBtYWluIHByb3BlcnRpZXM6IG5hbWUgYW5kIGV4cHJlc3Npb24uIEJhc2VkIG9uIGV4cHJlc3Npb24gdGhlIHZhbHVlIHJlYWQtb25seSBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuXG4gKiBUaGUgbmFtZSBwcm9wZXJ0eSBzaG91bGQgYmUgdW5pcXVlIHRob3VnaCBhbGwgY2FsY3VsYXRlZCB2YWx1ZXMuXG4gKiBJdCB1c2VzIHN1cnZleS5nZXRWYXJpYWJsZS9zZXJ1dmV5LnNldFZhcmlhYmxlIGZ1bmN0aW9ucyB0byBnZXQvc2V0IGl0cyB2YWx1ZS4gVGhlIGNsYXNzIGRvIG5vdCBzdG9yZSBpdHMgdmFsdWUgaW50ZXJuYWxseS5cbiAqIFlvdSBtYXkgc2V0IGluY2x1ZGVJbnRvUmVzdWx0IHByb3BlcnR5IHRvIHRydWUgdG8gc3RvcmUgdGhpcyBjYWxjdWxhdGVkIHZhbHVlIGludG8gc3VydmV5IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGN1bGF0ZWRWYWx1ZSBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIGRhdGE6IElTdXJ2ZXlEYXRhO1xuICBwcml2YXRlIGV4cHJlc3Npb25Jc1J1bm5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBleHByZXNzaW9uUnVubmVyOiBFeHByZXNzaW9uUnVubmVyO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBudWxsLCBleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoISFuYW1lKSB7XG4gICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBpZiAoISFleHByZXNzaW9uKSB7XG4gICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0T3duZXIoZGF0YTogSVN1cnZleURhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucmVydW5FeHByZXNzaW9uKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjYWxjdWxhdGVkdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSAmJiAhISg8YW55PnRoaXMuZGF0YSlbXCJnZXRTdXJ2ZXlcIl1cbiAgICAgID8gKDxhbnk+dGhpcy5kYXRhKS5nZXRTdXJ2ZXkoKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgb3duZXIoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIG5hbWUuIEl0IHNob3VsZCBiZSBub24gZW1wdHkgYW5kIHVuaXF1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBpbmNsdWRlIHRoZSBub24tZW1wdHkgY2FsY3VsYXRlZCB2YWx1ZSBpbnRvIHN1cnZleSByZXN1bHQsIHN1cnZleS5kYXRhIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpbmNsdWRlSW50b1Jlc3VsdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5jbHVkZUludG9SZXN1bHRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5jbHVkZUludG9SZXN1bHQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5jbHVkZUludG9SZXN1bHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIEV4cHJlc3Npb24gdGhhdCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmFsdWUuIFlvdSBtYXkgdXNlIHN0YW5kYXJkIG9wZXJhdG9ycyBsaWtlICssIC0sICogYW5kIC8sIHNxdWFyZXMgKCkuIEhlcmUgaXMgdGhlIGV4YW1wbGUgb2YgYWNjZXNzaW5nIHRoZSBxdWVzdGlvbiB2YWx1ZSB7cXVlc3Rpb25uYW1lfS5cbiAgICogPGJyLz5FeGFtcGxlOiBcIih7cXVhbnRpdHl9ICoge3ByaWNlfSkgKiAoMTAwIC0ge2Rpc2NvdW50fSkgLyAxMDBcIlxuICAgKi9cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICAgIHRoaXMucmVydW5FeHByZXNzaW9uKCk7XG4gIH1cbiAgcHVibGljIGxvY0NhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHVubG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBpc0NhbGN1bGF0ZWQgPSBmYWxzZTtcbiAgcHVibGljIHJlc2V0Q2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5pc0NhbGN1bGF0ZWQgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZG9DYWxjdWxhdGlvbihcbiAgICBjYWxjdWxhdGVkVmFsdWVzOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+LFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNDYWxjdWxhdGVkKSByZXR1cm47XG4gICAgdGhpcy5ydW5FeHByZXNzaW9uQ29yZShjYWxjdWxhdGVkVmFsdWVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMuaXNDYWxjdWxhdGVkID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgcnVuRXhwcmVzc2lvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMucnVuRXhwcmVzc2lvbkNvcmUobnVsbCwgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRWYXJpYWJsZSh0aGlzLm5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZSh2YWw6IGFueSkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm47XG4gICAgdGhpcy5kYXRhLnNldFZhcmlhYmxlKHRoaXMubmFtZSwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBjYW5SdW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuZGF0YSAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiZcbiAgICAgICEhdGhpcy5leHByZXNzaW9uICYmXG4gICAgICAhdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nICYmXG4gICAgICAhIXRoaXMubmFtZVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXJ1bkV4cHJlc3Npb24oKSB7XG4gICAgaWYgKCF0aGlzLmNhblJ1bkV4cHJlc3Npb24pIHJldHVybjtcbiAgICB0aGlzLnJ1bkV4cHJlc3Npb24oXG4gICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBydW5FeHByZXNzaW9uQ29yZShcbiAgICBjYWxjdWxhdGVkVmFsdWVzOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+LFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmNhblJ1bkV4cHJlc3Npb24pIHJldHVybjtcbiAgICB0aGlzLmVuc3VyZUV4cHJlc3Npb24odmFsdWVzKTtcbiAgICB0aGlzLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgaWYgKCEhY2FsY3VsYXRlZFZhbHVlcykge1xuICAgICAgdGhpcy5ydW5EZXBlbmRlbnRFeHByZXNzaW9ucyhjYWxjdWxhdGVkVmFsdWVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSBydW5EZXBlbmRlbnRFeHByZXNzaW9ucyhcbiAgICBjYWxjdWxhdGVkVmFsdWVzOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+LFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgdmFyIHZhcmlhYmxlcyA9IHRoaXMuZXhwcmVzc2lvblJ1bm5lci5nZXRWYXJpYWJsZXMoKTtcbiAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNhbGNJdGVtID0gY2FsY3VsYXRlZFZhbHVlc1tpXTtcbiAgICAgIGlmIChjYWxjSXRlbSA9PT0gdGhpcyB8fCB2YXJpYWJsZXMuaW5kZXhPZihjYWxjSXRlbS5uYW1lKSA8IDApIGNvbnRpbnVlO1xuICAgICAgY2FsY0l0ZW0uZG9DYWxjdWxhdGlvbihjYWxjdWxhdGVkVmFsdWVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgdmFsdWVzW2NhbGNJdGVtLm5hbWVdID0gY2FsY0l0ZW0udmFsdWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZW5zdXJlRXhwcmVzc2lvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKCEhdGhpcy5leHByZXNzaW9uUnVubmVyKSByZXR1cm47XG4gICAgdGhpcy5leHByZXNzaW9uUnVubmVyID0gbmV3IEV4cHJlc3Npb25SdW5uZXIodGhpcy5leHByZXNzaW9uKTtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IG5ld1ZhbHVlID0+IHtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCB0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudW5sb2NDYWxjdWxhdGlvbigpO1xuICAgIH07XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjYWxjdWxhdGVkdmFsdWVcIixcbiAgW1xuICAgIHsgbmFtZTogXCIhbmFtZVwiLCBpc1VuaXF1ZTogdHJ1ZSB9LFxuICAgIFwiZXhwcmVzc2lvbjpleHByZXNzaW9uXCIsXG4gICAgXCJpbmNsdWRlSW50b1Jlc3VsdDpib29sZWFuXCIsXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgQ2FsY3VsYXRlZFZhbHVlKCk7XG4gIH0sXG4gIFwiYmFzZVwiXG4pO1xuIiwiaW1wb3J0IHsgQmFzZSwgU3VydmV5RXJyb3IsIElUZXh0UHJvY2Vzc29yLCBJUXVlc3Rpb24sIElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFdlYlJlcXVlc3RFcnJvciwgV2ViUmVxdWVzdEVtcHR5RXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG5jbGFzcyBYbWxQYXJzZXIge1xuICBwcml2YXRlIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgcHVibGljIGFzc2lnblZhbHVlKHRhcmdldDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0ucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXV0uY29uY2F0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAxICYmXG4gICAgICBPYmplY3Qua2V5cyh2YWx1ZSlbMF0gPT09IG5hbWVcbiAgICApIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHhtbDJKc29uKHhtbE5vZGU6IGFueSwgcmVzdWx0OiBhbnkpIHtcbiAgICBpZiAoeG1sTm9kZS5jaGlsZHJlbiAmJiB4bWxOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeG1sTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgY2hpbGROb2RlID0geG1sTm9kZS5jaGlsZHJlbltpXTtcbiAgICAgICAgbGV0IGNoaWxkT2JqZWN0ID0ge307XG4gICAgICAgIHRoaXMueG1sMkpzb24oY2hpbGROb2RlLCBjaGlsZE9iamVjdCk7XG4gICAgICAgIHRoaXMuYXNzaWduVmFsdWUocmVzdWx0LCBjaGlsZE5vZGUubm9kZU5hbWUsIGNoaWxkT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NpZ25WYWx1ZShyZXN1bHQsIHhtbE5vZGUubm9kZU5hbWUsIHhtbE5vZGUudGV4dENvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcGFyc2VYbWxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgICBsZXQgeG1sUm9vdCA9IHRoaXMucGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4bWxTdHJpbmcsIFwidGV4dC94bWxcIik7XG4gICAgbGV0IGpzb24gPSB7fTtcbiAgICB0aGlzLnhtbDJKc29uKHhtbFJvb3QsIGpzb24pO1xuICAgIHJldHVybiBqc29uO1xuICB9XG59XG5cbi8qKlxuICogQSBkZWZpbml0aW9uIGZvciBmaWxsaW5nIGNob2ljZXMgZm9yIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMgZnJvbSByZXNmdWxsIHNlcnZpY2VzLlxuICogVGhlIHJ1biBtZXRob2QgY2FsbCBhIHJlc3RmdWwgc2VydmljZSBhbmQgcmVzdWx0cyBjYW4gYmUgZ2V0IG9uIGdldFJlc3VsdENhbGxiYWNrLlxuICovXG5leHBvcnQgY2xhc3MgQ2hvaWNlc1Jlc3RmdWwgZXh0ZW5kcyBCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGVUZXh0ID0gXCJ7Q0FDSEV9XCI7XG4gIHByaXZhdGUgc3RhdGljIG5vQ2FjaGVUZXh0ID0gXCJ7Tk9DQUNIRX1cIjtcbiAgcHVibGljIHN0YXRpYyBnZXQgRW5jb2RlUGFyYW1ldGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2V0dGluZ3Mud2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgRW5jb2RlUGFyYW1ldGVycyh2YWw6IGJvb2xlYW4pIHtcbiAgICBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNsZWFyQ2FjaGUoKSB7XG4gICAgQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHQgPSB7fTtcbiAgICBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzID0ge307XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgaXRlbXNSZXN1bHQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBzZW5kaW5nU2FtZVJlcXVlc3RzOiB7XG4gICAgW2luZGV4OiBzdHJpbmddOiBBcnJheTxDaG9pY2VzUmVzdGZ1bD47XG4gIH0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgYWRkU2FtZVJlcXVlc3Qob2JqOiBDaG9pY2VzUmVzdGZ1bCk6IGJvb2xlYW4ge1xuICAgIGlmICghb2JqLmlzVXNpbmdDYWNoZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBoYXNoID0gb2JqLm9iakhhc2g7XG4gICAgdmFyIHJlcyA9IENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHNbaGFzaF07XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHNbb2JqLm9iakhhc2hdID0gW107XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJlcy5wdXNoKG9iaik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgdW5yZWdpc3RlclNhbWVSZXF1ZXN0cyhvYmo6IENob2ljZXNSZXN0ZnVsLCBpdGVtczogYW55KSB7XG4gICAgaWYgKCFvYmouaXNVc2luZ0NhY2hlKSByZXR1cm47XG4gICAgdmFyIHJlcyA9IENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHNbb2JqLm9iakhhc2hdO1xuICAgIGRlbGV0ZSBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzW29iai5vYmpIYXNoXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoISFyZXNbaV0uZ2V0UmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmVzW2ldLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBvbkJlZm9yZVNlbmRSZXF1ZXN0OiAoXG4gICAgc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bCxcbiAgICBvcHRpb25zOiB7IHJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0IH1cbiAgKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBnZXRDYWNoZWRJdGVtc1Jlc3VsdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbaGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob2JqLmdldFJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBvYmouZ2V0UmVzdWx0Q2FsbGJhY2socmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBsYXN0T2JqSGFzaDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkVXJsOiBzdHJpbmcgPSBcIlwiO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkUGF0aDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1VzaW5nQ2FjaGVGcm9tVXJsOiBib29sZWFuID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgb25Qcm9jZXNzZWRVcmxDYWxsYmFjazogKHVybDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xuICBwdWJsaWMgYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHVwZGF0ZVJlc3VsdENhbGxiYWNrOiAoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgc2VydmVyUmVzdWx0OiBhbnlcbiAgKSA9PiBBcnJheTxJdGVtVmFsdWU+O1xuICBwdWJsaWMgZ2V0SXRlbVZhbHVlQ2FsbGJhY2s6IChpdGVtOiBhbnkpID0+IGFueTtcbiAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XG4gIHB1YmxpYyBvd25lcjogSVF1ZXN0aW9uO1xuICBwdWJsaWMgY3JlYXRlSXRlbVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gbmV3IEl0ZW1WYWx1ZSh2YWx1ZSk7XG4gIH07XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLm93bmVyID8gdGhpcy5vd25lci5zdXJ2ZXkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBydW4odGV4dFByb2Nlc3NvcjogSVRleHRQcm9jZXNzb3IgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLnVybCB8fCAhdGhpcy5nZXRSZXN1bHRDYWxsYmFjaykgcmV0dXJuO1xuICAgIHRoaXMucHJvY2Vzc2VkVGV4dCh0ZXh0UHJvY2Vzc29yKTtcbiAgICBpZiAoIXRoaXMucHJvY2Vzc2VkVXJsKSB7XG4gICAgICB0aGlzLmRvRW1wdHlSZXN1bHRDYWxsYmFjayh7fSk7XG4gICAgICB0aGlzLmxhc3RPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0T2JqSGFzaCA9PT0gdGhpcy5vYmpIYXNoKSByZXR1cm47XG4gICAgdGhpcy5sYXN0T2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICBpZiAodGhpcy51c2VDaGFuZ2VkSXRlbXNSZXN1bHRzKCkpIHJldHVybjtcbiAgICBpZiAoQ2hvaWNlc1Jlc3RmdWwuYWRkU2FtZVJlcXVlc3QodGhpcykpIHJldHVybjtcbiAgICB0aGlzLnNlbmRSZXF1ZXN0KCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1VzaW5nQ2FjaGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzUnVubmluZygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzV2FpdGluZ0ZvclBhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsICYmICF0aGlzLnByb2Nlc3NlZFVybDtcbiAgfVxuICBwcm90ZWN0ZWQgdXNlQ2hhbmdlZEl0ZW1zUmVzdWx0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWwuZ2V0Q2FjaGVkSXRlbXNSZXN1bHQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBkb0VtcHR5UmVzdWx0Q2FsbGJhY2soc2VydmVyUmVzdWx0OiBhbnkpIHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICBpZiAodGhpcy51cGRhdGVSZXN1bHRDYWxsYmFjaykge1xuICAgICAgaXRlbXMgPSB0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgIH1cbiAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3NlZFRleHQodGV4dFByb2Nlc3NvcjogSVRleHRQcm9jZXNzb3IpIHtcbiAgICB2YXIgdXJsVGV4dCA9IHRoaXMudXJsO1xuICAgIGlmICghIXVybFRleHQpIHtcbiAgICAgIHVybFRleHQgPSB1cmxUZXh0XG4gICAgICAgIC5yZXBsYWNlKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCwgXCJcIilcbiAgICAgICAgLnJlcGxhY2UoQ2hvaWNlc1Jlc3RmdWwubm9DYWNoZVRleHQsIFwiXCIpO1xuICAgIH1cbiAgICBpZiAodGV4dFByb2Nlc3Nvcikge1xuICAgICAgdmFyIHBVcmwgPSB0ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0RXgoXG4gICAgICAgIHVybFRleHQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICAgIHZhciBwUGF0aCA9IHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHRFeChcbiAgICAgICAgdGhpcy5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgc2V0dGluZ3Mud2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnNcbiAgICAgICk7XG4gICAgICBpZiAoIXBVcmwuaGFzQWxsVmFsdWVzT25MYXN0UnVuIHx8ICFwUGF0aC5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBcIlwiO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFBhdGggPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBwVXJsLnRleHQ7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHBQYXRoLnRleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gdXJsVGV4dDtcbiAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHRoaXMucGF0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Qcm9jZXNzZWRVcmxDYWxsYmFjaykge1xuICAgICAgdGhpcy5vblByb2Nlc3NlZFVybENhbGxiYWNrKHRoaXMucHJvY2Vzc2VkVXJsLCB0aGlzLnByb2Nlc3NlZFBhdGgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZShyZXNwb25zZTogYW55KSB7XG4gICAgbGV0IHBhcnNlZFJlc3BvbnNlO1xuICAgIGlmIChcbiAgICAgICEhcmVzcG9uc2UgJiZcbiAgICAgIHR5cGVvZiByZXNwb25zZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIHJlc3BvbnNlLmluZGV4T2YoXCI8XCIpID09PSAwXG4gICAgKSB7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IFhtbFBhcnNlcigpO1xuICAgICAgcGFyc2VkUmVzcG9uc2UgPSBwYXJzZXIucGFyc2VYbWxTdHJpbmcocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBhcnNlZFJlc3BvbnNlID0gKHJlc3BvbnNlIHx8IFwiXCIpXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLm1hcCgoczogYW55KSA9PiBzLnRyaW0oXCIgXCIpKVxuICAgICAgICAgIC5maWx0ZXIoKHM6IGFueSkgPT4gISFzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZFJlc3BvbnNlO1xuICB9XG4gIHByb3RlY3RlZCBzZW5kUmVxdWVzdCgpIHtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy5wcm9jZXNzZWRVcmwpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbG9hZGluZ09iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBzZWxmLm9uTG9hZChzZWxmLnBhcnNlUmVzcG9uc2UoeGhyLnJlc3BvbnNlKSwgbG9hZGluZ09iakhhc2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvcHRpb25zID0geyByZXF1ZXN0OiB4aHIgfTtcbiAgICBpZiAoISFDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0KSB7XG4gICAgICBDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0KHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLmJlZm9yZVNlbmRSZXF1ZXN0KCk7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNob2ljZXNCeVVybFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMudXJsICYmXG4gICAgICAhdGhpcy5wYXRoICYmXG4gICAgICAhdGhpcy52YWx1ZU5hbWUgJiZcbiAgICAgICF0aGlzLnRpdGxlTmFtZSAmJlxuICAgICAgIXRoaXMuaW1hZ2VMaW5rTmFtZVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllcygpO1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2godGhpcy5nZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydGllc1tpXS5uYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgKyBcIk5hbWVcIjtcbiAgfVxuICBwcml2YXRlIGdldEN1c3RvbVByb3BlcnRpZXMoKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXModGhpcy5pdGVtVmFsdWVUeXBlKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ2YWx1ZVwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ0ZXh0XCIgfHxcbiAgICAgICAgcHJvcGVydGllc1tpXS5uYW1lID09PSBcInZpc2libGVJZlwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJlbmFibGVJZlwiXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldERhdGEoanNvbjogYW55KSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGlmIChqc29uLnVybCkgdGhpcy51cmwgPSBqc29uLnVybDtcbiAgICBpZiAoanNvbi5wYXRoKSB0aGlzLnBhdGggPSBqc29uLnBhdGg7XG4gICAgaWYgKGpzb24udmFsdWVOYW1lKSB0aGlzLnZhbHVlTmFtZSA9IGpzb24udmFsdWVOYW1lO1xuICAgIGlmIChqc29uLnRpdGxlTmFtZSkgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcbiAgICBpZiAoanNvbi5pbWFnZUxpbmtOYW1lKSB0aGlzLmltYWdlTGlua05hbWUgPSBqc29uLmltYWdlTGlua05hbWU7XG4gICAgaWYgKGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmFsbG93RW1wdHlSZXNwb25zZSA9IGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgIGlmIChqc29uLmF0dGFjaE9yaWdpbmFsSXRlbXMgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcyA9IGpzb24uYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoanNvbltwcm9wZXJ0aWVzW2ldXSkgKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0gPSBqc29uW3Byb3BlcnRpZXNbaV1dO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLnVybCkgcmVzW1widXJsXCJdID0gdGhpcy51cmw7XG4gICAgaWYgKHRoaXMucGF0aCkgcmVzW1wicGF0aFwiXSA9IHRoaXMucGF0aDtcbiAgICBpZiAodGhpcy52YWx1ZU5hbWUpIHJlc1tcInZhbHVlTmFtZVwiXSA9IHRoaXMudmFsdWVOYW1lO1xuICAgIGlmICh0aGlzLnRpdGxlTmFtZSkgcmVzW1widGl0bGVOYW1lXCJdID0gdGhpcy50aXRsZU5hbWU7XG4gICAgaWYgKHRoaXMuaW1hZ2VMaW5rTmFtZSkgcmVzW1wiaW1hZ2VMaW5rTmFtZVwiXSA9IHRoaXMuaW1hZ2VMaW5rTmFtZTtcbiAgICBpZiAodGhpcy5hbGxvd0VtcHR5UmVzcG9uc2UpXG4gICAgICByZXNbXCJhbGxvd0VtcHR5UmVzcG9uc2VcIl0gPSB0aGlzLmFsbG93RW1wdHlSZXNwb25zZTtcbiAgICBpZiAodGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zKVxuICAgICAgcmVzW1wiYXR0YWNoT3JpZ2luYWxJdGVtc1wiXSA9IHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0pXG4gICAgICAgIHJlc1twcm9wZXJ0aWVzW2ldXSA9ICg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaW5rIHRvIGEgd2ViIHNlcnZpY2UuIFlvdSBjYW4gdXNlIHRleHQgcHJlcHJvY2Vzc2luZyBoZXJlLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB1cmw6IF9odHRwczovL3Jlc3Rjb3VudHJpZXMuZXUvcmVzdC92Mi9yZWdpb24ve3JlZ2lvbn1fIGlzIGNoYW5nZWQgYmFzZWQgb24gdGhlIF9yZWdpb25fIHF1ZXN0aW9uJ3MgdmFsdWUuXG4gICAqIFN1cnZleUpTIGF1dG9tYXRpY2FsbHkgZ2V0cyBkYXRhIGZyb20gdGhlIHdlYiBzZXJ2aWNlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBfcmVnaW9uXyBxdWVzdGlvbiBjaGFuZ2VzLlxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB2YWx1ZU5hbWVcbiAgICogQHNlZSB0aXRsZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXJsKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXJsXCIsIHZhbCk7XG4gICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdW5kZWZpbmVkO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLmNhY2hlVGV4dCkgPiAtMSkge1xuICAgICAgdGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbC5pbmRleE9mKENob2ljZXNSZXN0ZnVsLm5vQ2FjaGVUZXh0KSA+IC0xKSB7XG4gICAgICAgIHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHksIGlmIGEgd2ViIHNlcnZpY2UgcmV0dXJucyBhIGxvdCBvZiBpbmZvcm1hdGlvbiBhbmQgeW91IG5lZWQgb25seSBhIHBhcnQgb2YgaXQuXG4gICAqIEZvciBleGFtcGxlLCBhIHdlYiBzZXJ2aWNlIHJldHVybnMgYSBsaXN0IG9mIGNvdW50cmllcyBhbmQgYSBsaXN0IG9mIGNhcGl0YWxzLlxuICAgKiBJZiB5b3UgbmVlZCBhIGxpc3Qgb2YgY291bnRyaWVzLCBzZXQgYSBjb3JyZWN0IHBhdGggZnJvbSB3aGljaCBTdXJ2ZXlKUyBvYnRhaW5zIHRoZSBkYXRhLCBsaWtlOiBfRGF0YUxpc3QxXFxEYXRhTGlzdDJfXG4gICAqIEBzZWUgdXJsXG4gICAqIEBzZWUgdmFsdWVOYW1lXG4gICAqIEBzZWUgdGl0bGVOYW1lXG4gICAqIEBzZWUgW0V4YW1wbGU6IFJFU1RmdWwgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwpXG4gICAqIEBzZWUgW0RvY3M6IEZpbGwgQ2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBTZXJ2aWNlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeS8/aWQ9TGlicmFyeU92ZXJ2aWV3I2ZpbGwtdGhlLWNob2ljZXMtZnJvbS1hLXJlc3RmdWwtc2VydmljZSlcbiAgICovXG5cbiAgcHVibGljIGdldCBwYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYXRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGF0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSAoaW4gdGhlIG9idGFpbmVkIGRhdGEgb2JqZWN0KSB0byB3aGljaCBTdXJ2ZXlKUyBiaW5kcyB0byBwcm92aWRlIHZhbHVlcyBmb3IgY2hvaWNlIGl0ZW1zLlxuICAgKiBAc2VlIHVybFxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB0aXRsZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cblxuICBwdWJsaWMgZ2V0IHZhbHVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgKGluIHRoZSBvYnRhaW5lZCBkYXRhIG9iamVjdCkgdG8gd2hpY2ggU3VydmV5SlMgYmluZHMgdG8gcHJvdmlkZSBkaXNwbGF5IHRleHRzIGZvciBjaG9pY2UgaXRlbXMuXG4gICAqIEBzZWUgdXJsXG4gICAqIEBzZWUgcGF0aFxuICAgKiBAc2VlIHZhbHVlZU5hbWVcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cblxuICBwdWJsaWMgZ2V0IHRpdGxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZU5hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGltYWdlTGlua05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGlua05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZUxpbmtOYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhbGxvd0VtcHR5UmVzcG9uc2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93RW1wdHlSZXNwb25zZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0VtcHR5UmVzcG9uc2UodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dFbXB0eVJlc3BvbnNlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhdHRhY2hPcmlnaW5hbEl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdHRhY2hPcmlnaW5hbEl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF0dGFjaE9yaWdpbmFsSXRlbXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXR0YWNoT3JpZ2luYWxJdGVtc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbVZhbHVlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vd25lcikgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLm93bmVyLmdldFR5cGUoKSwgXCJjaG9pY2VzXCIpO1xuICAgIGlmICghcHJvcCkgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgaWYgKHByb3AudHlwZSA9PSBcIml0ZW12YWx1ZVtdXCIpIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgIHJldHVybiBwcm9wLnR5cGU7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMudXJsID0gXCJcIjtcbiAgICB0aGlzLnBhdGggPSBcIlwiO1xuICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcbiAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XG4gICAgdGhpcy5pbWFnZUxpbmtOYW1lID0gXCJcIjtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV0pICg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGJlZm9yZVNlbmRSZXF1ZXN0KCkge1xuICAgIGlmICghIXRoaXMuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjaykge1xuICAgICAgdGhpcy5iZWZvcmVTZW5kUmVxdWVzdENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkxvYWQocmVzdWx0OiBhbnksIGxvYWRpbmdPYmpIYXNoOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgaWYgKCFsb2FkaW5nT2JqSGFzaCkge1xuICAgICAgbG9hZGluZ09iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgfVxuICAgIHZhciBpdGVtcyA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gICAgdmFyIHVwZGF0ZWRSZXN1bHQgPSB0aGlzLmdldFJlc3VsdEFmdGVyUGF0aChyZXN1bHQpO1xuICAgIGlmICh1cGRhdGVkUmVzdWx0ICYmIHVwZGF0ZWRSZXN1bHRbXCJsZW5ndGhcIl0pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlZFJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbVZhbHVlID0gdXBkYXRlZFJlc3VsdFtpXTtcbiAgICAgICAgaWYgKCFpdGVtVmFsdWUpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgdmFsdWUgPSAhIXRoaXMuZ2V0SXRlbVZhbHVlQ2FsbGJhY2tcbiAgICAgICAgICA/IHRoaXMuZ2V0SXRlbVZhbHVlQ2FsbGJhY2soaXRlbVZhbHVlKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZShpdGVtVmFsdWUpO1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlSXRlbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRUaXRsZShpdGVtLCBpdGVtVmFsdWUpO1xuICAgICAgICB0aGlzLnNldEN1c3RvbVByb3BlcnRpZXMoaXRlbSwgaXRlbVZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcykge1xuICAgICAgICAgIGl0ZW0ub3JpZ2luYWxJdGVtID0gaXRlbVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbWFnZUxpbmsgPSB0aGlzLmdldEltYWdlTGluayhpdGVtVmFsdWUpO1xuICAgICAgICBpZiAoISFpbWFnZUxpbmspIHtcbiAgICAgICAgICBpdGVtLmltYWdlTGluayA9IGltYWdlTGluaztcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgV2ViUmVxdWVzdEVtcHR5RXJyb3IobnVsbCwgdGhpcy5vd25lcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBpdGVtcyA9IHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2soaXRlbXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVXNpbmdDYWNoZSkge1xuICAgICAgQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbbG9hZGluZ09iakhhc2hdID0gaXRlbXM7XG4gICAgfVxuICAgIHRoaXMuY2FsbFJlc3VsdENhbGxiYWNrKGl0ZW1zLCBsb2FkaW5nT2JqSGFzaCk7XG4gICAgQ2hvaWNlc1Jlc3RmdWwudW5yZWdpc3RlclNhbWVSZXF1ZXN0cyh0aGlzLCBpdGVtcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGxSZXN1bHRDYWxsYmFjayhcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBsb2FkaW5nT2JqSGFzaDogc3RyaW5nXG4gICkge1xuICAgIGlmIChsb2FkaW5nT2JqSGFzaCAhPSB0aGlzLm9iakhhc2gpIHJldHVybjtcbiAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgfVxuICBwcml2YXRlIHNldEN1c3RvbVByb3BlcnRpZXMoaXRlbTogSXRlbVZhbHVlLCBpdGVtVmFsdWU6IGFueSkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUNvcmUoXG4gICAgICAgIGl0ZW1WYWx1ZSxcbiAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eUJpbmRpbmcocHJvcC5uYW1lKVxuICAgICAgKTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkge1xuICAgICAgICAoPGFueT5pdGVtKVtwcm9wLm5hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnR5QmluZGluZyhwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICgoPGFueT50aGlzKVt0aGlzLmdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpXSlcbiAgICAgIHJldHVybiAoPGFueT50aGlzKVt0aGlzLmdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpXTtcbiAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydHlOYW1lXSkgcmV0dXJuICg8YW55PnRoaXMpW3Byb3BlcnR5TmFtZV07XG4gICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcbiAgfVxuICBwcml2YXRlIG9uRXJyb3Ioc3RhdHVzOiBzdHJpbmcsIHJlc3BvbnNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IFdlYlJlcXVlc3RFcnJvcihzdGF0dXMsIHJlc3BvbnNlLCB0aGlzLm93bmVyKTtcbiAgICB0aGlzLmRvRW1wdHlSZXN1bHRDYWxsYmFjayhyZXNwb25zZSk7XG4gICAgQ2hvaWNlc1Jlc3RmdWwudW5yZWdpc3RlclNhbWVSZXF1ZXN0cyh0aGlzLCBbXSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0OiBhbnkpIHtcbiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoIXRoaXMucHJvY2Vzc2VkUGF0aCkgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgcGF0aGVzID0gdGhpcy5nZXRQYXRoZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhlc1tpXV07XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYXRoZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHBhdGhlcyA9IFtdO1xuICAgIGlmICh0aGlzLnByb2Nlc3NlZFBhdGguaW5kZXhPZihcIjtcIikgPiAtMSkge1xuICAgICAgcGF0aGVzID0gdGhpcy5wYXRoLnNwbGl0KFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aGVzID0gdGhpcy5wcm9jZXNzZWRQYXRoLnNwbGl0KFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKHBhdGhlcy5sZW5ndGggPT0gMCkgcGF0aGVzLnB1c2godGhpcy5wcm9jZXNzZWRQYXRoKTtcbiAgICByZXR1cm4gcGF0aGVzO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKGl0ZW0sIHRoaXMudmFsdWVOYW1lKTtcbiAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIGl0ZW07XG4gICAgdmFyIGxlbiA9IE9iamVjdC5rZXlzKGl0ZW0pLmxlbmd0aDtcbiAgICBpZiAobGVuIDwgMSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGl0ZW1bT2JqZWN0LmtleXMoaXRlbSlbMF1dO1xuICB9XG4gIHByaXZhdGUgc2V0VGl0bGUoaXRlbTogSXRlbVZhbHVlLCBpdGVtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHRpdGxlID0gdGhpcy50aXRsZU5hbWUgPyB0aGlzLnRpdGxlTmFtZSA6IFwidGl0bGVcIjtcbiAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUNvcmUoaXRlbVZhbHVlLCB0aXRsZSk7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaXRlbS50ZXh0ID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLmxvY1RleHQuc2V0SnNvbih2YWwpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEltYWdlTGluayhpdGVtOiBhbnkpOiBhbnkge1xuICAgIHZhciBpbWFnZUxpbmsgPSB0aGlzLmltYWdlTGlua05hbWUgPyB0aGlzLmltYWdlTGlua05hbWUgOiBcImltYWdlTGlua1wiO1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShpdGVtLCBpbWFnZUxpbmspO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKGl0ZW06IGFueSwgcHJvcGVydHk6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICBpZiAocHJvcGVydHkuaW5kZXhPZihcIi5cIikgPCAwKSByZXR1cm4gaXRlbVtwcm9wZXJ0eV07XG4gICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wZXJ0eS5zcGxpdChcIi5cIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gaXRlbVtwcm9wZXJ0aWVzW2ldXTtcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IG9iakhhc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvY2Vzc2VkVXJsICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCArXG4gICAgICBcIjtcIiArXG4gICAgICB0aGlzLnZhbHVlTmFtZSArXG4gICAgICBcIjtcIiArXG4gICAgICB0aGlzLnRpdGxlTmFtZSArXG4gICAgICBcIjtcIiArXG4gICAgICB0aGlzLmltYWdlTGlua05hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogT2Jzb2xldGUsIHBsZWFzZSB1c2UgQ2hvaWNlc1Jlc3RmdWxcbiAqL1xuZXhwb3J0IGNsYXNzIENob2ljZXNSZXN0ZnVsbCBleHRlbmRzIENob2ljZXNSZXN0ZnVsIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgRW5jb2RlUGFyYW1ldGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWwuRW5jb2RlUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBFbmNvZGVQYXJhbWV0ZXJzKHZhbDogYm9vbGVhbikge1xuICAgIENob2ljZXNSZXN0ZnVsLkVuY29kZVBhcmFtZXRlcnMgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjbGVhckNhY2hlKCkge1xuICAgIENob2ljZXNSZXN0ZnVsLmNsZWFyQ2FjaGUoKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBvbkJlZm9yZVNlbmRSZXF1ZXN0KCk6IChcbiAgICBzZW5kZXI6IENob2ljZXNSZXN0ZnVsLFxuICAgIG9wdGlvbnM6IHsgcmVxdWVzdDogWE1MSHR0cFJlcXVlc3QgfVxuICApID0+IHZvaWQge1xuICAgIHJldHVybiBDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IG9uQmVmb3JlU2VuZFJlcXVlc3QoXG4gICAgdmFsOiAoc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bCwgb3B0aW9uczogeyByZXF1ZXN0OiBYTUxIdHRwUmVxdWVzdCB9KSA9PiB2b2lkXG4gICkge1xuICAgIENob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3QgPSB2YWw7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaG9pY2VzQnlVcmxcIixcbiAgW1xuICAgIFwidXJsXCIsXG4gICAgXCJwYXRoXCIsXG4gICAgXCJ2YWx1ZU5hbWVcIixcbiAgICBcInRpdGxlTmFtZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VMaW5rTmFtZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgISFvYmoub3duZXIgJiYgb2JqLm93bmVyLmdldFR5cGUoKSA9PSBcImltYWdlcGlja2VyXCI7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImFsbG93RW1wdHlSZXNwb25zZTpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImF0dGFjaE9yaWdpbmFsSXRlbXM6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bCgpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgUHJvY2Vzc1ZhbHVlIHtcbiAgcHVibGljIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsO1xuICBwdWJsaWMgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsO1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIHB1YmxpYyBnZXRGaXJzdE5hbWUodGV4dDogc3RyaW5nLCBvYmo6IGFueSA9IG51bGwpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKCEhb2JqKSB7XG4gICAgICByZXMgPSB0aGlzLmdldEZpcnN0UHJvcGVydHlOYW1lKHRleHQsIG9iaik7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoID0gdGV4dFtpXTtcbiAgICAgIGlmIChjaCA9PSBcIi5cIiB8fCBjaCA9PSBcIltcIikgYnJlYWs7XG4gICAgICByZXMgKz0gY2g7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGhhc1ZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlcykgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHJlcy5oYXNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZXMpIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xuICAgIHJldHVybiByZXMudmFsdWU7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICB2YXIgbm9uTmVzdGVkT2JqID0gdGhpcy5nZXROb25OZXN0ZWRPYmplY3Qob2JqLCB0ZXh0LCB0cnVlKTtcbiAgICBpZiAoIW5vbk5lc3RlZE9iaikgcmV0dXJuO1xuICAgIG9iaiA9IG5vbk5lc3RlZE9iai52YWx1ZTtcbiAgICB0ZXh0ID0gbm9uTmVzdGVkT2JqLnRleHQ7XG4gICAgaWYgKCEhb2JqICYmICEhdGV4dCkge1xuICAgICAgb2JqW3RleHRdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZUluZm8odmFsdWVJbmZvOiBhbnkpIHtcbiAgICBpZiAoISF2YWx1ZUluZm8ucGF0aCkge1xuICAgICAgdmFsdWVJbmZvLnZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21QYXRoKHZhbHVlSW5mby5wYXRoLCB0aGlzLnZhbHVlcyk7XG4gICAgICB2YWx1ZUluZm8uaGFzVmFsdWUgPVxuICAgICAgICB2YWx1ZUluZm8udmFsdWUgIT09IG51bGwgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlSW5mby52YWx1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgICF2YWx1ZUluZm8uaGFzVmFsdWUgJiZcbiAgICAgICAgdmFsdWVJbmZvLnBhdGgubGVuZ3RoID4gMSAmJlxuICAgICAgICB2YWx1ZUluZm8ucGF0aFt2YWx1ZUluZm8ucGF0aC5sZW5ndGggLSAxXSA9PSBcImxlbmd0aFwiXG4gICAgICApIHtcbiAgICAgICAgdmFsdWVJbmZvLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdmFsdWVJbmZvLnZhbHVlID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHZhbHVlSW5mby5uYW1lLCB0aGlzLnZhbHVlcyk7XG4gICAgdmFsdWVJbmZvLnZhbHVlID0gcmVzLnZhbHVlO1xuICAgIHZhbHVlSW5mby5oYXNWYWx1ZSA9IHJlcy5oYXNWYWx1ZTtcbiAgICB2YWx1ZUluZm8ucGF0aCA9IHJlcy5oYXNWYWx1ZSA/IHJlcy5wYXRoIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRnJvbVBhdGgocGF0aDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgdmFsdWVzOiBhbnkpOiBhbnkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKCEhdmFsdWVzICYmIGluZGV4IDwgcGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBpbmRfbmFtZSA9IHBhdGhbaW5kZXhdO1xuICAgICAgaWYgKFxuICAgICAgICBIZWxwZXJzLmlzTnVtYmVyKGluZF9uYW1lKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlcykgJiZcbiAgICAgICAgaW5kX25hbWUgPj0gdmFsdWVzLmxlbmd0aFxuICAgICAgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHZhbHVlcyA9IHZhbHVlc1tpbmRfbmFtZV07XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHsgaGFzVmFsdWU6IGZhbHNlLCB2YWx1ZTogbnVsbCwgcGF0aDogbnVsbCB9O1xuICAgIHZhciBjdXJWYWx1ZSA9IHZhbHVlcztcbiAgICBpZiAoIWN1clZhbHVlICYmIGN1clZhbHVlICE9PSAwICYmIGN1clZhbHVlICE9PSBmYWxzZSkgcmV0dXJuIHJlcztcbiAgICBpZiAoXG4gICAgICB0ZXh0ICYmXG4gICAgICB0ZXh0Lmxhc3RJbmRleE9mKFwiLmxlbmd0aFwiKSA+IC0xICYmXG4gICAgICB0ZXh0Lmxhc3RJbmRleE9mKFwiLmxlbmd0aFwiKSA9PT0gdGV4dC5sZW5ndGggLSBcIi5sZW5ndGhcIi5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJlcy52YWx1ZSA9IDA7XG4gICAgICByZXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgbm9uTmVzdGVkT2JqID0gdGhpcy5nZXROb25OZXN0ZWRPYmplY3QoY3VyVmFsdWUsIHRleHQsIGZhbHNlKTtcbiAgICBpZiAoIW5vbk5lc3RlZE9iaikgcmV0dXJuIHJlcztcbiAgICByZXMucGF0aCA9IG5vbk5lc3RlZE9iai5wYXRoO1xuICAgIHJlcy52YWx1ZSA9ICEhbm9uTmVzdGVkT2JqLnRleHRcbiAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShub25OZXN0ZWRPYmoudmFsdWUsIG5vbk5lc3RlZE9iai50ZXh0KVxuICAgICAgOiBub25OZXN0ZWRPYmoudmFsdWU7XG4gICAgcmVzLmhhc1ZhbHVlID0gIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJlcy52YWx1ZSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldE5vbk5lc3RlZE9iamVjdChvYmo6IGFueSwgdGV4dDogc3RyaW5nLCBjcmVhdGVQYXRoOiBib29sZWFuKTogYW55IHtcbiAgICB2YXIgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqLCBjcmVhdGVQYXRoKTtcbiAgICB2YXIgcGF0aCA9ICEhY3VyTmFtZSA/IFtjdXJOYW1lXSA6IG51bGw7XG4gICAgd2hpbGUgKHRleHQgIT0gY3VyTmFtZSAmJiAhIW9iaikge1xuICAgICAgdmFyIGlzQXJyYXkgPSB0ZXh0WzBdID09IFwiW1wiO1xuICAgICAgaWYgKCFpc0FycmF5KSB7XG4gICAgICAgIGlmICghY3VyTmFtZSAmJiB0ZXh0ID09IHRoaXMuZ2V0Rmlyc3ROYW1lKHRleHQpKVxuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvYmosIHRleHQ6IHRleHQsIHBhdGg6IHBhdGggfTtcbiAgICAgICAgb2JqID0gdGhpcy5nZXRPYmplY3RWYWx1ZShvYmosIGN1ck5hbWUpO1xuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkob2JqKSAmJiAhY3JlYXRlUGF0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJOYW1lLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2JqSW5BcnJheSA9IHRoaXMuZ2V0T2JqSW5BcnJheShvYmosIHRleHQpO1xuICAgICAgICBpZiAoIW9iakluQXJyYXkpIHJldHVybiBudWxsO1xuICAgICAgICBvYmogPSBvYmpJbkFycmF5LnZhbHVlO1xuICAgICAgICB0ZXh0ID0gb2JqSW5BcnJheS50ZXh0O1xuICAgICAgICBwYXRoLnB1c2gob2JqSW5BcnJheS5pbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAoISF0ZXh0ICYmIHRleHRbMF0gPT0gXCIuXCIpIHtcbiAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDEpO1xuICAgICAgfVxuICAgICAgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqLCBjcmVhdGVQYXRoKTtcbiAgICAgIGlmICghIWN1ck5hbWUpIHtcbiAgICAgICAgcGF0aC5wdXNoKGN1ck5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogb2JqLCB0ZXh0OiB0ZXh0LCBwYXRoOiBwYXRoIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmpJbkFycmF5KGN1clZhbHVlOiBhbnksIHRleHQ6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1clZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGluZGV4ID0gMTtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0W2luZGV4XSAhPSBcIl1cIikge1xuICAgICAgc3RyICs9IHRleHRbaW5kZXhdO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgdGV4dCA9IGluZGV4IDwgdGV4dC5sZW5ndGggPyB0ZXh0LnN1YnN0cihpbmRleCArIDEpIDogXCJcIjtcbiAgICBpbmRleCA9IHRoaXMuZ2V0SW50VmFsdWUoc3RyKTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGN1clZhbHVlLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHsgdmFsdWU6IGN1clZhbHVlW2luZGV4XSwgdGV4dDogdGV4dCwgaW5kZXg6IGluZGV4IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRGaXJzdFByb3BlcnR5TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBhbnksXG4gICAgY3JlYXRlUHJvcDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbmFtZTtcbiAgICBpZiAoIW9iaikgb2JqID0ge307XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuIG5hbWU7XG4gICAgdmFyIG5hbWVJbkxvdyA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgQSA9IG5hbWVJbkxvd1swXTtcbiAgICB2YXIgYSA9IEEudG9VcHBlckNhc2UoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgZmlyc3QgPSBrZXlbMF07XG4gICAgICBpZiAoZmlyc3QgPT09IGEgfHwgZmlyc3QgPT09IEEpIHtcbiAgICAgICAgdmFyIGtleU5hbWUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGtleU5hbWUgPT0gbmFtZUluTG93KSByZXR1cm4ga2V5O1xuICAgICAgICBpZiAobmFtZUluTG93Lmxlbmd0aCA8PSBrZXlOYW1lLmxlbmd0aCkgY29udGludWU7XG4gICAgICAgIHZhciBjaCA9IG5hbWVJbkxvd1trZXlOYW1lLmxlbmd0aF07XG4gICAgICAgIGlmIChjaCAhPSBcIi5cIiAmJiBjaCAhPSBcIltcIikgY29udGludWU7XG4gICAgICAgIGlmIChrZXlOYW1lID09IG5hbWVJbkxvdy5zdWJzdHIoMCwga2V5TmFtZS5sZW5ndGgpKSByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3JlYXRlUHJvcCAmJiBuYW1lWzBdICE9PSBcIltcIikge1xuICAgICAgdmFyIGluZCA9IG5hbWUuaW5kZXhPZihcIi5cIik7XG4gICAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDAsIGluZCk7XG4gICAgICAgIG9ialtuYW1lXSA9IHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByaXZhdGUgZ2V0T2JqZWN0VmFsdWUob2JqOiBhbnksIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gb2JqW25hbWVdO1xuICB9XG4gIHByaXZhdGUgZ2V0SW50VmFsdWUoc3RyOiBhbnkpIHtcbiAgICBpZiAoc3RyID09IFwiMFwiIHx8ICgoc3RyIHwgMCkgPiAwICYmIHN0ciAlIDEgPT0gMCkpIHJldHVybiBOdW1iZXIoc3RyKTtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuXG5pbXBvcnQgeyBPcGVyYW5kLCBGdW5jdGlvbk9wZXJhbmQgfSBmcm9tIFwiLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uc1BhcnNlciB9IGZyb20gXCIuL2NvbmRpdGlvbnNQYXJzZXJcIjtcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHJpdmF0ZSBleHByZXNzaW9uVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBvcGVyYW5kOiBPcGVyYW5kO1xuICBwcml2YXRlIHByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgcHJpdmF0ZSBwYXJzZXIgPSBuZXcgQ29uZGl0aW9uc1BhcnNlcigpO1xuICBwcml2YXRlIGlzQXN5bmNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGhhc0Z1bmN0aW9uVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBhc3luY0Z1bmNMaXN0OiBBcnJheTxGdW5jdGlvbk9wZXJhbmQ+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5leHByZXNzaW9uID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuZXhwcmVzc2lvblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vcGVyYW5kID0gdGhpcy5wYXJzZXIucGFyc2VFeHByZXNzaW9uKHZhbHVlKTtcbiAgICB0aGlzLmhhc0Z1bmN0aW9uVmFsdWUgPSB0aGlzLmNhblJ1bigpID8gdGhpcy5vcGVyYW5kLmhhc0Z1bmN0aW9uKCkgOiBmYWxzZTtcbiAgICB0aGlzLmlzQXN5bmNWYWx1ZSA9IHRoaXMuaGFzRnVuY3Rpb24oKVxuICAgICAgPyB0aGlzLm9wZXJhbmQuaGFzQXN5bmNGdW5jdGlvbigpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFZhcmlhYmxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMub3BlcmFuZCkgcmV0dXJuIFtdO1xuXG4gICAgdmFyIHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHRoaXMub3BlcmFuZC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0Z1bmN0aW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0FzeW5jKCkge1xuICAgIHJldHVybiB0aGlzLmlzQXN5bmNWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5SdW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5vcGVyYW5kO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJ1bkNvcmUoXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYW55IHtcbiAgICBpZiAoIXRoaXMub3BlcmFuZCkgcmV0dXJuIG51bGw7XG5cbiAgICB0aGlzLnByb2Nlc3NWYWx1ZS52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgdGhpcy5wcm9jZXNzVmFsdWUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgaWYgKCF0aGlzLmlzQXN5bmMpIHJldHVybiB0aGlzLnJ1blZhbHVlcygpO1xuICAgIHRoaXMuYXN5bmNGdW5jTGlzdCA9IFtdO1xuICAgIHRoaXMub3BlcmFuZC5hZGRUb0FzeW5jTGlzdCh0aGlzLmFzeW5jRnVuY0xpc3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0ub25Bc3luY1JlYWR5ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvQXN5bmNGdW5jdGlvblJlYWR5KCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNGdW5jTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hc3luY0Z1bmNMaXN0W2ldLmV2YWx1YXRlQXN5bmModGhpcy5wcm9jZXNzVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBkb0FzeW5jRnVuY3Rpb25SZWFkeSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNGdW5jTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmFzeW5jRnVuY0xpc3RbaV0uaXNSZWFkeSkgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJ1blZhbHVlcygpO1xuICB9XG4gIHByaXZhdGUgcnVuVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHRoaXMub3BlcmFuZC5ldmFsdWF0ZSh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgdGhpcy5kb09uQ29tcGxldGUocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBkb09uQ29tcGxldGUocmVzOiBhbnkpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25SdW5uZXIgZXh0ZW5kcyBFeHByZXNzaW9uUnVubmVyQmFzZSB7XG4gIHB1YmxpYyBvblJ1bkNvbXBsZXRlOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkO1xuICBwdWJsaWMgcnVuKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJ1bkNvcmUodmFsdWVzLCBwcm9wZXJ0aWVzKSA9PSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBkb09uQ29tcGxldGUocmVzOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLm9uUnVuQ29tcGxldGUpIHRoaXMub25SdW5Db21wbGV0ZShyZXMgPT0gdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25SdW5uZXIgZXh0ZW5kcyBFeHByZXNzaW9uUnVubmVyQmFzZSB7XG4gIHB1YmxpYyBvblJ1bkNvbXBsZXRlOiAocmVzdWx0OiBhbnkpID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ydW5Db3JlKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge1xuICAgIGlmICghIXRoaXMub25SdW5Db21wbGV0ZSkgdGhpcy5vblJ1bkNvbXBsZXRlKHJlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE9wZXJhbmQsIENvbnN0IH0gZnJvbSBcIi4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnNcIjtcbmltcG9ydCB7IFN5bnRheEVycm9yLCBwYXJzZSB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25QYXJzZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbnNQYXJzZXJFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhdDogbnVtYmVyLCBwdWJsaWMgY29kZTogc3RyaW5nKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uc1BhcnNlciB7XG4gIHByaXZhdGUgY29uZGl0aW9uRXJyb3I6IENvbmRpdGlvbnNQYXJzZXJFcnJvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VyQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBPcGVyYW5kIH0gPSB7fTtcblxuICBwcml2YXRlIHBhdGNoRXhwcmVzc2lvbih0ZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoLz0+L2csIFwiPj1cIilcbiAgICAgIC5yZXBsYWNlKC89PC9nLCBcIjw9XCIpXG4gICAgICAucmVwbGFjZSgvPD4vZywgXCIhPVwiKVxuICAgICAgLnJlcGxhY2UoLz09L2csIFwiPSBcIilcbiAgICAgIC5yZXBsYWNlKC9lcXVhbHMvZywgXCJlcXVhbCBcIilcbiAgICAgIC5yZXBsYWNlKC9ub3RlcXVhbHMvZywgXCJub3RlcXVhbCBcIik7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ29uZGl0aW9uKHRleHQ6IHN0cmluZyk6IE9wZXJhbmQge1xuICAgIHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvbih0ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUV4cHJlc3Npb24odGV4dDogc3RyaW5nKTogT3BlcmFuZCB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXN1bHQgPSBDb25kaXRpb25zUGFyc2VyLnBhcnNlckNhY2hlW3RleHRdO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHBhcnNlKHRoaXMucGF0Y2hFeHByZXNzaW9uKHRleHQpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuaGFzQXN5bmNGdW5jdGlvbigpKSB7XG4gICAgICAgICAgQ29uZGl0aW9uc1BhcnNlci5wYXJzZXJDYWNoZVt0ZXh0XSA9IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uRXJyb3IgPSBuZXcgQ29uZGl0aW9uc1BhcnNlckVycm9yKFxuICAgICAgICAgIGUubG9jYXRpb24uc3RhcnQub2Zmc2V0LFxuICAgICAgICAgIGUubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXJyb3IoKTogQ29uZGl0aW9uc1BhcnNlckVycm9yIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25FcnJvcjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwQ3NzID0ge1xuICByb290OiBcInN2X21haW4gc3ZfYm9vdHN0cmFwX2Nzc1wiLFxuICBjb250YWluZXI6IFwic3ZfY29udGFpbmVyXCIsXG4gIGhlYWRlcjogXCJwYW5lbC1oZWFkaW5nIGNhcmQtaGVhZGVyXCIsXG4gIGJvZHk6IFwicGFuZWwtYm9keSBjYXJkLWJsb2NrIG10LTRcIixcbiAgYm9keUVtcHR5OiBcInBhbmVsLWJvZHkgY2FyZC1ibG9jayBtdC00IHN2X2JvZHlfZW1wdHlcIixcbiAgZm9vdGVyOiBcInBhbmVsLWZvb3RlciBjYXJkLWZvb3RlclwiLFxuICB0aXRsZTogXCJcIixcbiAgZGVzY3JpcHRpb246IFwiXCIsXG4gIGxvZ286IFwic3ZfbG9nb1wiLFxuICBsb2dvSW1hZ2U6IFwic3ZfbG9nb19faW1hZ2VcIixcbiAgaGVhZGVyVGV4dDogXCJzdl9oZWFkZXJfX3RleHRcIixcbiAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIixcbiAgY29tcGxldGVkUGFnZTogXCJcIixcbiAgbmF2aWdhdGlvbjoge1xuICAgIGNvbXBsZXRlOiBcImJ0biBzdl9jb21wbGV0ZV9idG5cIixcbiAgICBwcmV2OiBcImJ0biBzdl9wcmV2X2J0blwiLFxuICAgIG5leHQ6IFwiYnRuIHN2X25leHRfYnRuXCIsXG4gICAgc3RhcnQ6IFwiYnRuIHN2X3N0YXJ0X2J0blwiLFxuICAgIHByZXZpZXc6IFwiYnRuIHN2X3ByZXZpZXdfYnRuXCIsXG4gICAgZWRpdDogXCJidG4gc3ZfZWRpdF9idG5cIixcbiAgfSxcbiAgcHJvZ3Jlc3M6IFwicHJvZ3Jlc3MgY2VudGVyLWJsb2NrIG14LWF1dG8gbWItNFwiLFxuICBwcm9ncmVzc0JhcjogXCJwcm9ncmVzcy1iYXJcIixcbiAgcHJvZ3Jlc3NUZXh0VW5kZXJCYXI6IFwic3YtaGlkZGVuXCIsXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXItY2VudGVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1sZWZ0XCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uUmlnaHQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLXJpZ2h0XCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0XCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Q3VycmVudDpcbiAgICBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTpcbiAgICBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tbm9uY2xpY2thYmxlXCIsXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZTogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLXRpdGxlXCIsXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCIsXG4gIHBhZ2U6IHtcbiAgICByb290OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gIH0sXG4gIHBhZ2VUaXRsZTogXCJcIixcbiAgcGFnZURlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gIHJvdzogXCJzdl9yb3dcIixcbiAgcXVlc3Rpb246IHtcbiAgICBtYWluUm9vdDogXCJzdl9xc3RuXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IHN2X3FzdG5cIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzbWFsbFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgcm9vdDogXCJzdl9xYmxuIGZvcm0taW5saW5lIGNoZWNrYm94XCIsXG4gICAgaXRlbTogXCJzdi1ib29sZWFuXCIsXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWQgY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgc2xpZGVyOiBcInN2LWJvb2xlYW5fX3NsaWRlclwiLFxuICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsIFwiLFxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LWJvb2xlYW5fX2RlY29yYXRvciBcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyAgc3YtYm9vbGVhbl9fc3ZnXCIsXG4gICAgY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fY2hlY2tlZC1wYXRoXCIsXG4gICAgdW5jaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX191bmNoZWNrZWQtcGF0aFwiLFxuICAgIGluZGV0ZXJtaW5hdGVQYXRoOiBcInN2LWJvb2xlYW5fX2luZGV0ZXJtaW5hdGUtcGF0aFwiLFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHJvb3Q6IFwic3ZfcWNiYyBzdl9xY2J4IGZvcm0taW5saW5lXCIsXG4gICAgaXRlbTogXCJjaGVja2JveFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXG4gICAgaXRlbU5vbmU6IFwic3ZfcV9jaGVja2JveF9ub25lXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2NoZWNrYm94X2lubGluZVwiLFxuICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgbGFiZWw6IFwiXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJjaGVja2JveC1tYXRlcmlhbFwiLFxuICAgIG90aGVyOiBcInN2X3FfY2hlY2tib3hfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICByYW5raW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgcm9vdE1vYmlsZU1vZDogXCJzdi1yYW5raW5nLS1tb2JpbGVcIixcbiAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcbiAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWRyYWdcIixcbiAgfSxcbiAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZHJvcGRvd246IHtcbiAgICByb290OiBcIlwiLFxuICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9kZF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgfSxcbiAgaHRtbDogeyByb290OiBcIlwiIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gIG1hdHJpeDoge1xuICAgIHJvb3Q6IFwidGFibGUgc3ZfcV9tYXRyaXhcIixcbiAgICBsYWJlbDogXCJzdl9xX21fbGFiZWxcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdl9xX21fY2VsbF9zZWxlY3RlZCBiZy1wcmltYXJ5XCIsXG4gICAgY2VsbExhYmVsOiBcInN2X3FfbV9jZWxsX2xhYmVsXCIsXG4gIH0sXG4gIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxuICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICB9LFxuICBtYXRyaXhkeW5hbWljOiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJzdl9tYXRyaXhfZW1wdHlfcm93c190ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICB9LFxuICBwYW5lbGR5bmFtaWM6IHtcbiAgICByb290OiBcIlwiLFxuICAgIG5hdmlnYXRpb246IFwic3YtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgcHJvZ3Jlc3NUb3A6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcyBzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLS10b3BcIixcbiAgICBwcm9ncmVzc0JvdHRvbTpcbiAgICAgIFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcyBzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLS1ib3R0b21cIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1xdWVzdGlvbl9fdGl0bGVcIixcbiAgICBidXR0b246IFwiYnV0dG9uXCIsXG4gICAgYnV0dG9uQWRkOiBcImJ1dHRvbiBzdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlUmlnaHQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0bi0tcmlnaHRcIixcbiAgICBidXR0b25QcmV2OiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG5cIixcbiAgICBidXR0b25OZXh0OiBcInN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIixcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxuICAgIHByb2dyZXNzOiBcInN2LXByb2dyZXNzXCIsXG4gICAgcHJvZ3Jlc3NCYXI6IFwic3YtcHJvZ3Jlc3NfX2JhclwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcbiAgICBwYW5lbFdyYXBwZXI6IFwic3ZfcF93cmFwcGVyXCIsXG4gICAgcGFuZWxXcmFwcGVySW5Sb3c6IFwic3ZfcF93cmFwcGVyX2luX3Jvd1wiLFxuICB9LFxuICBtdWx0aXBsZXRleHQ6IHtcbiAgICByb290OiBcInRhYmxlXCIsXG4gICAgaXRlbVRpdGxlOiBcIlwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdl9xX210X2l0ZW1fdmFsdWUgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcInN2X3FjYmMgZm9ybS1pbmxpbmVcIixcbiAgICBpdGVtOiBcInJhZGlvXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9yYWRpb2dyb3VwX2lubGluZVwiLFxuICAgIGxhYmVsOiBcIlwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJjaXJjbGVcIixcbiAgICBvdGhlcjogXCJzdl9xX3JhZGlvZ3JvdXBfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyIGJ1dHRvblwiLFxuICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgfSxcbiAgYnV0dG9uZ3JvdXA6IHtcbiAgICByb290OiBcInN2LWJ1dHRvbi1ncm91cFwiLFxuICAgIGl0ZW06IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtXCIsXG4gICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1kZWNvcmF0b3JcIixcbiAgICBpdGVtQ2FwdGlvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiLFxuICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICBpdGVtOiBcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcbiAgICBkaXNhYmxlZDogXCJcIixcbiAgfSxcbiAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIixcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgZmlsZUlucHV0OiBcInN2X3FfZmlsZV9pbnB1dFwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIixcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICBoZWFkZXI6IFwiY2FyZC1oZWFkaW5nXCIsXG4gIGJvZHk6IFwiY2FyZC1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJjYXJkLWJvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwiY2FyZC1mb290ZXJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2X2xvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwiXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJidG4gc3ZfY29tcGxldGVfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgcHJldjogXCJidG4gc3ZfcHJldl9idG4gYnRuLXByaW1hcnlcIixcbiAgICBuZXh0OiBcImJ0biBzdl9uZXh0X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIHN0YXJ0OiBcImJ0biBzdl9zdGFydF9idG4gYnRuLXByaW1hcnlcIixcbiAgICBwcmV2aWV3OiBcImJ0biBzdl9wcmV2aWV3X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIGVkaXQ6IFwiYnRuIHN2X2VkaXRfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9jayBteC1hdXRvIG1iLTRcIixcbiAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gIHByb2dyZXNzVGV4dFVuZGVyQmFyOiBcInN2LWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwiXCIsXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICByb3c6IFwic3Zfcm93XCIsXG4gIHF1ZXN0aW9uOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0biBmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcV90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgbnVtYmVyOiBcInN2X3FfbnVtXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic21hbGxcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnICBzdi1ib29sZWFuX19zdmdcIixcbiAgICBjaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX19jaGVja2VkLXBhdGhcIixcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXG4gICAgaW5kZXRlcm1pbmF0ZVBhdGg6IFwic3YtYm9vbGVhbl9faW5kZXRlcm1pbmF0ZS1wYXRoXCIsXG4gIH0sXG4gIGNoZWNrYm94OiB7XG4gICAgcm9vdDogXCJzdl9xY2J4XCIsXG4gICAgaXRlbTogXCJjaGVja2JveFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXG4gICAgaXRlbU5vbmU6IFwic3ZfcV9jaGVja2JveF9ub25lXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2NoZWNrYm94X2lubGluZVwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgbGFiZWw6IFwiXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJjaGVja2JveC1kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdl9xX2NoZWNrYm94X290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgfSxcbiAgcmFua2luZzoge1xuICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBjb250cm9sOiBcImZvcm0tY29udHJvbFwiLFxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICBpbWFnZTogeyByb290OiBcInN2X3FfaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBtYXRyaXg6IHtcbiAgICByb290OiBcInRhYmxlIHN2X3FfbWF0cml4XCIsXG4gICAgcm93OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBsYWJlbDogXCJzdl9xX21fbGFiZWwgcmFkaW8taW5saW5lXCIsXG4gICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWQgYmctcHJpbWFyeVwiLFxuICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJmb3JtLWNvbnRyb2xcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJibWQtcmFkaW9cIixcbiAgfSxcbiAgbWF0cml4ZHJvcGRvd246IHtcbiAgICByb290OiBcInRhYmxlXCIsXG4gICAgaXRlbVZhbHVlOiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxuICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICB9LFxuICBtYXRyaXhkeW5hbWljOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0blwiLFxuICAgIGZsb3dSb290OiBcInN2X3FfZmxvd1wiLFxuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBidXR0b246IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgaXRlbVZhbHVlOiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBidXR0b25BZGQ6IFwiXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJzdl9tYXRyaXhfZW1wdHlfcm93c190ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICB9LFxuICBwYW5lbGR5bmFtaWM6IHtcbiAgICByb290OiBcIlwiLFxuICAgIG5hdmlnYXRpb246IFwic3YtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgcHJvZ3Jlc3NUb3A6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcyBzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLS10b3BcIixcbiAgICBwcm9ncmVzc0JvdHRvbTpcbiAgICAgIFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcyBzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLS1ib3R0b21cIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1xdWVzdGlvbl9fdGl0bGVcIixcbiAgICBidXR0b246IFwiYnV0dG9uXCIsXG4gICAgYnV0dG9uQWRkOiBcImJ1dHRvbiBzdi1wYW5lbGR5bmFtaWNfX2FkZC1idG4gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcImJ1dHRvbiBzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgYnV0dG9uUmVtb3ZlUmlnaHQ6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiLFxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgIGJ1dHRvbk5leHQ6IFwic3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiLFxuICAgIHByb2dyZXNzQ29udGFpbmVyOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcbiAgICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiLFxuICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcbiAgICBwYW5lbFdyYXBwZXJJblJvdzogXCJzdl9wX3dyYXBwZXJfaW5fcm93XCIsXG4gIH0sXG4gIG11bHRpcGxldGV4dDoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBpdGVtVGl0bGU6IFwiXCIsXG4gICAgcm93OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIGZvcm0tY29udHJvbFwiLFxuICB9LFxuICByYWRpb2dyb3VwOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBpdGVtOiBcInJhZGlvXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9yYWRpb2dyb3VwX2lubGluZVwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgbGFiZWw6IFwiXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdl9xX3JhZGlvZ3JvdXBfY29udHJvbF9sYWJlbFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImJtZC1yYWRpb1wiLFxuICAgIG90aGVyOiBcInN2X3FfcmFkaW9ncm91cF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXIgYnV0dG9uIGJ0biBidG4tcHJpbWFyeVwiLFxuICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcbiAgfSxcbiAgYnV0dG9uZ3JvdXA6IHtcbiAgICByb290OiBcInN2LWJ1dHRvbi1ncm91cFwiLFxuICAgIGl0ZW06IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtXCIsXG4gICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1kZWNvcmF0b3JcIixcbiAgICBpdGVtQ2FwdGlvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiLFxuICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICBpdGVtOiBcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcbiAgICBkaXNhYmxlZDogXCJcIixcbiAgfSxcbiAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cCBpcy1maWxlaW5wdXQgc3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJcIixcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgZmlsZUlucHV0OiBcInN2X3FfZmlsZV9pbnB1dFwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgY2FyZC10aXRsZVwiLFxuICAgICAgdGl0bGU6IFwicHVsbC1sZWZ0XCIsXG4gICAgICBidXR0b246IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHRcIixcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLXVwXCIsXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tZG93blwiLFxuICAgIH0sXG4gIH0sXG59O1xuKDxhbnk+c3VydmV5Q3NzKVtcImJvb3RzdHJhcG1hdGVyaWFsXCJdID0gZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzO1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcbmV4cG9ydCB2YXIgbW9kZXJuQ3NzID0ge1xuICByb290OiBcInN2LXJvb3QtbW9kZXJuXCIsXG4gIGNvbnRhaW5lcjogXCJzdi1jb250YWluZXItbW9kZXJuXCIsXG4gIGhlYWRlcjogXCJzdi10aXRsZSBzdi1jb250YWluZXItbW9kZXJuX190aXRsZVwiLFxuICBib2R5OiBcInN2LWJvZHlcIixcbiAgYm9keUVtcHR5OiBcInN2LWJvZHkgc3YtYm9keS0tZW1wdHlcIixcbiAgZm9vdGVyOiBcInN2LWZvb3RlciBzdi1ib2R5X19mb290ZXIgc3YtY2xlYXJmaXhcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2LWxvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2LWxvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3YtaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwic3YtY29tcGxldGVkcGFnZVwiLFxuICBuYXZpZ2F0aW9uOiB7XG4gICAgY29tcGxldGU6IFwic3YtYnRuIHN2LWZvb3Rlcl9fY29tcGxldGUtYnRuXCIsXG4gICAgcHJldjogXCJzdi1idG4gc3YtZm9vdGVyX19wcmV2LWJ0blwiLFxuICAgIG5leHQ6IFwic3YtYnRuIHN2LWZvb3Rlcl9fbmV4dC1idG5cIixcbiAgICBzdGFydDogXCJzdi1idG4gc3YtZm9vdGVyX19zdGFydC1idG5cIixcbiAgICBwcmV2aWV3OiBcInN2LWJ0biBzdi1mb290ZXJfX3ByZXZpZXctYnRuXCIsXG4gICAgZWRpdDogXCJzdi1idG4gc3YtZm9vdGVyX19lZGl0LWJ0blwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXBhbmVsX190aXRsZVwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdi1wYW5lbF9fdGl0bGUtLWV4cGFuZGFibGVcIixcbiAgICB0aXRsZU9uRXJyb3I6IFwic3YtcGFuZWxfX3RpdGxlLS1lcnJvclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhbmVsX19kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzdi1wYW5lbCBzdi1yb3dfX3BhbmVsXCIsXG4gICAgY29udGVudDogXCJzdi1wYW5lbF9fY29udGVudFwiLFxuICAgIGljb246IFwic3YtcGFuZWxfX2ljb25cIixcbiAgICBpY29uRXhwYW5kZWQ6IFwic3YtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgZm9vdGVyOiBcInN2LXBhbmVsX19mb290ZXJcIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3YtcGFuZWxfX3JlcXVpcmVkLXRleHRcIixcbiAgICBudW1iZXI6IFwic3YtcXVlc3Rpb25fX251bVwiLFxuICB9LFxuICBwYW5lbGR5bmFtaWM6IHtcbiAgICByb290OiBcInN2LXBhbmVsZHluYW1pY1wiLFxuICAgIG5hdmlnYXRpb246IFwic3YtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgYnV0dG9uOiBcInN2LWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIixcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uQWRkOiBcInN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206XG4gICAgICBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgc2VwYXJhdG9yOiBcInN2LXBhbmVsZHluYW1pY19fc2VwYXJhdG9yXCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2LXBhbmVsZHluYW1pY19fcGFuZWwtd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2LXBhbmVsZHluYW1pY19fcGFuZWwtd3JhcHBlci0taW4tcm93XCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInN2LXByb2dyZXNzIHN2LWJvZHlfX3Byb2dyZXNzXCIsXG4gIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInN2LXByb2dyZXNzX190ZXh0XCIsXG4gIHByb2dyZXNzVGV4dEluQmFyOiBcInN2LWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJzdi1wYWdlIHN2LWJvZHlfX3BhZ2VcIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhZ2VfX2Rlc2NyaXB0aW9uXCIsXG4gIH0sXG4gIHBhZ2VUaXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICBwYWdlRGVzY3JpcHRpb246IFwic3YtZGVzY3JpcHRpb24gc3YtcGFnZV9fZGVzY3JpcHRpb25cIixcbiAgcm93OiBcInN2LXJvdyBzdi1jbGVhcmZpeFwiLFxuICBxdWVzdGlvbjoge1xuICAgIG1haW5Sb290OiBcInN2LXF1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb25cIixcbiAgICBmbG93Um9vdDogXCJzdi1xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb24tLWZsb3dcIixcbiAgICBhc0NlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXI6IFwic3YtcXVlc3Rpb25fX2hlYWRlclwiLFxuICAgIGhlYWRlckxlZnQ6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLWxlZnRcIixcbiAgICBoZWFkZXJUb3A6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLXRvcFwiLFxuICAgIGhlYWRlckJvdHRvbTogXCJzdi1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi0tYm90dG9tXCIsXG4gICAgY29udGVudDogXCJzdi1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgIGNvbnRlbnRMZWZ0OiBcInN2LXF1ZXN0aW9uX19jb250ZW50LS1sZWZ0XCIsXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJcIixcbiAgICB0aXRsZU9uQW5zd2VyOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tYW5zd2VyXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tZXJyb3JcIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1xdWVzdGlvbl9fdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3YtcXVlc3Rpb25fX3RpdGxlLS1leHBhbmRhYmxlXCIsXG4gICAgaWNvbjogXCJzdi1xdWVzdGlvbl9faWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdi1xdWVzdGlvbl9faWNvbi0tZXhwYW5kZWRcIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3YtcXVlc3Rpb25fX3JlcXVpcmVkLXRleHRcIixcbiAgICBudW1iZXI6IFwic3YtcXVlc3Rpb25fX251bVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXF1ZXN0aW9uX19kZXNjcmlwdGlvblwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzdi1kZXNjcmlwdGlvbiBzdi1xdWVzdGlvbl9fZGVzY3JpcHRpb25cIixcbiAgICBjb21tZW50OiBcInN2LWNvbW1lbnRcIixcbiAgICByZXF1aXJlZDogXCJzdi1xdWVzdGlvbi0tcmVxdWlyZWRcIixcbiAgICB0aXRsZVJlcXVpcmVkOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tcmVxdWlyZWRcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvb3RlcjogXCJzdi1xdWVzdGlvbl9fZm9vdGVyXCIsXG4gICAgZm9ybUdyb3VwOiBcInN2LXF1ZXN0aW9uX19mb3JtLWdyb3VwXCIsXG4gICAgaGFzRXJyb3I6IFwiXCIsXG4gICAgZGlzYWJsZWQ6IFwic3YtcXVlc3Rpb24tLWRpc2FibGVkXCIsXG4gIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3YtaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBlcnJvcjoge1xuICAgIHJvb3Q6IFwic3YtcXVlc3Rpb25fX2VyYm94XCIsXG4gICAgaWNvbjogXCJcIixcbiAgICBpdGVtOiBcIlwiLFxuICAgIGxvY2F0aW9uVG9wOiBcInN2LXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLXRvcFwiLFxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2LXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLWJvdHRvbVwiLFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHJvb3Q6IFwic3Ytc2VsZWN0YmFzZVwiLFxuICAgIGl0ZW06IFwic3YtaXRlbSBzdi1jaGVja2JveCBzdi1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgaXRlbVNlbGVjdEFsbDogXCJzdi1jaGVja2JveC0tc2VsZWN0YWxsXCIsXG4gICAgaXRlbU5vbmU6IFwic3YtY2hlY2tib3gtLW5vbmVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtY2hlY2tib3gtLWRpc2FibGVkXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtY2hlY2tib3gtLWNoZWNrZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtY2hlY2tib3gtLWFsbG93aG92ZXJcIixcbiAgICBpdGVtSW5saW5lOiBcInN2LXNlbGVjdGJhc2VfX2l0ZW0tLWlubGluZVwiLFxuICAgIGxhYmVsOiBcInN2LXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuIHN2LWl0ZW1fX2NvbnRyb2xcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1jaGVja2JveF9fc3ZnXCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2LWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtY2hlY2tib3hfX2RlY29yYXRvclwiLFxuICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gICAgY29sdW1uOiBcInN2LXNlbGVjdGJhc2VfX2NvbHVtblwiLFxuICB9LFxuICByYW5raW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgcm9vdE1vYmlsZU1vZDogXCJzdi1yYW5raW5nLS1tb2JpbGVcIixcbiAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcbiAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWRyYWdcIixcbiAgfSxcbiAgcmFkaW9ncm91cDoge1xuICAgIHJvb3Q6IFwic3Ytc2VsZWN0YmFzZVwiLFxuICAgIGl0ZW06IFwic3YtaXRlbSBzdi1yYWRpbyBzdi1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1zZWxlY3RiYXNlX19pdGVtLS1pbmxpbmVcIixcbiAgICBsYWJlbDogXCJzdi1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtcmFkaW8tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtcmFkaW8tLWFsbG93aG92ZXJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtcmFkaW9fX3N2Z1wiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2LWJ0biBzdi1zZWxlY3RiYXNlX19jbGVhci1idG5cIixcbiAgICBjb2x1bW46IFwic3Ytc2VsZWN0YmFzZV9fY29sdW1uXCIsXG4gIH0sXG4gIGJ1dHRvbmdyb3VwOiB7XG4gICAgcm9vdDogXCJzdi1idXR0b24tZ3JvdXBcIixcbiAgICBpdGVtOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbVwiLFxuICAgIGl0ZW1JY29uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tZGVjb3JhdG9yXCIsXG4gICAgaXRlbUNhcHRpb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIixcbiAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIHJvb3Q6IFwic3ZfcWJsblwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgaXRlbTogXCJzdi1ib29sZWFuIHN2LWl0ZW1cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgc2xpZGVyOiBcInN2LWJvb2xlYW5fX3NsaWRlclwiLFxuICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsIFwiLFxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LWJvb2xlYW5fX2RlY29yYXRvciBcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyAgc3YtYm9vbGVhbl9fc3ZnXCIsXG4gICAgY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fY2hlY2tlZC1wYXRoXCIsXG4gICAgdW5jaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX191bmNoZWNrZWQtcGF0aFwiLFxuICAgIGluZGV0ZXJtaW5hdGVQYXRoOiBcInN2LWJvb2xlYW5fX2luZGV0ZXJtaW5hdGUtcGF0aFwiLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgcm9vdDogXCJzdi10ZXh0XCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBvbkVycm9yOiBcInN2LXRleHQtLWVycm9yXCIsXG4gIH0sXG4gIG11bHRpcGxldGV4dDoge1xuICAgIHJvb3Q6IFwic3YtbXVsdGlwbGV0ZXh0XCIsXG4gICAgaXRlbTogXCJzdi1tdWx0aXBsZXRleHRfX2l0ZW1cIixcbiAgICBpdGVtVGl0bGU6IFwic3YtbXVsdGlwbGV0ZXh0X19pdGVtLXRpdGxlXCIsXG4gICAgcm93OiBcInN2LW11bHRpcGxldGV4dF9fcm93XCIsXG4gICAgY2VsbDogXCJzdi1tdWx0aXBsZXRleHRfX2NlbGxcIixcbiAgfSxcbiAgZHJvcGRvd246IHtcbiAgICByb290OiBcIlwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgY29udHJvbDogXCJzdi1kcm9wZG93blwiLFxuICAgIHNlbGVjdFdyYXBwZXI6IFwiXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICBvbkVycm9yOiBcInN2LWRyb3Bkb3duLS1lcnJvclwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3YtaW1hZ2VwaWNrZXJcIixcbiAgICBpdGVtOiBcInN2LWltYWdlcGlja2VyX19pdGVtXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0taW5saW5lXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1hbGxvd2hvdmVyXCIsXG4gICAgbGFiZWw6IFwic3YtaW1hZ2VwaWNrZXJfX2xhYmVsXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtaW1hZ2VwaWNrZXJfX2NvbnRyb2xcIixcbiAgICBpbWFnZTogXCJzdi1pbWFnZXBpY2tlcl9faW1hZ2VcIixcbiAgICBpdGVtVGV4dDogXCJzdi1pbWFnZXBpY2tlcl9fdGV4dFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2LWJ0blwiLFxuICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gIH0sXG4gIG1hdHJpeDoge1xuICAgIHRhYmxlV3JhcHBlcjogXCJzdi1tYXRyaXhcIixcbiAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeC1yb290XCIsXG4gICAgcm93RXJyb3I6IFwic3YtbWF0cml4X19yb3ctLWVycm9yXCIsXG4gICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi1tYXRyaXhfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICBsYWJlbDogXCJzdi1pdGVtIHN2LXJhZGlvIHN2LW1hdHJpeF9fbGFiZWxcIixcbiAgICBpdGVtVmFsdWU6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbCBzdi1yYWRpb19fY29udHJvbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LXJhZGlvLS1jaGVja2VkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1Ib3ZlcjogXCJzdi1yYWRpby0tYWxsb3dob3ZlclwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtcmFkaW9fX3N2Z1wiLFxuICAgIGNlbGxUZXh0OiBcInN2LW1hdHJpeF9fdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3YtbWF0cml4X190ZXh0LS1jaGVja2VkXCIsXG4gICAgY2VsbFRleHREaXNhYmxlZDogXCJzdi1tYXRyaXhfX3RleHQtLWRpc2FibGVkXCIsXG4gIH0sXG4gIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJzdi10YWJsZSBzdi1tYXRyaXhkcm9wZG93blwiLFxuICAgIGNlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICByb3c6IFwic3YtdGFibGVfX3Jvd1wiLFxuICAgIGRldGFpbFJvdzogXCJzdi10YWJsZV9fcm93IHN2LXRhYmxlX19yb3ctLWRldGFpbFwiLFxuICAgIGRldGFpbFJvd1RleHQ6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1yb3d0ZXh0XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsXCIsXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3YtZGV0YWlsLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLXBhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWFjdGlvbnNcIixcbiAgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIHJvb3Q6IFwic3YtdGFibGUgc3YtbWF0cml4ZHluYW1pY1wiLFxuICAgIGNlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICBidXR0b246IFwic3YtYnRuXCIsXG4gICAgYnV0dG9uQWRkOiBcInN2LW1hdHJpeGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICBidXR0b25SZW1vdmU6IFwic3YtbWF0cml4ZHluYW1pY19fcmVtb3ZlLWJ0blwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgICByb3c6IFwic3YtdGFibGVfX3Jvd1wiLFxuICAgIGRldGFpbFJvdzogXCJzdi10YWJsZV9fcm93IHN2LXRhYmxlX19yb3ctLWRldGFpbFwiLFxuICAgIGRldGFpbENlbGw6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbFwiLFxuICAgIGNob2ljZUNlbGw6IFwic3YtdGFibGVfX2NlbGwtLWNob2ljZVwiLFxuICAgIGRldGFpbEJ1dHRvbjogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uLS1leHBhbmRlZFwiLFxuICAgIGRldGFpbEljb246IFwic3YtZGV0YWlsLXBhbmVsX19pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2LWRldGFpbC1wYW5lbF9faWNvbi0tZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1wYW5lbFwiLFxuICAgIGFjdGlvbnNDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1hY3Rpb25zXCIsXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdi10YWJsZV9fZW1wdHktLXJvd3MtLXNlY3Rpb25cIixcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2LXRhYmxlX19lbXB0eS0tcm93cy0tdGV4dFwiLFxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYXRpbmdcIixcbiAgICBpdGVtOiBcInN2LXJhdGluZ19faXRlbVwiLFxuICAgIHNlbGVjdGVkOiBcInN2LXJhdGluZ19faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBtaW5UZXh0OiBcInN2LXJhdGluZ19fbWluLXRleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdi1yYXRpbmdfX2l0ZW0tdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3YtcmF0aW5nX19tYXgtdGV4dFwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1yYXRpbmctLWRpc2FibGVkXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IHtcbiAgICByb290OiBcInN2LWNvbW1lbnRcIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICB9LFxuICBleHByZXNzaW9uOiBcIlwiLFxuICBmaWxlOiB7XG4gICAgcm9vdDogXCJzdi1maWxlXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICBwbGFjZWhvbGRlcklucHV0OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgcHJldmlldzogXCJzdi1maWxlX19wcmV2aWV3XCIsXG4gICAgZmlsZVNpZ246IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtZmlsZV9fc2lnblwiLFxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtZmlsZV9fZGVjb3JhdG9yXCIsXG4gICAgZmlsZUlucHV0OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgbm9GaWxlQ2hvc2VuOiBcInN2LWRlc2NyaXB0aW9uIHN2LWZpbGVfX25vLWZpbGUtY2hvc2VuXCIsXG4gICAgY2hvb3NlRmlsZTogXCJzdi1idG4gc3YtZmlsZV9fY2hvb3NlLWJ0blwiLFxuICAgIGNvbnRyb2xEaXNhYmxlZDogXCJzdi1maWxlX19jaG9vc2UtYnRuLS1kaXNhYmxlZFwiLFxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtYnRuIHN2LWZpbGVfX2NsZWFuLWJ0blwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlRmlsZVN2ZzogXCJzdi1maWxlX19yZW1vdmUtc3ZnXCIsXG4gICAgd3JhcHBlcjogXCJzdi1maWxlX193cmFwcGVyXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3Ytc2lnbmF0dXJlcGFkIHNqc19zcF9jb250YWluZXJcIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcIlwiLFxuICAgIGVycm9yOiBcIlwiLFxuICAgIHN1Y2Nlc3M6IFwiXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiLFxuICB9LFxuICB3aW5kb3c6IHtcbiAgICByb290OiBcInN2X3dpbmRvd1wiLFxuICAgIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcbiAgICBoZWFkZXI6IHtcbiAgICAgIHJvb3Q6IFwic3Zfd2luZG93X3RpdGxlXCIsXG4gICAgICB0aXRsZTogXCJcIixcbiAgICAgIGJ1dHRvbjogXCJcIixcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcIlwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcIlwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG5zdXJ2ZXlDc3NbXCJtb2Rlcm5cIl0gPSBtb2Rlcm5Dc3M7XG4iLCJleHBvcnQgdmFyIHN1cnZleUNzczogYW55ID0ge1xyXG4gIGN1cnJlbnRUeXBlOiBcIlwiLFxyXG4gIGdldENzczogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50VHlwZSA/IHRoaXNbdGhpcy5jdXJyZW50VHlwZV0gOiBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICBpZiAoIWxvYykgbG9jID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4gICAgcmV0dXJuIGxvYztcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IHZhciBkZWZhdWx0U3RhbmRhcmRDc3MgPSB7XHJcbiAgcm9vdDogXCJzdl9tYWluIHN2X2RlZmF1bHRfY3NzXCIsXHJcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxyXG4gIGhlYWRlcjogXCJzdl9oZWFkZXJcIixcclxuICBib2R5OiBcInN2X2JvZHlcIixcclxuICBib2R5RW1wdHk6IFwic3ZfYm9keSBzdl9ib2R5X2VtcHR5XCIsXHJcbiAgZm9vdGVyOiBcInN2X25hdlwiLFxyXG4gIHRpdGxlOiBcIlwiLFxyXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxyXG4gIGxvZ286IFwic3ZfbG9nb1wiLFxyXG4gIGxvZ29JbWFnZTogXCJzdl9sb2dvX19pbWFnZVwiLFxyXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXHJcbiAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIixcclxuICBjb21wbGV0ZWRQYWdlOiBcInN2X2NvbXBsZXRlZF9wYWdlXCIsXHJcbiAgbmF2aWdhdGlvbjoge1xyXG4gICAgY29tcGxldGU6IFwic3ZfY29tcGxldGVfYnRuXCIsXHJcbiAgICBwcmV2OiBcInN2X3ByZXZfYnRuXCIsXHJcbiAgICBuZXh0OiBcInN2X25leHRfYnRuXCIsXHJcbiAgICBzdGFydDogXCJzdl9zdGFydF9idG5cIixcclxuICAgIHByZXZpZXc6IFwic3ZfcHJldmlld19idG5cIixcclxuICAgIGVkaXQ6IFwic3ZfZWRpdF9idG5cIixcclxuICB9LFxyXG4gIHByb2dyZXNzOiBcInN2X3Byb2dyZXNzXCIsXHJcbiAgcHJvZ3Jlc3NCYXI6IFwic3ZfcHJvZ3Jlc3NfYmFyXCIsXHJcbiAgcHJvZ3Jlc3NUZXh0SW5CYXI6IFwic3YtaGlkZGVuXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIixcclxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1sZWZ0XCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25SaWdodDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIixcclxuICBwcm9ncmVzc0J1dHRvbnNMaXN0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIixcclxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Q3VycmVudDpcclxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50XCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XHJcbiAgICBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tbm9uY2xpY2thYmxlXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIixcclxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxyXG4gIHBhZ2U6IHtcclxuICAgIHJvb3Q6IFwic3ZfcF9yb290XCIsXHJcbiAgICB0aXRsZTogXCJzdl9wYWdlX3RpdGxlXCIsXHJcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcclxuICB9LFxyXG4gIC8vIFRPRE86IG1vdmUgdG8gdGhlIHBhZ2Ugb2JqZWN0XHJcbiAgcGFnZVRpdGxlOiBcInN2X3BhZ2VfdGl0bGVcIixcclxuICBwYWdlRGVzY3JpcHRpb246IFwiXCIsXHJcbiAgcm93OiBcInN2X3Jvd1wiLFxyXG4gIHF1ZXN0aW9uOiB7XHJcbiAgICBtYWluUm9vdDogXCJzdl9xIHN2X3FzdG5cIixcclxuICAgIGZsb3dSb290OiBcInN2X3FfZmxvdyBzdl9xc3RuXCIsXHJcbiAgICBoZWFkZXI6IFwiXCIsXHJcbiAgICBoZWFkZXJMZWZ0OiBcInRpdGxlLWxlZnRcIixcclxuICAgIGNvbnRlbnQ6IFwiXCIsXHJcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcclxuICAgIHRpdGxlTGVmdFJvb3Q6IFwic3ZfcXN0bl9sZWZ0XCIsXHJcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXHJcbiAgICB0aXRsZTogXCJzdl9xX3RpdGxlXCIsXHJcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcV90aXRsZV9leHBhbmRhYmxlXCIsXHJcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcclxuICAgIGRlc2NyaXB0aW9uOiBcInN2X3FfZGVzY3JpcHRpb25cIixcclxuICAgIGNvbW1lbnQ6IFwiXCIsXHJcbiAgICByZXF1aXJlZDogXCJcIixcclxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXHJcbiAgICBoYXNFcnJvcjogXCJcIixcclxuICAgIGluZGVudDogMjAsXHJcbiAgICBmb290ZXI6IFwic3ZfcV9mb290ZXJcIixcclxuICAgIGZvcm1Hcm91cDogXCJmb3JtLWdyb3VwXCIsXHJcbiAgICBhc0NlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcclxuICAgIGljb246IFwic3ZfcXVlc3Rpb25faWNvblwiLFxyXG4gICAgaWNvbkV4cGFuZGVkOiBcInN2X2V4cGFuZGVkXCIsXHJcbiAgfSxcclxuICBwYW5lbDoge1xyXG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxyXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiLFxyXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxyXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcInN2X3BfZGVzY3JpcHRpb25cIixcclxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxyXG4gICAgZm9vdGVyOiBcInN2X3BfZm9vdGVyXCIsXHJcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICB9LFxyXG4gIGVycm9yOiB7XHJcbiAgICByb290OiBcInN2X3FfZXJib3hcIixcclxuICAgIGljb246IFwiXCIsXHJcbiAgICBpdGVtOiBcIlwiLFxyXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcclxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2X3FzdG5fZXJyb3JfYm90dG9tXCIsXHJcbiAgfSxcclxuXHJcbiAgYm9vbGVhbjoge1xyXG4gICAgcm9vdDogXCJzdl9xY2JjIHN2X3FibG5cIixcclxuICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxyXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXHJcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcclxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcclxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcclxuICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsIFwiLFxyXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIixcclxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXHJcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyAgc3YtYm9vbGVhbl9fc3ZnXCIsXHJcbiAgICBjaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX19jaGVja2VkLXBhdGhcIixcclxuICAgIHVuY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fdW5jaGVja2VkLXBhdGhcIixcclxuICAgIGluZGV0ZXJtaW5hdGVQYXRoOiBcInN2LWJvb2xlYW5fX2luZGV0ZXJtaW5hdGUtcGF0aFwiLFxyXG4gIH0sXHJcbiAgY2hlY2tib3g6IHtcclxuICAgIHJvb3Q6IFwic3ZfcWNiYyBzdl9xY2J4XCIsXHJcbiAgICBpdGVtOiBcInN2X3FfY2hlY2tib3hcIixcclxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3ZfcV9jaGVja2JveF9zZWxlY3RhbGxcIixcclxuICAgIGl0ZW1Ob25lOiBcInN2X3FfY2hlY2tib3hfbm9uZVwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxyXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2NoZWNrYm94X2lubGluZVwiLFxyXG4gICAgbGFiZWw6IFwic3ZfcV9jaGVja2JveF9sYWJlbFwiLFxyXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxyXG4gICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9jaGVja2JveF9jb250cm9sX2l0ZW1cIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBjb250cm9sTGFiZWw6IFwic3ZfcV9jaGVja2JveF9jb250cm9sX2xhYmVsXCIsXHJcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJjaGVja2JveC1tYXRlcmlhbFwiLFxyXG4gICAgb3RoZXI6IFwic3ZfcV9vdGhlciBzdl9xX2NoZWNrYm94X290aGVyXCIsXHJcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXHJcbiAgfSxcclxuICByYW5raW5nOiB7XHJcbiAgICByb290OiBcInN2LXJhbmtpbmdcIixcclxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXHJcbiAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXHJcbiAgICBpdGVtOiBcInN2LXJhbmtpbmctaXRlbVwiLFxyXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXHJcbiAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxyXG4gICAgLy8gaXRlbVRleHQ6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXHJcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXHJcbiAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcclxuICAgIGl0ZW1JY29uQ29udGFpbmVyOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi1jb250YWluZXJcIixcclxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxyXG4gICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXHJcbiAgICBpdGVtSWNvbkZvY3VzTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0tZm9jdXNcIixcclxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXHJcbiAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWRyYWdcIixcclxuICB9LFxyXG4gIGNvbW1lbnQ6IFwiXCIsXHJcbiAgZHJvcGRvd246IHtcclxuICAgIHJvb3Q6IFwiXCIsXHJcbiAgICBjb250cm9sOiBcInN2X3FfZHJvcGRvd25fY29udHJvbFwiLFxyXG4gICAgc2VsZWN0V3JhcHBlcjogXCJzdl9zZWxlY3Rfd3JhcHBlclwiLFxyXG4gICAgb3RoZXI6IFwic3ZfcV9kZF9vdGhlclwiLFxyXG4gIH0sXHJcbiAgaHRtbDogeyByb290OiBcIlwiIH0sXHJcbiAgaW1hZ2U6IHsgcm9vdDogXCJzdl9xX2ltYWdlXCIsIGltYWdlOiBcInN2X2ltYWdlX2ltYWdlXCIgfSxcclxuICBtYXRyaXg6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhcIixcclxuICAgIGxhYmVsOiBcInN2X3FfbV9sYWJlbFwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxyXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcclxuICAgIGNlbGw6IFwic3ZfcV9tX2NlbGxcIixcclxuICAgIGNlbGxUZXh0OiBcInN2X3FfbV9jZWxsX3RleHRcIixcclxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWRcIixcclxuICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxyXG4gIH0sXHJcbiAgbWF0cml4ZHJvcGRvd246IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhfZHJvcGRvd25cIixcclxuICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcclxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXHJcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXHJcbiAgICBkZXRhaWxSb3dUZXh0OiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9yb3d0ZXh0XCIsXHJcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxyXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXHJcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxyXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxyXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxyXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxyXG4gIH0sXHJcbiAgbWF0cml4ZHluYW1pYzoge1xyXG4gICAgcm9vdDogXCJzdl9xX21hdHJpeF9keW5hbWljXCIsXHJcbiAgICBidXR0b246IFwic3ZfbWF0cml4X2R5bmFtaWNfYnV0dG9uXCIsXHJcbiAgICBidXR0b25BZGQ6IFwiXCIsXHJcbiAgICBidXR0b25SZW1vdmU6IFwiXCIsXHJcbiAgICBpY29uQWRkOiBcIlwiLFxyXG4gICAgaWNvblJlbW92ZTogXCJcIixcclxuICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcclxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXHJcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXHJcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxyXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXHJcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxyXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxyXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxyXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxyXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXHJcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcclxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcclxuICB9LFxyXG4gIHBhbmVsZHluYW1pYzoge1xyXG4gICAgcm9vdDogXCJzdl9wYW5lbF9keW5hbWljXCIsXHJcbiAgICB0aXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICBidXR0b246IFwiXCIsXHJcbiAgICBidXR0b25BZGQ6IFwic3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdl9wX3JlbW92ZV9idG5fcmlnaHRcIixcclxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxyXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXHJcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxyXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcclxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcclxuICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcclxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcclxuICB9LFxyXG4gIG11bHRpcGxldGV4dDoge1xyXG4gICAgcm9vdDogXCJzdl9xX210XCIsXHJcbiAgICBpdGVtVGl0bGU6IFwic3ZfcV9tdF90aXRsZVwiLFxyXG4gICAgcm93OiBcInN2X3FfbXRfcm93XCIsXHJcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIHN2X3FfdGV4dF9yb290XCIsXHJcbiAgfSxcclxuICByYWRpb2dyb3VwOiB7XHJcbiAgICByb290OiBcInN2X3FjYmNcIixcclxuICAgIGl0ZW06IFwic3ZfcV9yYWRpb2dyb3VwXCIsXHJcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX3JhZGlvZ3JvdXBfbGFiZWxcIixcclxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2l0ZW1cIixcclxuICAgIGNvbnRyb2xMYWJlbDogXCJcIixcclxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNpcmNsZVwiLFxyXG4gICAgb3RoZXI6IFwic3ZfcV9vdGhlciBzdl9xX3JhZGlvZ3JvdXBfb3RoZXJcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhclwiLFxyXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxyXG4gIH0sXHJcbiAgYnV0dG9uZ3JvdXA6IHtcclxuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXHJcbiAgICBpdGVtOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbVwiLFxyXG4gICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxyXG4gICAgaXRlbUNhcHRpb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWNhcHRpb25cIixcclxuICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXHJcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZFwiLFxyXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcclxuICB9LFxyXG4gIGltYWdlcGlja2VyOiB7XHJcbiAgICByb290OiBcInN2X2ltZ3NlbFwiLFxyXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxyXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfaW1nc2VsX2NvbnRyb2xfaXRlbVwiLFxyXG4gICAgaW1hZ2U6IFwic3ZfcV9pbWdzZWxfaW1hZ2VcIixcclxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIixcclxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhclwiLFxyXG4gIH0sXHJcbiAgcmF0aW5nOiB7XHJcbiAgICByb290OiBcInN2X3FfcmF0aW5nXCIsXHJcbiAgICBpdGVtOiBcInN2X3FfcmF0aW5nX2l0ZW1cIixcclxuICAgIHNlbGVjdGVkOiBcImFjdGl2ZVwiLFxyXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxyXG4gICAgaXRlbVRleHQ6IFwic3ZfcV9yYXRpbmdfaXRlbV90ZXh0XCIsXHJcbiAgICBtYXhUZXh0OiBcInN2X3FfcmF0aW5nX21heF90ZXh0XCIsXHJcbiAgfSxcclxuICB0ZXh0OiBcInN2X3FfdGV4dF9yb290XCIsXHJcbiAgZXhwcmVzc2lvbjogXCJcIixcclxuICBmaWxlOiB7XHJcbiAgICByb290OiBcInN2X3FfZmlsZVwiLFxyXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gICAgcHJldmlldzogXCJzdl9xX2ZpbGVfcHJldmlld1wiLFxyXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXHJcbiAgICBmaWxlSW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcclxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxyXG4gICAgcmVtb3ZlRmlsZVN2ZzogXCJzdi1oaWRkZW5cIixcclxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtZmlsZV9fZGVjb3JhdG9yXCIsXHJcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcclxuICAgIHJlbW92ZUJ1dHRvbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcclxuICAgIGNob29zZUZpbGU6IFwic3ZfcV9maWxlX2Nob29zZV9idXR0b25cIixcclxuICAgIG5vRmlsZUNob3NlbjogXCJzdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIixcclxuICB9LFxyXG4gIHNpZ25hdHVyZXBhZDoge1xyXG4gICAgcm9vdDogXCJzdl9xX3NpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXHJcbiAgICBjb250cm9sczogXCJzanNfc3BfY29udHJvbHNcIixcclxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxyXG4gIH0sXHJcbiAgc2F2ZURhdGE6IHtcclxuICAgIHJvb3Q6IFwiXCIsXHJcbiAgICBzYXZpbmc6IFwiXCIsXHJcbiAgICBlcnJvcjogXCJcIixcclxuICAgIHN1Y2Nlc3M6IFwiXCIsXHJcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXHJcbiAgfSxcclxuICB3aW5kb3c6IHtcclxuICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXHJcbiAgICBib2R5OiBcInN2X3dpbmRvd19jb250ZW50XCIsXHJcbiAgICBoZWFkZXI6IHtcclxuICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIixcclxuICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgIGJ1dHRvbjogXCJcIixcclxuICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXHJcbiAgICAgIGJ1dHRvbkNvbGxhcHNlZDogXCJcIixcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuXHJcbnN1cnZleUNzc1tcInN0YW5kYXJkXCJdID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4iLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG4vKipcbiAqIFRoZSBjbGFzcyBjb250YWlucyBtZXRob2RzIHRvIHdvcmsgd2l0aCBhcGkuc3VydmV5anMuaW8gc2VydmljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIGR4U3VydmV5U2VydmljZSB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHNlcnZpY2VVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3Muc3VydmV5U2VydmljZVVybDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBzZXJ2aWNlVXJsKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3Muc3VydmV5U2VydmljZVVybCA9IHZhbDtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHt9XG4gIHB1YmxpYyBsb2FkU3VydmV5KFxuICAgIHN1cnZleUlkOiBzdHJpbmcsXG4gICAgb25Mb2FkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFxuICAgICAgXCJHRVRcIixcbiAgICAgIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvZ2V0U3VydmV5P3N1cnZleUlkPVwiICsgc3VydmV5SWRcbiAgICApO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgb25Mb2FkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIuc2VuZCgpO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQoXG4gICAgc3VydmV5SWQ6IHN0cmluZyxcbiAgICBjbGllbnRJZDogc3RyaW5nLFxuICAgIG9uTG9hZDogKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIHN1cnZleUpzb246IGFueSxcbiAgICAgIHJlc3VsdDogc3RyaW5nLFxuICAgICAgcmVzcG9uc2U6IGFueVxuICAgICkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXG4gICAgICBcIkdFVFwiLFxuICAgICAgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgK1xuICAgICAgICBcIi9nZXRTdXJ2ZXlBbmRJc0NvbXBsZXRlZD9zdXJ2ZXlJZD1cIiArXG4gICAgICAgIHN1cnZleUlkICtcbiAgICAgICAgXCImY2xpZW50SWQ9XCIgK1xuICAgICAgICBjbGllbnRJZFxuICAgICk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICB2YXIgc3VydmV5SnNvbiA9IHJlc3VsdCA/IHJlc3VsdC5zdXJ2ZXkgOiBudWxsO1xuICAgICAgdmFyIGlzQ29tcGxldGVkID0gcmVzdWx0ID8gcmVzdWx0LmlzQ29tcGxldGVkIDogbnVsbDtcbiAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgc3VydmV5SnNvbiwgaXNDb21wbGV0ZWQsIHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIuc2VuZCgpO1xuICB9XG4gIHB1YmxpYyBzZW5kUmVzdWx0KFxuICAgIHBvc3RJZDogc3RyaW5nLFxuICAgIHJlc3VsdDogSlNPTixcbiAgICBvblNlbmRSZXN1bHQ6IChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55LCByZXF1ZXN0PzogYW55KSA9PiB2b2lkLFxuICAgIGNsaWVudElkOiBzdHJpbmcgPSBudWxsLFxuICAgIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcIlBPU1RcIiwgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9wb3N0L1wiKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgdmFyIGRhdGEgPSB7IHBvc3RJZDogcG9zdElkLCBzdXJ2ZXlSZXN1bHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgfTtcbiAgICBpZiAoY2xpZW50SWQpICg8YW55PmRhdGEpW1wiY2xpZW50SWRcIl0gPSBjbGllbnRJZDtcbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkKSAoPGFueT5kYXRhKVtcImlzUGFydGlhbENvbXBsZXRlZFwiXSA9IHRydWU7XG4gICAgdmFyIGRhdGFTdHJpbmdpZnk6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9uU2VuZFJlc3VsdCkgcmV0dXJuO1xuICAgICAgb25TZW5kUmVzdWx0KHhoci5zdGF0dXMgPT09IDIwMCwgeGhyLnJlc3BvbnNlLCB4aHIpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoZGF0YVN0cmluZ2lmeSk7XG4gIH1cbiAgcHVibGljIHNlbmRGaWxlKFxuICAgIHBvc3RJZDogc3RyaW5nLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb25TZW5kRmlsZTogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vbmxvYWQgPSB4aHIub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghb25TZW5kRmlsZSkgcmV0dXJuO1xuICAgICAgb25TZW5kRmlsZSh4aHIuc3RhdHVzID09IDIwMCwgSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpKTtcbiAgICB9O1xuICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL3VwbG9hZC9cIiwgdHJ1ZSk7XG4gICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJwb3N0SWRcIiwgcG9zdElkKTtcbiAgICB4aHIuc2VuZChmb3JtRGF0YSk7XG4gIH1cbiAgcHVibGljIGdldFJlc3VsdChcbiAgICByZXN1bHRJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbkdldFJlc3VsdDogKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIGRhdGFMaXN0OiBBcnJheTxhbnk+LFxuICAgICAgcmVzcG9uc2U6IGFueVxuICAgICkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIGRhdGEgPSBcInJlc3VsdElkPVwiICsgcmVzdWx0SWQgKyBcIiZuYW1lPVwiICsgbmFtZTtcbiAgICB4aHIub3BlbihcIkdFVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL2dldFJlc3VsdD9cIiArIGRhdGEpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XG4gICAgICB2YXIgbGlzdCA9IG51bGw7XG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgICBsaXN0ID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiByZXN1bHQuUXVlc3Rpb25SZXN1bHQpIHtcbiAgICAgICAgICB2YXIgZWwgPSB7IG5hbWU6IGtleSwgdmFsdWU6IHJlc3VsdC5RdWVzdGlvblJlc3VsdFtrZXldIH07XG4gICAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb25HZXRSZXN1bHQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgbGlzdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIGlzQ29tcGxldGVkKFxuICAgIHJlc3VsdElkOiBzdHJpbmcsXG4gICAgY2xpZW50SWQ6IHN0cmluZyxcbiAgICBvbklzQ29tcGxldGVkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHZhciBkYXRhID0gXCJyZXN1bHRJZD1cIiArIHJlc3VsdElkICsgXCImY2xpZW50SWQ9XCIgKyBjbGllbnRJZDtcbiAgICB4aHIub3BlbihcIkdFVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL2lzQ29tcGxldGVkP1wiICsgZGF0YSk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xuICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBvbklzQ29tcGxldGVkKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIuc2VuZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vYXJhYmljXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vYnVsZ2FyaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vY2F0YWxhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2Nyb2F0aWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vY3plY2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9kYW5pc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9kdXRjaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2VzdG9uaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZmlubmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2ZyZW5jaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2dlb3JnaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZ2VybWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZ3JlZWtcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9oZWJyZXdcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9oaW5kaVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2h1bmdhcmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2ljZWxhbmRpY1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2luZG9uZXNpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9pdGFsaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vamFwYW5lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9rb3JlYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9sYXR2aWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vbGl0aHVhbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL21hY2Vkb25pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9ub3J3ZWdpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wZXJzaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcG9saXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcG9ydHVndWVzZVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UtYnJcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9yb21hbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3J1c3NpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zZXJiaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc3BhbmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3N3YWhpbGlcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zd2VkaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vdGFqaWtcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90aGFpXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3R1cmtpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi91a3JhaW5pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi93ZWxzaFwiO1xuIiwiLy8gc3R5bGVzXG5pbXBvcnQgXCIuLi8uLi9tYWluLnNjc3NcIjtcbi8vaW1wb3J0IFwiLi4vLi4vbW9kZXJuLnNjc3NcIjtcblxuZXhwb3J0IHZhciBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9zZXR0aW5nc1wiO1xuZXhwb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnNcIjtcbmV4cG9ydCB7XG4gIEFuc3dlckNvdW50VmFsaWRhdG9yLFxuICBFbWFpbFZhbGlkYXRvcixcbiAgTnVtZXJpY1ZhbGlkYXRvcixcbiAgUmVnZXhWYWxpZGF0b3IsXG4gIFN1cnZleVZhbGlkYXRvcixcbiAgVGV4dFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yUmVzdWx0LFxuICBFeHByZXNzaW9uVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JSdW5uZXIsXG59IGZyb20gXCIuLi8uLi92YWxpZGF0b3JcIjtcbmV4cG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi8uLi9pdGVtdmFsdWVcIjtcbmV4cG9ydCB7XG4gIEJhc2UsXG4gIEV2ZW50LFxuICBTdXJ2ZXlFcnJvcixcbiAgSVN1cnZleSxcbiAgU3VydmV5RWxlbWVudCxcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElFbGVtZW50LFxuICBJUGFnZSxcbiAgSVRpdGxlT3duZXIsXG4gIEFycmF5Q2hhbmdlcyxcbn0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbmV4cG9ydCB7IENhbGN1bGF0ZWRWYWx1ZSB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGVkVmFsdWVcIjtcbmV4cG9ydCB7XG4gIEN1c3RvbUVycm9yLFxuICBBbnN3ZXJSZXF1aXJlZEVycm9yLFxuICBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yLFxuICBSZXF1cmVOdW1lcmljRXJyb3IsXG4gIEV4Y2VlZFNpemVFcnJvcixcbn0gZnJvbSBcIi4uLy4uL2Vycm9yXCI7XG5leHBvcnQge1xuICBJTG9jYWxpemFibGVPd25lcixcbiAgSUxvY2FsaXphYmxlU3RyaW5nLFxuICBMb2NhbGl6YWJsZVN0cmluZyxcbiAgTG9jYWxpemFibGVTdHJpbmdzLFxufSBmcm9tIFwiLi4vLi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmV4cG9ydCB7IEh0bWxDb25kaXRpb25JdGVtLCBVcmxDb25kaXRpb25JdGVtIH0gZnJvbSBcIi4uLy4uL2V4cHJlc3Npb25JdGVtc1wiO1xuZXhwb3J0IHsgQ2hvaWNlc1Jlc3RmdWwsIENob2ljZXNSZXN0ZnVsbCB9IGZyb20gXCIuLi8uLi9jaG9pY2VzUmVzdGZ1bFwiO1xuZXhwb3J0IHsgRnVuY3Rpb25GYWN0b3J5LCByZWdpc3RlckZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmV4cG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zXCI7XG5leHBvcnQge1xuICBPcGVyYW5kLFxuICBDb25zdCxcbiAgQmluYXJ5T3BlcmFuZCxcbiAgVmFyaWFibGUsXG4gIEZ1bmN0aW9uT3BlcmFuZCxcbiAgQXJyYXlPcGVyYW5kLFxufSBmcm9tIFwiLi4vLi4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnNcIjtcbmV4cG9ydCB7IENvbmRpdGlvbnNQYXJzZXIgfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uc1BhcnNlclwiO1xuZXhwb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuZXhwb3J0IHtcbiAgSnNvbkVycm9yLFxuICBKc29uSW5jb3JyZWN0VHlwZUVycm9yLFxuICBKc29uTWV0YWRhdGEsXG4gIEpzb25NZXRhZGF0YUNsYXNzLFxuICBKc29uTWlzc2luZ1R5cGVFcnJvcixcbiAgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlLFxuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IsXG4gIEpzb25Vbmtub3duUHJvcGVydHlFcnJvcixcbiAgU2VyaWFsaXplcixcbiAgcHJvcGVydHksXG4gIHByb3BlcnR5QXJyYXlcbn0gZnJvbSBcIi4uLy4uL2pzb25vYmplY3RcIjtcbmV4cG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQge1xuICBNYXRyaXhEcm9wZG93blJvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xuZXhwb3J0IHtcbiAgTWF0cml4RHluYW1pY1Jvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcbmV4cG9ydCB7XG4gIE1hdHJpeFJvd01vZGVsLFxuICBNYXRyaXhDZWxscyxcbiAgUXVlc3Rpb25NYXRyaXhNb2RlbCxcbiAgSU1hdHJpeERhdGFcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeFwiO1xuZXhwb3J0IHtcbiAgTXVsdGlwbGVUZXh0SXRlbU1vZGVsLFxuICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcbmV4cG9ydCB7IFBhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcIi4uLy4uL3BhbmVsXCI7XG5leHBvcnQgeyBGbG93UGFuZWxNb2RlbCB9IGZyb20gXCIuLi8uLi9mbG93cGFuZWxcIjtcbmV4cG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuLi8uLi9wYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vLi4vdGVtcGxhdGUtcmVuZGVyZXJcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uXCI7XG5leHBvcnQgeyBRdWVzdGlvbk5vblZhbHVlIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRW1wdHlNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9lbXB0eVwiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25DaGVja2JveEJhc2UsXG4gIFF1ZXN0aW9uU2VsZWN0QmFzZVxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYW5raW5nXCI7XG5leHBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jb21tZW50XCI7XG5leHBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5leHBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBRdWVzdGlvbkh0bWxNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYm9vbGVhblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLCBJbWFnZUl0ZW1WYWx1ZSB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9pbWFnZXBpY2tlclwiO1xuZXhwb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2ltYWdlXCI7XG5leHBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZFwiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCxcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlUaW1lciB9IGZyb20gXCIuLi8uLi9zdXJ2ZXl0aW1lclwiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwgfSBmcm9tIFwiLi4vLi4vc3VydmV5UHJvZ3Jlc3NCdXR0b25zXCI7XG5leHBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXlcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVRyaWdnZXIsXG4gIFN1cnZleVRyaWdnZXJDb21wbGV0ZSxcbiAgU3VydmV5VHJpZ2dlclNldFZhbHVlLFxuICBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSxcbiAgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSxcbiAgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24sXG4gIFRyaWdnZXIsXG59IGZyb20gXCIuLi8uLi90cmlnZ2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXlXaW5kb3dcIjtcbmV4cG9ydCB7IFRleHRQcmVQcm9jZXNzb3IgfSBmcm9tIFwiLi4vLi4vdGV4dFByZVByb2Nlc3NvclwiO1xuXG5leHBvcnQgeyBkeFN1cnZleVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZHhTdXJ2ZXlTZXJ2aWNlXCI7XG5leHBvcnQgeyBlbmdsaXNoU3RyaW5ncyB9IGZyb20gXCIuLi8uLi9sb2NhbGl6YXRpb24vZW5nbGlzaFwiO1xuZXhwb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzIH0gZnJvbSBcIi4uLy4uL3N1cnZleVN0cmluZ3NcIjtcbi8vIGV4cG9ydCB7IGN1bHR1cmVJbmZvIH0gZnJvbSBcIi4uLy4uL2N1bHR1cmVJbmZvXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkN1c3RvbVdpZGdldCxcbiAgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbixcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25DdXN0b21Nb2RlbCxcbiAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCxcbiAgQ29tcG9uZW50UXVlc3Rpb25KU09OLFxuICBDb21wb25lbnRDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fY3VzdG9tXCI7XG5cbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vc3R5bGVzbWFuYWdlclwiO1xuXG5leHBvcnQge1xuICBBY3Rpb25CYXJJdGVtLFxuICBJQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uQmFyLFxuICBBZGFwdGl2ZUFjdGlvbkJhckl0ZW1XcmFwcGVyLFxuICBBZGFwdGl2ZUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9hY3Rpb24tYmFyXCI7XG5leHBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwiLi4vLi4vbGlzdFwiO1xuZXhwb3J0IHsgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsIH0gZnJvbSBcIi4uLy4uL3BvcHVwXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBJc01vYmlsZSB9IGZyb20gXCIuLi8uLi91dGlscy9pcy1tb2JpbGVcIjtcbmV4cG9ydCB7XG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGNyZWF0ZVN2Zyxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5cbmV4cG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuLi8uLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxuLy9leHBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb25EYXRlTW9kZWx9IGZyb20gXCIuLi8uLi9wbHVnaW5zL3F1ZXN0aW9uX2RhdGVcIjtcbiIsIi8vIG1vZGVsXG5leHBvcnQgKiBmcm9tIFwiLi9jaHVua3MvbW9kZWxcIjtcblxuLy8gbG9jYWxpemF0aW9uXG5pbXBvcnQgXCIuL2NodW5rcy9sb2NhbGl6YXRpb25cIjtcblxuLy8gY3NzIHN0YW5kYXJkIGNsYXNzZXNcbmV4cG9ydCB7IGRlZmF1bHRTdGFuZGFyZENzcyB9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG4vLyBjc3MgYm9vdHN0cmFwIGNsYXNzZXNcbmV4cG9ydCB7IGRlZmF1bHRCb290c3RyYXBDc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3Nib290c3RyYXBcIjtcbi8vIGNzcyBib290c3RyYXAgKyBtYXRlcmlhbCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3Nib290c3RyYXBtYXRlcmlhbFwiO1xuLy8gY3NzIG1vZGVybiBjbGFzc2VzXG5leHBvcnQgeyBtb2Rlcm5Dc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3Ntb2Rlcm5cIjtcblxuLy8gdXRpbHNcbmV4cG9ydCAqIGZyb20gXCIuLi9yZW5kZXJlckZhY3RvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi91dGlscy9yZXNwb25zaXZpdHltYW5hZ2VyXCI7XG5leHBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbiIsImltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIH0gZnJvbSBcIi4uL3Z1ZS9zdXJ2ZXlNb2RlbFwiO1xuZXhwb3J0IHsgVnVlU3VydmV5TW9kZWwgYXMgTW9kZWwgfTtcbmltcG9ydCB7IFZ1ZVN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uL3Z1ZS9zdXJ2ZXlNb2RlbFwiO1xuZXhwb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgYXMgV2luZG93TW9kZWwgfTtcbmV4cG9ydCB7IFN1cnZleSB9IGZyb20gXCIuLi92dWUvc3VydmV5LnZ1ZVwiO1xuZXhwb3J0IHsgQ3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4uL3Z1ZS9jdXN0b213aWRnZXQudnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlTdHJpbmcgfSBmcm9tIFwiLi4vdnVlL3N0cmluZy52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVN0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi92dWUvc3RyaW5nLXZpZXdlci52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVN0cmluZ0VkaXRvciB9IGZyb20gXCIuLi92dWUvc3RyaW5nLWVkaXRvci52dWVcIjtcbmV4cG9ydCB7IFN1cnZleUVsZW1lbnRWdWUgfSBmcm9tIFwiLi4vdnVlL2VsZW1lbnQudnVlXCI7XG5leHBvcnQgeyBXaW5kb3cgfSBmcm9tIFwiLi4vdnVlL3dpbmRvdy52dWVcIjtcbmV4cG9ydCB7IFBhZ2UgfSBmcm9tIFwiLi4vdnVlL3BhZ2UudnVlXCI7XG5leHBvcnQgeyBSYWRpb2dyb3VwIH0gZnJvbSBcIi4uL3Z1ZS9yYWRpb2dyb3VwLnZ1ZVwiO1xuZXhwb3J0IHsgUmFkaW9ncm91cEl0ZW0gfSBmcm9tIFwiLi4vdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgT3RoZXJDaG9pY2UgfSBmcm9tIFwiLi4vdnVlL290aGVyQ2hvaWNlLnZ1ZVwiO1xuZXhwb3J0IHsgUmF0aW5nIH0gZnJvbSBcIi4uL3Z1ZS9yYXRpbmcudnVlXCI7XG5leHBvcnQgeyBDb21tZW50IH0gZnJvbSBcIi4uL3Z1ZS9jb21tZW50LnZ1ZVwiO1xuZXhwb3J0IHsgUmFua2luZyB9IGZyb20gXCIuLi92dWUvcmFua2luZy9yYW5raW5nLnZ1ZVwiO1xuZXhwb3J0IHsgUmFua2luZ0l0ZW0gfSBmcm9tIFwiLi4vdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vdnVlL2NoZWNrYm94LnZ1ZVwiO1xuZXhwb3J0IHsgQ2hlY2tib3hJdGVtIH0gZnJvbSBcIi4uL3Z1ZS9jaGVja2JveGl0ZW0udnVlXCI7XG5leHBvcnQgeyBCdXR0b25Hcm91cCB9IGZyb20gXCIuLi92dWUvYnV0dG9uZ3JvdXAudnVlXCI7XG5leHBvcnQgeyBCdXR0b25Hcm91cEl0ZW0gfSBmcm9tIFwiLi4vdnVlL2J1dHRvbmdyb3VwaXRlbS52dWVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uVGV4dCB9IGZyb20gXCIuLi92dWUvdGV4dC52dWVcIjtcbmV4cG9ydCB7IEJvb2xlYW4gfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW5cIjtcbmV4cG9ydCB7IEJvb2xlYW5Td2l0Y2ggfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZVwiO1xuZXhwb3J0IHsgQm9vbGVhbkNoZWNrYm94IH0gZnJvbSBcIi4uL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZVwiO1xuZXhwb3J0IHsgRW1wdHkgfSBmcm9tIFwiLi4vdnVlL2VtcHR5LnZ1ZVwiO1xuZXhwb3J0IHsgTXVsdGlwbGVUZXh0IH0gZnJvbSBcIi4uL3Z1ZS9tdWx0aXBsZXRleHQudnVlXCI7XG5leHBvcnQgeyBNYXRyaXggfSBmcm9tIFwiLi4vdnVlL21hdHJpeC52dWVcIjtcbmV4cG9ydCB7IERyb3Bkb3duIH0gZnJvbSBcIi4uL3Z1ZS9kcm9wZG93bi52dWVcIjtcbmV4cG9ydCB7IEZpbGUgfSBmcm9tIFwiLi4vdnVlL2ZpbGUudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhDZWxsIH0gZnJvbSBcIi4uL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVwiO1xuZXhwb3J0IHsgTWF0cml4VGFibGUgfSBmcm9tIFwiLi4vdnVlL21hdHJpeHRhYmxlLnZ1ZVwiO1xuZXhwb3J0IHsgTWF0cml4RHJvcGRvd24gfSBmcm9tIFwiLi4vdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZVwiO1xuZXhwb3J0IHsgTWF0cml4RHluYW1pYyB9IGZyb20gXCIuLi92dWUvbWF0cml4ZHluYW1pYy52dWVcIjtcbmV4cG9ydCB7IEVycm9ycyB9IGZyb20gXCIuLi92dWUvZXJyb3JzLnZ1ZVwiO1xuZXhwb3J0IHsgSHRtbCB9IGZyb20gXCIuLi92dWUvaHRtbC52dWVcIjtcbmV4cG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tIFwiLi4vdnVlL2V4cHJlc3Npb24udnVlXCI7XG5leHBvcnQgeyBJbWFnZVBpY2tlciB9IGZyb20gXCIuLi92dWUvaW1hZ2VwaWNrZXIudnVlXCI7XG5leHBvcnQgeyBQYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vdnVlL3BhbmVsZHluYW1pYy52dWVcIjtcbmV4cG9ydCB7IFBhbmVsRHluYW1pY1JlbW92ZSB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiO1xuZXhwb3J0IHsgTmF2aWdhdGlvbiB9IGZyb20gXCIuLi92dWUvbmF2aWdhdGlvbi52dWVcIjtcbmV4cG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL3Z1ZS9wcm9ncmVzcy52dWVcIjtcbmV4cG9ydCB7IFByb2dyZXNzQnV0dG9ucyB9IGZyb20gXCIuLi92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZVwiO1xuZXhwb3J0IHsgVGltZXJQYW5lbCB9IGZyb20gXCIuLi92dWUvdGltZXJwYW5lbC52dWVcIjtcbmV4cG9ydCB7IFBhbmVsIH0gZnJvbSBcIi4uL3Z1ZS9wYW5lbC52dWVcIjtcbmV4cG9ydCB7IEZsb3dQYW5lbCB9IGZyb20gXCIuLi92dWUvZmxvd3BhbmVsLnZ1ZVwiO1xuZXhwb3J0IHsgRmxvd1BhbmVsRWxlbWVudCB9IGZyb20gXCIuLi92dWUvZmxvd3BhbmVsZWxlbWVudC52dWVcIjtcbmV4cG9ydCB7IFJvdyB9IGZyb20gXCIuLi92dWUvcm93LnZ1ZVwiO1xuZXhwb3J0IHsgRWxlbWVudEhlYWRlciB9IGZyb20gXCIuLi92dWUvZWxlbWVudGhlYWRlci52dWVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uSW1hZ2UgfSBmcm9tIFwiLi4vdnVlL2ltYWdlLnZ1ZVwiO1xuZXhwb3J0IHsgU2lnbmF0dXJlUGFkIH0gZnJvbSBcIi4uL3Z1ZS9zaWduYXR1cmVwYWQudnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi4vdnVlL2hlYWRlci52dWVcIjtcbmV4cG9ydCB7IEN1c3RvbSB9IGZyb20gXCIuLi92dWUvY3VzdG9tLnZ1ZVwiO1xuZXhwb3J0IHsgQ29tcG9zaXRlIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb3NpdGUudnVlXCI7XG5leHBvcnQgeyBEcmFnRHJvcFREIH0gZnJvbSBcIi4uL3Z1ZS9kcmFnLWRyb3AtdGQudnVlXCI7XG5cbmV4cG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuLi92dWUvdGl0bGVjb250ZW50LnZ1ZVwiO1xuZXhwb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL3RpdGxlLWFjdGlvbnMvdGl0bGUtYWN0aW9ucy52dWVcIjtcbmV4cG9ydCB7IERlZmF1bHRUaXRsZSB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9kZWZhdWx0LXRpdGxlL2RlZmF1bHQtdGl0bGUudnVlXCI7XG5leHBvcnQgeyBBY3Rpb25CYXJWaWV3TW9kZWwgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZVwiO1xuZXhwb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWVcIjtcbmV4cG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZVwiO1xuZXhwb3J0IHsgTGlzdCB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24gfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vY29yZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdnVlLXVpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IsIElTdXJ2ZXlFcnJvck93bmVyIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgQW5zd2VyUmVxdWlyZWRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW9uZWFuc3dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvckluUGFuZWxcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW51bWVyaWNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEV4Y2VlZFNpemVFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXhTaXplOiBudW1iZXIsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4Y2VlZHNpemVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuZ2V0VGV4dFNpemUoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcbiAgICB2YXIgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xuICAgIHZhciBmaXhlZCA9IFswLCAwLCAyLCAzLCAzXTtcbiAgICBpZiAodGhpcy5tYXhTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gXCIwIEJ5dGVcIjtcbiAgICB9XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubWF4U2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5tYXhTaXplIC8gTWF0aC5wb3coMTAyNCwgaSk7XG4gICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZml4ZWRbaV0pICsgXCIgXCIgKyBzaXplc1tpXTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYlJlcXVlc3RFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogc3RyaW5nLFxuICAgIHB1YmxpYyByZXNwb25zZTogc3RyaW5nLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcihudWxsLCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwid2VicmVxdWVzdFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJ1cmxSZXF1ZXN0RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLnN0YXR1cywgdGhpcy5yZXNwb25zZSk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBXZWJSZXF1ZXN0RW1wdHlFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIndlYnJlcXVlc3RlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsR2V0Q2hvaWNlc0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgT3RoZXJFbXB0eUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwib3RoZXJlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJSZXF1aXJlZEVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgVXBsb2FkaW5nRmlsZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidXBsb2FkaW5nZmlsZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXBsb2FkaW5nRmlsZVwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEluQWxsUm93c0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgTWluUm93Q291bnRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1pblJvd0NvdW50OiBudW1iZXIsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtaW5yb3djb3VudGVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pblJvd0NvdW50KTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEtleUR1cGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJrZXlkdXBsaWNhdGlvbmVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkl0ZW0gZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyO1xuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCB0aGlzKTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvbml0ZW1cIjtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LiBJZiB0aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGVuIHN1cnZleSB3aWxsIHVzZSBodG1sIHByb3BlcnR5IHRvIHNob3cgb24gY29tcGxldGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG5cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBjb250YWlucyBleHByZXNzaW9uIGFuZCBodG1sIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gaHRtbCBvZiB0aGlzIGl0ZW0gdXNlcyBpbnN0ZWFkIG9mIHN1cnZleS5jb21wbGV0ZWRIdG1sIHByb3BlcnR5XG4gKiBAc2VlIFN1cnZleU1vZGVsLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICogQHNlZSBTdXJ2ZXlNb2RlbC5jb21wbGV0ZWRIdG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBIdG1sQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgaHRtbDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJodG1sY29uZGl0aW9uaXRlbVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaHRtbCB0aGF0IHNob3dzIG9uIGNvbXBsZXRlZCAoJ1RoYW5rIHlvdScpIHBhZ2UuIFRoZSBleHByZXNzaW9uIHNob3VsZCByZXR1cm4gdHJ1ZVxuICAgKiBAc2VlIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgY29udGFpbnMgZXhwcmVzc2lvbiBhbmQgdXJsIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gdXJsIG9mIHRoaXMgaXRlbSB1c2VzIGluc3RlYWQgb2Ygc3VydmV5Lm5hdmlnYXRlVG9VcmwgcHJvcGVydHlcbiAqIEBzZWUgU3VydmV5TW9kZWwubmF2aWdhdGVUb1VybFxuICovXG5leHBvcnQgY2xhc3MgVXJsQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgdXJsOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoZXhwcmVzc2lvbik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInVybFwiLCB0aGlzKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInVybGNvbmRpdGlvbml0ZW1cIjtcbiAgfVxuICAvKipcbiAgICogVGhlIHVybCB0aGF0IHN1cnZleSBuYXZpZ2F0ZXMgdG8gb24gY29tcGxldGluZyB0aGUgc3VydmV5LiBUaGUgZXhwcmVzc2lvbiBzaG91bGQgcmV0dXJuIHRydWVcbiAgICogQHNlZSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInVybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ1cmxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NVcmwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidXJsXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvbml0ZW1cIixcbiAgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkl0ZW0oKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaHRtbGNvbmRpdGlvbml0ZW1cIixcbiAgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sQ29uZGl0aW9uSXRlbSgpO1xuICB9LFxuICBcImV4cHJlc3Npb25pdGVtXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidXJsY29uZGl0aW9uaXRlbVwiLFxuICBbeyBuYW1lOiBcInVybDpzdHJpbmdcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1VybFwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFVybENvbmRpdGlvbkl0ZW0oKTtcbiAgfSxcbiAgXCJleHByZXNzaW9uaXRlbVwiXG4pO1xuIiwiaW1wb3J0IHtcbkNvbnN0LFxuQmluYXJ5T3BlcmFuZCxcblZhcmlhYmxlLFxuT3BlcmFuZCxcblVuYXJ5T3BlcmFuZCxcbkZ1bmN0aW9uT3BlcmFuZCxcbkFycmF5T3BlcmFuZFxufSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuXG4vLyBHZW5lcmF0ZWQgYnkgUEVHLmpzIHYuIDAuMTAuMCAodHMtcGVnanMgcGx1Z2luIHYuIDAuMy4xIClcbi8vXG4vLyBodHRwczovL3BlZ2pzLm9yZy8gICBodHRwczovL2dpdGh1Yi5jb20vbWV0YWRldnByby90cy1wZWdqc1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRmlsZVBvc2l0aW9uIHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbmU6IG51bWJlcjtcbiAgY29sdW1uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVSYW5nZSB7XG4gIHN0YXJ0OiBJRmlsZVBvc2l0aW9uO1xuICBlbmQ6IElGaWxlUG9zaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwibGl0ZXJhbFwiO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGlnbm9yZUNhc2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsYXNzUGFydHMgZXh0ZW5kcyBBcnJheTxzdHJpbmcgfCBJQ2xhc3NQYXJ0cz4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xhc3NFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiY2xhc3NcIjtcbiAgcGFydHM6IElDbGFzc1BhcnRzO1xuICBpbnZlcnRlZDogYm9vbGVhbjtcbiAgaWdub3JlQ2FzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQW55RXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImFueVwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbmRFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiZW5kXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU90aGVyRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcIm90aGVyXCI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEV4cGVjdGF0aW9uID0gSUxpdGVyYWxFeHBlY3RhdGlvbiB8IElDbGFzc0V4cGVjdGF0aW9uIHwgSUFueUV4cGVjdGF0aW9uIHwgSUVuZEV4cGVjdGF0aW9uIHwgSU90aGVyRXhwZWN0YXRpb247XG5cbmV4cG9ydCBjbGFzcyBTeW50YXhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHN0YXRpYyBidWlsZE1lc3NhZ2UoZXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgZnVuY3Rpb24gaGV4KGNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbEVzY2FwZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHNcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgICAucmVwbGFjZSgvXCIvZywgIFwiXFxcXFxcXCJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcMC9nLCBcIlxcXFwwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgICAgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSApXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgKGNoKSA9PiBcIlxcXFx4XCIgICsgaGV4KGNoKSApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gc1xuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXF0vZywgXCJcXFxcXVwiKVxuICAgICAgICAucmVwbGFjZSgvXFxeL2csIFwiXFxcXF5cIilcbiAgICAgICAgLnJlcGxhY2UoLy0vZywgIFwiXFxcXC1cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcMC9nLCBcIlxcXFwwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHQvZywgXCJcXFxcdFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgICAgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSApXG4gICAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgKGNoKSA9PiBcIlxcXFx4XCIgICsgaGV4KGNoKSApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb246IEV4cGVjdGF0aW9uKSB7XG4gICAgICBzd2l0Y2ggKGV4cGVjdGF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICAgIGNvbnN0IGVzY2FwZWRQYXJ0cyA9IGV4cGVjdGF0aW9uLnBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydClcbiAgICAgICAgICAgICAgPyBjbGFzc0VzY2FwZShwYXJ0WzBdIGFzIHN0cmluZykgKyBcIi1cIiArIGNsYXNzRXNjYXBlKHBhcnRbMV0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA6IGNsYXNzRXNjYXBlKHBhcnQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIFwiZW5kIG9mIGlucHV0XCI7XG4gICAgICAgIGNhc2UgXCJvdGhlclwiOlxuICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMTogRXhwZWN0YXRpb25bXSkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gZXhwZWN0ZWQxLm1hcChkZXNjcmliZUV4cGVjdGF0aW9uKTtcbiAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICBsZXQgajogbnVtYmVyO1xuXG4gICAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgICBpZiAoZGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChpID0gMSwgaiA9IDE7IGkgPCBkZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNbal0gPSBkZXNjcmlwdGlvbnNbaV07XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlc2NyaXB0aW9ucy5sZW5ndGggPSBqO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF0gKyBcIiBvciBcIiArIGRlc2NyaXB0aW9uc1sxXTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgKyBcIiwgb3IgXCJcbiAgICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kMTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgcmV0dXJuIGZvdW5kMSA/IFwiXFxcIlwiICsgbGl0ZXJhbEVzY2FwZShmb3VuZDEpICsgXCJcXFwiXCIgOiBcImVuZCBvZiBpbnB1dFwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xuICB9XG5cbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdO1xuICBwdWJsaWMgZm91bmQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBsb2NhdGlvbjogSUZpbGVSYW5nZTtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdLCBmb3VuZDogc3RyaW5nIHwgbnVsbCwgbG9jYXRpb246IElGaWxlUmFuZ2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgIHRoaXMuZm91bmQgPSBmb3VuZDtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuXG4gICAgaWYgKHR5cGVvZiAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBTeW50YXhFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlZCB7XG4gIG5leHRQb3M6IG51bWJlcjtcbiAgcmVzdWx0OiBhbnk7XG59XG5cbmZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHt9O1xuXG4gIGNvbnN0IHBlZyRGQUlMRUQ6IFJlYWRvbmx5PGFueT4gPSB7fTtcblxuICBjb25zdCBwZWckc3RhcnRSdWxlRnVuY3Rpb25zOiB7W2lkOiBzdHJpbmddOiBhbnl9ID0geyBFeHByZXNzaW9uOiBwZWckcGFyc2VFeHByZXNzaW9uIH07XG4gIGxldCBwZWckc3RhcnRSdWxlRnVuY3Rpb246ICgpID0+IGFueSA9IHBlZyRwYXJzZUV4cHJlc3Npb247XG5cbiAgY29uc3QgcGVnJGMwID0gZnVuY3Rpb24oaGVhZDogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgcmV0dXJuIGJ1aWxkQmluYXJ5T3BlcmFuZChoZWFkLCB0YWlsLCB0cnVlKTtcbiAgICB9O1xuICBjb25zdCBwZWckYzEgPSBcInx8XCI7XG4gIGNvbnN0IHBlZyRjMiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ8fFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMyA9IFwib3JcIjtcbiAgY29uc3QgcGVnJGM0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm9yXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzUgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJvclwiOyB9O1xuICBjb25zdCBwZWckYzYgPSBcIiYmXCI7XG4gIGNvbnN0IHBlZyRjNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCImJlwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjOCA9IFwiYW5kXCI7XG4gIGNvbnN0IHBlZyRjOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJhbmRcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJhbmRcIjsgfTtcbiAgY29uc3QgcGVnJGMxMSA9IGZ1bmN0aW9uKGhlYWQ6IGFueSwgdGFpbDogYW55KTogYW55IHtcbiAgICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMiA9IFwiPD1cIjtcbiAgY29uc3QgcGVnJGMxMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI8PVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTQgPSBcImxlc3NvcmVxdWFsXCI7XG4gIGNvbnN0IHBlZyRjMTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc29yZXF1YWxcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJsZXNzb3JlcXVhbFwiOyB9O1xuICBjb25zdCBwZWckYzE3ID0gXCI+PVwiO1xuICBjb25zdCBwZWckYzE4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj49XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxOSA9IFwiZ3JlYXRlcm9yZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJncmVhdGVyb3JlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyMSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJvcmVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjIgPSBcIj1cIjtcbiAgY29uc3QgcGVnJGMyMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMyNCA9IFwiZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjcgPSBcIiE9XCI7XG4gIGNvbnN0IHBlZyRjMjggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiIT1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzI5ID0gXCJub3RlcXVhbFwiO1xuICBjb25zdCBwZWckYzMwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVxdWFsXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzMxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZXF1YWxcIjsgfTtcbiAgY29uc3QgcGVnJGMzMiA9IFwiPFwiO1xuICBjb25zdCBwZWckYzMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjxcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM0ID0gXCJsZXNzXCI7XG4gIGNvbnN0IHBlZyRjMzUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMzNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImxlc3NcIjsgfTtcbiAgY29uc3QgcGVnJGMzNyA9IFwiPlwiO1xuICBjb25zdCBwZWckYzM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM5ID0gXCJncmVhdGVyXCI7XG4gIGNvbnN0IHBlZyRjNDAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZ3JlYXRlclwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM0MSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM0MiA9IFwiK1wiO1xuICBjb25zdCBwZWckYzQzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIitcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ0ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicGx1c1wiOyAgfTtcbiAgY29uc3QgcGVnJGM0NSA9IFwiLVwiO1xuICBjb25zdCBwZWckYzQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibWludXNcIjsgfTtcbiAgY29uc3QgcGVnJGM0OCA9IFwiKlwiO1xuICBjb25zdCBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibXVsXCI7IH07XG4gIGNvbnN0IHBlZyRjNTEgPSBcIi9cIjtcbiAgY29uc3QgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIvXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImRpdlwiOyB9O1xuICBjb25zdCBwZWckYzU0ID0gXCIlXCI7XG4gIGNvbnN0IHBlZyRjNTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJtb2RcIjsgfTtcbiAgY29uc3QgcGVnJGM1NyA9IFwiXlwiO1xuICBjb25zdCBwZWckYzU4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzU5ID0gXCJwb3dlclwiO1xuICBjb25zdCBwZWckYzYwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInBvd2VyXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzYxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicG93ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM2MiA9IFwiKj1cIjtcbiAgY29uc3QgcGVnJGM2MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIqPVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNjQgPSBcImNvbnRhaW5zXCI7XG4gIGNvbnN0IHBlZyRjNjUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29udGFpbnNcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNjYgPSBcImNvbnRhaW5cIjtcbiAgY29uc3QgcGVnJGM2NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJjb250YWluXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzY4ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiY29udGFpbnNcIjsgfTtcbiAgY29uc3QgcGVnJGM2OSA9IFwibm90Y29udGFpbnNcIjtcbiAgY29uc3QgcGVnJGM3MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3Rjb250YWluc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM3MSA9IFwibm90Y29udGFpblwiO1xuICBjb25zdCBwZWckYzcyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGNvbnRhaW5cIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNzMgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJub3Rjb250YWluc1wiOyB9O1xuICBjb25zdCBwZWckYzc0ID0gXCJhbnlvZlwiO1xuICBjb25zdCBwZWckYzc1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFueW9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc2ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbnlvZlwiOyB9O1xuICBjb25zdCBwZWckYzc3ID0gXCJhbGxvZlwiO1xuICBjb25zdCBwZWckYzc4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFsbG9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc5ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbGxvZlwiOyB9O1xuICBjb25zdCBwZWckYzgwID0gXCIoXCI7XG4gIGNvbnN0IHBlZyRjODEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiKFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjODIgPSBcIilcIjtcbiAgY29uc3QgcGVnJGM4MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIpXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4NCA9IGZ1bmN0aW9uKGV4cHI6IGFueSk6IGFueSB7IHJldHVybiBleHByOyB9O1xuICBjb25zdCBwZWckYzg1ID0gZnVuY3Rpb24obmFtZTogYW55LCBwYXJhbXM6IGFueSk6IGFueSB7IHJldHVybiBuZXcgRnVuY3Rpb25PcGVyYW5kKG5hbWUsIHBhcmFtcyk7IH07XG4gIGNvbnN0IHBlZyRjODYgPSBcIiFcIjtcbiAgY29uc3QgcGVnJGM4NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4OCA9IFwibmVnYXRlXCI7XG4gIGNvbnN0IHBlZyRjODkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibmVnYXRlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzkwID0gZnVuY3Rpb24oZXhwcjogYW55KTogYW55IHsgcmV0dXJuIG5ldyBVbmFyeU9wZXJhbmQoZXhwciwgXCJuZWdhdGVcIik7IH07XG4gIGNvbnN0IHBlZyRjOTEgPSBmdW5jdGlvbihleHByOiBhbnksIG9wOiBhbnkpOiBhbnkgeyByZXR1cm4gbmV3IFVuYXJ5T3BlcmFuZChleHByLCBvcCk7IH07XG4gIGNvbnN0IHBlZyRjOTIgPSBcImVtcHR5XCI7XG4gIGNvbnN0IHBlZyRjOTMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW1wdHlcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjOTQgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJlbXB0eVwiOyB9O1xuICBjb25zdCBwZWckYzk1ID0gXCJub3RlbXB0eVwiO1xuICBjb25zdCBwZWckYzk2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVtcHR5XCIsIHRydWUpO1xuICBjb25zdCBwZWckYzk3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZW1wdHlcIjsgfTtcbiAgY29uc3QgcGVnJGM5OCA9IFwidW5kZWZpbmVkXCI7XG4gIGNvbnN0IHBlZyRjOTkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidW5kZWZpbmVkXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDAgPSBcIm51bGxcIjtcbiAgY29uc3QgcGVnJGMxMDEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibnVsbFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTAyID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIG51bGw7IH07XG4gIGNvbnN0IHBlZyRjMTAzID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgQ29uc3QodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwNCA9IFwie1wiO1xuICBjb25zdCBwZWckYzEwNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDYgPSBcIn1cIjtcbiAgY29uc3QgcGVnJGMxMDcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTA4ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgVmFyaWFibGUodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwOSA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkgeyByZXR1cm4gdmFsdWU7IH07XG4gIGNvbnN0IHBlZyRjMTEwID0gXCInJ1wiO1xuICBjb25zdCBwZWckYzExMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCInJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTEyID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxMTMgPSBcIlxcXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcXFwiXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTUgPSBcIidcIjtcbiAgY29uc3QgcGVnJGMxMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTE3ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBcIidcIiArIHZhbHVlICsgXCInXCI7IH07XG4gIGNvbnN0IHBlZyRjMTE4ID0gXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEyMCA9IFwiW1wiO1xuICBjb25zdCBwZWckYzEyMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMjIgPSBcIl1cIjtcbiAgY29uc3QgcGVnJGMxMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI0ID0gZnVuY3Rpb24oc2VxdWVuY2U6IGFueSk6IGFueSB7IHJldHVybiBzZXF1ZW5jZTsgfTtcbiAgY29uc3QgcGVnJGMxMjUgPSBcIixcIjtcbiAgY29uc3QgcGVnJGMxMjYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI3ID0gZnVuY3Rpb24oZXhwcjogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKGV4cHIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheU9wZXJhbmQoW10pO1xuXG4gICAgICB2YXIgYXJyYXkgPSBbZXhwcl07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWlsKSkge1xuICAgICAgICB2YXIgZmxhdHRlbiA9IGZsYXR0ZW5BcnJheSh0YWlsKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBmbGF0dGVuLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgYXJyYXkucHVzaChmbGF0dGVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEFycmF5T3BlcmFuZChhcnJheSk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMjggPSBcInRydWVcIjtcbiAgY29uc3QgcGVnJGMxMjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidHJ1ZVwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMxMzAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgY29uc3QgcGVnJGMxMzEgPSBcImZhbHNlXCI7XG4gIGNvbnN0IHBlZyRjMTMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImZhbHNlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzEzMyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBmYWxzZTsgfTtcbiAgY29uc3QgcGVnJGMxMzQgPSBcIjB4XCI7XG4gIGNvbnN0IHBlZyRjMTM1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjB4XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gcGFyc2VJbnQodGV4dCgpLCAxNik7IH07XG4gIGNvbnN0IHBlZyRjMTM3ID0gL15bXFwtXS87XG4gIGNvbnN0IHBlZyRjMTM4ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiLVwiXSwgZmFsc2UsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzkgPSBmdW5jdGlvbihzaWduOiBhbnksIG51bTogYW55KTogYW55IHsgcmV0dXJuIHNpZ24gPT0gbnVsbCA/IG51bSA6IC1udW07IH07XG4gIGNvbnN0IHBlZyRjMTQwID0gXCIuXCI7XG4gIGNvbnN0IHBlZyRjMTQxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE0MiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBwYXJzZUZsb2F0KHRleHQoKSk7IH07XG4gIGNvbnN0IHBlZyRjMTQzID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIHBhcnNlSW50KHRleHQoKSwgMTApOyB9O1xuICBjb25zdCBwZWckYzE0NCA9IFwiMFwiO1xuICBjb25zdCBwZWckYzE0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIwXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNDYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gMDsgfTtcbiAgY29uc3QgcGVnJGMxNDcgPSBmdW5jdGlvbihjaGFyczogYW55KTogYW55IHsgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7IH07XG4gIGNvbnN0IHBlZyRjMTQ4ID0gXCJcXFxcJ1wiO1xuICBjb25zdCBwZWckYzE0OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiJ1wiOyB9O1xuICBjb25zdCBwZWckYzE1MSA9IFwiXFxcXFxcXCJcIjtcbiAgY29uc3QgcGVnJGMxNTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXFxcXFxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcIlxcXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxNTQgPSAvXlteXCInXS87XG4gIGNvbnN0IHBlZyRjMTU1ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxcIlwiLCBcIidcIl0sIHRydWUsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gdGV4dCgpOyB9O1xuICBjb25zdCBwZWckYzE1NyA9IC9eW157fV0vO1xuICBjb25zdCBwZWckYzE1OCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIntcIiwgXCJ9XCJdLCB0cnVlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTU5ID0gL15bMC05XS87XG4gIGNvbnN0IHBlZyRjMTYwID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIjBcIiwgXCI5XCJdXSwgZmFsc2UsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNjEgPSAvXlsxLTldLztcbiAgY29uc3QgcGVnJGMxNjIgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMVwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2MyA9IC9eW2EtekEtWl0vO1xuICBjb25zdCBwZWckYzE2NCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2NSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwid2hpdGVzcGFjZVwiKTtcbiAgY29uc3QgcGVnJGMxNjYgPSAvXlsgXFx0XFxuXFxyXS87XG4gIGNvbnN0IHBlZyRjMTY3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKTtcblxuICBsZXQgcGVnJGN1cnJQb3MgPSAwO1xuICBsZXQgcGVnJHNhdmVkUG9zID0gMDtcbiAgY29uc3QgcGVnJHBvc0RldGFpbHNDYWNoZSA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XTtcbiAgbGV0IHBlZyRtYXhGYWlsUG9zID0gMDtcbiAgbGV0IHBlZyRtYXhGYWlsRXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10gPSBbXTtcbiAgbGV0IHBlZyRzaWxlbnRGYWlscyA9IDA7XG5cbiAgY29uc3QgcGVnJHJlc3VsdHNDYWNoZToge1tpZDogbnVtYmVyXTogSUNhY2hlZH0gPSB7fTtcblxuICBsZXQgcGVnJHJlc3VsdDtcblxuICBpZiAob3B0aW9ucy5zdGFydFJ1bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2F0aW9uKCk6IElGaWxlUmFuZ2Uge1xuICAgIHJldHVybiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0ZWQoZGVzY3JpcHRpb246IHN0cmluZywgbG9jYXRpb24xPzogSUZpbGVSYW5nZSkge1xuICAgIGxvY2F0aW9uMSA9IGxvY2F0aW9uMSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGxvY2F0aW9uMVxuICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvbjFcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZTogc3RyaW5nLCBsb2NhdGlvbjE/OiBJRmlsZVJhbmdlKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb24xXG4gICAgICA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG5cbiAgICB0aHJvdyBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbjEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0MTogc3RyaW5nLCBpZ25vcmVDYXNlOiBib29sZWFuKTogSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQxLCBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckY2xhc3NFeHBlY3RhdGlvbihwYXJ0czogSUNsYXNzUGFydHMsIGludmVydGVkOiBib29sZWFuLCBpZ25vcmVDYXNlOiBib29sZWFuKTogSUNsYXNzRXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpOiBJQW55RXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiYW55XCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRlbmRFeHBlY3RhdGlvbigpOiBJRW5kRXhwZWN0YXRpb24ge1xuICAgIHJldHVybiB7IHR5cGU6IFwiZW5kXCIgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBJT3RoZXJFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJvdGhlclwiLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjb21wdXRlUG9zRGV0YWlscyhwb3M6IG51bWJlcikge1xuICAgIGxldCBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogZGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IGRldGFpbHMuY29sdW1uXG4gICAgICB9O1xuXG4gICAgICB3aGlsZSAocCA8IHBvcykge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwKSA9PT0gMTApIHtcbiAgICAgICAgICBkZXRhaWxzLmxpbmUrKztcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGV0YWlscy5jb2x1bW4rKztcbiAgICAgICAgfVxuXG4gICAgICAgIHArKztcbiAgICAgIH1cblxuICAgICAgcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdID0gZGV0YWlscztcblxuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvczogbnVtYmVyLCBlbmRQb3M6IG51bWJlcik6IElGaWxlUmFuZ2Uge1xuICAgIGNvbnN0IHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyk7XG4gICAgY29uc3QgZW5kUG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IHN0YXJ0UG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgb2Zmc2V0OiBlbmRQb3MsXG4gICAgICAgIGxpbmU6IGVuZFBvc0RldGFpbHMubGluZSxcbiAgICAgICAgY29sdW1uOiBlbmRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZmFpbChleHBlY3RlZDE6IEV4cGVjdGF0aW9uKSB7XG4gICAgaWYgKHBlZyRjdXJyUG9zIDwgcGVnJG1heEZhaWxQb3MpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAocGVnJGN1cnJQb3MgPiBwZWckbWF4RmFpbFBvcykge1xuICAgICAgcGVnJG1heEZhaWxQb3MgPSBwZWckY3VyclBvcztcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgPSBbXTtcbiAgICB9XG5cbiAgICBwZWckbWF4RmFpbEV4cGVjdGVkLnB1c2goZXhwZWN0ZWQxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2U6IHN0cmluZywgbG9jYXRpb24xOiBJRmlsZVJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihtZXNzYWdlLCBbXSwgXCJcIiwgbG9jYXRpb24xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZDE6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsLCBsb2NhdGlvbjE6IElGaWxlUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgICAgU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkMSwgZm91bmQpLFxuICAgICAgZXhwZWN0ZWQxLFxuICAgICAgZm91bmQsXG4gICAgICBsb2NhdGlvbjFcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRXhwcmVzc2lvbigpOiBPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzODtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZUxvZ2ljT3IoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtdO1xuICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VPclNpZ24oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczYsIHM3LCBzOF07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VPclNpZ24oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VMb2dpY09yKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczYsIHM3LCBzOF07XG4gICAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzAoczIsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlT3JTaWduKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMSkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM1KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMb2dpY09yKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTG9naWNBbmQoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VBbmRTaWduKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQW5kU2lnbigpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFuZFNpZ24oKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGM2KSB7XG4gICAgICBzMSA9IHBlZyRjNjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOCkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMyk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzEwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMb2dpY0FuZCgpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VDb21wT3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzExKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tcGFyYWJsZU9wZXJhdG9ycygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzEyKSB7XG4gICAgICBzMSA9IHBlZyRjMTI7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTQpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDExKTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxNigpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE3KSB7XG4gICAgICAgIHMxID0gcGVnJGMxNztcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzE5KSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDE0KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAxNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMyMSgpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYxKSB7XG4gICAgICAgICAgczEgPSBwZWckYzIyO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI0KSB7XG4gICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjUpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyNigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMjcpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMyNztcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyOCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzI5KSB7XG4gICAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzMwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzMxKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MCkge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMzI7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzMyk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzM0KSB7XG4gICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzNSk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMzYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2Mikge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzNztcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzOSkge1xuICAgICAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQwKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDEoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbXBPcHMoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA2O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlUGx1c01pbnVzT3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VQbHVzTWludXNTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQbHVzTWludXNTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDMpIHtcbiAgICAgIHMxID0gcGVnJGM0MjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM0NCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDUpIHtcbiAgICAgICAgczEgPSBwZWckYzQ1O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM0NygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQbHVzTWludXNPcHMoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTXVsRGl2T3BzKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VNdWxEaXZTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNdWxEaXZTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgOTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDIpIHtcbiAgICAgIHMxID0gcGVnJGM0ODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM1MCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDcpIHtcbiAgICAgICAgczEgPSBwZWckYzUxO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM1MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICAgICAgczEgPSBwZWckYzU0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNTYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU11bERpdk9wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VQb3dlclNpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMwKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUG93ZXJTaWducygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDk0KSB7XG4gICAgICBzMSA9IHBlZyRjNTc7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM1OSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2MCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM2MSgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQmluYXJ5RnVuY09wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlRmFjdG9yKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHM1ID0gcGVnJHBhcnNlQmluRnVuY3Rpb25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRmFjdG9yKCk7XG4gICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTEoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNjIpIHtcbiAgICAgIHMxID0gcGVnJGM2MjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzY0KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gODtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNjYpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjgoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2OSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcwKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDEwKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzcxKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDEwKTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcyKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM3MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzc0KSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNzYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzcpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3OCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM3OSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRmFjdG9yKCk6IE9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE0O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDEpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzgyO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODQoczMpO1xuICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlRnVuY3Rpb25PcCgpO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJHBhcnNlVW5hcnlGdW5jdGlvbk9wKCk7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJHBhcnNlQXRvbSgpO1xuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckcGFyc2VBcnJheU9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRnVuY3Rpb25PcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQ7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTU7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDApIHtcbiAgICAgICAgczIgPSBwZWckYzgwO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VTZXF1ZW5jZSgpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQxKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjODI7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzg1KHMxLCBzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVVuYXJ5RnVuY3Rpb25PcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzMpIHtcbiAgICAgIHMxID0gcGVnJGM4NjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzg4KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gNjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg5KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjOTAoczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VBdG9tKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlVW5GdW5jdGlvbnMoKTtcbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzkxKHMxLCBzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVVuRnVuY3Rpb25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTIpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5Myk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM5NCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjOTUpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM5NygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBdG9tKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxODtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOSkgPT09IHBlZyRjOTgpIHtcbiAgICAgICAgczIgPSBwZWckYzk4O1xuICAgICAgICBwZWckY3VyclBvcyArPSA5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjMTAwKSB7XG4gICAgICAgICAgczIgPSBwZWckYzEwMDtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDIoKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VDb25zdFZhbHVlKCk7XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMDMoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJGMxMDQ7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA1KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVmFsdWVJbnB1dCgpO1xuICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckYzEwNjtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA3KTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMDgoczMpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDb25zdFZhbHVlKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMb2dpY1ZhbHVlKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxMDkoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlQXJpdGhtZXRpY1ZhbHVlKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDkoczEpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEwOShzMSk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxMTApIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMTA7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTExKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzExMigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzExMykge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE0KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE1O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTYpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczIgPSBwZWckcGFyc2VBbnlJbnB1dCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRjMTE1O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE2KTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE3KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE4O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOSk7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUlucHV0KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTg7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOSk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE3KHMyKTtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQXJyYXlPcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyMDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHtcbiAgICAgIHMxID0gcGVnJGMxMjA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlU2VxdWVuY2UoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkzKSB7XG4gICAgICAgICAgczMgPSBwZWckYzEyMjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIzKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMjQoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTZXF1ZW5jZSgpOiBBcnJheU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjMTI1O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjYpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRjMTI1O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEyNyhzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljVmFsdWUoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMjgpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTMwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMzEpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMzKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFyaXRobWV0aWNWYWx1ZSgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTM0KSB7XG4gICAgICBzMSA9IHBlZyRjMTM0O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzNSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTM2KCk7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChwZWckYzEzNy50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzOCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VOdW1iZXIoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEzOShzMSwgczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VOdW1iZXIoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczM7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nikge1xuICAgICAgICBzMiA9IHBlZyRjMTQwO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxNDIoKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlTm9uWmVyb0RpZ2l0cygpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQzKCk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDgpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQ0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDUpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzE0NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmFsdWVJbnB1dCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI1O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQ3KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFueUlucHV0KCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczI7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjY7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IFtdO1xuICAgIHMyID0gcGVnJHBhcnNlQW55Q2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUNoYXJhY3RlcnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzE0NyhzMSk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE0OCkge1xuICAgICAgczEgPSBwZWckYzE0ODtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTUwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTUxKSB7XG4gICAgICAgIHMxID0gcGVnJGMxNTE7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxNTMoKTtcbiAgICAgIH1cbiAgICAgIHMwID0gczE7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKHBlZyRjMTU0LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYWx1ZUNoYXJhY3RlcnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKHBlZyRjMTU3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTgpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzQW5kRGlnaXRzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBbXTtcbiAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW3M0LCBzNV07XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzE1NigpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZURpZ2l0cygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNTkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE1OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vblplcm9EaWdpdHMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDMxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTYxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjIpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYyKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE2My50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY0KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgaWYgKHBlZyRjMTYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2NCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlXygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Nyk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE2Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Nyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY1KTsgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZDogT3BlcmFuZCwgdGFpbDogQXJyYXk8YW55PiwgaXNBcml0aG1ldGljT3A6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRhaWwucmVkdWNlKFxuICAgICAgICBmdW5jdGlvbihyZXN1bHQsIGVsZW1lbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlPcGVyYW5kKGVsZW1lbnRzWzFdLCByZXN1bHQsIGVsZW1lbnRzWzNdLCBpc0FyaXRobWV0aWNPcCk7XG4gICAgICAgIH0sIFxuICAgICAgICBoZWFkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbGF0dGVuQXJyYXkoYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGFycmF5KTtcbiAgICB9XG5cblxuICBwZWckcmVzdWx0ID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uKCk7XG5cbiAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZWckcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBwZWckZmFpbChwZWckZW5kRXhwZWN0YXRpb24oKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCxcbiAgICAgIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckF0KHBlZyRtYXhGYWlsUG9zKSA6IG51bGwsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aFxuICAgICAgICA/IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zICsgMSlcbiAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcylcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnNlT3B0aW9ucyB7XG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICBzdGFydFJ1bGU/OiBzdHJpbmc7XG4gIHRyYWNlcj86IGFueTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHR5cGUgUGFyc2VGdW5jdGlvbiA9IChpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykgPT4gYW55O1xuZXhwb3J0IGNvbnN0IHBhcnNlOiBQYXJzZUZ1bmN0aW9uID0gcGVnJHBhcnNlO1xuXG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgRnVuY3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSBcImFzc2VydFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT3BlcmFuZCB7XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIGFic3RyYWN0IGdldFR5cGUoKTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55O1xuICBwdWJsaWMgYWJzdHJhY3Qgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPik6IGFueTtcbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pOiB2b2lkIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlPcGVyYW5kIGV4dGVuZHMgT3BlcmFuZCB7XG4gIHByaXZhdGUgY29uc3VtZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGlzQXJpdGhtZXRpY1ZhbHVlOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgbGVmdDogYW55ID0gbnVsbCxcbiAgICBwcml2YXRlIHJpZ2h0OiBhbnkgPSBudWxsLFxuICAgIGlzQXJpdGhtZXRpY09wOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzQXJpdGhtZXRpY1ZhbHVlID0gaXNBcml0aG1ldGljT3A7XG4gICAgaWYgKGlzQXJpdGhtZXRpY09wKSB7XG4gICAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tcImFyaXRobWV0aWNPcFwiXShcbiAgICAgICAgb3BlcmF0b3JOYW1lXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tvcGVyYXRvck5hbWVdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnN1bWVyID09IG51bGwpIHtcbiAgICAgIE9wZXJhbmRNYWtlci50aHJvd0ludmFsaWRPcGVyYXRvckVycm9yKG9wZXJhdG9yTmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYmluYXJ5XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0FyaXRobWV0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBcml0aG1ldGljVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0Nvbmp1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZSA9PSBcIm9yXCIgfHwgdGhpcy5vcGVyYXRvck5hbWUgPT0gXCJhbmRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbmp1bmN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb25qdW5jdGlvbiA/IHRoaXMub3BlcmF0b3JOYW1lIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgbGVmdE9wZXJhbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJpZ2h0T3BlcmFuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVQYXJhbSh4OiBhbnksIHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiB4LmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lci5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLmxlZnQsIHByb2Nlc3NWYWx1ZSksXG4gICAgICB0aGlzLmV2YWx1YXRlUGFyYW0odGhpcy5yaWdodCwgcHJvY2Vzc1ZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgXCIoXCIgK1xuICAgICAgT3BlcmFuZE1ha2VyLnNhZmVUb1N0cmluZyh0aGlzLmxlZnQsIGZ1bmMpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci5vcGVyYXRvclRvU3RyaW5nKHRoaXMub3BlcmF0b3JOYW1lKSArXG4gICAgICBcIiBcIiArXG4gICAgICBPcGVyYW5kTWFrZXIuc2FmZVRvU3RyaW5nKHRoaXMucmlnaHQsIGZ1bmMpICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHRoaXMubGVmdCAhPSBudWxsKSB0aGlzLmxlZnQuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgaWYgKHRoaXMucmlnaHQgIT0gbnVsbCkgdGhpcy5yaWdodC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNGdW5jdGlvbigpKSB8fFxuICAgICAgKCEhdGhpcy5yaWdodCAmJiB0aGlzLnJpZ2h0Lmhhc0Z1bmN0aW9uKCkpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHx8XG4gICAgICAoISF0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaGFzQXN5bmNGdW5jdGlvbigpKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICBpZiAoISF0aGlzLmxlZnQpIHRoaXMubGVmdC5hZGRUb0FzeW5jTGlzdChsaXN0KTtcbiAgICBpZiAoISF0aGlzLnJpZ2h0KSB0aGlzLnJpZ2h0LmFkZFRvQXN5bmNMaXN0KGxpc3QpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFyeU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBjb25zdW1lcjogRnVuY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvblZhbHVlOiBPcGVyYW5kLCBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLnVuYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgaWYgKHRoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogT3BlcmFuZCB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidW5hcnlcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgT3BlcmFuZE1ha2VyLm9wZXJhdG9yVG9TdHJpbmcodGhpcy5vcGVyYXRvck5hbWUpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZyhmdW5jKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZXIuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZXhwcmVzc2lvbi5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlPcGVyYW5kIGV4dGVuZHMgT3BlcmFuZCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZXM6IEFycmF5PE9wZXJhbmQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImFycmF5XCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIFwiW1wiICtcbiAgICAgIHRoaXMudmFsdWVzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24oZWw6IE9wZXJhbmQpIHtcbiAgICAgICAgICByZXR1cm4gZWwudG9TdHJpbmcoZnVuYyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgXCJdXCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5tYXAoZnVuY3Rpb24oZWw6IE9wZXJhbmQpIHtcbiAgICAgIHJldHVybiBlbC5ldmFsdWF0ZShwcm9jZXNzVmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGVsLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5zb21lKG9wZXJhbmQgPT4gb3BlcmFuZC5oYXNGdW5jdGlvbigpKTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMuc29tZShvcGVyYW5kID0+IG9wZXJhbmQuaGFzQXN5bmNGdW5jdGlvbigpKTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPikge1xuICAgIHRoaXMudmFsdWVzLmZvckVhY2gob3BlcmFuZCA9PiBvcGVyYW5kLmFkZFRvQXN5bmNMaXN0KGxpc3QpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3QgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbnN0XCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvcnJlY3RWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBldmFsdWF0ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7fVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodGhpcy5pc0Jvb2xlYW5WYWx1ZSh2YWx1ZSkpIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgICBpZiAoXG4gICAgICB2YWx1ZS5sZW5ndGggPiAxICYmXG4gICAgICB0aGlzLmlzUXVvdGUodmFsdWVbMF0pICYmXG4gICAgICB0aGlzLmlzUXVvdGUodmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0pXG4gICAgKVxuICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cigxLCB2YWx1ZS5sZW5ndGggLSAyKTtcbiAgICBpZiAoT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiMHhcIikgPT0gMCkgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxICYmIHZhbHVlWzBdID09IFwiMFwiKSByZXR1cm4gdmFsdWU7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzUXVvdGUoY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjaCA9PSBcIidcIiB8fCBjaCA9PSAnXCInO1xuICB9XG4gIHByaXZhdGUgaXNCb29sZWFuVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSAmJlxuICAgICAgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIHx8IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIilcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZSBleHRlbmRzIENvbnN0IHtcbiAgc3RhdGljIERpc2FibGVDb252ZXJzaW9uQ2hhciA9IFwiI1wiO1xuICBwcml2YXRlIHZhbHVlSW5mbzogYW55ID0ge307XG4gIHByaXZhdGUgdXNlVmFsdWVBc0l0SXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2YXJpYWJsZU5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLnZhcmlhYmxlTmFtZSAmJlxuICAgICAgdGhpcy52YXJpYWJsZU5hbWUubGVuZ3RoID4gMSAmJlxuICAgICAgdGhpcy52YXJpYWJsZU5hbWVbMF0gPT09IFZhcmlhYmxlLkRpc2FibGVDb252ZXJzaW9uQ2hhclxuICAgICkge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWUgPSB0aGlzLnZhcmlhYmxlTmFtZS5zdWJzdHIoMSk7XG4gICAgICB0aGlzLnVzZVZhbHVlQXNJdElzID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCEhZnVuYykge1xuICAgICAgdmFyIHJlcyA9IGZ1bmModGhpcyk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHZhciBwcmVmaXggPSB0aGlzLnVzZVZhbHVlQXNJdElzID8gVmFyaWFibGUuRGlzYWJsZUNvbnZlcnNpb25DaGFyIDogXCJcIjtcbiAgICByZXR1cm4gXCJ7XCIgKyBwcmVmaXggKyB0aGlzLnZhcmlhYmxlTmFtZSArIFwifVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFibGVOYW1lO1xuICB9XG4gIHB1YmxpYyBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnkge1xuICAgIHRoaXMudmFsdWVJbmZvLm5hbWUgPSB0aGlzLnZhcmlhYmxlTmFtZTtcbiAgICBwcm9jZXNzVmFsdWUuZ2V0VmFsdWVJbmZvKHRoaXMudmFsdWVJbmZvKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZUluZm8uaGFzVmFsdWVcbiAgICAgID8gdGhpcy5nZXRDb3JyZWN0VmFsdWUodGhpcy52YWx1ZUluZm8udmFsdWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB2YXJpYWJsZXMucHVzaCh0aGlzLnZhcmlhYmxlTmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy51c2VWYWx1ZUFzSXRJcykgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBzdXBlci5nZXRDb3JyZWN0VmFsdWUodmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbk9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBpc1JlYWR5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgYXN5blJlc3VsdDogYW55O1xuICBwdWJsaWMgb25Bc3luY1JlYWR5OiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9yaWdpbmFsVmFsdWU6IHN0cmluZywgcHJpdmF0ZSBwYXJhbWV0ZXJzOiBBcnJheU9wZXJhbmQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgJiYgcGFyYW1ldGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucGFyYW1ldGVycyA9IG5ldyBBcnJheU9wZXJhbmQoW10pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlQXN5bmMocHJvY2Vzc1ZhbHVlOiBQcm9jZXNzVmFsdWUpIHtcbiAgICB0aGlzLmlzUmVhZHlWYWx1ZSA9IGZhbHNlO1xuICAgIHZhciBhc3luY1Byb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICBhc3luY1Byb2Nlc3NWYWx1ZS52YWx1ZXMgPSBIZWxwZXJzLmNyZWF0ZUNvcHkocHJvY2Vzc1ZhbHVlLnZhbHVlcyk7XG4gICAgYXN5bmNQcm9jZXNzVmFsdWUucHJvcGVydGllcyA9IEhlbHBlcnMuY3JlYXRlQ29weShwcm9jZXNzVmFsdWUucHJvcGVydGllcyk7XG4gICAgYXN5bmNQcm9jZXNzVmFsdWUucHJvcGVydGllcy5yZXR1cm5SZXN1bHQgPSAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYXN5blJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMub25Bc3luY1JlYWR5KCk7XG4gICAgfTtcbiAgICB0aGlzLmV2YWx1YXRlQ29yZShhc3luY1Byb2Nlc3NWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkeSkgcmV0dXJuIHRoaXMuYXN5blJlc3VsdDtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUNvcmUocHJvY2Vzc1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGV2YWx1YXRlQ29yZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnkge1xuICAgIHJldHVybiBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucnVuKFxuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlLFxuICAgICAgdGhpcy5wYXJhbWV0ZXJzLmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSksXG4gICAgICBwcm9jZXNzVmFsdWUucHJvcGVydGllc1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxWYWx1ZSArIFwiKFwiICsgdGhpcy5wYXJhbWV0ZXJzLnRvU3RyaW5nKGZ1bmMpICsgXCIpXCI7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMucGFyYW1ldGVycy5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkeVZhbHVlO1xuICB9XG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmlzQXN5bmNGdW5jdGlvbih0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICB9XG4gIHB1YmxpYyBhZGRUb0FzeW5jTGlzdChsaXN0OiBBcnJheTxGdW5jdGlvbk9wZXJhbmQ+KSB7XG4gICAgaWYgKHRoaXMuaGFzQXN5bmNGdW5jdGlvbigpKSB7XG4gICAgICBsaXN0LnB1c2godGhpcyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVyYW5kTWFrZXIge1xuICBzdGF0aWMgdGhyb3dJbnZhbGlkT3BlcmF0b3JFcnJvcihvcDogc3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvcGVyYXRvcjogJ1wiICsgb3AgKyBcIidcIik7XG4gIH1cblxuICBzdGF0aWMgc2FmZVRvU3RyaW5nKG9wZXJhbmQ6IE9wZXJhbmQsIGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3BlcmFuZCA9PSBudWxsID8gXCJcIiA6IG9wZXJhbmQudG9TdHJpbmcoZnVuYyk7XG4gIH1cblxuICBzdGF0aWMgdG9PcGVyYW5kU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgICEhdmFsdWUgJiZcbiAgICAgICFPcGVyYW5kTWFrZXIuaXNOdW1lcmljKHZhbHVlKSAmJlxuICAgICAgIU9wZXJhbmRNYWtlci5pc0Jvb2xlYW5WYWx1ZSh2YWx1ZSlcbiAgICApXG4gICAgICB2YWx1ZSA9IFwiJ1wiICsgdmFsdWUgKyBcIidcIjtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgaXNTcGFjZVN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXN0ciAmJiAhc3RyLnJlcGxhY2UoXCIgXCIsIFwiXCIpO1xuICB9XG5cbiAgc3RhdGljIGlzTnVtZXJpYyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgKHZhbHVlLmluZGV4T2YoXCItXCIpID4gLTEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIitcIikgPiAxIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCIqXCIpID4gLTEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIl5cIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiL1wiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCIlXCIpID4gLTEpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChPcGVyYW5kTWFrZXIuaXNTcGFjZVN0cmluZyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gSGVscGVycy5pc051bWJlcih2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNCb29sZWFuVmFsdWUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXZhbHVlICYmXG4gICAgICAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgdW5hcnlGdW5jdGlvbnM6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSB7XG4gICAgZW1wdHk6IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gICAgfSxcbiAgICBub3RlbXB0eTogZnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICFPcGVyYW5kTWFrZXIudW5hcnlGdW5jdGlvbnMuZW1wdHkodmFsdWUpO1xuICAgIH0sXG4gICAgbmVnYXRlOiBmdW5jdGlvbih2YWx1ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICF2YWx1ZTtcbiAgICB9LFxuICB9O1xuXG4gIHN0YXRpYyBiaW5hcnlGdW5jdGlvbnM6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSB7XG4gICAgYXJpdGhtZXRpY09wKG9wZXJhdG9yTmFtZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkoYSkgJiYgIU9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKGEpKSB7XG4gICAgICAgICAgYSA9IHR5cGVvZiBiID09PSBcInN0cmluZ1wiID8gXCJcIiA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGIpICYmICFPcGVyYW5kTWFrZXIuaXNTcGFjZVN0cmluZyhiKSkge1xuICAgICAgICAgIGIgPSB0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiA/IFwiXCIgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9uc1tvcGVyYXRvck5hbWVdO1xuICAgICAgICByZXR1cm4gY29uc3VtZXIgPT0gbnVsbCA/IG51bGwgOiBjb25zdW1lci5jYWxsKHRoaXMsIGEsIGIpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIGFuZDogZnVuY3Rpb24oYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGEgJiYgYjtcbiAgICB9LFxuICAgIG9yOiBmdW5jdGlvbihhOiBib29sZWFuLCBiOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gYSB8fCBiO1xuICAgIH0sXG4gICAgcGx1czogZnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBhbnkge1xuICAgICAgcmV0dXJuIGEgKyBiO1xuICAgIH0sXG4gICAgbWludXM6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9LFxuICAgIG11bDogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGEgKiBiO1xuICAgIH0sXG4gICAgZGl2OiBmdW5jdGlvbihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICBpZiAoIWIpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGEgLyBiO1xuICAgIH0sXG4gICAgbW9kOiBmdW5jdGlvbihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICBpZiAoIWIpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGEgJSBiO1xuICAgIH0sXG4gICAgcG93ZXI6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBNYXRoLnBvdyhhLCBiKTtcbiAgICB9LFxuICAgIGdyZWF0ZXI6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKGxlZnQgPT0gbnVsbCB8fCByaWdodCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgIH0sXG4gICAgbGVzczogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7XG4gICAgfSxcbiAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5lcXVhbChsZWZ0LCByaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZ3JlYXRlcihsZWZ0LCByaWdodCk7XG4gICAgfSxcbiAgICBsZXNzb3JlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5lcXVhbChsZWZ0LCByaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMubGVzcyhsZWZ0LCByaWdodCk7XG4gICAgfSxcbiAgICBlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmlzVHdvVmFsdWVFcXVhbHMobGVmdCwgcmlnaHQpO1xuICAgIH0sXG4gICAgbm90ZXF1YWw6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICFPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zQ29yZShsZWZ0LCByaWdodCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBub3Rjb250YWluczogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWluc0NvcmUobGVmdCwgcmlnaHQsIGZhbHNlKTtcbiAgICB9LFxuICAgIGFueW9mOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICghbGVmdCAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eShyaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCFsZWZ0IHx8ICghQXJyYXkuaXNBcnJheShsZWZ0KSAmJiBsZWZ0Lmxlbmd0aCA9PT0gMCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShyaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxlZnQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhyaWdodCwgbGVmdCk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmlnaHQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpZ2h0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0W2ldKSkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhbGxvZjogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJpZ2h0KSlcbiAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByaWdodC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIU9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHRbaV0pKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgY29udGFpbnNDb3JlOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIGlzQ29udGFpbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFsZWZ0ICYmIGxlZnQgIT09IDAgJiYgbGVmdCAhPT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghbGVmdC5sZW5ndGgpIHtcbiAgICAgICAgbGVmdCA9IGxlZnQudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHR5cGVvZiByaWdodCA9PT0gXCJzdHJpbmdcIiB8fCByaWdodCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgIGxlZnQgPSBsZWZ0LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgcmlnaHQgPSByaWdodC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIgfHwgbGVmdCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICBpZiAoIXJpZ2h0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJpZ2h0ID0gcmlnaHQudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGZvdW5kID0gbGVmdC5pbmRleE9mKHJpZ2h0KSA+IC0xO1xuICAgICAgICByZXR1cm4gaXNDb250YWlucyA/IGZvdW5kIDogIWZvdW5kO1xuICAgICAgfVxuICAgICAgdmFyIHJpZ2h0QXJyYXkgPSBBcnJheS5pc0FycmF5KHJpZ2h0KSA/IHJpZ2h0IDogW3JpZ2h0XTtcbiAgICAgIGZvciAodmFyIHJJbmRleCA9IDA7IHJJbmRleCA8IHJpZ2h0QXJyYXkubGVuZ3RoOyBySW5kZXgrKykge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHJpZ2h0ID0gcmlnaHRBcnJheVtySW5kZXhdO1xuICAgICAgICBmb3IgKDsgaSA8IGxlZnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoT3BlcmFuZE1ha2VyLmlzVHdvVmFsdWVFcXVhbHMobGVmdFtpXSwgcmlnaHQpKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PSBsZWZ0Lmxlbmd0aCkgcmV0dXJuICFpc0NvbnRhaW5zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQ29udGFpbnM7XG4gICAgfSxcbiAgfTtcblxuICBzdGF0aWMgaXNUd29WYWx1ZUVxdWFscyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh4ID09PSBcInVuZGVmaW5lZFwiKSB4ID0gdW5kZWZpbmVkO1xuICAgIGlmICh5ID09PSBcInVuZGVmaW5lZFwiKSB5ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeCwgeSwgdHJ1ZSk7XG4gIH1cblxuICBzdGF0aWMgb3BlcmF0b3JUb1N0cmluZyhvcGVyYXRvck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IG9wU3RyID0gT3BlcmFuZE1ha2VyLnNpZ25zW29wZXJhdG9yTmFtZV07XG4gICAgcmV0dXJuIG9wU3RyID09IG51bGwgPyBvcGVyYXRvck5hbWUgOiBvcFN0cjtcbiAgfVxuXG4gIHN0YXRpYyBzaWduczogSGFzaFRhYmxlPHN0cmluZz4gPSB7XG4gICAgbGVzczogXCI8XCIsXG4gICAgbGVzc29yZXF1YWw6IFwiPD1cIixcbiAgICBncmVhdGVyOiBcIj5cIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCI+PVwiLFxuICAgIGVxdWFsOiBcIj09XCIsXG4gICAgbm90ZXF1YWw6IFwiIT1cIixcbiAgICBwbHVzOiBcIitcIixcbiAgICBtaW51czogXCItXCIsXG4gICAgbXVsOiBcIipcIixcbiAgICBkaXY6IFwiL1wiLFxuICAgIGFuZDogXCJhbmRcIixcbiAgICBvcjogXCJvclwiLFxuICAgIHBvd2VyOiBcIl5cIixcbiAgICBtb2Q6IFwiJVwiLFxuICAgIG5lZ2F0ZTogXCIhXCIsXG4gIH07XG59XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIElRdWVzdGlvbiB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuXG4vKipcbiAqIFRoZSBmbG93IHBhbmVsIG9iamVjdC4gSXQgaXMgYSBjb250YWluZXIgd2l0aCBmbG93IGxheW91dCB3aGVyZSB5b3UgY2FuIG1peCBxdWVzdGlvbnMgd2l0aCBtYXJrZG93biB0ZXh0LlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEZsb3dQYW5lbE1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbCB7XG4gIHN0YXRpYyBjb250ZW50RWxlbWVudE5hbWVQcmVmaXggPSBcImVsZW1lbnQ6XCI7XG4gIHB1YmxpYyBjb250ZW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgb25HZXRIdG1sRm9yUXVlc3Rpb246IChxdWVzdGlvbjogUXVlc3Rpb24pID0+IHN0cmluZztcbiAgcHVibGljIG9uQ3VzdG9tSHRtbFByb2R1Y2luZzogKCkgPT4gc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbnRlbnRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjb250ZW50XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYub25Db250ZW50Q2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZmxvd3BhbmVsXCI7XG4gIH1cbiAgZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZmxvd1wiO1xuICB9XG4gIG9uU3VydmV5TG9hZCgpOiBhbnkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMub25Db250ZW50Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbnRlbnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb250ZW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NDb250ZW50KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbnRlbnRcIik7XG4gIH1cbiAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImh0bWxcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaHRtbFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvbkNvbnRlbnRDaGFuZ2VkKCk6IGFueSB7XG4gICAgdmFyIGh0bWwgPSBcIlwiO1xuICAgIGlmICghIXRoaXMub25DdXN0b21IdG1sUHJvZHVjaW5nKSB7XG4gICAgICBodG1sID0gdGhpcy5vbkN1c3RvbUh0bWxQcm9kdWNpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbCA9IHRoaXMucHJvZHVjZUh0bWwoKTtcbiAgICB9XG4gICAgdGhpcy5odG1sID0gaHRtbDtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuY29udGVudENoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIHB1YmxpYyBwcm9kdWNlSHRtbCgpOiBzdHJpbmcge1xuICAgIHZhciBodG1sID0gW107XG4gICAgLy9jb250ZW50RWxlbWVudE5hbWVQcmVmaXhcbiAgICB2YXIgcmVnRXggPSAveyguKj8oZWxlbWVudDopW14kXS4qPyl9L2c7XG4gICAgdmFyIHN0ciA9IHRoaXMuY29udGVudDtcbiAgICB2YXIgc3RhcnRJbmRleCA9IDA7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgd2hpbGUgKChyZXMgPSByZWdFeC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICBpZiAocmVzLmluZGV4ID4gc3RhcnRJbmRleCkge1xuICAgICAgICBodG1sLnB1c2goc3RyLnN1YnN0cihzdGFydEluZGV4LCByZXMuaW5kZXggLSBzdGFydEluZGV4KSk7XG4gICAgICAgIHN0YXJ0SW5kZXggPSByZXMuaW5kZXg7XG4gICAgICB9XG4gICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uRnJvbVRleHQocmVzWzBdKTtcbiAgICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICAgIGh0bWwucHVzaCh0aGlzLmdldEh0bWxGb3JRdWVzdGlvbihxdWVzdGlvbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5wdXNoKFxuICAgICAgICAgIHN0ci5zdWJzdHIoc3RhcnRJbmRleCwgcmVzLmluZGV4ICsgcmVzWzBdLmxlbmd0aCAtIHN0YXJ0SW5kZXgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdGFydEluZGV4ID0gcmVzLmluZGV4ICsgcmVzWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0SW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgICBodG1sLnB1c2goc3RyLnN1YnN0cihzdGFydEluZGV4LCBzdHIubGVuZ3RoIC0gc3RhcnRJbmRleCkpO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbC5qb2luKFwiXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIjxicj5cIiwgXCJnXCIpLCBcIjxici8+XCIpO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21UZXh0KHN0cjogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHN0ciA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKEZsb3dQYW5lbE1vZGVsLmNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCwgXCJcIikudHJpbSgpO1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKHN0cik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEh0bWxGb3JRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMub25HZXRIdG1sRm9yUXVlc3Rpb24pIHJldHVybiB0aGlzLm9uR2V0SHRtbEZvclF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25IdG1sSWQocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJfXCIgKyBxdWVzdGlvbi5pZDtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgc3VwZXIub25BZGRFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgICB0aGlzLmFkZEVsZW1lbnRUb0NvbnRlbnQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5yZW5kZXJXaWR0aCA9IFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHZhciBzZWFyY2hTdHIgPSB0aGlzLmdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50KTtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZShzZWFyY2hTdHIsIFwiXCIpO1xuICAgIHN1cGVyLm9uUmVtb3ZlRWxlbWVudChlbGVtZW50KTtcbiAgfVxuICBkcmFnRHJvcE1vdmVFbGVtZW50KHNyYzogSUVsZW1lbnQsIHRhcmdldDogSUVsZW1lbnQsIHRhcmdldEluZGV4OiBudW1iZXIpIHt9XG4gIHByaXZhdGUgYWRkRWxlbWVudFRvQ29udGVudChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHRleHQgPSB0aGlzLmdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50KTtcbiAgICBpZiAoIXRoaXMuaW5zZXJ0VGV4dEF0Q3Vyc29yKHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQgKyB0ZXh0O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGluc2VydFRleHRBdEN1cnNvcih0ZXh0OiBzdHJpbmcsIHByZXZOYW1lOiBzdHJpbmcgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNEZXNpZ25Nb2RlIHx8XG4gICAgICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICF3aW5kb3cuZ2V0U2VsZWN0aW9uXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbC5nZXRSYW5nZUF0ICYmIHNlbC5yYW5nZUNvdW50KSB7XG4gICAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICByYW5nZS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICAgIHZhciBzZWxmID0gPGFueT50aGlzO1xuICAgICAgaWYgKHNlbGYuZ2V0Q29udGVudCkge1xuICAgICAgICB2YXIgc3RyID0gc2VsZi5nZXRDb250ZW50KHByZXZOYW1lKTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gc3RyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0RWxlbWVudENvbnRlbnRUZXh0KGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgcmV0dXJuIFwie1wiICsgRmxvd1BhbmVsTW9kZWwuY29udGVudEVsZW1lbnROYW1lUHJlZml4ICsgZWxlbWVudC5uYW1lICsgXCJ9XCI7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJmbG93cGFuZWxcIixcbiAgW3sgbmFtZTogXCJjb250ZW50Omh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbnRlbnRcIiB9XSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRmxvd1BhbmVsTW9kZWwoKTtcbiAgfSxcbiAgXCJwYW5lbFwiXG4pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRnVuY3Rpb25GYWN0b3J5ID0gbmV3IEZ1bmN0aW9uRmFjdG9yeSgpO1xuICBwcml2YXRlIGZ1bmN0aW9uSGFzaDogSGFzaFRhYmxlPChwYXJhbXM6IGFueVtdKSA9PiBhbnk+ID0ge307XG4gIHByaXZhdGUgaXNBc3luY0hhc2g6IEhhc2hUYWJsZTxib29sZWFuPiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZnVuYzogKHBhcmFtczogYW55W10pID0+IGFueSxcbiAgICBpc0FzeW5jOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV0gPSBmdW5jO1xuICAgIGlmIChpc0FzeW5jKSB0aGlzLmlzQXN5bmNIYXNoW25hbWVdID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdW5yZWdpc3RlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV07XG4gICAgZGVsZXRlIHRoaXMuaXNBc3luY0hhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIGhhc0Z1bmN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICB9XG4gIHB1YmxpYyBpc0FzeW5jRnVuY3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pc0FzeW5jSGFzaFtuYW1lXTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmZ1bmN0aW9uSGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRBbGwoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmZ1bmN0aW9uSGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIHJ1bihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBhbnlbXSxcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYW55IHtcbiAgICB2YXIgZnVuYyA9IHRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICAgIGlmICghZnVuYykgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNsYXNzUnVubmVyID0ge1xuICAgICAgZnVuYzogZnVuYyxcbiAgICB9O1xuXG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICg8YW55PmNsYXNzUnVubmVyKVtrZXldID0gcHJvcGVydGllc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2xhc3NSdW5uZXIuZnVuYyhwYXJhbXMpO1xuICB9XG59XG5cbmV4cG9ydCB2YXIgcmVnaXN0ZXJGdW5jdGlvbiA9IEZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcjtcblxuZnVuY3Rpb24gZ2V0UGFyYW1zQXNBcnJheSh2YWx1ZTogYW55LCBhcnI6IGFueVtdKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdldFBhcmFtc0FzQXJyYXkodmFsdWVbaV0sIGFycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChIZWxwZXJzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgYXJyLnB1c2godmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1bShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHZhciByZXMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIHJlcyArPSBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcInN1bVwiLCBzdW0pO1xuXG5mdW5jdGlvbiBtaW5fbWF4KHBhcmFtczogYW55W10sIGlzTWluOiBib29sZWFuKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHZhciByZXMgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXMgPSBhcnJbaV07XG4gICAgfVxuICAgIGlmIChpc01pbikge1xuICAgICAgaWYgKHJlcyA+IGFycltpXSkgcmVzID0gYXJyW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzIDwgYXJyW2ldKSByZXMgPSBhcnJbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIG1pbihwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgcmV0dXJuIG1pbl9tYXgocGFyYW1zLCB0cnVlKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1pblwiLCBtaW4pO1xuXG5mdW5jdGlvbiBtYXgocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBtaW5fbWF4KHBhcmFtcywgZmFsc2UpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4XCIsIG1heCk7XG5cbmZ1bmN0aW9uIGNvdW50KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgYXJyOiBhbnlbXSA9IFtdO1xuICBnZXRQYXJhbXNBc0FycmF5KHBhcmFtcywgYXJyKTtcbiAgcmV0dXJuIGFyci5sZW5ndGg7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJjb3VudFwiLCBjb3VudCk7XG5cbmZ1bmN0aW9uIGF2ZyhwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHZhciByZXMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIHJlcyArPSBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIGFyci5sZW5ndGggPiAwID8gcmVzIC8gYXJyLmxlbmd0aCA6IDA7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJhdmdcIiwgYXZnKTtcblxuZnVuY3Rpb24gZ2V0SW5BcnJheVBhcmFtcyhwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKHBhcmFtcy5sZW5ndGggIT0gMikgcmV0dXJuIG51bGw7XG4gIHZhciBhcnIgPSBwYXJhbXNbMF07XG4gIGlmICghYXJyKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikgJiYgIUFycmF5LmlzQXJyYXkoT2JqZWN0LmtleXMoYXJyKSkpIHJldHVybiBudWxsO1xuICB2YXIgbmFtZSA9IHBhcmFtc1sxXTtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiICYmICEobmFtZSBpbnN0YW5jZW9mIFN0cmluZykpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBkYXRhOiBhcnIsIG5hbWU6IG5hbWUgfTtcbn1cblxuZnVuY3Rpb24gY2FsY0luQXJyYXkoXG4gIHBhcmFtczogYW55W10sXG4gIGZ1bmM6IChyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpID0+IG51bWJlclxuKTogYW55IHtcbiAgdmFyIHYgPSBnZXRJbkFycmF5UGFyYW1zKHBhcmFtcyk7XG4gIGlmICghdikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdmFyIHJlcyA9IHVuZGVmaW5lZDtcbiAgaWYgKEFycmF5LmlzQXJyYXkodi5kYXRhKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdi5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHYuZGF0YVtpXTtcbiAgICAgIGlmICghIWl0ZW0gJiYgaXRlbVs8c3RyaW5nPnYubmFtZV0pIHtcbiAgICAgICAgcmVzID0gZnVuYyhyZXMsIGl0ZW1bPHN0cmluZz52Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHYuZGF0YSkge1xuICAgICAgdmFyIGl0ZW0gPSB2LmRhdGFba2V5XTtcbiAgICAgIGlmICghIWl0ZW0gJiYgaXRlbVs8c3RyaW5nPnYubmFtZV0pIHtcbiAgICAgICAgcmVzID0gZnVuYyhyZXMsIGl0ZW1bPHN0cmluZz52Lm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gc3VtSW5BcnJheShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIHJlcyA9IGNhbGNJbkFycmF5KHBhcmFtcywgZnVuY3Rpb24ocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmVzID09IHVuZGVmaW5lZCkgcmVzID0gMDtcbiAgICByZXR1cm4gK3JlcyArICt2YWw7XG4gIH0pO1xuICByZXR1cm4gcmVzICE9PSB1bmRlZmluZWQgPyByZXMgOiAwO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwic3VtSW5BcnJheVwiLCBzdW1JbkFycmF5KTtcblxuZnVuY3Rpb24gbWluSW5BcnJheShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgcmV0dXJuIGNhbGNJbkFycmF5KHBhcmFtcywgZnVuY3Rpb24ocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmVzID09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gcmVzIDwgdmFsID8gcmVzIDogdmFsO1xuICB9KTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1pbkluQXJyYXlcIiwgbWluSW5BcnJheSk7XG5cbmZ1bmN0aW9uIG1heEluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHJlcyA+IHZhbCA/IHJlcyA6IHZhbDtcbiAgfSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtYXhJbkFycmF5XCIsIG1heEluQXJyYXkpO1xuXG5mdW5jdGlvbiBjb3VudEluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciByZXMgPSBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJlcyA9IDA7XG4gICAgcmV0dXJuIHJlcyArIDE7XG4gIH0pO1xuICByZXR1cm4gcmVzICE9PSB1bmRlZmluZWQgPyByZXMgOiAwO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY291bnRJbkFycmF5XCIsIGNvdW50SW5BcnJheSk7XG5cbmZ1bmN0aW9uIGF2Z0luQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBjb3VudCA9IGNvdW50SW5BcnJheShwYXJhbXMpO1xuICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIDA7XG4gIHJldHVybiBzdW1JbkFycmF5KHBhcmFtcykgLyBjb3VudDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImF2Z0luQXJyYXlcIiwgYXZnSW5BcnJheSk7XG5cbmZ1bmN0aW9uIGlpZihwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCAhPT0gMykgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBwYXJhbXNbMF0gPyBwYXJhbXNbMV0gOiBwYXJhbXNbMl07XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJpaWZcIiwgaWlmKTtcblxuZnVuY3Rpb24gZ2V0RGF0ZShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBudWxsO1xuICBpZiAoIXBhcmFtc1swXSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBuZXcgRGF0ZShwYXJhbXNbMF0pO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiZ2V0RGF0ZVwiLCBnZXREYXRlKTtcblxuZnVuY3Rpb24gYWdlKHBhcmFtczogYW55W10pOiBhbnkge1xuICBpZiAoIXBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG4gIGlmICghcGFyYW1zWzBdKSByZXR1cm4gbnVsbDtcbiAgdmFyIGJpcnRoRGF0ZSA9IG5ldyBEYXRlKHBhcmFtc1swXSk7XG4gIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIHZhciBhZ2UgPSB0b2RheS5nZXRGdWxsWWVhcigpIC0gYmlydGhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtID0gdG9kYXkuZ2V0TW9udGgoKSAtIGJpcnRoRGF0ZS5nZXRNb250aCgpO1xuICBpZiAobSA8IDAgfHwgKG0gPT09IDAgJiYgdG9kYXkuZ2V0RGF0ZSgpIDwgYmlydGhEYXRlLmdldERhdGUoKSkpIHtcbiAgICBhZ2UgLT0gYWdlID4gMCA/IDEgOiAwO1xuICB9XG4gIHJldHVybiBhZ2U7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJhZ2VcIiwgYWdlKTtcblxuZnVuY3Rpb24gaXNDb250YWluZXJSZWFkeShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFwYXJhbXNbMF0gfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gZmFsc2U7XG4gIHZhciBuYW1lID0gcGFyYW1zWzBdO1xuICB2YXIgY29udGFpbmVyID0gdGhpcy5zdXJ2ZXkuZ2V0UGFnZUJ5TmFtZShuYW1lKTtcbiAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IHRoaXMuc3VydmV5LmdldFBhbmVsQnlOYW1lKG5hbWUpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIGZhbHNlO1xuICB2YXIgcXVlc3Rpb25zID0gY29udGFpbmVyLnF1ZXN0aW9ucztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocXVlc3Rpb25zW2ldLmhhc0Vycm9ycyhmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlzQ29udGFpbmVyUmVhZHlcIiwgaXNDb250YWluZXJSZWFkeSk7XG5cbmZ1bmN0aW9uIGlzRGlzcGxheU1vZGUoKSB7XG4gIHJldHVybiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiaXNEaXNwbGF5TW9kZVwiLCBpc0Rpc3BsYXlNb2RlKTtcblxuZnVuY3Rpb24gY3VycmVudERhdGUoKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY3VycmVudERhdGVcIiwgY3VycmVudERhdGUpO1xuXG5mdW5jdGlvbiB0b2RheShwYXJhbXM6IGFueVtdKSB7XG4gIHZhciByZXMgPSBuZXcgRGF0ZSgpO1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpICYmIHBhcmFtcy5sZW5ndGggPT0gMSkge1xuICAgIHJlcy5zZXREYXRlKHJlcy5nZXREYXRlKCkgKyBwYXJhbXNbMF0pO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJ0b2RheVwiLCB0b2RheSk7XG5cbmZ1bmN0aW9uIGRpZmZEYXlzKHBhcmFtczogYW55W10pIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgcGFyYW1zLmxlbmd0aCAhPT0gMikgcmV0dXJuIDA7XG4gIGlmICghcGFyYW1zWzBdIHx8ICFwYXJhbXNbMV0pIHJldHVybiAwO1xuICBjb25zdCBkYXRlMTogYW55ID0gbmV3IERhdGUocGFyYW1zWzBdKTtcbiAgY29uc3QgZGF0ZTI6IGFueSA9IG5ldyBEYXRlKHBhcmFtc1sxXSk7XG4gIGNvbnN0IGRpZmZUaW1lID0gTWF0aC5hYnMoZGF0ZTIgLSBkYXRlMSk7XG4gIHJldHVybiBNYXRoLmNlaWwoZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiZGlmZkRheXNcIiwgZGlmZkRheXMpO1xuIiwiZXhwb3J0IGludGVyZmFjZSBIYXNoVGFibGU8VD4ge1xuICBba2V5OiBzdHJpbmddOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgSGVscGVycyB7XG4gIC8qKlxuICAgKiBBIHN0YXRpYyBtZXRob2RzIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgdW5kZXJmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWx1ZUVtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIXZhbHVlICYmIHZhbHVlICE9PSAwICYmIHZhbHVlICE9PSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXlDb250YWluc0VxdWFsKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGogPSAwO1xuICAgICAgZm9yICg7IGogPCB5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeFtpXSwgeVtqXSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNBcnJheXNFcXVhbChcbiAgICB4OiBhbnksXG4gICAgeTogYW55LFxuICAgIGlnbm9yZU9yZGVyOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpZ25vcmVPcmRlcikge1xuICAgICAgdmFyIHhTb3J0ZWQgPSBbXTtcbiAgICAgIHZhciB5U29ydGVkID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeFNvcnRlZC5wdXNoKHhbaV0pO1xuICAgICAgICB5U29ydGVkLnB1c2goeVtpXSk7XG4gICAgICB9XG4gICAgICB4U29ydGVkLnNvcnQoKTtcbiAgICAgIHlTb3J0ZWQuc29ydCgpO1xuICAgICAgeCA9IHhTb3J0ZWQ7XG4gICAgICB5ID0geVNvcnRlZDtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4W2ldLCB5W2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzVHdvVmFsdWVFcXVhbHMoXG4gICAgeDogYW55LFxuICAgIHk6IGFueSxcbiAgICBpZ25vcmVPcmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh4ID09PSB5KSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHgubGVuZ3RoID09PSAwICYmIHR5cGVvZiB5ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeSkgJiYgeS5sZW5ndGggPT09IDAgJiYgdHlwZW9mIHggPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoKHggPT09IHVuZGVmaW5lZCB8fCB4ID09PSBudWxsKSAmJiB5ID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoKHkgPT09IHVuZGVmaW5lZCB8fCB5ID09PSBudWxsKSAmJiB4ID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgeSA9PSBcInN0cmluZ1wiKSByZXR1cm4geCA9PSB5O1xuXG4gICAgaWYgKEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHgpICYmIEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHkpKSB7XG4gICAgICBpZiAocGFyc2VJbnQoeCkgPT09IHBhcnNlSW50KHkpICYmIHBhcnNlRmxvYXQoeCkgPT09IHBhcnNlRmxvYXQoeSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh5KSkgfHxcbiAgICAgIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkoeSkpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgoeCA9PT0gdHJ1ZSB8fCB4ID09PSBmYWxzZSkgJiYgdHlwZW9mIHkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHgudG9TdHJpbmcoKSA9PT0geS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoKHkgPT09IHRydWUgfHwgeSA9PT0gZmFsc2UpICYmIHR5cGVvZiB4ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB5LnRvU3RyaW5nKCkgPT09IHgudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgJiYgISh5IGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIHggPT0geTtcbiAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHhbXCJlcXVhbHNcIl0pIHJldHVybiB4LmVxdWFscyh5KTtcbiAgICBpZiAoISF4LnRvSlNPTiAmJiAhIXkudG9KU09OICYmICEheC5nZXRUeXBlICYmICEheS5nZXRUeXBlKSB7XG4gICAgICBpZiAoeC5pc0RpcG9zZWQgfHwgeS5pc0RpcG9zZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh4LmdldFR5cGUoKSAhPT0geS5nZXRUeXBlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghIXgubmFtZSAmJiB4Lm5hbWUgIT09IHkubmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh4LnRvSlNPTigpLCB5LnRvSlNPTigpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkgJiYgQXJyYXkuaXNBcnJheSh5KSlcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzQXJyYXlzRXF1YWwoeCwgeSwgaWdub3JlT3JkZXIpO1xuXG4gICAgZm9yICh2YXIgcCBpbiB4KSB7XG4gICAgICBpZiAoIXguaGFzT3duUHJvcGVydHkocCkpIGNvbnRpbnVlO1xuICAgICAgaWYgKCF5Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoeFtwXSA9PT0geVtwXSkgY29udGludWU7XG4gICAgICBpZiAodHlwZW9mIHhbcF0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHhbcF0sIHlbcF0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAocCBpbiB5KSB7XG4gICAgICBpZiAoeS5oYXNPd25Qcm9wZXJ0eShwKSAmJiAheC5oYXNPd25Qcm9wZXJ0eShwKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJhbmRvbWl6ZUFycmF5PFQ+KGFycmF5OiBBcnJheTxUPik6IEFycmF5PFQ+IHtcbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcbiAgICAgIHZhciB0ZW1wID0gYXJyYXlbaV07XG4gICAgICBhcnJheVtpXSA9IGFycmF5W2pdO1xuICAgICAgYXJyYXlbal0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRVbmJpbmRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgLy9kbyBub3QgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBpbnN0YW5jZSEhIVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ29weShvYmo6IGFueSkge1xuICAgIHZhciByZXM6IGFueSA9IHt9O1xuICAgIGlmICghb2JqKSByZXR1cm4gcmVzO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHJlc1trZXldID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NvbnZlcnRpYmxlVG9OdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAhaXNOYU4odmFsdWUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgdmFsdWUuaW5kZXhPZihcIjB4XCIpID09IDAgJiZcbiAgICAgIHZhbHVlLmxlbmd0aCA+IDMyXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE1heExlbmd0aChtYXhMZW5ndGg6IG51bWJlciwgc3VydmV5TGVuZ3RoOiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChtYXhMZW5ndGggPCAwKSB7XG4gICAgICBtYXhMZW5ndGggPSBzdXJ2ZXlMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBtYXhMZW5ndGggPiAwID8gbWF4TGVuZ3RoIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE51bWJlckJ5SW5kZXgoaW5kZXg6IG51bWJlciwgc3RhcnRJbmRleFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgc3RhcnRJbmRleCA9IDE7XG4gICAgdmFyIHByZWZpeCA9IFwiXCI7XG4gICAgdmFyIHBvc3RmaXggPSBcIi5cIjtcbiAgICB2YXIgaXNOdW1lcmljID0gdHJ1ZTtcbiAgICB2YXIgc3RySW5kZXggPSBcIkFcIjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICBpZiAoISFzdGFydEluZGV4U3RyKSB7XG4gICAgICBzdHIgPSBzdGFydEluZGV4U3RyO1xuICAgICAgdmFyIGluZCA9IHN0ci5sZW5ndGggLSAxO1xuICAgICAgdmFyIGhhc0RpZ2l0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoSGVscGVycy5pc0NoYXJEaWdpdChzdHJbaV0pKSB7XG4gICAgICAgICAgaGFzRGlnaXQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hlY2tMZXR0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaGFzRGlnaXQgJiYgIUhlbHBlcnMuaXNDaGFyRGlnaXQoc3RyW2luZF0pKSB8fFxuICAgICAgICAgIEhlbHBlcnMuaXNDaGFyTm90TGV0dGVyQW5kRGlnaXQoc3RyW2luZF0pXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgd2hpbGUgKGluZCA+PSAwICYmIGNoZWNrTGV0dGVyKCkpIGluZC0tO1xuICAgICAgdmFyIG5ld1Bvc3RmaXggPSBcIlwiO1xuICAgICAgaWYgKGluZCA8IHN0ci5sZW5ndGggLSAxKSB7XG4gICAgICAgIG5ld1Bvc3RmaXggPSBzdHIuc3Vic3RyKGluZCArIDEpO1xuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIGluZCArIDEpO1xuICAgICAgfVxuICAgICAgaW5kID0gc3RyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaW5kID49IDApIHtcbiAgICAgICAgaWYgKGNoZWNrTGV0dGVyKCkpIGJyZWFrO1xuICAgICAgICBpbmQtLTtcbiAgICAgICAgaWYgKCFoYXNEaWdpdCkgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdHJJbmRleCA9IHN0ci5zdWJzdHIoaW5kICsgMSk7XG4gICAgICBwcmVmaXggPSBzdHIuc3Vic3RyKDAsIGluZCArIDEpO1xuICAgICAgaWYgKHBhcnNlSW50KHN0ckluZGV4KSkgc3RhcnRJbmRleCA9IHBhcnNlSW50KHN0ckluZGV4KTtcbiAgICAgIGVsc2UgaWYgKHN0ckluZGV4Lmxlbmd0aCA9PSAxKSBpc051bWVyaWMgPSBmYWxzZTtcbiAgICAgIGlmICghIW5ld1Bvc3RmaXggfHwgISFwcmVmaXgpIHtcbiAgICAgICAgcG9zdGZpeCA9IG5ld1Bvc3RmaXg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc051bWVyaWMpIHJldHVybiBwcmVmaXggKyAoaW5kZXggKyBzdGFydEluZGV4KS50b1N0cmluZygpICsgcG9zdGZpeDtcbiAgICByZXR1cm4gKFxuICAgICAgcHJlZml4ICsgU3RyaW5nLmZyb21DaGFyQ29kZShzdHJJbmRleC5jaGFyQ29kZUF0KDApICsgaW5kZXgpICsgcG9zdGZpeFxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NoYXJOb3RMZXR0ZXJBbmREaWdpdChjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoLnRvVXBwZXJDYXNlKCkgPT0gY2gudG9Mb3dlckNhc2UoKSAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChjaCk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0NoYXJEaWdpdChjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoID49IFwiMFwiICYmIGNoIDw9IFwiOVwiO1xuICB9XG59XG5pZiAoISg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdKSB7XG4gICg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24obWF0Y2g6IGFueSwgbnVtYmVyOiBhbnkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9IFwidW5kZWZpbmVkXCIgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgQmFzZSwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBcnJheSBvZiBJdGVtVmFsdWUgaXMgdXNlZCBpbiBjaGVja294LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBjaG9pY2VzLCBtYXRyaXggY29sdW1ucyBhbmQgcm93cy5cbiAqIEl0IGhhcyB0d28gbWFpbiBwcm9wZXJ0aWVzOiB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdmFsdWUgaXMgdXNlZCBmb3IgZGlzcGxheWluZy5cbiAqIFRoZSB0ZXh0IHByb3BlcnR5IGlzIGxvY2FsaXphYmxlIGFuZCBzdXBwb3J0IG1hcmtkb3duLlxuICovXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwdWJsaWMgc3RhdGljIGdldCBTZXBhcmF0b3IoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvcjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBTZXBhcmF0b3IodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5pdGVtVmFsdWVTZXBhcmF0b3IgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVBcnJheShsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcbiAgICBJdGVtVmFsdWUuc2V0dXBBcnJheShpdGVtcywgbG9jT3duZXIpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldHVwQXJyYXkoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyXG4gICkge1xuICAgIGl0ZW1zLnB1c2ggPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnVuc2hpZnQgPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnNwbGljZSA9IGZ1bmN0aW9uKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBJdGVtVmFsdWVbXVxuICAgICk6IEl0ZW1WYWx1ZVtdIHtcbiAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgLi4uaXRlbXNcbiAgICAgICk7XG4gICAgICBpZiAoIWl0ZW1zKSBpdGVtcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgdmFyIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGl0ZW0gPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHZhbHVlLmdldFR5cGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIGl0ZW0uc2V0RGF0YSh2YWx1ZSk7XG4gICAgICBpZiAoISF2YWx1ZS5vcmlnaW5hbEl0ZW0pIHtcbiAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSB2YWx1ZS5vcmlnaW5hbEl0ZW07XG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBhbnkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpdGVtc1tpXS5nZXREYXRhKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbUJ5VmFsdWUoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbDogYW55KTogSXRlbVZhbHVlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKGl0ZW1zW2ldLnZhbHVlLCB2YWwpKSByZXR1cm4gaXRlbXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgdmFsOiBhbnlcbiAgKTogc3RyaW5nIHtcbiAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICByZXR1cm4gaXRlbSAhPT0gbnVsbCA/IGl0ZW0ubG9jVGV4dC50ZXh0T3JIdG1sIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGxvY1N0cnNDaGFuZ2VkKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbXNbaV0ubG9jVGV4dC5zdHJDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzdGF0aWMgcnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIGZpbHRlcmVkSXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgcnVubmVyOiBDb25kaXRpb25SdW5uZXIsXG4gICAgdmFsdWVzOiBhbnksXG4gICAgcHJvcGVydGllczogYW55LFxuICAgIHVzZUl0ZW1FeHByZXNzaW9uOiBib29sZWFuID0gdHJ1ZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgICBpdGVtcyxcbiAgICAgIGZpbHRlcmVkSXRlbXMsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdHJ1ZSxcbiAgICAgIHVzZUl0ZW1FeHByZXNzaW9uXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJ1bkVuYWJsZWRDb25kaXRpb25zRm9ySXRlbXMoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgcnVubmVyOiBDb25kaXRpb25SdW5uZXIsXG4gICAgdmFsdWVzOiBhbnksXG4gICAgcHJvcGVydGllczogYW55LFxuICAgIG9uSXRlbUNhbGxCYWNrPzogKGl0ZW06IEl0ZW1WYWx1ZSkgPT4gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgICBpdGVtcyxcbiAgICAgIG51bGwsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlLFxuICAgICAgb25JdGVtQ2FsbEJhY2tcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIHJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgZmlsdGVyZWRJdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgaXNWaXNpYmxlOiBib29sZWFuLFxuICAgIHVzZUl0ZW1FeHByZXNzaW9uOiBib29sZWFuID0gdHJ1ZSxcbiAgICBvbkl0ZW1DYWxsQmFjaz86IChpdGVtOiBJdGVtVmFsdWUpID0+IGJvb2xlYW5cbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IHt9O1xuICAgIH1cbiAgICB2YXIgaXRlbVZhbHVlID0gdmFsdWVzW1wiaXRlbVwiXTtcbiAgICB2YXIgY2hvaWNlVmFsdWUgPSB2YWx1ZXNbXCJjaG9pY2VcIl07XG4gICAgdmFyIGhhc0NoYW5kZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdmFsdWVzW1wiaXRlbVwiXSA9IGl0ZW0udmFsdWU7XG4gICAgICB2YWx1ZXNbXCJjaG9pY2VcIl0gPSBpdGVtLnZhbHVlO1xuICAgICAgdmFyIGl0ZW1SdW5uZXIgPVxuICAgICAgICB1c2VJdGVtRXhwcmVzc2lvbiAmJiAhIWl0ZW0uZ2V0Q29uZGl0aW9uUnVubmVyXG4gICAgICAgICAgPyBpdGVtLmdldENvbmRpdGlvblJ1bm5lcihpc1Zpc2libGUpXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIGlmICghaXRlbVJ1bm5lcikge1xuICAgICAgICBpdGVtUnVubmVyID0gcnVubmVyO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1ZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmIChpdGVtUnVubmVyKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXRlbVJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAhIW9uSXRlbUNhbGxCYWNrKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb25JdGVtQ2FsbEJhY2soaXRlbSk7XG4gICAgICB9XG4gICAgICBpZiAoISFmaWx0ZXJlZEl0ZW1zICYmIG5ld1ZhbHVlKSB7XG4gICAgICAgIGZpbHRlcmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHZhciBvbGRWYWx1ZSA9IGlzVmlzaWJsZSA/IGl0ZW0uaXNWaXNpYmxlIDogaXRlbS5pc0VuYWJsZWQ7XG4gICAgICBpZiAobmV3VmFsdWUgIT0gb2xkVmFsdWUpIHtcbiAgICAgICAgaGFzQ2hhbmRlZCA9IHRydWU7XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICBpZiAoISFpdGVtLnNldElzVmlzaWJsZSkgaXRlbS5zZXRJc1Zpc2libGUobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghIWl0ZW0uc2V0SXNFbmFibGVkKSBpdGVtLnNldElzRW5hYmxlZChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgdmFsdWVzW1wiaXRlbVwiXSA9IGl0ZW1WYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlc1tcIml0ZW1cIl07XG4gICAgfVxuICAgIGlmIChjaG9pY2VWYWx1ZSkge1xuICAgICAgdmFsdWVzW1wiY2hvaWNlXCJdID0gY2hvaWNlVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNbXCJjaG9pY2VcIl07XG4gICAgfVxuICAgIHJldHVybiBoYXNDaGFuZGVkO1xuICB9XG4gIHB1YmxpYyBvd25lclByb3BlcnR5TmFtZTogc3RyaW5nID0gXCJcIjtcbiAgLy9wcml2YXRlIGl0ZW1WYWx1ZTogYW55O1xuICBwcml2YXRlIGxvY1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHByaXZhdGUgaXNWaXNpYmxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIHZpc2libGVDb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgcHJpdmF0ZSBlbmFibGVDb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogYW55LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIHR5cGVOYW1lID0gXCJpdGVtdmFsdWVcIlxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9jVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKG51bGwsIHRydWUpO1xuICAgIHRoaXMubG9jVGV4dFZhbHVlLm9uU3RyQ2hhbmdlZCA9IChvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV3VmFsdWUgPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ0ZXh0XCIsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmxvY1RleHRWYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9IHR4dCA9PiB7XG4gICAgICByZXR1cm4gdHh0XG4gICAgICAgID8gdHh0XG4gICAgICAgIDogIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpXG4gICAgICAgID8gdGhpcy52YWx1ZS50b1N0cmluZygpXG4gICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIGlmICh0ZXh0KSB0aGlzLmxvY1RleHQudGV4dCA9IHRleHQ7XG4gICAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLnNldERhdGEodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFR5cGUoKSAhPSBcIml0ZW12YWx1ZVwiKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNyZWF0aW5nKCk6IGFueSB7fVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgJiYgISEoPGFueT50aGlzLmxvY093bmVyKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmxvY093bmVyKS5nZXRTdXJ2ZXkoKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMubG9jVGV4dCAmJiB0aGlzLmxvY1RleHQubG9jYWxlKSB8fCBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dFZhbHVlO1xuICB9XG4gIHNldExvY1RleHQobG9jVGV4dDogTG9jYWxpemFibGVTdHJpbmcpIHtcbiAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IGxvY1RleHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NPd25lcigpOiBJTG9jYWxpemFibGVPd25lciB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5vd25lcjtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY093bmVyKHZhbHVlOiBJTG9jYWxpemFibGVPd25lcikge1xuICAgIHRoaXMubG9jVGV4dC5vd25lciA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdmFyIHRleHQ6IHN0cmluZyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgdmFyIHN0cjogc3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHZhciBpbmRleCA9IHN0ci5pbmRleE9mKHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvcik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHN0ci5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIHRleHQgPSBzdHIuc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgbmV3VmFsdWUpO1xuICAgIGlmICghIXRleHQpIHtcbiAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LnB1cmVUZXh0ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgcHVyZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LnB1cmVUZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgcHVyZVRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRleHQgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5jYWxjdWxhdGVkVGV4dDsgLy9UT0RPOiBpdCB3aWxsIGJlIGNvcnJlY3QgdG8gdXNlIHRoaXMubG9jVGV4dC50ZXh0LCBob3dldmVyIGl0IHdvdWxkIHJlcXVpcmUgYSBsb3Qgb2YgcmV3cml0aW5nIGluIENyZWF0b3JcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQobmV3VGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUZXh0LnRleHQgPSBuZXdUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5jYWxjdWxhdGVkVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YSgpOiBhbnkge1xuICAgIHZhciBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICBpZiAoISFqc29uW1widmFsdWVcIl0gJiYgISFqc29uW1widmFsdWVcIl1bXCJwb3NcIl0pIHtcbiAgICAgIGRlbGV0ZSBqc29uW1widmFsdWVcIl1bXCJwb3NcIl07XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhqc29uKS5sZW5ndGggPT0gMSAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkoanNvbltcInZhbHVlXCJdKSlcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXModGhpcy5nZXRUeXBlKCkpO1xuICAgIGlmICghcHJvcGVydGllcyB8fCBwcm9wZXJ0aWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBwcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzKFwiaXRlbXZhbHVlXCIpO1xuICAgIH1cbiAgICB2YXIganNvT2JqID0gbmV3IEpzb25PYmplY3QoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGpzb09iai52YWx1ZVRvSnNvbih0aGlzLCByZXMsIHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzZXREYXRhKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdmFyIGpzb24gPSB2YWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUudG9KU09OID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAganNvbiA9ICg8QmFzZT52YWx1ZSkudG9KU09OKCk7XG4gICAgICB9XG4gICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldElzVmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVmlzaWJsZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldElzRW5hYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyh0aGlzLmxvY1RleHRWYWx1ZSwgbG9jYWxlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKG5hbWUgPT09IFwidmFsdWVcIiAmJiAhdGhpcy5oYXNUZXh0KSB7XG4gICAgICB0aGlzLmxvY1RleHQub25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIHZhciBmdW5jTmFtZSA9IFwiaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkXCI7XG4gICAgaWYgKCF0aGlzLmxvY093bmVyIHx8ICEoPGFueT50aGlzLmxvY093bmVyKVtmdW5jTmFtZV0pIHJldHVybjtcbiAgICAoPGFueT50aGlzLmxvY093bmVyKVtmdW5jTmFtZV0odGhpcywgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZTogYm9vbGVhbikge1xuICAgIGlmIChpc1Zpc2libGUpIHJldHVybiB0aGlzLmdldFZpc2libGVDb25kaXRpb25SdW5uZXIoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRFbmFibGVDb25kaXRpb25SdW5uZXIoKTtcbiAgfVxuICBwcml2YXRlIGdldFZpc2libGVDb25kaXRpb25SdW5uZXIoKTogQ29uZGl0aW9uUnVubmVyIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xuICAgIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbmRpdGlvblJ1bm5lcjtcbiAgfVxuICBwcml2YXRlIGdldEVuYWJsZUNvbmRpdGlvblJ1bm5lcigpOiBDb25kaXRpb25SdW5uZXIge1xuICAgIGlmICghdGhpcy5lbmFibGVJZikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmVuYWJsZUlmKTtcbiAgICB0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5lbmFibGVJZjtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXI7XG4gIH1cbiAgcHVibGljIG9yaWdpbmFsSXRlbTogYW55O1xufVxuXG5CYXNlLmNyZWF0ZUl0ZW1WYWx1ZSA9IGZ1bmN0aW9uKHNvdXJjZTogYW55LCB0eXBlPzogc3RyaW5nKTogYW55IHtcbiAgdmFyIGl0ZW0gPSBudWxsO1xuICBpZiAoISF0eXBlKSB7XG4gICAgaXRlbSA9IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3ModHlwZSwge30pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2UuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaXRlbSA9IG5ldyBJdGVtVmFsdWUobnVsbCwgdW5kZWZpbmVkLCBzb3VyY2UuZ2V0VHlwZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgfVxuICBpdGVtLnNldERhdGEoc291cmNlKTtcbiAgcmV0dXJuIGl0ZW07XG59O1xuQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkID0gZnVuY3Rpb24oYXJyOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZChhcnIpO1xufTtcbkpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odmFsOiBhbnkpOiBhbnkge1xuICB2YXIgcmVzID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgSXRlbVZhbHVlLnNldERhdGEocmVzLCB2YWwgfHwgW10pO1xuICByZXR1cm4gcmVzO1xufTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpdGVtdmFsdWVcIixcbiAgW1xuICAgIFwiIXZhbHVlXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInZpc2libGVJZjpjb25kaXRpb25cIiwgc2hvd01vZGU6IFwiZm9ybVwiIH0sXG4gICAgeyBuYW1lOiBcImVuYWJsZUlmOmNvbmRpdGlvblwiLCBzaG93TW9kZTogXCJmb3JtXCIgfSxcbiAgXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJdGVtVmFsdWUodmFsdWUpXG4pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMge1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIGRlZmF1bHRTb3VyY2U/OiBzdHJpbmc7XG4gIGxvY2FsaXphYmxlPzpcbiAgICB8IHsgbmFtZTogc3RyaW5nOyBvbkdldFRleHRDYWxsYmFjaz86IChzdHI6IHN0cmluZykgPT4gc3RyaW5nIH1cbiAgICB8IGJvb2xlYW47XG4gIG9uU2V0PzogKHZhbDogYW55LCB0YXJnZXQ6IGFueSkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZW5zdXJlTG9jU3RyaW5nKFxuICB0YXJnZXQ6IGFueSxcbiAgb3B0aW9uczogSVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucyxcbiAga2V5OiBzdHJpbmdcbikge1xuICBsZXQgbG9jU3RyaW5nID0gdGFyZ2V0LmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gIGlmICghbG9jU3RyaW5nKSB7XG4gICAgbG9jU3RyaW5nID0gdGFyZ2V0LmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKGtleSwgdGFyZ2V0LCB0cnVlKTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5sb2NhbGl6YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUub25HZXRUZXh0Q2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgbG9jU3RyaW5nLm9uR2V0VGV4dENhbGxiYWNrID0gb3B0aW9ucy5sb2NhbGl6YWJsZS5vbkdldFRleHRDYWxsYmFjaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5KG9wdGlvbnM/OiBJUHJvcGVydHlEZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubG9jYWxpemFibGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleSk7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHRWYWx1ZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gISFvcHRpb25zXG4gICAgICAgICAgICA/IG9wdGlvbnMuZGVmYXVsdFZhbHVlIHx8IHRoaXNbb3B0aW9ucy5kZWZhdWx0U291cmNlXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoa2V5LCB2YWwpO1xuICAgICAgICAgIGlmICghIW9wdGlvbnMgJiYgb3B0aW9ucy5vblNldCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vblNldCh2YWwsIHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbnN1cmVMb2NTdHJpbmcodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoa2V5KSB8fFxuICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgICAgIHRoaXNbb3B0aW9ucy5kZWZhdWx0U291cmNlXVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgICBlbnN1cmVMb2NTdHJpbmcodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChrZXksIHZhbCk7XG4gICAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiBvcHRpb25zLm9uU2V0KSB7XG4gICAgICAgICAgICBvcHRpb25zLm9uU2V0KHZhbCwgdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgb3B0aW9ucy5sb2NhbGl6YWJsZSA9PT0gdHJ1ZVxuICAgICAgICAgID8gXCJsb2NcIiArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKVxuICAgICAgICAgIDogb3B0aW9ucy5sb2NhbGl6YWJsZS5uYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGVuc3VyZUxvY1N0cmluZyh0aGlzLCBvcHRpb25zLCBrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXJyYXlQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMge1xuICBvblB1c2g/OiBhbnk7XG4gIG9uUmVtb3ZlPzogYW55O1xuICBvblNldD86ICh2YWw6IGFueSwgdGFyZ2V0OiBhbnkpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUFycmF5KFxuICB0YXJnZXQ6IGFueSxcbiAgb3B0aW9uczogSUFycmF5UHJvcGVydHlEZWNvcmF0b3JPcHRpb25zLFxuICBrZXk6IHN0cmluZ1xuKSB7XG4gIHRhcmdldC5lbnN1cmVBcnJheShcbiAgICBrZXksXG4gICAgISFvcHRpb25zID8gb3B0aW9ucy5vblB1c2ggOiBudWxsLFxuICAgICEhb3B0aW9ucyA/IG9wdGlvbnMub25SZW1vdmUgOiBudWxsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFycmF5KG9wdGlvbnM/OiBJQXJyYXlQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBrZXk6IHN0cmluZykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgZW5zdXJlQXJyYXkodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgZW5zdXJlQXJyYXkodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgY29uc3QgYXJyID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleSk7XG4gICAgICAgIGlmICh2YWwgPT09IGFycikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyKSB7XG4gICAgICAgICAgYXJyLnNwbGljZSgwLCBhcnIubGVuZ3RoLCAuLi4odmFsIHx8IFtdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFvcHRpb25zICYmIG9wdGlvbnMub25TZXQpIHtcbiAgICAgICAgICBvcHRpb25zLm9uU2V0KHZhbCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9iamVjdCB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHByb3BlcnR5IG9mIGEgc3VydmV5IGVsZW1lbnQgKHBhZ2UsIHBhbmVsLCBxdWVzdGlvbnMsIGFuZCBldGMpLlxuICogQHNlZSBhZGRQcm9wZXJ0eVxuICogQHNlZSByZW1vdmVQcm9wZXJ0eVxuICogQHNlZSBbQWRkIFByb3BlcnRpZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9TdXJ2ZXktQ3JlYXRvciNhZGRwcm9wZXJ0aWVzKVxuICogQHNlZSBbUmVtb3ZlIFByb3BlcnRpZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9TdXJ2ZXktQ3JlYXRvciNyZW1vdmVwcm9wZXJ0aWVzKVxuICovXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdFByb3BlcnR5IGltcGxlbWVudHMgSU9iamVjdCB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZTogKHZhbDogYW55KSA9PiBhbnk7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgcHJpdmF0ZSBzdGF0aWMgSW5kZXggPSAxO1xuICBwcml2YXRlIHN0YXRpYyBtZXJnYWJsZVZhbHVlcyA9IFtcbiAgICBcInR5cGVWYWx1ZVwiLFxuICAgIFwiY2hvaWNlc1ZhbHVlXCIsXG4gICAgXCJiYXNlVmFsdWVcIixcbiAgICBcInJlYWRPbmx5VmFsdWVcIixcbiAgICBcInZpc2libGVWYWx1ZVwiLFxuICAgIFwiaXNTZXJpYWxpemFibGVcIixcbiAgICBcImlzTGlnaHRTZXJpYWxpemFibGVcIixcbiAgICBcImlzQ3VzdG9tXCIsXG4gICAgXCJpc0JpbmRhYmxlXCIsXG4gICAgXCJpc1VuaXF1ZVwiLFxuICAgIFwiaXNEeW5hbWljQ2hvaWNlc1wiLFxuICAgIFwiaXNMb2NhbGl6YWJsZVZhbHVlXCIsXG4gICAgXCJjbGFzc05hbWVcIixcbiAgICBcImFsdGVybmF0aXZlTmFtZVwiLFxuICAgIFwibGF5b3V0XCIsXG4gICAgXCJjbGFzc05hbWVQYXJ0XCIsXG4gICAgXCJiYXNlQ2xhc3NOYW1lXCIsXG4gICAgXCJkZWZhdWx0VmFsdWVcIixcbiAgICBcInNlcmlhbGl6YXRpb25Qcm9wZXJ0eVwiLFxuICAgIFwib25HZXRWYWx1ZVwiLFxuICAgIFwib25TZXRWYWx1ZVwiLFxuICAgIFwiZGlzcGxheU5hbWVcIixcbiAgICBcImNhdGVnb3J5XCIsXG4gICAgXCJjYXRlZ29yeUluZGV4XCIsXG4gICAgXCJ2aXNpYmxlSW5kZXhcIixcbiAgICBcIm5leHRUb1Byb3BlcnR5XCIsXG4gICAgXCJzaG93TW9kZVwiLFxuICAgIFwiZGVwZW5kZWRQcm9wZXJ0aWVzXCIsXG4gICAgXCJ2aXNpYmxlSWZcIixcbiAgICBcIm9uUHJvcGVydHlFZGl0b3JVcGRhdGVcIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwibWF4VmFsdWVcIixcbiAgICBcIm1pblZhbHVlXCIsXG4gICAgXCJkYXRhTGlzdFZhbHVlXCIsXG4gIF07XG4gIHByaXZhdGUgaWRWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIGNsYXNzSW5mb1ZhbHVlOiBKc29uTWV0YWRhdGFDbGFzcztcbiAgcHJpdmF0ZSB0eXBlVmFsdWU6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgY2hvaWNlc1ZhbHVlOiBBcnJheTxhbnk+ID0gbnVsbDtcbiAgcHJpdmF0ZSBiYXNlVmFsdWU6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgaXNSZXF1aXJlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNVbmlxdWVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0xvY2FsaXphYmxlVmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjaG9pY2VzZnVuYzogKG9iajogYW55LCBjaG9pY2VzQ2FsbGJhY2s6IGFueSkgPT4gQXJyYXk8YW55PiA9IG51bGw7XG4gIHByaXZhdGUgZGVwZW5kZWRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIGlzU2VyaWFsaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzTGlnaHRTZXJpYWxpemFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgaXNDdXN0b206IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRHluYW1pY0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTsgLy9UT0RPIG9ic29sZXRlLCB1c2UgZGVwZW5kc09uIGF0dHJpYnV0ZVxuICBwdWJsaWMgaXNCaW5kYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgYWx0ZXJuYXRpdmVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgY2xhc3NOYW1lUGFydDogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBkZWZhdWx0VmFsdWVWYWx1ZTogYW55ID0gbnVsbDtcbiAgcHVibGljIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgY2F0ZWdvcnk6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBjYXRlZ29yeUluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIHZpc2libGVJbmRleDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBuZXh0VG9Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIHNob3dNb2RlOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgcHVibGljIG1heFZhbHVlOiBhbnk7XG4gIHB1YmxpYyBtaW5WYWx1ZTogYW55O1xuICBwcml2YXRlIGRhdGFMaXN0VmFsdWU6IEFycmF5PHN0cmluZz47XG4gIHB1YmxpYyBsYXlvdXQ6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBvbkdldFZhbHVlOiAob2JqOiBhbnkpID0+IGFueSA9IG51bGw7XG4gIHB1YmxpYyBvblNldFZhbHVlOiAob2JqOiBhbnksIHZhbHVlOiBhbnksIGpzb25Db252OiBKc29uT2JqZWN0KSA9PiBhbnkgPSBudWxsO1xuICBwdWJsaWMgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IGJvb2xlYW4gPSBudWxsO1xuICBwdWJsaWMgb25Qcm9wZXJ0eUVkaXRvclVwZGF0ZTogKG9iajogYW55LCBwcm9wRWRpdG9yOiBhbnkpID0+IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGFzc0luZm86IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuY2xhc3NJbmZvVmFsdWUgPSBjbGFzc0luZm87XG4gICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSBpc1JlcXVpcmVkO1xuICAgIHRoaXMuaWRWYWx1ZSA9IEpzb25PYmplY3RQcm9wZXJ0eS5JbmRleCsrO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2xhc3NJbmZvKCk6IEpzb25NZXRhZGF0YUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0luZm9WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwic3RyaW5nXCI7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09IFwiaXRlbXZhbHVlc1wiKSB2YWx1ZSA9IFwiaXRlbXZhbHVlW11cIjtcbiAgICB0aGlzLnR5cGVWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnR5cGVWYWx1ZS5pbmRleE9mKFwiW11cIikgPT09IHRoaXMudHlwZVZhbHVlLmxlbmd0aCAtIDIpIHtcbiAgICAgIHRoaXMuaXNBcnJheSA9IHRydWU7XG4gICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMudHlwZVZhbHVlLnN1YnN0cigwLCB0aGlzLnR5cGVWYWx1ZS5sZW5ndGggLSAyKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzQXJyYXkgPSBmYWxzZTtcbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBpc1VuaXF1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1VuaXF1ZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNVbmlxdWUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1VuaXF1ZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG9Vc2VHZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkdldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICB9XG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgIHZhciByZXN1bHQ6IGFueSA9IHRoaXMuZGVmYXVsdFZhbHVlVmFsdWU7XG4gICAgaWYgKFxuICAgICAgISFKc29uT2JqZWN0UHJvcGVydHkuZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZSAmJlxuICAgICAgSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZih0aGlzLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIilcbiAgICApIHtcbiAgICAgIHJlc3VsdCA9IEpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlKFxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlIHx8IFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc0RlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSkpXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUgPT0gdmFsdWU7XG4gICAgcmV0dXJuIChcbiAgICAgICh2YWx1ZSA9PT0gZmFsc2UgJiYgKHRoaXMudHlwZSA9PSBcImJvb2xlYW5cIiB8fCB0aGlzLnR5cGUgPT0gXCJzd2l0Y2hcIikpIHx8XG4gICAgICB2YWx1ZSA9PT0gXCJcIiB8fFxuICAgICAgSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm9uR2V0VmFsdWUpIHJldHVybiB0aGlzLm9uR2V0VmFsdWUob2JqKTtcbiAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uZ2V0SnNvbigpO1xuICAgIHJldHVybiBvYmpbdGhpcy5uYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNMb2NhbGl6YWJsZSkge1xuICAgICAgcmV0dXJuICEhb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XVxuICAgICAgICA/IG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dFxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKG9iaik7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb1VzZVNldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9uU2V0VmFsdWUgfHwgdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHk7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkge1xuICAgIGlmICh0aGlzLm9uU2V0VmFsdWUpIHtcbiAgICAgIHRoaXMub25TZXRWYWx1ZShvYmosIHZhbHVlLCBqc29uQ29udik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJiAhIW9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0pXG4gICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwic3dpdGNoXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialt0aGlzLm5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRPYmpUeXBlKG9ialR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5jbGFzc05hbWVQYXJ0KSByZXR1cm4gb2JqVHlwZTtcbiAgICByZXR1cm4gb2JqVHlwZS5yZXBsYWNlKHRoaXMuY2xhc3NOYW1lUGFydCwgXCJcIik7XG4gIH1cbiAgcHVibGljIGdldENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNsYXNzTmFtZSkgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NOYW1lUGFydCAmJiBjbGFzc05hbWUuaW5kZXhPZih0aGlzLmNsYXNzTmFtZVBhcnQpIDwgMFxuICAgICAgPyBjbGFzc05hbWUgKyB0aGlzLmNsYXNzTmFtZVBhcnRcbiAgICAgIDogY2xhc3NOYW1lO1xuICB9XG4gIC8qKlxuICAgKiBEZXByaWNhdGVkLCBwbGVhc2UgdXNlIGdldENob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzKG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNob2ljZXNWYWx1ZSB8fCAhIXRoaXMuY2hvaWNlc2Z1bmM7XG4gIH1cbiAgcHVibGljIGdldENob2ljZXMob2JqOiBhbnksIGNob2ljZXNDYWxsYmFjazogYW55ID0gbnVsbCk6IEFycmF5PGFueT4ge1xuICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKSByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7XG4gICAgaWYgKHRoaXMuY2hvaWNlc2Z1bmMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMob2JqLCBjaG9pY2VzQ2FsbGJhY2spO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBBcnJheTxhbnk+LFxuICAgIHZhbHVlRnVuYzogKG9iajogYW55KSA9PiBBcnJheTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XG4gIH1cbiAgcHVibGljIGdldEJhc2VWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5iYXNlVmFsdWUpIHJldHVybiBcIlwiO1xuICAgIGlmICh0eXBlb2YgdGhpcy5iYXNlVmFsdWUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdGhpcy5iYXNlVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldEJhc2VWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuYmFzZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHlWYWx1ZSAhPSBudWxsID8gdGhpcy5yZWFkT25seVZhbHVlIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlYWRPbmx5VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGlzVmlzaWJsZShsYXlvdXQ6IHN0cmluZywgb2JqOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzTGF5b3V0ID0gIXRoaXMubGF5b3V0IHx8IHRoaXMubGF5b3V0ID09IGxheW91dDtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCAhaXNMYXlvdXQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVJZiAmJiAhIW9iaikgcmV0dXJuIHRoaXMudmlzaWJsZUlmKG9iaik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVWYWx1ZSAhPSBudWxsID8gdGhpcy52aXNpYmxlVmFsdWUgOiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9jYWxpemFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2NhbGl6YWJsZVZhbHVlICE9IG51bGwgPyB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNMb2NhbGl6YWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGFMaXN0KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZGF0YUxpc3RWYWx1ZSkgPyB0aGlzLmRhdGFMaXN0VmFsdWUgOiBbXTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFMaXN0KHZhbDogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZGF0YUxpc3RWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgbWVyZ2VXaXRoKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHZhciB2YWx1ZXNOYW1lcyA9IEpzb25PYmplY3RQcm9wZXJ0eS5tZXJnYWJsZVZhbHVlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1lcmdlVmFsdWUocHJvcCwgdmFsdWVzTmFtZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWRkRGVwZW5kZWRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXBlbmRlZFByb3BlcnRpZXMuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgIHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzLnB1c2gobmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREZXBlbmRlZFByb3BlcnRpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgPyB0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA6IFtdO1xuICB9XG4gIHB1YmxpYyBzY2hlbWFUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5jbGFzc05hbWUpIHJldHVybiBcImFycmF5XCI7XG4gICAgaWYgKCEhdGhpcy5iYXNlQ2xhc3NOYW1lKSByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwibnVtYmVyXCIpIHJldHVybiB0aGlzLnR5cGU7XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cbiAgcHJpdmF0ZSBtZXJnZVZhbHVlKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSwgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpc1t2YWx1ZU5hbWVdID09IG51bGwgJiYgcHJvcFt2YWx1ZU5hbWVdICE9IG51bGwpIHtcbiAgICAgIHRoaXNbdmFsdWVOYW1lXSA9IHByb3BbdmFsdWVOYW1lXTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIHByb3BlcnRpZXM6IElPYmplY3QgPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyZW50Q2xhc3NlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwdWJsaWMgc3RhdGljIGFkZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eTogYW55KSB7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHByb3BzID0gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucHJvcGVydGllcztcbiAgICBpZiAoIXByb3BzW2NsYXNzTmFtZV0pIHtcbiAgICAgIHByb3BzW2NsYXNzTmFtZV0gPSBbXTtcbiAgICB9XG4gICAgcHJvcHNbY2xhc3NOYW1lXS5wdXNoKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKCFwcm9wc1tjbGFzc05hbWVdKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wc1tjbGFzc05hbWVdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BlcnRpZXNbaV0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgcHJvcHNbY2xhc3NOYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIGFkZENsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBwYXJlbnRDbGFzc05hbWU6IHN0cmluZykge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChwYXJlbnRDbGFzc05hbWUpIHtcbiAgICAgIHBhcmVudENsYXNzTmFtZSA9IHBhcmVudENsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV0gPSBwYXJlbnRDbGFzc05hbWU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgd2hpbGUgKGNsYXNzTmFtZSkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wc1tjbGFzc05hbWVdO1xuICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzTmFtZSA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnBhcmVudENsYXNzZXNbY2xhc3NOYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXMob2JqOiBhbnkpIHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmdldFR5cGUpIHJldHVybjtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmosIG9iai5nZXRUeXBlKCkpO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNDb3JlKG9iajogYW55LCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKHByb3BzW2NsYXNzTmFtZV0pIHtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXNJbk9iaihvYmosIHByb3BzW2NsYXNzTmFtZV0pO1xuICAgIH1cbiAgICB2YXIgcGFyZW50Q2xhc3MgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgaWYgKHBhcmVudENsYXNzKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmosIHBhcmVudENsYXNzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUHJvcGVydGllc0luT2JqKG9iajogYW55LCBwcm9wZXJ0aWVzOiBhbnlbXSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydHlJbk9iaihvYmosIHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm9wZXJ0eUluT2JqKG9iajogYW55LCBwcm9wOiBKc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBpZiAob2JqW3Byb3AubmFtZV0gfHwgb2JqLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHJldHVybjtcbiAgICBpZiAoXG4gICAgICBwcm9wLmlzTG9jYWxpemFibGUgJiZcbiAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmXG4gICAgICAhb2JqW3Byb3Auc2VyaWFsaXphdGlvblByb3BlcnR5XSAmJlxuICAgICAgb2JqLmNyZWF0ZUN1c3RvbUxvY2FsaXphYmxlT2JqXG4gICAgKSB7XG4gICAgICBvYmouY3JlYXRlQ3VzdG9tTG9jYWxpemFibGVPYmoocHJvcC5uYW1lKTtcbiAgICAgIHZhciBsb2NEZXNjID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBvYmouZ2V0TG9jYWxpemFibGVTdHJpbmcocHJvcC5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSwgbG9jRGVzYyk7XG4gICAgICB2YXIgZGVzYyA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHByb3AuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2OiBhbnkpIHtcbiAgICAgICAgICBvYmouc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KHByb3AubmFtZSwgdik7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5uYW1lLCBkZXNjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3AuZGVmYXVsdFZhbHVlO1xuICAgICAgdmFyIGlzQXJyYXlQcm9wID0gZmFsc2U7XG4gICAgICBpZiAodHlwZW9mIG9iai5jcmVhdGVOZXdBcnJheSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChKc29uT2JqZWN0Lm1ldGFEYXRhLmlzRGVzY2VuZGFudE9mKHByb3AuY2xhc3NOYW1lLCBcIml0ZW12YWx1ZVwiKSkge1xuICAgICAgICAgIG9iai5jcmVhdGVOZXdBcnJheShwcm9wLm5hbWUsIGZ1bmN0aW9uKGl0ZW06IGFueSkge1xuICAgICAgICAgICAgaXRlbS5sb2NPd25lciA9IG9iajtcbiAgICAgICAgICAgIGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUgPSBwcm9wLm5hbWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXNBcnJheVByb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vSXQgaXMgYSBzaW1wbGUgYXJyYXkgcHJvcGVydHlcbiAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gXCJtdWx0aXBsZXZhbHVlc1wiKSB7XG4gICAgICAgICAgb2JqLmNyZWF0ZU5ld0FycmF5KHByb3AubmFtZSk7XG4gICAgICAgICAgaXNBcnJheVByb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5UHJvcCkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIG9iai5zZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEhb2JqLmdldFByb3BlcnR5VmFsdWUgJiYgISFvYmouc2V0UHJvcGVydHlWYWx1ZSkge1xuICAgICAgICB2YXIgZGVzYyA9IHtcbiAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghIXByb3Aub25HZXRWYWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gcHJvcC5vbkdldFZhbHVlKG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2JqLmdldFByb3BlcnR5VmFsdWUocHJvcC5uYW1lLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbih2OiBhbnkpIHtcbiAgICAgICAgICAgIGlmICghIXByb3Aub25TZXRWYWx1ZSkge1xuICAgICAgICAgICAgICBwcm9wLm9uU2V0VmFsdWUob2JqLCB2LCBudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iai5zZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5uYW1lLCBkZXNjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YUNsYXNzIHtcbiAgc3RhdGljIHJlcXVpcmVkU3ltYm9sID0gXCIhXCI7XG4gIHN0YXRpYyB0eXBlU3ltYm9sID0gXCI6XCI7XG4gIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4gPSBudWxsO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnRpZXM6IEFycmF5PGFueT4sXG4gICAgcHVibGljIGNyZWF0b3I6IChqc29uPzogYW55KSA9PiBhbnkgPSBudWxsLFxuICAgIHB1YmxpYyBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRoaXMucGFyZW50TmFtZSkge1xuICAgICAgdGhpcy5wYXJlbnROYW1lID0gdGhpcy5wYXJlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5hZGRDbGFzcyhuYW1lLCB0aGlzLnBhcmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSB0aGlzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0pO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBmaW5kKG5hbWU6IHN0cmluZyk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlUHJvcGVydHkocHJvcEluZm86IGFueSk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHR5cGVvZiBwcm9wSW5mbyA9PT0gXCJzdHJpbmdcIiA/IHByb3BJbmZvIDogcHJvcEluZm8ubmFtZTtcbiAgICBpZiAoIXByb3BlcnR5TmFtZSkgcmV0dXJuO1xuICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBudWxsO1xuICAgIHZhciB0eXBlSW5kZXggPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZihKc29uTWV0YWRhdGFDbGFzcy50eXBlU3ltYm9sKTtcbiAgICBpZiAodHlwZUluZGV4ID4gLTEpIHtcbiAgICAgIHByb3BlcnR5VHlwZSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcodHlwZUluZGV4ICsgMSk7XG4gICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHR5cGVJbmRleCk7XG4gICAgfVxuICAgIHZhciBpc1JlcXVpcmVkID1cbiAgICAgIHRoaXMuZ2V0SXNQcm9wZXJ0eU5hbWVSZXF1aXJlZChwcm9wZXJ0eU5hbWUpIHx8ICEhcHJvcEluZm8uaXNSZXF1aXJlZDtcbiAgICBwcm9wZXJ0eU5hbWUgPSB0aGlzLmdldFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xuICAgIHZhciBwcm9wID0gbmV3IEpzb25PYmplY3RQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eU5hbWUsIGlzUmVxdWlyZWQpO1xuICAgIGlmIChwcm9wZXJ0eVR5cGUpIHtcbiAgICAgIHByb3AudHlwZSA9IHByb3BlcnR5VHlwZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9wSW5mbyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKHByb3BJbmZvLnR5cGUpIHtcbiAgICAgICAgcHJvcC50eXBlID0gcHJvcEluZm8udHlwZTtcbiAgICAgIH1cbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkocHJvcEluZm8uZGVmYXVsdCkpIHtcbiAgICAgICAgcHJvcC5kZWZhdWx0VmFsdWUgPSBwcm9wSW5mby5kZWZhdWx0O1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5pc1NlcmlhbGl6YWJsZSkpIHtcbiAgICAgICAgcHJvcC5pc1NlcmlhbGl6YWJsZSA9IHByb3BJbmZvLmlzU2VyaWFsaXphYmxlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5pc0xpZ2h0U2VyaWFsaXphYmxlKSkge1xuICAgICAgICBwcm9wLmlzTGlnaHRTZXJpYWxpemFibGUgPSBwcm9wSW5mby5pc0xpZ2h0U2VyaWFsaXphYmxlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5tYXhMZW5ndGgpKSB7XG4gICAgICAgIHByb3AubWF4TGVuZ3RoID0gcHJvcEluZm8ubWF4TGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5kaXNwbGF5TmFtZSkpIHtcbiAgICAgICAgcHJvcC5kaXNwbGF5TmFtZSA9IHByb3BJbmZvLmRpc3BsYXlOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5jYXRlZ29yeSkpIHtcbiAgICAgICAgcHJvcC5jYXRlZ29yeSA9IHByb3BJbmZvLmNhdGVnb3J5O1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5jYXRlZ29yeUluZGV4KSkge1xuICAgICAgICBwcm9wLmNhdGVnb3J5SW5kZXggPSBwcm9wSW5mby5jYXRlZ29yeUluZGV4O1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5uZXh0VG9Qcm9wZXJ0eSkpIHtcbiAgICAgICAgcHJvcC5uZXh0VG9Qcm9wZXJ0eSA9IHByb3BJbmZvLm5leHRUb1Byb3BlcnR5O1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby52aXNpYmxlSW5kZXgpKSB7XG4gICAgICAgIHByb3AudmlzaWJsZUluZGV4ID0gcHJvcEluZm8udmlzaWJsZUluZGV4O1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5zaG93TW9kZSkpIHtcbiAgICAgICAgcHJvcC5zaG93TW9kZSA9IHByb3BJbmZvLnNob3dNb2RlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5tYXhWYWx1ZSkpIHtcbiAgICAgICAgcHJvcC5tYXhWYWx1ZSA9IHByb3BJbmZvLm1heFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5taW5WYWx1ZSkpIHtcbiAgICAgICAgcHJvcC5taW5WYWx1ZSA9IHByb3BJbmZvLm1pblZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5kYXRhTGlzdCkpIHtcbiAgICAgICAgcHJvcC5kYXRhTGlzdCA9IHByb3BJbmZvLmRhdGFMaXN0O1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5pc0R5bmFtaWNDaG9pY2VzKSkge1xuICAgICAgICBwcm9wLmlzRHluYW1pY0Nob2ljZXMgPSBwcm9wSW5mby5pc0R5bmFtaWNDaG9pY2VzO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5pc0JpbmRhYmxlKSkge1xuICAgICAgICBwcm9wLmlzQmluZGFibGUgPSBwcm9wSW5mby5pc0JpbmRhYmxlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5pc1VuaXF1ZSkpIHtcbiAgICAgICAgcHJvcC5pc1VuaXF1ZSA9IHByb3BJbmZvLmlzVW5pcXVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLnZpc2libGUgPT09IHRydWUgfHwgcHJvcEluZm8udmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcHJvcC52aXNpYmxlID0gcHJvcEluZm8udmlzaWJsZTtcbiAgICAgIH1cbiAgICAgIGlmICghIXByb3BJbmZvLnZpc2libGVJZikge1xuICAgICAgICBwcm9wLnZpc2libGVJZiA9IHByb3BJbmZvLnZpc2libGVJZjtcbiAgICAgIH1cbiAgICAgIGlmICghIXByb3BJbmZvLm9uUHJvcGVydHlFZGl0b3JVcGRhdGUpIHtcbiAgICAgICAgcHJvcC5vblByb3BlcnR5RWRpdG9yVXBkYXRlID0gcHJvcEluZm8ub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5yZWFkT25seSA9PT0gdHJ1ZSkge1xuICAgICAgICBwcm9wLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5jaG9pY2VzKSB7XG4gICAgICAgIHZhciBjaG9pY2VzRnVuYyA9XG4gICAgICAgICAgdHlwZW9mIHByb3BJbmZvLmNob2ljZXMgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BJbmZvLmNob2ljZXMgOiBudWxsO1xuICAgICAgICB2YXIgY2hvaWNlc1ZhbHVlID1cbiAgICAgICAgICB0eXBlb2YgcHJvcEluZm8uY2hvaWNlcyAhPT0gXCJmdW5jdGlvblwiID8gcHJvcEluZm8uY2hvaWNlcyA6IG51bGw7XG4gICAgICAgIHByb3Auc2V0Q2hvaWNlcyhjaG9pY2VzVmFsdWUsIGNob2ljZXNGdW5jKTtcbiAgICAgIH1cbiAgICAgIGlmICghIXByb3BJbmZvLmJhc2VWYWx1ZSkge1xuICAgICAgICBwcm9wLnNldEJhc2VWYWx1ZShwcm9wSW5mby5iYXNlVmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLm9uR2V0VmFsdWUpIHtcbiAgICAgICAgcHJvcC5vbkdldFZhbHVlID0gcHJvcEluZm8ub25HZXRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5vblNldFZhbHVlKSB7XG4gICAgICAgIHByb3Aub25TZXRWYWx1ZSA9IHByb3BJbmZvLm9uU2V0VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uaXNMb2NhbGl6YWJsZSkge1xuICAgICAgICBwcm9wSW5mby5zZXJpYWxpemF0aW9uUHJvcGVydHkgPSBcImxvY1wiICsgcHJvcC5uYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSA9IHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICAgICAgdmFyIHM6IHN0cmluZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmXG4gICAgICAgICAgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkuaW5kZXhPZihcImxvY1wiKSA9PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5pc0xvY2FsaXphYmxlKSB7XG4gICAgICAgIHByb3AuaXNMb2NhbGl6YWJsZSA9IHByb3BJbmZvLmlzTG9jYWxpemFibGU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uY2xhc3NOYW1lKSB7XG4gICAgICAgIHByb3AuY2xhc3NOYW1lID0gcHJvcEluZm8uY2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmJhc2VDbGFzc05hbWUpIHtcbiAgICAgICAgcHJvcC5iYXNlQ2xhc3NOYW1lID0gcHJvcEluZm8uYmFzZUNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWVQYXJ0KSB7XG4gICAgICAgIHByb3AuY2xhc3NOYW1lUGFydCA9IHByb3BJbmZvLmNsYXNzTmFtZVBhcnQ7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uYWx0ZXJuYXRpdmVOYW1lKSB7XG4gICAgICAgIHByb3AuYWx0ZXJuYXRpdmVOYW1lID0gcHJvcEluZm8uYWx0ZXJuYXRpdmVOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmxheW91dCkge1xuICAgICAgICBwcm9wLmxheW91dCA9IHByb3BJbmZvLmxheW91dDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5kZXBlbmRzT24pIHtcbiAgICAgICAgdGhpcy5hZGREZXBlbmRzT25Qcm9wZXJ0aWVzKHByb3AsIHByb3BJbmZvLmRlcGVuZHNPbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wO1xuICB9XG4gIHByaXZhdGUgYWRkRGVwZW5kc09uUHJvcGVydGllcyhwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksIGRlcGVuZHNPbjogYW55KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwZW5kc09uKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRzT24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5hZGREZXBlbmRzT25Qcm9wZXJ0eShwcm9wLCBkZXBlbmRzT25baV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZERlcGVuZHNPblByb3BlcnR5KHByb3AsIGRlcGVuZHNPbik7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcDogSnNvbk9iamVjdFByb3BlcnR5LCBkZXBlbmRzT246IHN0cmluZykge1xuICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZmluZChkZXBlbmRzT24pO1xuICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgIHByb3BlcnR5ID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkodGhpcy5wYXJlbnROYW1lLCBkZXBlbmRzT24pO1xuICAgIH1cbiAgICBpZiAoIXByb3BlcnR5KSByZXR1cm47XG4gICAgcHJvcGVydHkuYWRkRGVwZW5kZWRQcm9wZXJ0eShwcm9wLm5hbWUpO1xuICB9XG4gIHByaXZhdGUgZ2V0SXNQcm9wZXJ0eU5hbWVSZXF1aXJlZChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wZXJ0eU5hbWUubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcGVydHlOYW1lWzBdID09IEpzb25NZXRhZGF0YUNsYXNzLnJlcXVpcmVkU3ltYm9sXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmdldElzUHJvcGVydHlOYW1lUmVxdWlyZWQocHJvcGVydHlOYW1lKSkgcmV0dXJuIHByb3BlcnR5TmFtZTtcbiAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc2xpY2UoMSk7XG4gICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBvYmplY3QuIEl0IGNvbnRhaW5zIG9iamVjdCBwcm9wZXJ0aWVzJyBydW50aW1lIGluZm9ybWF0aW9uIGFuZCBhbGxvd3MgeW91IHRvIG1vZGlmeSBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25NZXRhZGF0YSB7XG4gIHByaXZhdGUgY2xhc3NlczogSGFzaFRhYmxlPEpzb25NZXRhZGF0YUNsYXNzPiA9IHt9O1xuICBwcml2YXRlIGFsdGVybmF0aXZlTmFtZXM6IEhhc2hUYWJsZTxzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgY2hpbGRyZW5DbGFzc2VzOiBIYXNoVGFibGU8QXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+PiA9IHt9O1xuICBwcml2YXRlIGNsYXNzUHJvcGVydGllczogSGFzaFRhYmxlPEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4+ID0ge307XG4gIHByaXZhdGUgY2xhc3NIYXNoUHJvcGVydGllczogSGFzaFRhYmxlPEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+PiA9IHt9O1xuICBwdWJsaWMgZ2V0T2JqUHJvcGVydHlWYWx1ZShvYmo6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAodGhpcy5pc09ialdyYXBwZXIob2JqKSkge1xuICAgICAgdmFyIG9yaWduYWxPYmogPSBvYmouZ2V0T3JpZ2luYWxPYmooKTtcbiAgICAgIHZhciBwcm9wID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkob3JpZ25hbE9iai5nZXRUeXBlKCksIG5hbWUpO1xuICAgICAgaWYgKCEhcHJvcCkgcmV0dXJuIHRoaXMuZ2V0T2JqUHJvcGVydHlWYWx1ZUNvcmUob3JpZ25hbE9iaiwgcHJvcCk7XG4gICAgfVxuICAgIHZhciBwcm9wID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkob2JqLmdldFR5cGUoKSwgbmFtZSk7XG4gICAgaWYgKCFwcm9wKSByZXR1cm4gb2JqW25hbWVdO1xuICAgIHJldHVybiB0aGlzLmdldE9ialByb3BlcnR5VmFsdWVDb3JlKG9iaiwgcHJvcCk7XG4gIH1cbiAgcHVibGljIHNldE9ialByb3BlcnR5VmFsdWUob2JqOiBhbnksIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICBpZiAoISFvYmpbbmFtZV0gJiYgISFvYmpbbmFtZV0uc2V0SnNvbikge1xuICAgICAgb2JqW25hbWVdLnNldEpzb24odmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW25hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldE9ialByb3BlcnR5VmFsdWVDb3JlKG9iajogYW55LCBwcm9wOiBKc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xuICAgIGlmICghcHJvcC5pc1NlcmlhbGl6YWJsZSkgcmV0dXJuIG9ialtwcm9wLm5hbWVdO1xuICAgIGlmIChwcm9wLmlzTG9jYWxpemFibGUpIHtcbiAgICAgIGlmIChwcm9wLmlzQXJyYXkpIHJldHVybiBvYmpbcHJvcC5uYW1lXTtcbiAgICAgIGlmICghIXByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KVxuICAgICAgICByZXR1cm4gb2JqW3Byb3Auc2VyaWFsaXphdGlvblByb3BlcnR5XS50ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gb2JqLmdldFByb3BlcnR5VmFsdWUocHJvcC5uYW1lKTtcbiAgfVxuICBwcml2YXRlIGlzT2JqV3JhcHBlcihvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW9iai5nZXRPcmlnaW5hbE9iaiAmJiAhIW9iai5nZXRPcmlnaW5hbE9iaigpO1xuICB9XG4gIHB1YmxpYyBhZGRDbGFzcyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogQXJyYXk8YW55PixcbiAgICBjcmVhdG9yOiAoanNvbj86IGFueSkgPT4gYW55ID0gbnVsbCxcbiAgICBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsXG4gICk6IEpzb25NZXRhZGF0YUNsYXNzIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gbmV3IEpzb25NZXRhZGF0YUNsYXNzKFxuICAgICAgbmFtZSxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICBjcmVhdG9yLFxuICAgICAgcGFyZW50TmFtZVxuICAgICk7XG4gICAgdGhpcy5jbGFzc2VzW25hbWVdID0gbWV0YURhdGFDbGFzcztcbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdO1xuICAgICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0ucHVzaChtZXRhRGF0YUNsYXNzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGFEYXRhQ2xhc3M7XG4gIH1cbiAgcHVibGljIHJlbW92ZUNsYXNzKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBtZXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFDbGFzcykgcmV0dXJuO1xuICAgIGRlbGV0ZSB0aGlzLmNsYXNzZXNbbWV0YUNsYXNzLm5hbWVdO1xuICAgIGlmICghIW1ldGFDbGFzcy5wYXJlbnROYW1lKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1ttZXRhQ2xhc3MucGFyZW50TmFtZV0uaW5kZXhPZihtZXRhQ2xhc3MpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbbWV0YUNsYXNzLnBhcmVudE5hbWVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcmUobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcbiAgICB0aGlzLm92ZXJyaWRlQ2xhc3NDcmVhdG9yKG5hbWUsIGNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcihuYW1lOiBzdHJpbmcsIGNyZWF0b3I6ICgpID0+IGFueSkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAobWV0YURhdGFDbGFzcykge1xuICAgICAgbWV0YURhdGFDbGFzcy5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFDbGFzcykgcmV0dXJuIFtdO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICAgIGlmICghIXByb3BlcnRpZXMpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXNGb3JDbGFzcyhtZXRhQ2xhc3MubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgfVxuICBwcml2YXRlIGdldEhhc2hQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogSGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBtZXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghbWV0YUNsYXNzKSByZXR1cm4ge307XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICAgIGlmICghIXByb3BlcnRpZXMpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXNGb3JDbGFzcyhtZXRhQ2xhc3MubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NIYXNoUHJvcGVydGllc1ttZXRhQ2xhc3MubmFtZV07XG4gIH1cbiAgcHJpdmF0ZSBmaWxsUHJvcGVydGllc0ZvckNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xuICAgIHZhciBoYXNoUHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzLCBoYXNoUHJvcGVydGllcyk7XG4gICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbY2xhc3NOYW1lXSA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBoYXNoUHJvcGVydGllcztcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllc0J5T2JqKG9iajogYW55KTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm4gW107XG4gICAgdmFyIHJlczogYW55ID0ge307XG4gICAgdmFyIHByb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXRUeXBlKCkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc1twcm9wc1tpXS5uYW1lXSA9IHByb3BzW2ldO1xuICAgIH1cbiAgICB2YXIgZHluYW1pY1Byb3BzID0gISFvYmouZ2V0RHluYW1pY1R5cGVcbiAgICAgID8gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXREeW5hbWljVHlwZSgpKVxuICAgICAgOiBudWxsO1xuICAgIGlmIChkeW5hbWljUHJvcHMgJiYgZHluYW1pY1Byb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluYW1pY1Byb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBkUHJvcCA9IGR5bmFtaWNQcm9wc1tpXTtcbiAgICAgICAgaWYgKCEhcmVzW2RQcm9wLm5hbWVdKSBjb250aW51ZTtcbiAgICAgICAgcmVzW2RQcm9wLm5hbWVdID0gZFByb3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXMpLm1hcCgoa2V5KSA9PiByZXNba2V5XSk7XG4gIH1cbiAgcHVibGljIGdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmooXG4gICAgb2JqOiBhbnksXG4gICAgZHluYW1pY1R5cGU6IHN0cmluZyA9IG51bGxcbiAgKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlIHx8ICghb2JqLmdldER5bmFtaWNUeXBlICYmICFkeW5hbWljVHlwZSkpXG4gICAgICByZXR1cm4gW107XG4gICAgdmFyIGRUeXBlID0gISFkeW5hbWljVHlwZSA/IGR5bmFtaWNUeXBlIDogb2JqLmdldER5bmFtaWNUeXBlKCk7XG4gICAgaWYgKCFkVHlwZSkgcmV0dXJuIFtdO1xuICAgIHZhciBkeW5hbWljUHJvcHMgPSB0aGlzLmdldFByb3BlcnRpZXMoZFR5cGUpO1xuICAgIGlmICghZHluYW1pY1Byb3BzIHx8IGR5bmFtaWNQcm9wcy5sZW5ndGggPT0gMCkgcmV0dXJuIFtdO1xuICAgIHZhciBoYXNoOiBhbnkgPSB7fTtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgaGFzaFtwcm9wc1tpXS5uYW1lXSA9IHByb3BzW2ldO1xuICAgIH1cbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkeW5hbWljUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBkUHJvcCA9IGR5bmFtaWNQcm9wc1tpXTtcbiAgICAgIGlmICghaGFzaFtkUHJvcC5uYW1lXSkge1xuICAgICAgICByZXMucHVzaChkUHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGhhc09yaWdpbmFsUHJvcGVydHkob2JqOiBCYXNlLCBwcm9wTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRPcmlnaW5hbFByb3BlcnR5KG9iaiwgcHJvcE5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRPcmlnaW5hbFByb3BlcnR5KG9iajogQmFzZSwgcHJvcE5hbWU6IHN0cmluZyk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZmluZFByb3BlcnR5KG9iai5nZXRUeXBlKCksIHByb3BOYW1lKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgaWYgKHRoaXMuaXNPYmpXcmFwcGVyKG9iaikpXG4gICAgICByZXR1cm4gdGhpcy5maW5kUHJvcGVydHkoKDxhbnk+b2JqKS5nZXRPcmlnaW5hbE9iaigpLmdldFR5cGUoKSwgcHJvcE5hbWUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBmaW5kUHJvcGVydHkoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcbiAgKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuZ2V0SGFzaFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcbiAgICB2YXIgcmVzID0gaGFzaFtwcm9wZXJ0eU5hbWVdO1xuICAgIHJldHVybiAhIXJlcyA/IHJlcyA6IG51bGw7XG4gIH1cbiAgcHVibGljIGZpbmRQcm9wZXJ0aWVzKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TmFtZXM6IEFycmF5PHN0cmluZz5cbiAgKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBoYXNoID0gdGhpcy5nZXRIYXNoUHJvcGVydGllcyhjbGFzc05hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBoYXNoW3Byb3BlcnR5TmFtZXNbaV1dO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldEFsbFByb3BlcnRpZXNCeU5hbWUoXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcbiAgKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KCk7XG4gICAgdmFyIGNsYXNzZXMgPSB0aGlzLmdldEFsbENsYXNzZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjbGFzc0luZm8gPSB0aGlzLmZpbmRDbGFzcyhjbGFzc2VzW2ldKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2xhc3NJbmZvLnByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGNsYXNzSW5mby5wcm9wZXJ0aWVzW2pdLm5hbWUgPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgcmVzLnB1c2goY2xhc3NJbmZvLnByb3BlcnRpZXNbal0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldEFsbENsYXNzZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmNsYXNzZXMpIHtcbiAgICAgIHJlcy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVDbGFzcyhuYW1lOiBzdHJpbmcsIGpzb246IGFueSA9IHVuZGVmaW5lZCk6IGFueSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xuICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIG51bGw7XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MuY3JlYXRvcikgcmV0dXJuIG1ldGFEYXRhQ2xhc3MuY3JlYXRvcihqc29uKTtcbiAgICB2YXIgcGFyZW50TmFtZSA9IG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZTtcbiAgICB3aGlsZSAocGFyZW50TmFtZSkge1xuICAgICAgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKHBhcmVudE5hbWUpO1xuICAgICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcbiAgICAgIHBhcmVudE5hbWUgPSBtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWU7XG4gICAgICBpZiAobWV0YURhdGFDbGFzcy5jcmVhdG9yKVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDdXN0b21UeXBlKG5hbWUsIG1ldGFEYXRhQ2xhc3MuY3JlYXRvciwganNvbik7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tVHlwZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY3JlYXRvcjogYW55LFxuICAgIGpzb246IGFueSA9IHVuZGVmaW5lZFxuICApOiBhbnkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IGNyZWF0b3IoanNvbik7XG4gICAgdmFyIGN1c3RvbVR5cGVOYW1lID0gbmFtZTtcbiAgICB2YXIgY3VzdG9tVGVtcGxhdGVOYW1lID0gcmVzLmdldFRlbXBsYXRlXG4gICAgICA/IHJlcy5nZXRUZW1wbGF0ZSgpXG4gICAgICA6IHJlcy5nZXRUeXBlKCk7XG4gICAgcmVzLmdldFR5cGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjdXN0b21UeXBlTmFtZTtcbiAgICB9O1xuICAgIHJlcy5nZXRUZW1wbGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGN1c3RvbVRlbXBsYXRlTmFtZTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXMocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRDaGlsZHJlbkNsYXNzZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNhbkJlQ3JlYXRlZDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzdWx0OiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4gPSBbXTtcbiAgICB0aGlzLmZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZSwgY2FuQmVDcmVhdGVkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldFJlcXVpcmVkUHJvcGVydGllcyhuYW1lOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhuYW1lKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydGllc1tpXS5pc1JlcXVpcmVkKSB7XG4gICAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGFkZFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnRpZXNJbmZvczogQXJyYXk8YW55Pikge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXNJbmZvcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRDdXN0b21Qcm9wZXJ0eUNvcmUobWV0YURhdGFDbGFzcywgcHJvcGVydGllc0luZm9zW2ldKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFkZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eUluZm86IGFueSk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ3VzdG9tUHJvcGVydHlDb3JlKHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSksIHByb3BlcnR5SW5mbyk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRDdXN0b21Qcm9wZXJ0eUNvcmUoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHlJbmZvOiBhbnlcbiAgKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xuICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuY3JlYXRlUHJvcGVydHkocHJvcGVydHlJbmZvKTtcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHByb3BlcnR5LmlzQ3VzdG9tID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHlUb0NsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcbiAgICAgIHRoaXMuZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3MpO1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uYWRkUHJvcGVydHkobWV0YURhdGFDbGFzcy5uYW1lLCBwcm9wZXJ0eSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eU5hbWUpO1xuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XG4gICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnJlbW92ZVByb3BlcnR5KFxuICAgICAgICBtZXRhRGF0YUNsYXNzLm5hbWUsXG4gICAgICAgIHByb3BlcnR5TmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0eVRvQ2xhc3MoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICBpZiAobWV0YURhdGFDbGFzcy5maW5kKHByb3BlcnR5Lm5hbWUpICE9IG51bGwpIHJldHVybjtcbiAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhcbiAgICBtZXRhRGF0YUNsYXNzOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIHZhciBpbmRleCA9IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KTtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG4gICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgcHJpdmF0ZSBlbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MpIHtcbiAgICB0aGlzLmNsYXNzUHJvcGVydGllc1ttZXRhRGF0YUNsYXNzLm5hbWVdID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XG4gICAgdmFyIGNoaWxkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKG1ldGFEYXRhQ2xhc3MubmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XG4gICAgICB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbY2hpbGRDbGFzc2VzW2ldLm5hbWVdID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmaWxsQ2hpbGRyZW5DbGFzc2VzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz5cbiAgKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbmFtZV07XG4gICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghY2FuQmVDcmVhdGVkIHx8IGNoaWxkcmVuW2ldLmNyZWF0b3IpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgfVxuICAgICAgdGhpcy5maWxsQ2hpbGRyZW5DbGFzc2VzKGNoaWxkcmVuW2ldLm5hbWUsIGNhbkJlQ3JlYXRlZCwgcmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGZpbmRDbGFzcyhuYW1lOiBzdHJpbmcpOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzID0gdGhpcy5jbGFzc2VzW25hbWVdO1xuICAgIGlmICghcmVzKSB7XG4gICAgICB2YXIgbmV3TmFtZSA9IHRoaXMuYWx0ZXJuYXRpdmVOYW1lc1tuYW1lXTtcbiAgICAgIGlmICghIW5ld05hbWUgJiYgbmV3TmFtZSAhPSBuYW1lKSByZXR1cm4gdGhpcy5maW5kQ2xhc3MobmV3TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGlzRGVzY2VuZGFudE9mKGNsYXNzTmFtZTogc3RyaW5nLCBhbmNlc3RvckNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFjbGFzc05hbWUgfHwgIWFuY2VzdG9yQ2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGFuY2VzdG9yQ2xhc3NOYW1lID0gYW5jZXN0b3JDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY2xhc3NfID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIWNsYXNzXykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgcGFyZW50Q2xhc3MgPSBjbGFzc187XG4gICAgZG8ge1xuICAgICAgaWYgKHBhcmVudENsYXNzLm5hbWUgPT09IGFuY2VzdG9yQ2xhc3NOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2xhc3MgPSB0aGlzLmNsYXNzZXNbcGFyZW50Q2xhc3MucGFyZW50TmFtZV07XG4gICAgfSB3aGlsZSAoISFwYXJlbnRDbGFzcyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZGRBbHRlck5hdGl2ZUNsYXNzTmFtZShuYW1lOiBzdHJpbmcsIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hbHRlcm5hdGl2ZU5hbWVzW2FsdGVybmF0aXZlTmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuICBwdWJsaWMgZ2VuZXJhdGVTY2hlbWEoY2xhc3NOYW1lOiBzdHJpbmcgPSB1bmRlZmluZWQpOiBhbnkge1xuICAgIGlmICghY2xhc3NOYW1lKSBjbGFzc05hbWUgPSBcInN1cnZleVwiO1xuICAgIHZhciBjbGFzc0luZm8gPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghY2xhc3NJbmZvKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIixcbiAgICAgIHRpdGxlOiBcIlN1cnZleUpTIExpYnJhcnkganNvbiBzY2hlbWFcIixcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIGRlZmluaXRpb25zOiB7fSxcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0aWVzKGNsYXNzSW5mbywgcmVzLnByb3BlcnRpZXMsIHJlcy5kZWZpbml0aW9ucyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyhcbiAgICBjbGFzc0luZm86IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHNjaGVtYVByb3BlcnRpZXM6IGFueSxcbiAgICBzY2hlbWFEZWY6IGFueVxuICApOiB2b2lkIHtcbiAgICBpZiAoIWNsYXNzSW5mbykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NJbmZvLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gY2xhc3NJbmZvLnByb3BlcnRpZXNbaV07XG4gICAgICBzY2hlbWFQcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydHkoXG4gICAgICAgIHByb3AsXG4gICAgICAgIHNjaGVtYURlZlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjaGVtYVByb3BlcnR5KFxuICAgIHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBzY2hlbWFEZWY6IGFueVxuICApOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHsgdHlwZTogcHJvcC5zY2hlbWFUeXBlKCkgfTtcbiAgICBpZiAocHJvcC5oYXNDaG9pY2VzKSB7XG4gICAgICByZXMuZW51bSA9IHByb3AuZ2V0Q2hvaWNlcyhudWxsKTtcbiAgICB9XG4gICAgaWYgKCEhcHJvcC5jbGFzc05hbWUpIHtcbiAgICAgIHJlcy5pdGVtcyA9IHsgJHJlZjogXCIjXCIgKyBwcm9wLmNsYXNzTmFtZSB9O1xuICAgICAgdGhpcy5nZW5lcmF0ZUNoZW1hQ2xhc3MocHJvcC5jbGFzc05hbWUsIHNjaGVtYURlZik7XG4gICAgfVxuICAgIGlmICghIXByb3AuYmFzZUNsYXNzTmFtZSkge1xuICAgICAgdmFyIHVzZWRDbGFzc2VzID0gdGhpcy5nZXRDaGlsZHJlbkNsYXNzZXMocHJvcC5iYXNlQ2xhc3NOYW1lLCB0cnVlKTtcbiAgICAgIGlmIChwcm9wLmJhc2VDbGFzc05hbWUgPT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICAgIHVzZWRDbGFzc2VzLnB1c2godGhpcy5maW5kQ2xhc3MoXCJwYW5lbFwiKSk7XG4gICAgICB9XG4gICAgICByZXMuaXRlbXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXNlZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHVzZWRDbGFzc2VzW2ldLm5hbWU7XG4gICAgICAgIHJlcy5pdGVtcy5wdXNoKHsgJHJlZjogXCIjXCIgKyBjbGFzc05hbWUgfSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKGNsYXNzTmFtZSwgc2NoZW1hRGVmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlQ2hlbWFDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc2NoZW1hRGVmOiBhbnkpIHtcbiAgICBpZiAoISFzY2hlbWFEZWZbY2xhc3NOYW1lXSkgcmV0dXJuO1xuICAgIHZhciBjbGFzc0luZm8gPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghY2xhc3NJbmZvKSByZXR1cm47XG4gICAgdmFyIGhhc1BhcmVudCA9ICEhY2xhc3NJbmZvLnBhcmVudE5hbWUgJiYgY2xhc3NJbmZvLnBhcmVudE5hbWUgIT0gXCJiYXNlXCI7XG4gICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNoZW1hQ2xhc3MoY2xhc3NJbmZvLnBhcmVudE5hbWUsIHNjaGVtYURlZik7XG4gICAgfVxuICAgIHZhciByZXM6IGFueSA9IHsgdHlwZTogXCJvYmplY3RcIiwgJGlkOiBcIiNcIiArIGNsYXNzTmFtZSB9O1xuICAgIHNjaGVtYURlZltjbGFzc05hbWVdID0gcmVzO1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHRoaXMuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0aWVzKGNsYXNzSW5mbywgcHJvcHMsIHNjaGVtYURlZik7XG4gICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgcmVzLmFsbE9mZiA9IFtcbiAgICAgICAgeyAkcmVmOiBcIiNcIiArIGNsYXNzSW5mby5wYXJlbnROYW1lIH0sXG4gICAgICAgIHsgcHJvcGVydGllczogcHJvcHMgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGxpc3Q6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAgaGFzaDogSGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT5cbiAgKSB7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcbiAgICBpZiAobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lKSB7XG4gICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSwgbGlzdCwgaGFzaCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllc1tpXTtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHlDb3JlKHByb3AsIGxpc3QsIGhhc2gpO1xuICAgICAgaGFzaFtwcm9wLm5hbWVdID0gcHJvcDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0eUNvcmUoXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGhhc2g6IEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICkge1xuICAgIGlmICghaGFzaFtwcm9wZXJ0eS5uYW1lXSkge1xuICAgICAgbGlzdC5wdXNoKHByb3BlcnR5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdFtpXS5uYW1lID09IHByb3BlcnR5Lm5hbWUpIHtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvcGVydHkubWVyZ2VXaXRoKGxpc3RbaW5kZXhdKTtcbiAgICBsaXN0W2luZGV4XSA9IHByb3BlcnR5O1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbkVycm9yIHtcbiAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYXQ6IE51bWJlciA9IC0xO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHlwZTogc3RyaW5nLCBwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7fVxuICBwdWJsaWMgZ2V0RnVsbERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZSArICh0aGlzLmRlc2NyaXB0aW9uID8gXCJcXG5cIiArIHRoaXMuZGVzY3JpcHRpb24gOiBcIlwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25Vbmtub3duUHJvcGVydHlFcnJvciBleHRlbmRzIEpzb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcInVua25vd25wcm9wZXJ0eVwiLFxuICAgICAgXCJUaGUgcHJvcGVydHkgJ1wiICtcbiAgICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgICAgXCInIGluIGNsYXNzICdcIiArXG4gICAgICAgIGNsYXNzTmFtZSArXG4gICAgICAgIFwiJyBpcyB1bmtub3duLlwiXG4gICAgKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhjbGFzc05hbWUpO1xuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJUaGUgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBhcmU6IFwiO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpID4gMCkgdGhpcy5kZXNjcmlwdGlvbiArPSBcIiwgXCI7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gcHJvcGVydGllc1tpXS5uYW1lO1xuICAgICAgfVxuICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBcIi5cIjtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UgZXh0ZW5kcyBKc29uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyB0eXBlOiBzdHJpbmcsXG4gICAgcHVibGljIG1lc3NhZ2U6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcih0eXBlLCBtZXNzYWdlKTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBhdmFpbGFibGU6IFwiO1xuICAgIHZhciB0eXBlcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0Q2hpbGRyZW5DbGFzc2VzKGJhc2VDbGFzc05hbWUsIHRydWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpID4gMCkgdGhpcy5kZXNjcmlwdGlvbiArPSBcIiwgXCI7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiJ1wiICsgdHlwZXNbaV0ubmFtZSArIFwiJ1wiO1xuICAgIH1cbiAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbk1pc3NpbmdUeXBlRXJyb3IgZXh0ZW5kcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGJhc2VDbGFzc05hbWUsXG4gICAgICBcIm1pc3Npbmd0eXBlcHJvcGVydHlcIixcbiAgICAgIFwiVGhlIHByb3BlcnR5IHR5cGUgaXMgbWlzc2luZyBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiJy5cIlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uSW5jb3JyZWN0VHlwZUVycm9yIGV4dGVuZHMgSnNvbk1pc3NpbmdUeXBlRXJyb3JCYXNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgYmFzZUNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBiYXNlQ2xhc3NOYW1lLFxuICAgICAgXCJpbmNvcnJlY3R0eXBlcHJvcGVydHlcIixcbiAgICAgIFwiVGhlIHByb3BlcnR5IHR5cGUgaXMgaW5jb3JyZWN0IGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICtcbiAgICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgICAgXCInLlwiXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJyZXF1aXJlZHByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSAnXCIgK1xuICAgICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgICBcIicgaXMgcmVxdWlyZWQgaW4gY2xhc3MgJ1wiICtcbiAgICAgICAgY2xhc3NOYW1lICtcbiAgICAgICAgXCInLlwiXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdCB7XG4gIHByaXZhdGUgc3RhdGljIHR5cGVQcm9wZXJ0eU5hbWUgPSBcInR5cGVcIjtcbiAgcHJpdmF0ZSBzdGF0aWMgcG9zaXRpb25Qcm9wZXJ0eU5hbWUgPSBcInBvc1wiO1xuICBwcml2YXRlIHN0YXRpYyBtZXRhRGF0YVZhbHVlID0gbmV3IEpzb25NZXRhZGF0YSgpO1xuICBwdWJsaWMgc3RhdGljIGdldCBtZXRhRGF0YSgpIHtcbiAgICByZXR1cm4gSnNvbk9iamVjdC5tZXRhRGF0YVZhbHVlO1xuICB9XG4gIHB1YmxpYyBlcnJvcnMgPSBuZXcgQXJyYXk8SnNvbkVycm9yPigpO1xuICBwdWJsaWMgbGlnaHRTZXJpYWxpemluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdG9Kc29uT2JqZWN0KG9iajogYW55LCBzdG9yZURlZmF1bHRzID0gZmFsc2UpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbk9iamVjdENvcmUob2JqLCBudWxsLCBzdG9yZURlZmF1bHRzKTtcbiAgfVxuICBwdWJsaWMgdG9PYmplY3QoanNvbk9iajogYW55LCBvYmo6IGFueSkge1xuICAgIHRoaXMudG9PYmplY3RDb3JlKGpzb25PYmosIG9iaik7XG4gICAgdmFyIGVycm9yID0gdGhpcy5nZXRSZXF1aXJlZEVycm9yKG9iaiwganNvbk9iaik7XG4gICAgaWYgKCEhZXJyb3IpIHtcbiAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIGpzb25PYmopO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdG9PYmplY3RDb3JlKGpzb25PYmo6IGFueSwgb2JqOiBhbnkpIHtcbiAgICBpZiAoIWpzb25PYmopIHJldHVybjtcbiAgICB2YXIgcHJvcGVydGllcyA9IG51bGw7XG4gICAgdmFyIG9ialR5cGUgPSB1bmRlZmluZWQ7XG4gICAgdmFyIG5lZWRBZGRFcnJvcnMgPSB0cnVlO1xuICAgIGlmIChvYmouZ2V0VHlwZSkge1xuICAgICAgb2JqVHlwZSA9IG9iai5nZXRUeXBlKCk7XG4gICAgICBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKG9ialR5cGUpO1xuICAgICAgbmVlZEFkZEVycm9ycyA9XG4gICAgICAgICEhb2JqVHlwZSAmJiAhSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZihvYmpUeXBlLCBcIml0ZW12YWx1ZVwiKTtcbiAgICB9XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm47XG4gICAgaWYgKG9iai5zdGFydExvYWRpbmdGcm9tSnNvbikge1xuICAgICAgb2JqLnN0YXJ0TG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgfVxuICAgIHByb3BlcnRpZXMgPSB0aGlzLmFkZER5bmFtaWNQcm9wZXJ0aWVzKG9iaiwganNvbk9iaiwgcHJvcGVydGllcyk7XG4gICAgZm9yICh2YXIga2V5IGluIGpzb25PYmopIHtcbiAgICAgIGlmIChrZXkgPT09IEpzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZSkgY29udGludWU7XG4gICAgICBpZiAoa2V5ID09PSBKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lKSB7XG4gICAgICAgIG9ialtrZXldID0ganNvbk9ialtrZXldO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZmluZFByb3BlcnR5KHByb3BlcnRpZXMsIGtleSk7XG4gICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgIGlmIChuZWVkQWRkRXJyb3JzKSB7XG4gICAgICAgICAgdGhpcy5hZGROZXdFcnJvcihcbiAgICAgICAgICAgIG5ldyBKc29uVW5rbm93blByb3BlcnR5RXJyb3Ioa2V5LnRvU3RyaW5nKCksIG9ialR5cGUpLFxuICAgICAgICAgICAganNvbk9ialxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLnZhbHVlVG9PYmooanNvbk9ialtrZXldLCBvYmosIHByb3BlcnR5KTtcbiAgICB9XG4gICAgaWYgKG9iai5lbmRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIG9iai5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHRvSnNvbk9iamVjdENvcmUoXG4gICAgb2JqOiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBzdG9yZURlZmF1bHRzID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmdldFR5cGUpIHJldHVybiBvYmo7XG4gICAgaWYgKHR5cGVvZiBvYmouZ2V0RGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gb2JqLmdldERhdGEoKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKHByb3BlcnR5ICE9IG51bGwgJiYgIXByb3BlcnR5LmNsYXNzTmFtZSkge1xuICAgICAgKDxhbnk+cmVzdWx0KVtKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWVdID0gcHJvcGVydHkuZ2V0T2JqVHlwZShcbiAgICAgICAgb2JqLmdldFR5cGUoKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wZXJ0aWVzVG9Kc29uKFxuICAgICAgb2JqLFxuICAgICAgSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKG9iai5nZXRUeXBlKCkpLFxuICAgICAgcmVzdWx0LFxuICAgICAgc3RvcmVEZWZhdWx0c1xuICAgICk7XG4gICAgdGhpcy5wcm9wZXJ0aWVzVG9Kc29uKFxuICAgICAgb2JqLFxuICAgICAgdGhpcy5nZXREeW5hbWljUHJvcGVydGllcyhvYmopLFxuICAgICAgcmVzdWx0LFxuICAgICAgc3RvcmVEZWZhdWx0c1xuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldER5bmFtaWNQcm9wZXJ0aWVzKG9iajogYW55KTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgcmV0dXJuIFNlcmlhbGl6ZXIuZ2V0RHluYW1pY1Byb3BlcnRpZXNCeU9iaihvYmopO1xuICB9XG4gIHByaXZhdGUgYWRkRHluYW1pY1Byb3BlcnRpZXMoXG4gICAgb2JqOiBhbnksXG4gICAganNvbk9iajogYW55LFxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT5cbiAgKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgaWYgKCFvYmouZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSkgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgdmFyIGR5bmFtaWNQcm9wTmFtZSA9IG9iai5nZXREeW5hbWljUHJvcGVydHlOYW1lKCk7XG4gICAgaWYgKCFkeW5hbWljUHJvcE5hbWUpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIGlmIChqc29uT2JqW2R5bmFtaWNQcm9wTmFtZV0pIHtcbiAgICAgIG9ialtkeW5hbWljUHJvcE5hbWVdID0ganNvbk9ialtkeW5hbWljUHJvcE5hbWVdO1xuICAgIH1cbiAgICB2YXIgZHluYW1pY1Byb3BlcnRpZXMgPSB0aGlzLmdldER5bmFtaWNQcm9wZXJ0aWVzKG9iaik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKGR5bmFtaWNQcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHByb3BlcnRpZXNUb0pzb24oXG4gICAgb2JqOiBhbnksXG4gICAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PixcbiAgICBqc29uOiBhbnksXG4gICAgc3RvcmVEZWZhdWx0cyA9IGZhbHNlXG4gICkge1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnZhbHVlVG9Kc29uKG9iaiwganNvbiwgcHJvcGVydGllc1tpXSwgc3RvcmVEZWZhdWx0cyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB2YWx1ZVRvSnNvbihcbiAgICBvYmo6IGFueSxcbiAgICByZXN1bHQ6IGFueSxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIHN0b3JlRGVmYXVsdHMgPSBmYWxzZVxuICApIHtcbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0eS5pc1NlcmlhbGl6YWJsZSA9PT0gZmFsc2UgfHxcbiAgICAgIChwcm9wZXJ0eS5pc0xpZ2h0U2VyaWFsaXphYmxlID09PSBmYWxzZSAmJiB0aGlzLmxpZ2h0U2VyaWFsaXppbmcpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciB2YWx1ZSA9IHByb3BlcnR5LmdldFZhbHVlKG9iaik7XG4gICAgaWYgKCFzdG9yZURlZmF1bHRzICYmIHByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhciBhcnJWYWx1ZSA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJWYWx1ZS5wdXNoKHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZVtpXSwgcHJvcGVydHksIHN0b3JlRGVmYXVsdHMpKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gYXJyVmFsdWUubGVuZ3RoID4gMCA/IGFyclZhbHVlIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzLnRvSnNvbk9iamVjdENvcmUodmFsdWUsIHByb3BlcnR5LCBzdG9yZURlZmF1bHRzKTtcbiAgICB9XG4gICAgdmFyIGhhc1ZhbHVlID1cbiAgICAgIHR5cGVvZiBvYmpbXCJnZXRQcm9wZXJ0eVZhbHVlXCJdID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIG9ialtcImdldFByb3BlcnR5VmFsdWVcIl0ocHJvcGVydHkubmFtZSwgbnVsbCkgIT09IG51bGw7XG4gICAgaWYgKChzdG9yZURlZmF1bHRzICYmIGhhc1ZhbHVlKSB8fCAhcHJvcGVydHkuaXNEZWZhdWx0VmFsdWUodmFsdWUpKSB7XG4gICAgICByZXN1bHRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHZhbHVlVG9PYmoodmFsdWU6IGFueSwgb2JqOiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucmVtb3ZlUG9zKHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgaWYgKHByb3BlcnR5ICE9IG51bGwgJiYgcHJvcGVydHkuaGFzVG9Vc2VTZXRWYWx1ZSkge1xuICAgICAgcHJvcGVydHkuc2V0VmFsdWUob2JqLCB2YWx1ZSwgdGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmFsdWVBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVUb0FycmF5KHZhbHVlLCBvYmosIHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5ld09iaiA9IHRoaXMuY3JlYXRlTmV3T2JqKHZhbHVlLCBwcm9wZXJ0eSk7XG4gICAgaWYgKG5ld09iai5uZXdPYmopIHtcbiAgICAgIHRoaXMudG9PYmplY3RDb3JlKHZhbHVlLCBuZXdPYmoubmV3T2JqKTtcbiAgICAgIHZhbHVlID0gbmV3T2JqLm5ld09iajtcbiAgICB9XG4gICAgaWYgKCFuZXdPYmouZXJyb3IpIHtcbiAgICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsKSB7XG4gICAgICAgIHByb3BlcnR5LnNldFZhbHVlKG9iaiwgdmFsdWUsIHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcmVtb3ZlUG9zKHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXByb3BlcnR5IHx8ICFwcm9wZXJ0eS50eXBlIHx8IHByb3BlcnR5LnR5cGUuaW5kZXhPZihcInZhbHVlXCIpIDwgMClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnJlbW92ZVBvc0Zyb21PYmoodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUG9zRnJvbU9iaihvYmo6IGFueSkge1xuICAgIGlmICghb2JqKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5yZW1vdmVQb3NGcm9tT2JqKG9ialtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIW9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xuICAgICAgZGVsZXRlIG9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5ld09iaih2YWx1ZTogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSB7IG5ld09iajogbnVsbCwgZXJyb3I6IG51bGwgfTtcbiAgICB2YXIgY2xhc3NOYW1lID0gdmFsdWVbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXTtcbiAgICBpZiAoIWNsYXNzTmFtZSAmJiBwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5LmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lID0gcHJvcGVydHkuY2xhc3NOYW1lO1xuICAgIH1cbiAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5nZXRDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICByZXN1bHQubmV3T2JqID0gY2xhc3NOYW1lXG4gICAgICA/IEpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoY2xhc3NOYW1lLCB2YWx1ZSlcbiAgICAgIDogbnVsbDtcbiAgICByZXN1bHQuZXJyb3IgPSB0aGlzLmNoZWNrTmV3T2JqZWN0T25FcnJvcnMoXG4gICAgICByZXN1bHQubmV3T2JqLFxuICAgICAgdmFsdWUsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGNoZWNrTmV3T2JqZWN0T25FcnJvcnMoXG4gICAgbmV3T2JqOiBhbnksXG4gICAgdmFsdWU6IGFueSxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIGNsYXNzTmFtZTogc3RyaW5nXG4gICk6IEpzb25FcnJvciB7XG4gICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBlcnJvciA9IHRoaXMuZ2V0UmVxdWlyZWRFcnJvcihuZXdPYmosIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BlcnR5LmJhc2VDbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBKc29uTWlzc2luZ1R5cGVFcnJvcihcbiAgICAgICAgICAgIHByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICBwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBKc29uSW5jb3JyZWN0VHlwZUVycm9yKFxuICAgICAgICAgICAgcHJvcGVydHkubmFtZSxcbiAgICAgICAgICAgIHByb3BlcnR5LmJhc2VDbGFzc05hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgdGhpcy5hZGROZXdFcnJvcihlcnJvciwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbiAgcHJpdmF0ZSBnZXRSZXF1aXJlZEVycm9yKG9iajogYW55LCBqc29uVmFsdWU6IGFueSk6IEpzb25FcnJvciB7XG4gICAgaWYgKCFvYmouZ2V0VHlwZSB8fCB0eXBlb2Ygb2JqLmdldERhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNsYXNzTmFtZSA9IG9iai5nZXRUeXBlKCk7XG4gICAgdmFyIHJlcXVpcmVkUHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgICBpZiAoIXJlcXVpcmVkUHJvcGVydGllcykgcmV0dXJuIG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghanNvblZhbHVlW3JlcXVpcmVkUHJvcGVydGllc1tpXV0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHJlcXVpcmVkUHJvcGVydGllc1tpXSwgY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBhZGROZXdFcnJvcihlcnJvcjogSnNvbkVycm9yLCBqc29uT2JqOiBhbnkpIHtcbiAgICBpZiAoanNvbk9iaiAmJiBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdKSB7XG4gICAgICBlcnJvci5hdCA9IGpzb25PYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0uc3RhcnQ7XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICB9XG4gIHByaXZhdGUgdmFsdWVUb0FycmF5KFxuICAgIHZhbHVlOiBBcnJheTxhbnk+LFxuICAgIG9iajogYW55LFxuICAgIGtleTogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHlcbiAgKSB7XG4gICAgaWYgKG9ialtrZXldICYmIHZhbHVlLmxlbmd0aCA+IDApIG9ialtrZXldLnNwbGljZSgwLCBvYmpba2V5XS5sZW5ndGgpO1xuICAgIHZhciB2YWx1ZVJlcyA9IG9ialtrZXldID8gb2JqW2tleV0gOiBbXTtcbiAgICB0aGlzLmFkZFZhbHVlc0ludG9BcnJheSh2YWx1ZSwgdmFsdWVSZXMsIHByb3BlcnR5KTtcbiAgICBpZiAoIW9ialtrZXldKSBvYmpba2V5XSA9IHZhbHVlUmVzO1xuICB9XG4gIHByaXZhdGUgYWRkVmFsdWVzSW50b0FycmF5KFxuICAgIHZhbHVlOiBBcnJheTxhbnk+LFxuICAgIHJlc3VsdDogQXJyYXk8YW55PixcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3T2JqKHZhbHVlW2ldLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAobmV3VmFsdWUubmV3T2JqKSB7XG4gICAgICAgIGlmICghIXZhbHVlW2ldLm5hbWUpIHtcbiAgICAgICAgICBuZXdWYWx1ZS5uZXdPYmoubmFtZSA9IHZhbHVlW2ldLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2gobmV3VmFsdWUubmV3T2JqKTtcbiAgICAgICAgdGhpcy50b09iamVjdENvcmUodmFsdWVbaV0sIG5ld1ZhbHVlLm5ld09iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW5ld1ZhbHVlLmVycm9yKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWVbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmluZFByb3BlcnR5KFxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAga2V5OiBhbnlcbiAgKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgaWYgKHByb3AubmFtZSA9PSBrZXkgfHwgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPT0ga2V5KSByZXR1cm4gcHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBhbGlhcyBmb3IgdGhlIG1ldGFkYXRhIG9iamVjdC4gSXQgY29udGFpbnMgb2JqZWN0IHByb3BlcnRpZXMnIHJ1bnRpbWUgaW5mb3JtYXRpb24gYW5kIGFsbG93cyB5b3UgdG8gbW9kaWZ5IGl0LlxuICogQHNlZSBKc29uTWV0YWRhdGFcbiAqL1xuZXhwb3J0IHZhciBTZXJpYWxpemVyID0gSnNvbk9iamVjdC5tZXRhRGF0YTtcbiIsImltcG9ydCB7IElBY3Rpb25CYXJJdGVtIH0gZnJvbSBcIi4vYWN0aW9uLWJhclwiO1xyXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0TW9kZWwgZXh0ZW5kcyBCYXNlIHtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pIGlzRXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KCkgc2VsZWN0ZWRJdGVtOiBJQWN0aW9uQmFySXRlbTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBpdGVtczogQXJyYXk8SUFjdGlvbkJhckl0ZW0+LFxyXG4gICAgcHVibGljIG9uSXRlbVNlbGVjdDogKGl0ZW06IElBY3Rpb25CYXJJdGVtKSA9PiB2b2lkLFxyXG4gICAgcHVibGljIGFsbG93U2VsZWN0aW9uOiBib29sZWFuLFxyXG4gICAgc2VsZWN0ZWRJdGVtPzogSUFjdGlvbkJhckl0ZW1cclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiaXRlbXNcIik7XHJcbiAgICB0aGlzLml0ZW1zID0gaXRlbXM7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8SUFjdGlvbkJhckl0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtc1wiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogQXJyYXk8SUFjdGlvbkJhckl0ZW0+KSB7XHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZSgwLCB0aGlzLml0ZW1zLmxlbmd0aCwgLi4uKHZhbHVlIHx8IFtdKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0SXRlbSA9IChpdGVtVmFsdWU6IElBY3Rpb25CYXJJdGVtKSA9PiB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmFsbG93U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbVZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5vbkl0ZW1TZWxlY3QpIHtcclxuICAgICAgdGhpcy5vbkl0ZW1TZWxlY3QoaXRlbVZhbHVlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgaXNJdGVtRGlzYWJsZWQgPSAoaXRlbVZhbHVlOiBJQWN0aW9uQmFySXRlbSkgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW1WYWx1ZS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW1WYWx1ZS5lbmFibGVkO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZCA9IChpdGVtVmFsdWU6IElBY3Rpb25CYXJJdGVtKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxvd1NlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGVkSXRlbSA9PSBpdGVtVmFsdWU7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGdldEl0ZW1DbGFzcyA9IChpdGVtVmFsdWU6IElBY3Rpb25CYXJJdGVtKSA9PiB7XHJcbiAgICB2YXIgY2xhc3NOYW1lID0gXCJzdi1saXN0X19pdGVtXCI7XHJcbiAgICBpZiAodGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtVmFsdWUpKSB7XHJcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdi1saXN0X19pdGVtLS1kaXNhYmxlZFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbVZhbHVlKSkge1xyXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWRcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBjbGFzc05hbWU7XHJcbiAgfTtcclxufVxyXG4iLCJpbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZztcbiAgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBJTG9jYWxpemFibGVTdHJpbmcge1xuICBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nO1xuICBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTogYW55O1xuICBnZXRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz47XG59XG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIHRoZSBzdHJpbmcgdGhhdCBzdXBwb3J0cyBtdWx0aS1sYW5ndWFnZXMgYW5kIG1hcmtkb3duLlxuICogSXQgdXNlcyBpbiBhbGwgb2JqZWN0cyB3aGVyZSBzdXBwb3J0IGZvciBtdWx0aS1sYW5ndWFnZXMgYW5kIG1hcmtkb3duIGlzIHJlcXVpcmVkLlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxpemFibGVTdHJpbmcgaW1wbGVtZW50cyBJTG9jYWxpemFibGVTdHJpbmcge1xuICBwdWJsaWMgc3RhdGljIFNlcmlhbGl6ZUFzT2JqZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGRlZmF1bHRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgZGVmYXVsdExvY2FsZSh2YWw6IHN0cmluZykge1xuICAgIHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZGVmYXVsdFJlbmRlcmVyID0gXCJzdi1zdHJpbmctdmlld2VyXCI7XG4gIHB1YmxpYyBzdGF0aWMgZWRpdGFibGVSZW5kZXJlciA9IFwic3Ytc3RyaW5nLWVkaXRvclwiO1xuICBwcml2YXRlIHZhbHVlcyA9IHt9O1xuICBwcml2YXRlIGh0bWxWYWx1ZXMgPSB7fTtcbiAgcHJpdmF0ZSByZW5kZXJlZFRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWxjdWxhdGVkVGV4dFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBvbkdldFRleHRDYWxsYmFjazogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHB1YmxpYyBvblN0ckNoYW5nZWQ6IChvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBwdWJsaWMgb25TZWFyY2hDaGFuZ2VkOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgc2hhcmVkRGF0YTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hJbmRleDogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyLFxuICAgIHB1YmxpYyB1c2VNYXJrZG93bjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMub25DcmVhdGluZygpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyICYmIHRoaXMub3duZXIuZ2V0TG9jYWxlID8gdGhpcy5vd25lci5nZXRMb2NhbGUoKSA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5zZWFyY2hhYmxlVGV4dCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IHRoaXMuY2FsVGV4dCgpO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCAhPT0gdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wdXJlVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhbGN1bGF0ZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgdGhpcy5yZW5kZXJlZFRleHQgPVxuICAgICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWVcbiAgICAgICAgOiB0aGlzLmNhbFRleHQoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRUZXh0O1xuICB9XG4gIHByaXZhdGUgY2FsVGV4dCgpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLnB1cmVUZXh0O1xuICAgIGlmIChcbiAgICAgIHJlcyAmJlxuICAgICAgdGhpcy5vd25lciAmJlxuICAgICAgdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0ICYmXG4gICAgICByZXMuaW5kZXhPZihcIntcIikgPiAtMVxuICAgICkge1xuICAgICAgcmVzID0gdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0KHJlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uR2V0VGV4dENhbGxiYWNrKSByZXMgPSB0aGlzLm9uR2V0VGV4dENhbGxiYWNrKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IHB1cmVUZXh0KCkge1xuICAgIHZhciBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWUobG9jKTtcbiAgICBpZiAoIXJlcyAmJiBsb2MgPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpIHtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0VmFsdWUoc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGUpO1xuICAgIH1cbiAgICBpZiAoIXJlcyAmJiBsb2MgIT09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSB7XG4gICAgICByZXMgPSB0aGlzLmdldFZhbHVlKHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKTtcbiAgICB9XG4gICAgaWYgKCFyZXMpIHJlcyA9IFwiXCI7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0h0bWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzSHRtbFZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGdldCBodG1sKCkge1xuICAgIGlmICghdGhpcy5oYXNIdG1sKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdGhpcy5nZXRIdG1sVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVzS2V5cygpLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dE9ySHRtbCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNIdG1sID8gdGhpcy5nZXRIdG1sVmFsdWUoKSA6IHRoaXMuY2FsY3VsYXRlZFRleHQ7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZEh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dE9ySHRtbDtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxlVGV4dCh0aGlzLmxvY2FsZSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWUobG9jKTtcbiAgICByZXR1cm4gcmVzID8gcmVzIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQobG9jKSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICBsb2MgJiZcbiAgICAgIGxvYyAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXRoaXMuZ2V0VmFsdWUobG9jKSAmJlxuICAgICAgdmFsdWUgPT0gdGhpcy5nZXRMb2NhbGVUZXh0KHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgY3VyTG9jID0gdGhpcy5sb2NhbGU7XG4gICAgaWYgKCFsb2MpIGxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIGlmICghY3VyTG9jKSBjdXJMb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgaGFzT25TdHJDaGFuZ2VkID0gdGhpcy5vblN0ckNoYW5nZWQgJiYgbG9jID09PSBjdXJMb2M7XG4gICAgdmFyIG9sZFZhbHVlID0gaGFzT25TdHJDaGFuZ2VkID8gdGhpcy5wdXJlVGV4dCA6IHVuZGVmaW5lZDtcblxuICAgIGRlbGV0ZSAoPGFueT50aGlzKS5odG1sVmFsdWVzW2xvY107XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUobG9jKSkgdGhpcy5kZWxldGVWYWx1ZShsb2MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBsb2MgIT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgJiZcbiAgICAgICAgICB2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQoc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChsb2MsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobG9jLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKGxvYyA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0ckNoYW5nZWQoKTtcbiAgICBpZiAoaGFzT25TdHJDaGFuZ2VkKSB7XG4gICAgICB0aGlzLm9uU3RyQ2hhbmdlZChvbGRWYWx1ZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzTm9uRGVmYXVsdFRleHQoKTogYm9vbGVhbiB7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBrZXlzLmxlbmd0aCA+IDEgfHwga2V5c1swXSAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbiAgcHVibGljIGdldEpzb24oKTogYW55IHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZ2V0SnNvbigpO1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIGlmIChcbiAgICAgIGtleXMubGVuZ3RoID09IDEgJiZcbiAgICAgIGtleXNbMF0gPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgJiZcbiAgICAgICFzZXR0aW5ncy5zZXJpYWxpemVMb2NhbGl6YWJsZVN0cmluZ0FzT2JqZWN0XG4gICAgKVxuICAgICAgcmV0dXJuICg8YW55PnRoaXMpLnZhbHVlc1trZXlzWzBdXTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbiAgcHVibGljIHNldEpzb24odmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkge1xuICAgICAgdGhpcy5zaGFyZWREYXRhLnNldEpzb24odmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIHRoaXMuaHRtbFZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLnNldExvY2FsZVRleHQobnVsbCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGtleSwgdmFsdWVba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyQXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMub3duZXIpIHtcbiAgICAgIHJldHVybiBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5vd25lci5nZXRSZW5kZXJlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vd25lci5nZXRSZW5kZXJlcih0aGlzLm5hbWUpIHx8IExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlclxuICAgICk7XG4gIH1cbiAgcHVibGljIGVxdWFscyhvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5lcXVhbHMob2JqKTtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLnZhbHVlcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZXMsIG9iai52YWx1ZXMpO1xuICB9XG4gIHByaXZhdGUgc2VhcmNoYWJsZVRleHQ6IHN0cmluZztcbiAgcHVibGljIHNldEZpbmRUZXh0KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT0gdGV4dCkgcmV0dXJuO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRleHQ7XG4gICAgaWYgKCF0aGlzLnNlYXJjaGFibGVUZXh0KSB7XG4gICAgICBsZXQgdGV4dE9ySHRtbCA9IHRoaXMudGV4dE9ySHRtbDtcbiAgICAgIHRoaXMuc2VhcmNoYWJsZVRleHQgPSAhIXRleHRPckh0bWwgPyB0ZXh0T3JIdG1sLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xuICAgIH1cbiAgICB2YXIgc3RyID0gdGhpcy5zZWFyY2hhYmxlVGV4dDtcbiAgICB2YXIgaW5kZXggPSAhIXN0ciAmJiAhIXRleHQgPyBzdHIuaW5kZXhPZih0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaW5kZXggIT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5kZXggPSBpbmRleDtcbiAgICAgIGlmICghIXRoaXMub25TZWFyY2hDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMub25TZWFyY2hDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlYXJjaEluZGV4ICE9IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgb25DaGFuZ2VkKCkge31cbiAgcHJvdGVjdGVkIG9uQ3JlYXRpbmcoKSB7fVxuICBwcml2YXRlIGhhc0h0bWxWYWx1ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMub3duZXIgfHwgIXRoaXMudXNlTWFya2Rvd24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVuZGVyZWRUZXh0ID0gdGhpcy5jYWxjdWxhdGVkVGV4dDtcbiAgICBpZiAoIXJlbmRlcmVkVGV4dCkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgKDxhbnk+dGhpcykuaHRtbFZhbHVlc1tsb2NdID0gdGhpcy5vd25lci5nZXRNYXJrZG93bkh0bWwoXG4gICAgICByZW5kZXJlZFRleHQsXG4gICAgICB0aGlzLm5hbWVcbiAgICApO1xuICAgIHJldHVybiAoPGFueT50aGlzKS5odG1sVmFsdWVzW2xvY10gPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEh0bWxWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXTtcbiAgfVxuICBwcml2YXRlIGRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdChkZWZhdWx0VmFsdWU6IHN0cmluZykge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoa2V5c1tpXSA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkgY29udGludWU7XG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZShrZXlzW2ldKSA9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZWxldGVWYWx1ZShrZXlzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZShsb2M6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSByZXR1cm4gdGhpcy5zaGFyZWREYXRhLmdldFZhbHVlKGxvYyk7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLnZhbHVlc1tsb2NdO1xuICB9XG4gIHByaXZhdGUgc2V0VmFsdWUobG9jOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHRoaXMuc2hhcmVkRGF0YS5zZXRWYWx1ZShsb2MsIHZhbHVlKTtcbiAgICBlbHNlICg8YW55PnRoaXMpLnZhbHVlc1tsb2NdID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBkZWxldGVWYWx1ZShsb2M6IHN0cmluZykge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgdGhpcy5zaGFyZWREYXRhLmRlbGV0ZVZhbHVlKGxvYyk7XG4gICAgZWxzZSBkZWxldGUgKDxhbnk+dGhpcykudmFsdWVzW2xvY107XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZ2V0VmFsdWVzS2V5cygpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gIH1cbn1cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgdGhlIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IHN1cHBvcnRzIG11bHRpLWxhbmd1YWdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsaXphYmxlU3RyaW5ncyBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZVN0cmluZyB7XG4gIHByaXZhdGUgdmFsdWVzOiBhbnkgPSB7fTtcbiAgY29uc3RydWN0b3IocHVibGljIG93bmVyOiBJTG9jYWxpemFibGVPd25lcikge31cbiAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXIgJiYgdGhpcy5vd25lci5nZXRMb2NhbGUgPyB0aGlzLm93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5zZXRWYWx1ZShcIlwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZS5qb2luKFwiXFxuXCIpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gISF2YWwgPyB2YWwuc3BsaXQoXCJcXG5cIikgOiBbXTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKGxvYywgIWxvYyB8fCBsb2MgPT09IHRoaXMubG9jYWxlKTtcbiAgICBpZiAoIXJlcyB8fCAhQXJyYXkuaXNBcnJheShyZXMpIHx8IHJlcy5sZW5ndGggPT0gMCkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHJlcy5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHB1YmxpYyBzZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICB2YXIgdmFsID0gISFuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KFwiXFxuXCIpIDogbnVsbDtcbiAgICB0aGlzLnNldFZhbHVlKGxvYywgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUobG9jOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUobG9jKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlQ29yZShsb2M6IHN0cmluZywgdXNlRGVmYXVsdDogYm9vbGVhbiA9IHRydWUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBsb2MgPSB0aGlzLmdldExvY2FsZShsb2MpO1xuICAgIGlmICh0aGlzLnZhbHVlc1tsb2NdKSByZXR1cm4gdGhpcy52YWx1ZXNbbG9jXTtcbiAgICBpZiAodXNlRGVmYXVsdCkge1xuICAgICAgdmFyIGRlZkxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgICAgaWYgKGxvYyAhPT0gZGVmTG9jKSByZXR1cm4gdGhpcy52YWx1ZXNbZGVmTG9jXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHB1YmxpYyBzZXRWYWx1ZShsb2M6IHN0cmluZywgdmFsOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgbG9jID0gdGhpcy5nZXRMb2NhbGUobG9jKTtcbiAgICBpZiAoIXZhbCB8fCB2YWwubGVuZ3RoID09IDApIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1tsb2NdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlc1tsb2NdID0gdmFsO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVzS2V5cygpLmxlbmd0aCA9PSAwO1xuICB9XG4gIHByaXZhdGUgZ2V0TG9jYWxlKGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISFsb2MpIHJldHVybiBsb2M7XG4gICAgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgcmV0dXJuICEhbG9jID8gbG9jIDogc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gIH1cbiAgcHVibGljIGdldExvY2FsZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBrZXlzO1xuICB9XG4gIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKFxuICAgICAga2V5cy5sZW5ndGggPT0gMSAmJlxuICAgICAga2V5c1swXSA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXNldHRpbmdzLnNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3RcbiAgICApXG4gICAgICByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2tleXNbMF1dO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKG51bGwsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCB2YWx1ZVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGFyYWJpY1N1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLYp9mE2LPYp9io2YJcIixcbiAgcGFnZU5leHRUZXh0OiBcItin2YTYqtin2YTZilwiLFxuICBjb21wbGV0ZVRleHQ6IFwi2KXYsdiz2KfZhCDYp9mE2KjZitin2YbYp9iqXCIsXG4gIHByZXZpZXdUZXh0OiBcItmF2LnYp9mK2YbYqVwiLFxuICBlZGl0VGV4dDogXCLYqti52K/ZitmEXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLYqNiv2KfZitipXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi2YbYtSDYotiu2LFcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItmE2Kcg2LTZitihXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItin2K7YqtixINin2YTZg9mEXCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MX0g2LXZgdit2KkgezB9INmF2YZcIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItiz2KzZhCB7MH0g2YXZhiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItiq2YXYqiDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2KPYs9im2YTYqSB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi2YTYpyDYqtmI2KzYryDYtdmB2K3YqSDZhdix2KbZitipINij2Ygg2LPYpNin2YQg2YHZiiDYp9mE2YbZhdmI2LDYrFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIti02YPYsdinINmE2YPZhSDZhNin2LPYqtmD2YXYp9mEINin2YTZhtmF2YjYsNisIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi2KrYuNmH2LEg2LPYrNmE2KfYqtmG2Kcg2KPZhtmDINmC2K8g2KPZg9mF2YTYqiDZh9iw2Kcg2KfZhNin2LPYqti32YTYp9i5INio2KfZhNmB2LnZhC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCIuLi7Zitiq2YUg2KrYrdmF2YrZhCDYp9mE2YbZhdmI2LDYrFwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCIuLi7Yp9iu2KrYsVwiLFxuICB2YWx1ZTogXCLYp9mE2YLZitmF2KlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCIu2YrYsdis2Ykg2KfZhNil2KzYp9io2Kkg2LnZhNmJINin2YTYs9ik2KfZhFwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLYp9mE2LHYrNin2KEg2KfZhNil2KzYp9io2Kkg2LnZhNmJINiz2KTYp9mEINmI2KfYrdivINi52YTZiSDYp9mE2KPZgtmELlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItmK2LHYrNmJINin2YTYpdis2KfYqNipINi52YTZiSDYp9mE2KPYs9im2YTYqSDZgdmKINis2YXZiti5INin2YTYtdmB2YjZgVwiLFxuICBudW1lcmljRXJyb3I6IFwi2YrYrNioINij2YYg2KrZg9mI2YYg2KfZhNmC2YrZhdipINix2YLZhdmK2KkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YXYpyDZhNinINmK2YLZhCDYudmGIHswfSDYrdix2YjZgVwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINij2YLZhCDZhdmGIHswfSDYrdix2YjZgVwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItmK2LHYrNmJINil2K/Yrtin2YQg2KPZg9ir2LEg2YXZhiB7MH0g2YjYo9mC2YQg2YXZhiB7MX0g2K3YsdmI2YFcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLZitix2KzZiSDZhdmE2KEg2YXYpyDZhNinINmK2YLZhCDYudmGIHswfSDYp9mE2LXZgdmI2YFcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi2YrYsdis2Ykg2KrYrdiv2YrYryDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLZitix2KzZiSDYqtit2K/ZitivINmF2Kcg2YTYpyDZitiy2YrYryDYudmGIHswfSDYp9mE2YXYqti62YrYsdin2KpcIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZg9ir2LEg2YXZhiB7MX0g2YjYqtiz2KfZiNmKINij2Ygg2KPZgtmEINmF2YYgezJ92KdcIixcbiAgbnVtZXJpY01pbjogXCLZiCd7MH0nINmK2KzYqCDYo9mGINiq2YPZiNmGINmF2LPYp9mI2YrYqSDYo9mIINij2YPYq9ixINmF2YYgezF92KdcIixcbiAgbnVtZXJpY01heDogXCLZiCd7MH0nINmK2KzYqCDYo9mGINiq2YPZiNmGINmF2LPYp9mI2YrYqSDYo9mIINij2YLZhCDZhdmGIHsxfdinXCIsXG4gIGludmFsaWRFbWFpbDogXCLYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDYqNix2YrYryDYp9mE2YPYqtix2YjZhtmKINi12K3ZititXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItmK2KzYqCDYo9mGINmK2LnYsdi2INin2YTYqti52KjZitixOiB7MH0gJ9i12YjYp9ioJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIti32YTYqCDYpdix2KzYp9i5INiu2LfYoyAnezB9Jy4gezF92KdcIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIti52KfYryDYt9mE2Kgg2KfZhNio2YrYp9mG2KfYqiDZgdin2LHYuiDYo9mIICfYp9mE2YXYs9in2LEnINi62YrYsSDYtdit2YrYrSBcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLZitmG2KjYutmKINij2YTYpyDZitiq2KzYp9mI2LIg2K3YrNmFINin2YTZhdmE2YEgezB92KdcIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINmC2YrZhdipINij2K7YsdmJXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi2KrYrdmF2YrZhCDYp9mE2YXZhNmBINin2YTYrtin2LUg2KjZgy4g2YrYsdis2Ykg2KfZhNin2YbYqti42KfYsSDYudiv2Kkg2KvZiNin2YYg2YjYp9mE2YXYrdin2YjZhNipINmE2KfYrdmC2YvYp1wiLFxuICBsb2FkaW5nRmlsZTogXCLYrNin2LEg2KfZhNiq2K3ZhdmK2YQuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLYp9iu2KrYsSDYp9mE2YXZhNmB2KfYqi4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi2YTZhSDYqtmC2YUg2KjYp9iu2KrZitin2LEg2YXZhNmBXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi2YfZhCDYqtix2YrYryDYrdiw2YEg2KfZhNiz2KzZhNifXCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi2YrYrNioINij2YYg2KrZg9mI2YYg2YfYsNmHINin2YTZgtmK2YXYqSDZgdix2YrYr9ipLlwiLFxuICBhZGRDb2x1bW46IFwi2KPYttmBINin2YTYudmF2YjYr1wiLFxuICBhZGRSb3c6IFwi2KfYttin2YHYqSDYtdmBXCIsXG4gIHJlbW92ZVJvdzogXCLYpdiy2KfZhNipINi12YFcIixcbiAgYWRkUGFuZWw6IFwi2KfYttmBINis2K/ZitivXCIsXG4gIHJlbW92ZVBhbmVsOiBcItil2LLYp9mE2KlcIixcbiAgY2hvaWNlc19JdGVtOiBcItio2YbYr1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIti52YXZiNivXCIsXG4gIG1hdHJpeF9yb3c6IFwi2LXZgVwiLFxuICBzYXZpbmdEYXRhOiBcItmK2KrZhSDYrdmB2Lgg2KfZhNmG2KrYp9im2Kwg2LnZhNmJINin2YTYrtin2K/ZhSAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItit2K/YqyDYrti32KMg2YjZhNmFINmG2KrZhdmD2YYg2YXZhiDYrdmB2Lgg2KfZhNmG2KrYp9im2KwuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItiq2YUg2K3Zgdi4INin2YTZhtiq2KfYptisINio2YbYrNin2K0hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLYrdin2YjZhCDZhdis2K/Yr9inXCIsXG4gIHRpbWVyTWluOiBcItiv2YLZitmC2KlcIixcbiAgdGltZXJTZWM6IFwi2KvYp9mG2YrYqVwiLFxuICB0aW1lclNwZW50QWxsOiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDYudmE2Ykg2YfYsNmHINin2YTYtdmB2K3YqSDZiCB7MX0g2KXYrNmF2KfZhNin2YsuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDYudmE2Ykg2YfYsNmHINin2YTYtdmB2K3YqS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLZhNmC2K8g2KPZhtmB2YLYqiB7MH0g2KXYrNmF2KfZhNin2YsuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLZhNmC2K8g2KPZhtmB2YLYqiB7MH0g2YXZhiB7MX0g2YHZiiDZh9iw2Ycg2KfZhNi12YHYrdipINmIIHsyfSDZhdmGINil2KzZhdin2YTZiiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDZhdmGIHsxfSDZgdmKINmH2LDZhyDYp9mE2LXZgdit2KkuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi2YTZgtivINij2YbZgdmC2KogezB9INmF2YYg2KXYrNmF2KfZhNmKIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItmG2LjZitmBXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLZiNin2LbYrVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLYp9iu2KrYsSDZhdmE2YFcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi2YLZhSDYqNil2LLYp9mE2Kkg2YfYsNinINin2YTZhdmE2YFcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLZhti52YVcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItmE2KdcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi2YfZhCDYo9mG2Kog2YXYqtij2YPYryDYo9mG2YMg2KrYsdmK2K8g2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2YTZgTogezB92J9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2LLYp9mE2Kkg2YPYp9mB2Kkg2KfZhNmF2YTZgdin2KrYn1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi2LnZhtmI2KfZhiDYp9mE2LPYpNin2YRcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiYXJcIl0gPSBhcmFiaWNTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiYXJcIl0gPSBcItin2YTYudix2KjZitipXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGJ1bGdhcmlhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQndCw0L/RgNC10LRcIixcbiAgY29tcGxldGVUZXh0OiBcItCa0YDQsNC5XCIsXG4gIHByZXZpZXdUZXh0OiBcItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRj1wiLFxuICBlZGl0VGV4dDogXCLRgNC10LTQsNC60YLQuNGA0LDQvdC1XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQndCw0YfQsNC70L5cIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQlNGA0YPQs9C+ICjQvtC/0LjRiNC10YLQtSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCd0LjRgtC+INC10LTQuNC9XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCS0YHQuNGH0LrQuFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi0YHRgtGALiB7MH0sINC+0LHRidC+INGB0YLRgC4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQl9Cw0L/QuNGBIHswfSDQvtGCIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0J7RgtCz0L7QstC+0YDQtdC90Lgg0L3QsCB7MH0gLyB7MX0g0LLRitC/0YDQvtGB0LBcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0JDQvdC60LXRgtCw0YLQsCDQvdC1INGB0YrQtNGK0YDQttCwINCy0LjQtNC40LzQuCDRgdGC0YDQsNC90LjRhtC4INC40LvQuCDQstGK0L/RgNC+0YHQuC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQstC4INC30LAg0YPRh9Cw0YHRgtC40LXRgtC+INCyINCw0L3QutC10YLQsNGC0LAhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwi0JjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQstC40LUg0LLQtdGH0LUg0YHRgtC1INC/0L7Qv9GK0LvQvdC40LvQuCDQsNC90LrQtdGC0LDRgtCwLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCX0LDRgNC10LbQtNCw0L3QtSDQvdCwINCw0L3QutC10YLQsNGC0LAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JjQt9Cx0LXRgNC10YLQtS4uLlwiLFxuICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICByZXF1aXJlZEVycm9yOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQvdCwINGB0LvQtdC00L3QuNGPINCy0YrQv9GA0L7RgS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0JzQvtC70Y8sINC+0YLQs9C+0LLQvtGA0LXRgtC1INC/0L7QvdC1INC90LAg0LXQtNC40L0g0L7RgiDQstGK0L/RgNC+0YHQuNGC0LUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JzQvtC70Y8sINC+0YLQs9C+0LLQvtGA0LXRgtC1INC90LAg0LLRitC/0YDQvtGB0LjRgtC1INC90LAg0LLRgdC40YfQutC4INGA0LXQtNC+0LLQtS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCh0YLQvtC50L3QvtGB0YLRgtCwINGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INGH0LjRgdC70L4uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0JzQvtC70Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L/QvtC90LUgezB9INGB0LjQvNCy0L7Qu9CwLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC90LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INGB0LjQvNCy0L7Qu9CwLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwi0JzQvtC70Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INC4INC/0L4t0LzQsNC70LrQviDQvtGCIHsxfSDRgdC40LzQstC+0LvQsC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQnNC+0LvRjywg0L/QvtC/0YrQu9C90LXRgtC1INC/0L7QvdC1IHswfSDRgNC10LTQsC5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JzQvtC70Y8sINC40LfQsdC10YDQtdGC0LUg0L/QvtC90LUgezB9INCy0LDRgNC40LDQvdGC0LAuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC90LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INCy0LDRgNC40LDQvdGC0LAuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdCz0L7Qu9GP0LzQsCDQvtGCIHsxfSDQuCDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdCz0L7Qu9GP0LzQsCDQvtGCIHsxfVwiLFxuICBudW1lcmljTWF4OiBcItCh0YLQvtC50L3QvtGB0YLRgtCwICd7MH0nINGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INGA0LDQstC90LAg0LjQu9C4INC/0L4t0LzQsNC70LrQsCDQvtGCIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LLQsNC70LjQtNC10L0g0LDQtNGA0LXRgSDQvdCwINC10LvQtdC60YLRgNC+0L3QvdCwINC/0L7RidCwLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQmNC30YDQsNC30YrRgjogezB9INGC0YDRj9Cx0LLQsCDQtNCwINC00LDQstCwINGA0LXQt9GD0LvRgtCw0YIgJ3RydWUnICjQuNGB0YLQuNC90LApLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNGP0LLQutCw0YLQsCDQstC+0LTQuCDQtNC+INCz0YDQtdGI0LrQsCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCX0LDRj9Cy0LrQsNGC0LAg0L3QtSDQstGA0YrRidCwINC00LDQvdC90Lgg0LjQu9C4INGH0LDRgdGC0YLQsCAncGF0aCcgKNC/0YrRgiDQtNC+INGC0YrRgNGB0LXQvdC40Y8g0YDQtdGB0YPRgNGBINC90LAg0YHRitGA0LLRitGA0LApINC1INC90LXQv9GA0LDQstC40LvQvdC+INC30LDQtNCw0LTQtdC90LBcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQoNCw0LfQvNC10YDRitGCINC90LAg0YTQsNC50LvQsCDRgdC70LXQtNCy0LAg0LTQsCDQvdC1INC/0YDQtdCy0LjRiNCw0LLQsCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQnNC+0LvRjywg0LLRitCy0LXQtNC10YLQtSDQtNGA0YPQs9Cw0YLQsCDRgdGC0L7QudC90L7RgdGCLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGI0LjRgiDRhNCw0LnQuyDRgdC1INC30LDRgNC10LbQtNCwINC90LAg0YHRitGA0LLRitGA0LAuINCc0L7Qu9GPLCDQuNC30YfQsNC60LDQudGC0LUg0L3Rj9C60L7Qu9C60L4g0YHQtdC60YPQvdC00Lgg0Lgg0YLQvtCz0LDQstCwINC+0L/QuNGC0LLQsNC50YLQtSDQvtGC0L3QvtCy0L4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCX0LDRgNC10LbQtNCw0L3QtS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCY0LfQsdC10YDQtdGC0LUg0YTQsNC50Lso0L7QstC1KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi0J3Rj9C80LAg0LjQt9Cx0YDQsNC9INGE0LDQudC7XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi0JbQtdC70LDQtdGC0LUg0LvQuCDQtNCwINC40LfRgtGA0LjQtdGC0LUg0LfQsNC/0LjRgdCwP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCh0YLQvtC50L3QvtGB0YLRgtCwINGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INGD0L3QuNC60LDQu9C90LAuXCIsXG4gIGFkZENvbHVtbjogXCLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtC70L7QvdCwXCIsXG4gIGFkZFJvdzogXCLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQtdC0XCIsXG4gIHJlbW92ZVJvdzogXCLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGA0LXQtFwiLFxuICBhZGRQYW5lbDogXCLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QsNC90LXQu1wiLFxuICByZW1vdmVQYW5lbDogXCLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC/0LDQvdC10LtcIixcbiAgY2hvaWNlc19JdGVtOiBcItC10LvQtdC80LXQvdGCXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0JrQvtC70L7QvdCwXCIsXG4gIG1hdHJpeF9yb3c6IFwi0KDQtdC0XCIsXG4gIHNhdmluZ0RhdGE6IFwi0KDQtdC30YPQu9GC0LDRgtC40YLQtSDRgdC1INC30LDQv9Cw0LfQstCw0YIg0L3QsCDRgdGK0YDQstGK0YDQsC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6XG4gICAgXCLQn9C+0YDQsNC00Lgg0LLRitC30L3QuNC60L3QsNC70LAg0LPRgNC10YjQutCwINGA0LXQt9GD0LvRgtCw0YLQuNGC0LUg0L3QtSDQvNC+0LbQsNGF0LAg0LTQsCDQsdGK0LTQsNGCINC30LDQv9Cw0LfQtdC90LguXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0LHRj9GF0LAg0LfQsNC/0LDQt9C10L3QuCDRg9GB0L/QtdGI0L3QviFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCd0L7QsiDQvtC/0LjRglwiLFxuICB0aW1lck1pbjogXCLQvNC40L1cIixcbiAgdGltZXJTZWM6IFwi0YHQtdC6XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsCDQuCDQvtCx0YnQviB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1IHswfSDQvdCwINGC0LDQt9C4INGB0YLRgNCw0L3QuNGG0LAuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUg0L7QsdGJ0L4gezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi0JLQuNC1INC40LfQv9C+0LfQstCw0YXRgtC1IHswfSDQvtGCIHsxfSDQvdCwINGC0LDQt9C4INGB0YLRgNCw0L3QuNGG0LAg0Lgg0L7QsdGJ0L4gezJ9INC+0YIgezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSB7MH0g0L7RgiB7MX0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1INC+0LHRidC+IHswfSDQvtGCIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCY0LfRh9C40YHRgtCy0LDQvdC1XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQndCw0YfQsNC70L3QviDRgdGK0YHRgtC+0Y/QvdC40LVcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JjQt9Cx0LXRgNC10YLQtSDRhNCw0LnQu1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGE0LDQudC70LBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQlNCwXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQndC1XCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCd0LDQuNGB0YLQuNC90LAg0LvQuCDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDRgtC+0LfQuCDRhNCw0LnQuzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0J3QsNC40YHRgtC40L3QsCDQu9C4INC40YHQutCw0YLQtSDQtNCwINC/0YDQtdC80LDRhdC90LXRgtC1INCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCX0LDQs9C70LDQstC40LUg0L3QsCDQstGK0L/RgNC+0YHQsFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJiZ1wiXSA9IGJ1bGdhcmlhblN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJiZ1wiXSA9IFwi0LHRitC70LPQsNGA0YHQutC4XCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGNhdGFsYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgcGFnZU5leHRUZXh0OiBcIlNlZ8O8ZW50XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiVW4gYWx0cmUgKGRlc2NyaWd1aSlcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlDDoGdpbmEgezB9IGRlIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJObyBoaSBoYSBjYXAgcMOgZ2luYSB2aXNpYmxlIG8gcHJlZ3VudGEgYSBsJ2VucXVlc3RhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkdyw6BjaWVzIHBlciBjb21wbGV0YXIgbCdlbnF1ZXN0YSFcIixcbiAgbG9hZGluZ1N1cnZleTogXCJMJ2VucXVlc3RhIHMnZXN0w6AgY2FycmVnYW50IC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZWxlY2Npb25hIC4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIlNpIHVzIHBsYXUgY29udGVzdGkgbGEgcHJlZ3VudGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiU2kgdXMgcGxhdSBjb250ZXN0aSBsZXMgcHJlZ3VudGVzIGRlIGNhZGEgZmlsZXJhLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTCdlc3RpbWFjacOzIGhhIGRlIHNlciBudW3DqHJpY2EuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBhbG1lbnlzIHswfSBzw61tYm9scy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJTaSB1cyBwbGF1IGVudHJlIG1lbnlzIGRlIHswfSBzw61tYm9scy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJTaSB1cyBwbGF1IGVudHJlIG3DqXMgZGUgezB9IGkgbWVueXMgZGUgezF9IHPDrW1ib2xzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlNpIHVzIHBsYXUgb21wbGkgYWxtZW55cyB7MH0gZmlsZXJlcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2kgdXMgcGxhdSBzZWxlY2Npb25pIGFsbWVueXMgezB9IHZhcmlhbnRzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTaSB1cyBwbGF1IHNlbGVjY2lvbmkgbm8gbcOpcyBkZSB7MH0gdmFyaWFudHMuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiRWwgJ3swfScgZGV1IHNlciBpZ3VhbCBvIG3DqXMgZGUgezF9IGkgaWd1YWwgbyBtZW55cyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJFbCAnezB9JyBoYSBkZSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIkVsICd7MH0nIGhhIGRlIHNlciBpZ3VhbCBvIG1lbnlzIGRlIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiU2kgdXMgcGxhdSBhZmVnaXUgdW4gY29ycmV1IGVsZWN0csOybmljIHbDoGxpZC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHNvbMK3bGljaXR1ZCB2YSB0b3JuYXIgZXJyb3IgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJMYSBzb2zCt2xpY2l0dWQgdmEgdG9ybmFyIGJ1aWRhIGRlIGRhdGVzIG8gbGEgcHJvcGlldGF0ICd0cmFqZWN0w7JyaWEnIG5vIMOpcyBjb3JyZWN0YVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkxhIG1pZGEgZGUgbCdhcnhpdSBubyBwb3QgZXhjZWRpciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJTaSB1cyBwbGF1IGFmZWdpdSBsJ2FsdHJhIGVzdGltYWNpw7MuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJFbCBzZXUgYXJ4aXUgcydlc3TDoCBwdWphbnQuIFNpIHVzIHBsYXUgZXNwZXJpIHVucyBzZWdvbnMgaSBpbnRlbnRldS1obyBkZSBub3UuXCIsXG4gIGFkZFJvdzogXCJBZmVnaXUgdW5hIGZpbGVyYVwiLFxuICByZW1vdmVSb3c6IFwiRWxpbWluYXIgdW5hIGZpbGVyYVwiLFxuICBjaG9pY2VzX2ZpcnN0SXRlbTogXCJwcmltZXIgYXJ0aWNsZVwiLFxuICBjaG9pY2VzX3NlY29uZEl0ZW06IFwic2Vnb24gYXJ0aWNsZVwiLFxuICBjaG9pY2VzX3RoaXJkSXRlbTogXCJ0ZXJjZXIgYXJ0aWNsZVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtbmFcIixcbiAgbWF0cml4X3JvdzogXCJGaWxlcmFcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJjYVwiXSA9IGNhdGFsYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiY2FcIl0gPSBcImNhdGFsw6BcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgY3JvYXRpYW5TdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHJldGhvZG5pXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTbGplZGXEh2lcIixcbiAgY29tcGxldGVUZXh0OiBcIktvbXBsZXRhblwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmVnbGVkXCIsXG4gIGVkaXRUZXh0OiBcIlVyZcSRaXZhbmplXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJQb8SNZXRha1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk9zdGFsaSAob3BpcylcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5pdGtvXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdCBBbGxcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlN0cmFuaWNhIHswfSBvZCB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlphcGlzYSB7MH0gb2QgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJPZGdvdm9yaW8gbmEgezB9L3sxfSBwaXRhbmphXCIsXG4gIGVtcHR5U3VydmV5OiBcIlUgYW5rZXRpIG5lbWEgdmlkbGppdmUgc3RyYW5pY2UgaWxpIHBpdGFuamEuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiSHZhbGEgdmFtIMWhdG8gc3RlIHphdnLFoWlsaSBhbmtldHUhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJOYcWhaSB6YXBpc2kgcG9rYXp1anUgZGEgc3RlIHZlxIcgemF2csWhaWxpIG92dSBhbmtldHUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQW5rZXRhIG8gdcSNaXRhdmFuamUuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiT2RhYmVyaXRlLi4uXCIsXG4gIHZhbHVlOiBcInZyaWplZG5vc3RcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJNb2xpbSB2YXMgb2Rnb3Zvcml0ZSBuYSBwaXRhbmplLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJNb2xpbSB2YXMgb2Rnb3Zvcml0ZSBuYSBiYXJlbSBqZWRubyBwaXRhbmplLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kZ292b3JpdGUgbmEgcGl0YW5qYSB1IHN2aW0gcmVkb3ZpbWEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWcmlqZWRub3N0IGJpIHRyZWJhbGEgYml0aSBicm9qxI1hbmEuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVW5lc2l0ZSBuYWptYW5qZSB7MH0gem5hayhvdmEpLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlVuZXNpdGUgbWFuamUgb2QgezB9IHpuYWsob3ZhKS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJVbmVzaXRlIHZpxaFlIG9kIHswfSBpIG1hbmplIG9kIHsxfSB6bmFrb3ZhLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIk1vbGltbyBpc3B1bml0ZSBuYWptYW5qZSB7MH0gcmVkYWthLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJPZGFiZXJpdGUgYmFyZW0gezB9IHZhcmlqYW50ZS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiT2RhYmVyaXRlIG5lIHZpxaFlIG9kIHswfSB2YXJpamFudGkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9J2JpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgdmnFoWUgb2QgezF9IGkgamVkbmFrIGlsaSBtYW5qaSBvZCB7Mn0uXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgYmkgdHJlYmFvIGJpdGkgamVkbmFrIGlsaSB2acWhZSBvZCB7MX0uXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgYmkgdHJlYmFvIGJpdGkgamVkbmFrIGlsaSBtYW5qaSBvZCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlVuZXNpdGUgdmFsamFudSBlLW1haWwgYWRyZXN1LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenJhejogezB9IHRyZWJhIHZyYXRpdGkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiWmFodGpldiB2cmF0aW8gcG9ncmXFoWt1ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiWmFodGpldiBqZSB2cmF0aW8gcHJhem5lIHBvZGF0a2UgaWxpIGplICdwYXRoJyBzdm9qc3R2byBuZXRvxI1uYS5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpxI1pbmEgZGF0b3Rla2UgbmUgc21pamUgcHJlbGF6aXRpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlVuZXNpdGUgZHJ1Z3UgdnJpamVkbm9zdC5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlZhxaFhIGRhdG90ZWthIHNlIHByZW5vc2kuIFByacSNZWthanRlIG5la29saWtvIHNla3VuZGkgaSBwb2t1xaFhanRlIHBvbm92bm8uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIlXEjWl0YXZhbmplLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiT2RhYmVyaXRlIGRhdG90ZWt1Li4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOaWplIG9kYWJyYW5hIGRhdG90ZWthXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwixb1lbGl0ZSBsaSBpemJyaXNhdGkgemFwaXM/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGEgYmkgdnJpamVkbm9zdCB0cmViYWxhIGJpdGkgamVkaW5zdHZlbmEuXCIsXG4gIGFkZENvbHVtbjogXCJEb2RhdmFuamUgc3R1cGNhXCIsXG4gIGFkZFJvdzogXCJEb2RhdmFuamUgcmVkYWthXCIsXG4gIHJlbW92ZVJvdzogXCJVa2xvbml0aVwiLFxuICBhZGRQYW5lbDogXCJEb2RhdmFuamUgbm92aWhcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVWtsb25pdGlcIixcbiAgY2hvaWNlc19JdGVtOiBcInN0YXZrdVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlN0dXBjYVwiLFxuICBtYXRyaXhfcm93OiBcIlJlZGFrXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmV6dWx0YXRpIHNlIHNwcmVtYWp1IG5hIHBvc2x1xb5pdGVsanUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRvxaFsbyBqZSBkbyBwb2dyZcWha2UgaSBuaXNtbyBtb2dsaSBzcHJlbWl0aSByZXp1bHRhdGUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdGF0aSBzdSB1c3BqZcWhbm8gc3ByZW1samVuaSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlBva3XFoWFqIHBvbm92b1wiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVmkgc3RlIHByb3ZlbGkgezB9IG5hIG92b2ogc3RyYW5pY2kgaSB7MX0gdWt1cG5vLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJQb3Ryb8WhaWxpIHN0ZSB7MH0gbmEgb3Z1IHN0cmFuaWN1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC4gezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiVmkgc3RlIHByb3ZlbGkgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpIGkgezJ9IG9kIHszfSB1a3Vwbm8uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlBvdHJvxaFpbyBzaSB7MH0gb2QgezF9IG5hIG92b2ogc3RyYW5pY2kuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVWt1cG5vIHN0ZSBwb3Ryb8WhaWxpIHswfSBvZCB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJPxI1pc3RpdGlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIk/EjWlzdGl0aVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJPZGFiZXJpdGUgZGF0b3Rla3VcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVWtsb25pdGUgb3Z1IGRhdG90ZWt1XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiRGFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkplc3RlIGxpIHNpZ3VybmkgZGEgxb5lbGl0ZSB1a2xvbml0aSBvdnUgZGF0b3Rla3U6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkplc3RlIGxpIHNpZ3VybmkgZGEgxb5lbGl0ZSB1a2xvbml0aSBzdmUgZGF0b3Rla2U/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJOYXNsb3YgcGl0YW5qYVwiLFxuICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiT3RrYXphdGlcIixcbiAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiUHJpbWlqZW5pdGlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaHJcIl0gPSBjcm9hdGlhblN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJoclwiXSA9IFwiaHJ2YXRza2lcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgY3plY2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUMWZZWRjaG96w61cIixcbiAgcGFnZU5leHRUZXh0OiBcIkRhbMWhw61cIixcbiAgY29tcGxldGVUZXh0OiBcIkhvdG92b1wiLFxuICBwcmV2aWV3VGV4dDogXCJOw6FobGVkXCIsXG4gIGVkaXRUZXh0OiBcIlVwcmF2aXRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiSmluw6Egb2Rwb3bEm8SPIChuYXBpxaF0ZSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIsW9w6FkbsO9XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZ5YnJhdCB2xaFlXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJhbmEgezB9IHogezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJaw6F6bmFtIHswfSB6IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiWm9kcG92xJt6ZW7DqSBvdMOhemt5OiB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiUHLFr3prdW11IG5lb2JzYWh1amUgxb7DoWRuw6kgb3TDoXpreS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJExJtrdWplbWUgemEgdnlwbG7Em27DrSBwcsWvemt1bXUhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJOYcWhZSB6w6F6bmFteSB1a2F6dWrDrSwgxb5lIGpzdGUgdGVudG8gcHLFr3prdW0gamnFviBkb2tvbsSNaWxpLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlByb2LDrWjDoSBuYcSNw610w6Fuw60gcHLFr3prdW11Li4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZ5YmVyLi4uXCIsXG4gIHZhbHVlOiBcImhvZG5vdGFcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJPZHBvdsSbenRlIHByb3PDrW0gbmEgb3TDoXprdS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGxlYXNlIGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIHbFoWVjaG55IG90w6F6a3kuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWIHRvbXRvIHBvbGkgbHplIHphZGF0IHBvdXplIMSNw61zbGEuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB6bmFrxa8uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIG3DqW7EmyBuZcW+IHswfSB6bmFrxa8uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiWmFkZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IGEgbcOpbsSbIG5lxb4gezF9IHpuYWvFry5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWeXBsxYh0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSDFmcOhZGvFry5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVnliZXJ0ZSBwcm9zw61tIGFsZXNwb8WIIHswfSB2YXJpYW50eS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTmV2eWLDrXJlanRlIHByb3PDrW0gdsOtY2UgbmXFviB7MH0gdmFyaWFudC5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IHbEm3TFocOtIG5lYm8gcm92bm8gezF9IGEgbWVuxaHDrSBuZWJvIHJvdm5vIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IHbEm3TFocOtIG5lYm8gcm92bm8gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiT2Rwb3bEm8SPICd7MH0nIGJ5IG3Em2xvIGLDvXQgbWVuxaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiWmFkZWp0ZSBwcm9zw61tIHBsYXRub3UgZS1tYWlsb3ZvdSBhZHJlc3UuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlbDvXJhejogezB9IGJ5IG3Em2wgdnLDoXRpdCBob2Rub3R1IOKAnnRydWXigJwuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJQb8W+YWRhdmVrIHZyw6F0aWwgY2h5YnUgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUG/FvmFkYXZlayBuZXZyw6F0aWwgZGF0YSBuZWJvIGNlc3RhIGplIG5lcGxhdG7DoVwiLFxuICBleGNlZWRNYXhTaXplOiBcIlZlbGlrb3N0IHNvdWJvcnUgYnkgbmVtxJtsYSBiw710IHbEm3TFocOtIG5lxb4gezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiWmFkZWp0ZSBwcm9zw61tIGppbm91IGhvZG5vdHUuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwiVsOhxaEgc291Ym9yIHNlIG5haHLDoXbDoS4gWmt1c3RlIHRvIHByb3PDrW0gemEgbsSba29saWsgc2VrdW5kLlwiLFxuICBsb2FkaW5nRmlsZTogXCJOYcSNw610w6Fuw60uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWeWJlcnRlIHNvdWJvcnkgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZW7DrSB6dm9sZW7DvSDFvsOhZG7DvSBzb3Vib3JcIixcbiAgY29uZmlybURlbGV0ZTogXCJDaGNldGUgc21hemF0IHrDoXpuYW0/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGF0byBob2Rub3RhIGJ5IG3Em2xhIGLDvXQgamVkaW5lxI1uw6EuXCIsXG4gIGFkZENvbHVtbjogXCJQxZlpZGF0IHNsb3VwZWNcIixcbiAgYWRkUm93OiBcIlDFmWlkYXQgxZnDoWRla1wiLFxuICByZW1vdmVSb3c6IFwiT2RzdHJhbml0XCIsXG4gIGFkZFBhbmVsOiBcIlDFmWlkYXQgbm92w71cIixcbiAgcmVtb3ZlUGFuZWw6IFwiT2RzdHJhbml0XCIsXG4gIGNob2ljZXNfSXRlbTogXCJwb2xvxb5rYVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlNsb3VwZWNcIixcbiAgbWF0cml4X3JvdzogXCLFmMOhZGVrXCIsXG4gIHNhdmluZ0RhdGE6IFwiVsO9c2xlZGt5IHNlIHVrbMOhZGFqw60gbmEgc2VydmVyIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRG/FoWxvIGsgY2h5YsSbIGEgdsO9c2xlZGt5IGpzbWUgbmVtb2hsaSB1bG/Fvml0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJWw71zbGVka3kgYnlseSDDunNwxJvFoW7EmyB1bG/FvmVueSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlprdXMgdG8gem5vdnVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgdXRyYXRpbGkgY2Vsa2VtIHswfSBhIGNlbGtlbSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgdXRyYXRpbGkgezB9LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkNlbGtlbSBqc3RlIHV0cmF0aWxpIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgdXRyYXRpbGkgezB9IHogezF9IGEgY2Vsa2VtIHsyfSB6IHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiTmEgdMOpdG8gc3Ryw6FuY2UganN0ZSBzdHLDoXZpbGkgezB9IHogezF9LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkNlbGtvdsSbIGpzdGUgdXRyYXRpbGkgezB9IHogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwixIxpc3TDvVwiLFxuICBjbGVhckNhcHRpb246IFwiUHLFr2hsZWRuw6FcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVnliZXJ0ZSBzb3Vib3JcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiT2RlYmVydGUgdGVudG8gc291Ym9yXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiQW5vXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJPcHJhdmR1IGNoY2V0ZSBvZGVicmF0IHRlbnRvIHNvdWJvcjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiT3ByYXZkdSBjaGNldGUgb2RzdHJhbml0IHbFoWVjaG55IHNvdWJvcnk/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJOw6F6ZXYgb3TDoXpreVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJjc1wiXSA9IGN6ZWNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImNzXCJdID0gXCLEjWXFoXRpbmFcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZGFuaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlRpbGJhZ2VcIixcbiAgcGFnZU5leHRUZXh0OiBcIlZpZGVyZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiRsOmcmRpZ1wiLFxuICBwcmV2aWV3VGV4dDogXCJGb3JwcmVtaWVyZVwiLFxuICBlZGl0VGV4dDogXCJSZWRpZ8OpclwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJWYWxnZnJpdCBzdmFyLi4uXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJJbmdlblwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWw6ZsZyBhbGxlXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTaWRlIHswfSBhZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIk9wdGFnIHswfSBhZiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkJlc3ZhcmVkZSB7MH0gLyB7MX0gc3DDuHJnc23DpWxcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRGVyIGVyIGluZ2VuIHN5bmxpZ2Ugc3DDuHJnc23DpWwuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWFuZ2UgdGFrIGZvciBkaW4gYmVzdmFyZWxzZSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlZvcmVzIGRhdGEgdmlzZXIgYXQgZHUgYWxsZXJlZGUgaGFyIGdlbm5lbWbDuHJ0IGRldHRlIHNww7hyZ2Vza2VtYS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJTcMO4cmdlc2tlbWFldCBoZW50ZXMgZnJhIHNlcnZlcmVuLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlbDpmxnLi4uXCIsXG4gIHZhbHVlOiBcInbDpnJkaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIkJlc3ZhciB2ZW5saWdzdCBzcMO4cmdzbcOlbGV0LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJCZXN2YXIgdmVubGlnc3QgbWluZHN0IMOpdCBzcMO4cmdzbcOlbC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWwgaSBhbGxlIHLDpmtrZXIuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJBbmdpdiBldCB0YWwuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiQW5naXYgbWluZHN0IHswfSB0ZWduLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IGNoYXJhY3RlcnMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiQW5naXYgbWVyZSBlbmQgezB9IG9nIG1pbmRyZSBlbmQgezF9IHRlZ24uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVWRmeWxkIG1pbmRzdCB7MH0gcsOma2tlci5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgbWluZHN0IHswfSBzdmFybXVsaWdoZWQoZXIpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBmw6ZycmUgezB9IHN2YXJtdWxpZ2hlZGVyKGVyKS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX0gb2cgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBzdMO4cnJlIGVuZCB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgbWluZHJlIGVuZCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIkFuZ2l2IHZlbmxpZ3N0IGVuIGd5bGRpZyBlLW1haWwgYWRyZXNzZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVWR0cnlra2V0OiB7MH0gc2thbCByZXR1cm5lcmUgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRm9yZXNww7hyZ3NsZW4gcmV0dXJuZXJlZGUgZmVqbGVuICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiRm9yZXNww7hyZ3NsZW4gcmV0dXJuZXJlZGUgaW5nZW4gZGF0YSBlbGxlciAncGF0aCcgcGFyYW1ldGVyZW4gZXIgZm9ya2VydFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpbHN0w7hycmVsc2VuIG3DpSBpa2tlIG92ZXJzdGlnZSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJBbmdpdiBlbiB2w6ZyZGkgZm9yIGRpdCB2YWxnZnJpZSBzdmFyLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRGluIGZpbCBibGl2ZXIgdXBsb2FkZXQuIFZlbnQgbm9nbGUgc2VrdW5kZXIgb2cgcHLDuHYgZXZlbnR1ZWx0IGlnZW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkluZGzDpnNlci4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlbDpmxnIGZpbChlcikuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkluZ2VuIGZpbCBlciB2YWxndFwiLFxuICBjb25maXJtRGVsZXRlOiBcIlZpbCBkdSBmamVybmUgZGVuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRlbm5lIHbDpnJkaSBza2FsIHbDpnJlIHVuaWsuXCIsXG4gIGFkZENvbHVtbjogXCJUaWxmw7hqIGtvbG9ubmVcIixcbiAgYWRkUm93OiBcIlRpbGbDuGogcsOma2tlXCIsXG4gIHJlbW92ZVJvdzogXCJGamVyblwiLFxuICBhZGRQYW5lbDogXCJUaWxmw7hqIG55XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkZqZXJuXCIsXG4gIGNob2ljZXNfSXRlbTogXCJ2YWxnXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb25uZVwiLFxuICBtYXRyaXhfcm93OiBcIlLDpmtrZVwiLFxuICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZXJuZSBibGl2ZXIgZ2VtdCBww6Ugc2VydmVyZW4uLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRlciBvcHN0b2QgZW4gZmVqbCBvZyB2aSBrdW5uZSBpa2tlIGdlbW1lIHJlc3VsdGF0ZXQuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlc3VsdGF0ZXQgYmxldiBnZW10IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHLDuHYgaWdlblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIGJydWd0IHswfSBww6UgZGVubmUgc2lkZSBvZyB7MX0gaSBhbHQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciBicnVndCB7MH0gcMOlIGRlbm5lIHNpZGUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiRHUgaGFyIGJydWd0IHswfSBpIGFsdC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IHDDpSBkZW5uZSBzaWRlIG9nIHsyfSBhZiB7M30gaSBhbHQuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IHDDpSBkZW5uZSBzaWRlLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IGkgYWx0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUmVuc1wiLFxuICBjbGVhckNhcHRpb246IFwiRmplcm5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOmbGcgZmlsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZqZXJuIGRlbm5lIGZpbFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJJbmdlblwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJFciBkdSBzaWtrZXIgcMOlLCBhdCBkdSB2aWwgZmplcm5lIGRlbm5lIGZpbDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgdmlsIGZqZXJuZSBhbGxlIGZpbGVyP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiU3DDuHJnc23DpWxzIHRpdGVsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRhXCJdID0gZGFuaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImRhXCJdID0gXCJkYW5za1wiO1xuIiwiLy9DcmVhdGVkIG9uIGJlaGFsZiBodHRwczovL2dpdGh1Yi5jb20vRnJhbmsxM1xuLy9Nb2RpZmllZCBvbiBiZWhhbGYgUm9lbGFuZCBWZXJiYWtlbFxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBkdXRjaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJWb3JpZ2VcIixcbiAgcGFnZU5leHRUZXh0OiBcIlZvbGdlbmRlXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJWZXJ6ZW5kZW5cIixcbiAgcHJldmlld1RleHQ6IFwiVm9vcmJlZWxkXCIsXG4gIGVkaXRUZXh0OiBcIkJld2Vya1wiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQmVnaW4gbWV0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQW5kZXJzLCBubC5cIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkdlZW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWN0ZWVyIEFsbGVzXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IHZhbiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCB7MH0gb2YgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJHZWFudHdvb3JkIHswfS97MX0gdnJhZ2VuXCIsXG4gIGVtcHR5U3VydmV5OiBcIkVyIGlzIGdlZW4gemljaHRiYXJlIHBhZ2luYSBvZiB2cmFhZyBpbiBkZXplIHZyYWdlbmxpanN0XCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQmVkYW5rdCB2b29yIGhldCBpbnZ1bGxlbiB2YW4gZGUgdnJhZ2VubGlqc3RcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICAgIFwiT256ZSBnZWdldmVucyB0b25lbiBhYW4gZGF0IGplIGRlemUgdnJhZ2VubGlqc3QgcmVlZHMgYmVhbnR3b29yZCBoZWJ0LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkRlIHZyYWdlbmxpanN0IGlzIGFhbiBoZXQgbGFkZW4uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiS2llcy4uLlwiLFxuICB2YWx1ZTogXCJ3YWFyZGVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJEaXQgaXMgZWVuIHZlcmVpc3RlIHZyYWFnXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkdlbGlldmUgdGVuIG1pbnN0ZSBlZW4gdnJhYWcgdGUgYmVhbnR3b29yZGVuLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkRlemUgdnJhYWcgdmVyZWlzdCDDqcOpbiBhbnR3b29yZCBwZXIgcmlqXCIsXG4gIG51bWVyaWNFcnJvcjogXCJIZXQgYW50d29vcmQgbW9ldCBlZW4gZ2V0YWwgemlqblwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlZ1bCBtaW5zdGVucyB7MH0ga2FyYWt0ZXJzIGluXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiR2VsaWV2ZSBtaW5kZXIgZGFuIHswfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkdlbGlldmUgbWVlciBkYW4gezB9IGVuIG1pbmRlciBkYW4gezF9IGthcmFrdGVycyBpbiB0ZSB2dWxsZW4uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiR2VsaWV2ZSB0ZW4gbWluc3RlIHswfSByaWplbiBpbiB0ZSB2dWxsZW4uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNlbGVjdGVlciBtaW5pbXVtIHswfSBhbnR3b29yZGVuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlNlbGVjdGVlciBuaWV0IG1lZXIgZGFuIHswfSBhbnR3b29yZGVuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgICBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX0gZW4ga2xlaW5lciBvZiBnZWxpamsgYWFuIHsyfVwiLFxuICBudW1lcmljTWluOiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX1cIixcbiAgbnVtZXJpY01heDogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJWdWwgZWVuIGdlbGRpZyBlLW1haWxhZHJlcyBpblwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJEZSB1aXRkcnVra2luZzogezB9IG1vZXQgJ3dhYXInIHRlcnVnZ2V2ZW4uXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJEZSB2cmFhZyBrZWVyZGUgZWVuIGZvdXQgdGVydWcgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgICBcIkRlIHZyYWFnIGdhZiBlZW4gbGVlZyBhbnR3b29yZCB0ZXJ1ZyBvZiBkZSAncGFkJyBlaWdlbnNjaGFwIGlzIG5pZXQgY29ycmVjdFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRlIGdyb290dGUgdmFuIGhldCBiZXN0YW5kIG1hZyBuaWV0IGdyb3RlciB6aWpuIGRhbiB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZ1bCBoZXQgdmVsZCAnQW5kZXJzLCBubC4nIGluXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgICBcIlV3IGJlc3RhbmQgd29yZHQgb3BnZWxhZGVuLiBHZWxpZXZlIGVua2VsZSBzZWNvbmRlbiB0ZSB3YWNodGVuIGVuIG9wbmlldXcgdGUgcHJvYmVyZW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIk9wbGFkZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJLaWVzIHV3IGJlc3RhbmQoZW4pLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJHZWVuIGJlc3RhbmQgZ2Vrb3plblwiLFxuICBjb25maXJtRGVsZXRlOiBcIldpbCBqZSBkZXplIGdlZ2V2ZW5zIHZlcndpamRlcmVuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRlemUgd2FhcmRlIG1vZXQgdW5pZWsgemlqbi5cIixcbiAgYWRkQ29sdW1uOiBcIlZvZWcga29sb20gdG9lXCIsXG4gIGFkZFJvdzogXCJWb2VnIHJpaiB0b2VcIixcbiAgcmVtb3ZlUm93OiBcIlZlcndpamRlclwiLFxuICBhZGRQYW5lbDogXCJOaWV1d2UgdG9ldm9lZ2VuXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlZlcndpamRlclwiLFxuICBjaG9pY2VzX0l0ZW06IFwib25kZXJ3ZXJwXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb21cIixcbiAgbWF0cml4X3JvdzogXCJSaWpcIixcbiAgc2F2aW5nRGF0YTogXCJEZSByZXN1bHRhdGVuIHdvcmRlbiBiZXdhYXJkIG9wIGRlIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRXIgd2FzIGVlbiBwcm9ibGVlbSBlbiB3ZSBrb25kZW4gZGUgcmVzdWx0YXRlbiBuaWV0IGJld2FyZW4uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkRlIHJlc3VsdGF0ZW4gd2VyZGVuIHN1Y2Nlc3ZvbCBiZXdhYXJkIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHJvYmVlciBvcG5pZXV3XCIsXG4gIHRpbWVyTWluOiBcIm1pbmltdW1cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVSBoZWVmdCB7MH0gZ2VzcGVuZGVlcmQgb3AgZGV6ZSBwYWdpbmEgZW4gezF9IGluIHRvdGFhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVSBoZWVmdCB7MH0gb3AgZGV6ZSBwYWdpbmEgZ2VzcGVuZGVlcmQuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVSBoZWVmdCBpbiB0b3RhYWwgezB9IGdlc3BlbmRlZXJkLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgICAgXCJVIGhlZWZ0IHswfSB2YW4gezF9IG9wIGRlemUgcGFnaW5hIGdlc3BlbmRlZXJkIGVuIHsyfSB2YW4gezN9IGluIHRvdGFhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBnZXNwZW5kZWVyZCBvcCBkZXplIHBhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJVIGhlZWZ0IHswfSB2YW4gezF9IGluIGhldCB0b3RhYWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJLdWlzIG9wXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJLdWlzIG9wXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkdla296ZW4gYmVzdGFuZFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJWZXJ3aWpkZXIgZGV6ZSBmaWxlXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lZW5cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQmVudCB1IHpla2VyIGRhdCB1IGRlemUgZmlsZSB3aWx0IHZlcndpamRlcmVuOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJCZW50IHUgemVrZXIgZGF0IHUgYWwgZGV6ZSBmaWxlcyB3aWx0IHZlcndpamRlcmVuP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0ZWwgdmFuIGRlIHZyYWFnXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIm5sXCJdID0gZHV0Y2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wibmxcIl0gPSBcIm5lZGVybGFuZHNcIjtcbiIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbi8vaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBlbmdsaXNoU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJOZXh0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmV2aWV3XCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3RoZXIgKGRlc2NyaWJlKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTm9uZVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCB7MH0gb2YgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiLFxuICBlbXB0eVN1cnZleTogXCJUaGVyZSBpcyBubyB2aXNpYmxlIHBhZ2Ugb3IgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk91ciByZWNvcmRzIHNob3cgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB0aGlzIHN1cnZleS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJMb2FkaW5nIFN1cnZleS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaG9vc2UuLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGxlYXNlIGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIGJlIG51bWVyaWMuXCIsXG4gIG1pbkVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB7MH1cIixcbiAgbWF4RXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHswfVwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVyKHMpLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcihzKS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gYW5kIG5vIG1vcmUgdGhhbiB7MX0gY2hhcmFjdGVycy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQbGVhc2UgZmlsbCBpbiBhdCBsZWFzdCB7MH0gcm93KHMpLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IHswfSB2YXJpYW50KHMpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQbGVhc2Ugc2VsZWN0IG5vIG1vcmUgdGhhbiB7MH0gdmFyaWFudChzKS5cIixcbiAgbnVtZXJpY01pbk1heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IGxlYXN0IHsxfSBhbmQgYXQgbW9zdCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IGxlYXN0IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgYXQgbW9zdCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJUaGUgZXhwcmVzc2lvbjogezB9IHNob3VsZCByZXR1cm4gJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZXJyb3IgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJUaGUgcmVxdWVzdCByZXR1cm5lZCBlbXB0eSBkYXRhIG9yIHRoZSAncGF0aCcgcHJvcGVydHkgaXMgaW5jb3JyZWN0XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVGhlIGZpbGUgc2l6ZSBzaG91bGQgbm90IGV4Y2VlZCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgZW50ZXIgdGhlIG90aGVyIHZhbHVlLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiWW91ciBmaWxlIGlzIHVwbG9hZGluZy4gUGxlYXNlIHdhaXQgc2V2ZXJhbCBzZWNvbmRzIGFuZCB0cnkgYWdhaW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkxvYWRpbmcuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJDaG9vc2UgZmlsZShzKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTm8gZmlsZSBjaG9zZW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHJlY29yZD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUaGlzIHZhbHVlIHNob3VsZCBiZSB1bmlxdWUuXCIsXG4gIGFkZENvbHVtbjogXCJBZGQgY29sdW1uXCIsXG4gIGFkZFJvdzogXCJBZGQgcm93XCIsXG4gIHJlbW92ZVJvdzogXCJSZW1vdmVcIixcbiAgZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIixcbiAgYWRkUGFuZWw6IFwiQWRkIG5ld1wiLFxuICByZW1vdmVQYW5lbDogXCJSZW1vdmVcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5cIixcbiAgbWF0cml4X3JvdzogXCJSb3dcIixcbiAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIixcbiAgc2F2aW5nRGF0YTogXCJUaGUgcmVzdWx0cyBhcmUgYmVpbmcgc2F2ZWQgb24gdGhlIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJyZWQgYW5kIHdlIGNvdWxkIG5vdCBzYXZlIHRoZSByZXN1bHRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaGUgcmVzdWx0cyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRyeSBhZ2FpblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQ2xlYW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsZWFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkNob29zZSBmaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJZZXNcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGZpbGU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZmlsZXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJRdWVzdGlvbiBUaXRsZVwiLFxuICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQ2FuY2VsXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwcGx5XCIsXG59O1xuXG4vL1VuY29tbWVudCB0aGVzZSB0d28gbGluZXMgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlLiBZb3Ugc2hvdWxkIHJlcGxhY2UgXCJlblwiIGFuZCBlblN0cmluZ3Mgd2l0aCB5b3VyIGxvY2FsZSAoXCJmclwiLCBcImRlXCIgYW5kIHNvIG9uKSBhbmQgeW91ciB2YXJpYWJsZS5cbi8vc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlblwiXSA9IGVuZ2xpc2hTdHJpbmdzO1xuLy9zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJlblwiXSA9IFwiRW5nbGlzaFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBlc3RvbmlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJUYWdhc2lcIixcbiAgcGFnZU5leHRUZXh0OiBcIkVkYXNpXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJMw7VwZXRhXCIsXG4gIHByZXZpZXdUZXh0OiBcIkVlbHZhYWRlXCIsXG4gIGVkaXRUZXh0OiBcIk11dWRhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJBbHVzdGFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJNdXUgKHTDpHBzdXN0YSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk1pdHRlIG1pZGFnaVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWYWxpIGvDtWlrXCIsXG4gIHByb2dyZXNzVGV4dDogXCJMZWhla8O8bGcgezB9L3sxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiS2lyamUgezB9L3sxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiVmFzdGF0dWQgezB9IGvDvHNpbXVzdCB7MX0tc3RcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiU2VsbGVzIHV1cmluZ3VzIGVpIG9sZSDDvGh0a2kgbsOkaHRhdmF0IGxlaGVrw7xsZ2UgdsO1aSBrw7xzaW11c3QuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQWl0w6RoLCBldCB2YXN0YXNpZCBhbmtlZWRpbGUhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJNZWllIGFuZG1ldGVsIG9sZWQgc2Egc2VsbGVsZSBhbmtlZWRpbGUganViYSB2YXN0YW51ZC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJMYWVuIGFua2VldGkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVmFsaS4uLlwiLFxuICB2YWx1ZTogXCJ2w6TDpHJ0dXNcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQYWx1biB2YXN0YSBrw7xzaW11c2VsZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGFsdW4gdmFzdGEgdsOkaGVtYWx0IMO8aGVsZSBrw7xzaW11c2VsZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQYWx1biBhbm5hIHZhc3R1cyBpZ2FsIHJlYWwuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJTZWUgcGVha3Mgb2xlbWEgbnVtYnJpbGluZSB2w6TDpHJ0dXMuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUGFsdW4gc2lzZXN0YSB2w6RoZW1hbHQgezB9IHTDpGhlbcOkcmtpLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBhbHVuIMOkcmEgc2lzZXN0YSByb2hrZW0ga3VpIHswfSB0w6RoZW3DpHJraS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJTaXNlc3RhIHBhbHVuIHswfSAtIHsxfSB0w6RoZW3DpHJraS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaXNlc3RhIHBsYXVuIHbDpGhlbWFsdCB7MH0gcmlkYS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGFsdW4gdmFsaSB2w6RoZW1hbHQgezB9IHZhcmlhbnRpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQYWx1biB2YWxpIGvDtWlnZSByb2hrZW0gezB9IHZhcmlhbnRpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgcGVha3Mgb2xlbWEgdsO1cmRuZSB2w7VpIHN1dXJlbSBrdWkgezF9IGphIHbDtXJkbmUgdsO1aSB2w6Rpa3NlbSBrdWkgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgcGVha3Mgb2xlbWEgdsO1cmRuZSB2w7VpIHN1dXJlbSBrdWkgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgcGVha3Mgb2xlbWEgdsO1cm5kZSB2w7VpIHbDpGlrc2VtIGt1aSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlNpc2VzdGEgcGFsdW4ga29ycmVrdG5lIGUtcG9zdGkgYWFkcmVzcy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiQXZhbGRpczogezB9IHBlYWtzIHRhZ2FzdGFtYSB0w7Vlc2UuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJUYW90bHVzIHRhZ2FzdGFzIHZlYSDigJ57MH3igJ0uIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJUYW90bHVzIHRhZ2FzdGFzIHTDvGhqYWQgYW5kbWVkIHbDtWkgYXRyaWJ1dXQgJ3BhdGgnIG9uIHZhbGVcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGYWlsaSBzdXVydXMgZWkgdG9oaSDDvGxldGFkYSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJTaXNlc3RhIHBhbHVuIG11dSB2YXN0dXMuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJTaW51IGZhaWwgbGFlYiDDvGxlcy4gUGFsdW4gb290YSBtw7VuZWQgc2VrdW5kaWQgbmluZyBwcm9vdmkgc2VlasOkcmVsIHV1ZXN0aS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTGFlbi4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlZhbGkgZmFpbChpZCkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkZhaWxpIHBvbGUgdmFsaXR1ZFwiLFxuICBjb25maXJtRGVsZXRlOiBcIkthcyB0YWhhZCBraXJqZSBrdXN0dXRhZGE/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiU2VlIHbDpMOkcnR1cyBwZWFiIG9sZW1hIHVuaWthYWxuZS5cIixcbiAgYWRkQ29sdW1uOiBcIkxpc2EgdmVlcmdcIixcbiAgYWRkUm93OiBcIkxpc2EgcmlkYVwiLFxuICByZW1vdmVSb3c6IFwiRWVtYWxkYVwiLFxuICBhZGRQYW5lbDogXCJMaXNhIHV1c1wiLFxuICByZW1vdmVQYW5lbDogXCJFZW1hbGRhXCIsXG4gIGNob2ljZXNfSXRlbTogXCLDvGtzdXNcIixcbiAgbWF0cml4X2NvbHVtbjogXCJWZWVyZ1wiLFxuICBtYXRyaXhfcm93OiBcIlJpZGFcIixcbiAgc2F2aW5nRGF0YTogXCJTYWx2ZXN0YW4gYW5kbWVkIHNlcnZlcmlzLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJUZWtraXMgdmlnYSBuaW5nIG1lIGVpIHNhYW51ZCB2YXN0dXNlaWQgc2FsdmVzdGFkYS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVmFzdHVzdGUgc2FsdmVzdGFtaW5lIMO1bm5lc3R1cyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByb292aSB1dWVzdGlcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIk9sZWQgdmVldG51ZCB7MH0gc2VsbGVsIGxlaGVsIG5pbmcga29ra3UgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJPbGVkIHZlZXRudWQgezB9IHNlbGxlbCBsZWhlbC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJPbGVkIHZlZXRudWQgezB9IGtva2t1LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiT2xlZCBrdWx1dGFudWQgezB9IHbDtWltYWxpa3VzdCB7MX0gc2VsbGVsIGxlaGVsIG5pbmcgezJ9IHbDtWltYWxpa3VzdCB7M30ga29ra3UuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIk9sZWQga3VsdXRhbnVkIHswfSB2w7VpbWFsaWt1c3QgezF9IHNlbGxlbCBsZWhlbC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBrb2d1YWphc3QuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJQdWhhc3RhXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJQdWhhc3RhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZhbGkgZmFpbFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJFZW1hbGRhIHNlZSBmYWlsXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFoXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJFaVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJPbGVkIHNhIGtpbmRlbCwgZXQgc29vdmlkIHNlbGxlIGZhaWxpIGVlbWFsZGFkYTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiT2xlZCBzYSBraW5kZWwsIGV0IHNvb3ZpZCBlZW1hbGRhZGEga8O1aWsgZmFpbGlkP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS8O8c2ltdXNlIHBlYWxraXJpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImV0XCJdID0gZXN0b25pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZXRcIl0gPSBcImVlc3RpIGtlZWxcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZmlubmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJFZGVsbGluZW5cIixcbiAgcGFnZU5leHRUZXh0OiBcIlNldXJhYXZhXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJWYWxtaXNcIixcbiAgcHJldmlld1RleHQ6IFwiRXNpa2F0c2VsdVwiLFxuICBlZGl0VGV4dDogXCJNdW9ra2FhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJBbG9pdGFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJNdXUgKHRhcmtlbm5hKVwiLFxuICBub25lSXRlbVRleHQ6IFwiRWkgbWl0w6TDpG5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmFsaXRzZSBrYWlra2lcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpdnUgezB9IC8gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJPc2lvIHswfSAvIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2xldCB2YXN0YW5udXQgezB9IC8gezF9IGt5c3lteWtzZWVuLlwiLFxuICBlbXB0eVN1cnZleTpcbiAgICBcIlTDpHNzw6Qga3lzZWx5c3PDpCBlaSBvbGUgeWh0w6TDpG4gbsOka3l2aWxsw6Qgb2xldmFhIHNpdnVhIHRhaSBreXN5bXlzdMOkLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIktpaXRvcyBreXNlbHl5biB2YXN0YWFtaXNlc3RhIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiVGlldG9qZW1tZSBtdWthYW4gb2xldCBqbyBzdW9yaXR0YW51dCB0w6Rtw6RuIGt5c2VseW4uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiS3lzZWx5w6QgbGFkYXRhYW4gcGFsdmVsaW1lbHRhLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZhbGl0c2UuLi5cIixcbiAgdmFsdWU6IFwiYXJ2b1wiLFxuICByZXF1aXJlZEVycm9yOiBcIlZhc3RhYSBreXN5bXlrc2Vlbiwga2lpdG9zLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWYXN0YWEgYWluYWtpbiB5aHRlZW4ga3lzeW15a3NlZW4uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmFzdGFhIGt5c3lteWtzaWluIGthaWtpbGxhIHJpdmVpbGzDpC5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkFydm9uIHR1bGVlIG9sbGEgbnVtZWVyaW5lbi5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJTecO2dMOkIHbDpGhpbnTDpMOkbiB7MH0gbWVya2tpw6QuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiw4Rsw6Qgc3nDtnTDpCB5bGkgezB9IG1lcmtracOkLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBqYSBlbmludMOkw6RuIHsxfSBtZXJra2nDpC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUw6R5dMOkIHbDpGhpbnTDpMOkbiB7MH0gcml2acOkLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWYWxpdHNlIHbDpGhpbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZhbGl0c2UgZW5pbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJMdXZ1biAnezB9JyB0dWxlZSBvbGxhIHbDpGhpbnTDpMOkbiB7MX0gamEga29ya2VpbnRhYW4gezJ9LlwiLFxuICBudW1lcmljTWluOiBcIkx1dnVuICd7MH0nIHR1bGVlIG9sbGEgdsOkaGludMOkw6RuIHsxfS5cIixcbiAgbnVtZXJpY01heDogXCJMdXZ1biAnezB9JyB0dWxlZSBvbGxhIGtvcmtlaW50YWFuIHsxfS5cIixcbiAgaW52YWxpZEVtYWlsOiBcIlN5w7Z0w6QgdmFsaWRpIHPDpGhrw7Zwb3N0aW9zb2l0ZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTGF1c2Vra2VlbjogezB9IHBpdMOkaXNpIHBhbGF1dHRhYSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJQeXludMO2IHBhbGF1dHRpIHZpcmhlZW4gezB9LiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiUHl5bnTDtiBwYWxhdXR0aSB0eWhqw6RuIHRpZWRvc3RvbiB0YWkgJ3BhdGgnLWFzZXR1cyBvbiB2w6TDpHLDpFwiLFxuICBleGNlZWRNYXhTaXplOiBcIlRpZWRvc3RvbiBrb2tvIGVpIHNhYSBvbGxhIHN1dXJlbXBpIGt1aW4gezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVGFya2VubmEgdmFzdGF1c3Rhc2kgdGVrc3Rpa2VudHTDpMOkbi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlRpZWRvc3RvYSBsw6RoZXRldMOkw6RuLiBPZG90YSBtdXV0YW1hIHNla3VudGkgamEgeXJpdMOkIHV1ZGVsbGVlbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTGFkYXRhYW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWYWxpdHNlIHRpZWRvc3RvKHQpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJFaSB0aWVkb3N0b2EgdmFsaXR0dW5hXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiSGFsdWF0a28gcG9pc3RhYSBvc2lvbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUw6Rtw6QgYXJ2byBvbiBqbyBrw6R5dMO2c3PDpC4gU3nDtnTDpCB0b2luZW4gYXJ2by5cIixcbiAgYWRkQ29sdW1uOiBcIkxpc8Okw6Qgc2FyYWtlXCIsXG4gIGFkZFJvdzogXCJMaXPDpMOkIHJpdmlcIixcbiAgcmVtb3ZlUm93OiBcIlBvaXN0YVwiLFxuICBlbXB0eVJvd3NUZXh0OiBcIkVpIHJpdmVqw6RcIixcbiAgYWRkUGFuZWw6IFwiTGlzw6TDpCB1dXNpXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlBvaXN0YVwiLFxuICBjaG9pY2VzX0l0ZW06IFwia29oZGVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTYXJha2VcIixcbiAgbWF0cml4X3JvdzogXCJSaXZpXCIsXG4gIHNhdmluZ0RhdGE6IFwiVGlldG9qYSB0YWxsZW5uZXRhYW4gcGFsdmVsaW1lbGxlLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJUYXBhaHR1aSB2aXJoZSwgZW1tZWvDpCB2b2luZWV0IHRhbGxlbnRhYSBreXNlbHluIHRpZXRvamEuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlRpZWRvdCB0YWxsZW5uZXR0aWluIG9ubmlzdHVuZWVzdGkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJZcml0w6QgdXVkZWxsZWVuXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSB0w6RsbMOkIHNpdnVsbGEgamEgeWh0ZWVuc8OkIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiT2xldCBrw6R5dHTDpG55dCB7MH0gdMOkbGzDpCBzaXZ1bGxhLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9sZXQga8OkeXR0w6RueXQgeWh0ZWVuc8OkIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIk9sZXQga8OkeXR0w6RueXQgdMOkbGzDpCBzaXZ1bGxhIHswfSAvIHsxfSBqYSB5aHRlZW5zw6QgezJ9IC8gezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJPbGV0IGvDpHl0dMOkbnl0IHswfSAvIHsxfSB0w6RsbMOkIHNpdnVsbGEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiT2xldCBrw6R5dHTDpG55dCB5aHRlZW5zw6QgezB9IC8gezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUHl5aGlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlR5aGplbm7DpFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWYWxpdHNlIHRpZWRvc3RvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlBvaXN0YSB0w6Rtw6QgdGllZG9zdG9cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJLeWxsw6RcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkhhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEgdMOkbcOkbiB0aWVkb3N0b246IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkhhbHVhdGtvIHZhcm1hc3RpIHBvaXN0YWEga2Fpa2tpIHRpZWRvc3RvdD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkt5c3lteWtzZW4gb3RzaWtrb1wiLFxuICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiUGVydXV0YVwiLFxuICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJLw6R5dMOkXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZpXCJdID0gZmlubmlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJmaVwiXSA9IFwic3VvbWlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZnJlbmNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByw6ljw6lkZW50XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTdWl2YW50XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJUZXJtaW5lclwiLFxuICBwcmV2aWV3VGV4dDogXCJBcGVyw6d1XCIsXG4gIGVkaXRUZXh0OiBcIk1vZGlmaWVyXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21tZW5jZXJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBdXRyZSAocHLDqWNpc2VyKVwiLFxuICBub25lSXRlbVRleHQ6IFwiQXVjdW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVG91dCBzw6lsZWN0aW9ubmVyXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBzdXIgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJFbnJlZ2lzdHJlbWVudCB7MH0gc3VyIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfSBxdWVzdGlvbihzKSByw6lwb25kdWUocylcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiSWwgbid5IGEgbmkgcGFnZSB2aXNpYmxlIG5pIHF1ZXN0aW9uIHZpc2libGUgZGFucyBjZSBxdWVzdGlvbm5haXJlXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWVyY2kgZCdhdm9pciByw6lwb25kdSBhdSBxdWVzdGlvbm5haXJlICFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJOb3MgZG9ubsOpZXMgaW5kaXF1ZW50IHF1ZSB2b3VzIGF2ZXogZMOpasOgIHJlbXBsaSBjZSBxdWVzdGlvbm5haXJlLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkxlIHF1ZXN0aW9ubmFpcmUgZXN0IGVuIGNvdXJzIGRlIGNoYXJnZW1lbnQuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQ2hvaXNpc3Nlei4uLlwiLFxuICB2YWx1ZTogXCJ2YWxldXJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJMYSByw6lwb25zZSDDoCBjZXR0ZSBxdWVzdGlvbiBlc3Qgb2JsaWdhdG9pcmUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk1lcmNpIGRlIHLDqXBvbmRyZSBhdSBtb2lucyDDoCB1bmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG91dGVzIGxlcyBsaWduZXMgc29udCBvYmxpZ2F0b2lyZXNcIixcbiAgbnVtZXJpY0Vycm9yOiBcIkxhIHLDqXBvbnNlIGRvaXQgw6p0cmUgdW4gbm9tYnJlLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIk1lcmNpIGRlIHNhaXNpciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTWVyY2kgZGUgc2Fpc2lyIG1vaW5zIGRlIHswfSBjYXJhY3TDqHJlcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJNZXJjaSBkZSBzYWlzaXIgZW50cmUgezB9IGV0IHsxfSBjYXJhY3TDqHJlcy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNZXJjaSBkZSBjb21wbMOpdGVyIGF1IG1vaW5zIHswfSBsaWduZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgYXUgbWluaW11bSB7MH0gcsOpcG9uc2VzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIGF1IG1heGltdW0gezB9IHLDqXBvbnNlcy5cIixcbiAgbnVtZXJpY01pbk1heDogXCJWb3RyZSByw6lwb25zZSAnezB9JyBkb2l0IMOqdHJlIHN1cMOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MX0gZXQgaW5mw6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsyfVwiLFxuICBudW1lcmljTWluOiBcIlZvdHJlIHLDqXBvbnNlICd7MH0nIGRvaXQgw6p0cmUgc3Vww6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlZvdHJlIHLDqXBvbnNlICd7MH0nIGRvaXQgw6p0cmUgaW5mw6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiTWVyY2kgZCdlbnRyZXIgdW5lIGFkcmVzc2UgbWFpbCB2YWxpZGUuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkwnZXhwcmVzc2lvbjogezB9IGRvaXQgcmV0b3VybmVyICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHJlcXXDqnRlIGEgcmVudm95w6kgdW5lIGVycmV1ciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJMYSByZXF1w6p0ZSBhIHJlbnZvecOpIGRlcyBkb25uw6llcyB2aWRlcyBvdSBsYSBwcm9wcmnDqXTDqSAncGF0aCcgZXN0IGluY29ycmVjdGVcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJMYSB0YWlsbGUgZHUgZmljaGllciBuZSBkb2l0IHBhcyBleGPDqWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXJjaSBkZSBwcsOpY2lzZXIgbGUgY2hhbXAgJ0F1dHJlJy5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJWb3RyZSBmaWNoaWVyIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50LiBNZXJjaSBkJ2F0dGVuZHJlIHF1ZWxxdWVzIHNlY29uZGVzIGV0IGRlIHLDqWVzc2F5ZXIuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkNoYXJnZW1lbnQuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJBam91dGVyIGRlcyBmaWNoaWVycy4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiQXVjdW4gZmljaGllciBham91dMOpXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVm91bGV6LXZvdXMgc3VwcHJpbWVyIGNldCBlbnJlZ2lzdHJlbWVudCA/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiQ2V0dGUgdmFsZXVyIGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICBhZGRDb2x1bW46IFwiQWpvdXRlciB1bmUgY29sb25uZVwiLFxuICBhZGRSb3c6IFwiQWpvdXRlciB1bmUgbGlnbmVcIixcbiAgcmVtb3ZlUm93OiBcIlN1cHByaW1lclwiLFxuICBhZGRQYW5lbDogXCJBam91dGVyXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlN1cHByaW1lclwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJMaWduZVwiLFxuICBzYXZpbmdEYXRhOiBcIkxlcyByw6lzdWx0YXRzIHNvbnQgZW4gY291cnMgZGUgc2F1dmVnYXJkZSBzdXIgbGUgc2VydmV1ci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiVW5lIGVycmV1ciBlc3Qgc3VydmVudWUgZXQgYSBlbXDDqmNow6kgbGEgc2F1dmVnYXJkZSBkZXMgcsOpc3VsdGF0cy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiTGVzIHLDqXN1bHRhdHMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6lzICFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlLDqWVzc2F5ZXJcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciBjZXR0ZSBwYWdlIGV0IHsxfSBhdSB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIGNldHRlIHBhZ2UuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gYXUgdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIHsxfSBzdXIgY2V0dGUgcGFnZSBldCB7Mn0gc3VyIHszfSBhdSB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIHsxfSBzdXIgY2V0dGUgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IGF1IHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTmV0dG95ZXJcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlZpZGVyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkFqb3V0ZXIgdW4gZmljaGllclwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJFbmxldmVyIGNlIGZpY2hpZXJcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJPdWlcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vblwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLDinRlcy12b3VzIGNlcnRhaW5zIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGZpY2hpZXIgOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLDinRlcy12b3VzIGNlcnRhaW5zIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXMgbGVzIGZpY2hpZXJzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0cmUgZGUgbGEgcXVlc3Rpb25cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZnJcIl0gPSBmcmVuY2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZnJcIl0gPSBcImZyYW7Dp2Fpc1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBnZW9yZ2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLhg6Phg5nhg5Dhg5xcIixcbiAgcGFnZU5leHRUZXh0OiBcIuGDqOGDlOGDm+GDk+GDlOGDklwiLFxuICBjb21wbGV0ZVRleHQ6IFwi4YOT4YOQ4YOh4YOg4YOj4YOa4YOU4YOR4YOQXCIsXG4gIHByb2dyZXNzVGV4dDogXCLhg5Lhg5Xhg5Thg6Dhg5Phg5ggezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIuGDkOGDoOGDquGDlOGDoOGDl+GDmCDhg5nhg5jhg5fhg67hg5Xhg5Ag4YOQ4YOgIOGDkOGDoOGDmOGDoS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLhg5Lhg5vhg5Dhg5Phg5rhg53hg5Hhg5cg4YOZ4YOY4YOX4YOu4YOV4YOQ4YOg4YOY4YOhIOGDqOGDlOGDleGDoeGDlOGDkeGDmOGDoeGDl+GDleGDmOGDoSFcIixcbiAgbG9hZGluZ1N1cnZleTogXCLhg6nhg5Dhg6Lhg5Xhg5jhg6Dhg5fhg5Xhg5Ag4YOh4YOU4YOg4YOV4YOU4YOg4YOY4YOT4YOQ4YOcLi4uXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi4YOh4YOu4YOV4YOQICjhg5Lhg5fhg67hg53hg5Xhg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOU4YOXKVwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLhg5Dhg6Dhg6nhg5Thg5Xhg5AuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOj4YOe4YOQ4YOh4YOj4YOu4YOU4YOXIOGDmeGDmOGDl+GDruGDleGDkOGDoS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIuGDnuGDkOGDoeGDo+GDruGDmCDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDoOGDmOGDquGDruGDleGDmC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIOGDkOGDoOGDkOGDnOGDkOGDmeGDmuGDlOGDkSB7MH0g4YOh4YOY4YOb4YOR4YOd4YOa4YOdLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDkOGDoOGDkOGDnOGDkOGDmeGDmuGDlOGDkSB7MH0g4YOV4YOQ4YOg4YOY4YOQ4YOc4YOi4YOYLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDkOGDoOGDkOGDo+GDm+GDlOGDouGDlOGDoSB7MH0g4YOV4YOQ4YOg4YOY4YOQ4YOc4YOi4YOYLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg5vhg5Thg6Lhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCwg4YOV4YOY4YOT4YOg4YOUIHsxfSwg4YOT4YOQIOGDnOGDkOGDmeGDmuGDlOGDkeGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDm+GDlOGDouGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDnOGDkOGDmeGDmuGDlOGDkeGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOU4YOaLiDhg6Thg53hg6Hhg6Lhg5jhg6Eg4YOg4YOU4YOQ4YOa4YOj4YOg4YOYIOGDm+GDmOGDoeGDkOGDm+GDkOGDoOGDl+GDmC5cIixcbiAgb3RoZXJSZXF1aXJlZEVyb3I6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDkOGDleGDoeGDlOGDlyDhg5Xhg5Thg5rhg5ggJ+GDoeGDruGDleGDkCdcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJrYVwiXSA9IGdlb3JnaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImthXCJdID0gXCLhg6Xhg5Dhg6Dhg5fhg6Phg5rhg5hcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZ2VybWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlp1csO8Y2tcIixcbiAgcGFnZU5leHRUZXh0OiBcIldlaXRlclwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQWJzY2hsaWXDn2VuXCIsXG4gIHByZXZpZXdUZXh0OiBcIlZvcnNjaGF1XCIsXG4gIGVkaXRUZXh0OiBcIkJlYXJiZWl0ZW5cIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiU29uc3RpZ2VzIChCaXR0ZSBhbmdlYmVuKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmljaHRzIHRyaWZmdCB6dVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJBbGxlcyBhdXN3w6RobGVuXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTZWl0ZSB7MH0gdm9uIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiRWludHJhZyB7MH0gdm9uIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfSBGcmFnZW4gYmVhbnR3b3J0ZXRcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRXMgc2luZCBrZWluZSBGcmFnZW4gdm9yaGFuZGVuLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlZpZWxlbiBEYW5rLCBkYXNzIFNpZSBkaWUgVW1mcmFnZSBhYmdlc2NobG9zc2VuIGhhYmVuIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiV2lyIGhhYmVuIGZlc3RnZXN0ZWxsdCwgZGFzcyBTaWUgZGllc2UgVW1mcmFnZSBiZXJlaXRzIGFiZ2VzY2hsb3NzZW4gaGFiZW4uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiVW1mcmFnZSB3aXJkIGdlbGFkZW4uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQml0dGUgYXVzd8OkaGxlbi4uLlwiLFxuICB2YWx1ZTogXCJXZXJ0XCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiQml0dGUgYmVhbnR3b3J0ZW4gU2llIGRpZXNlIEZyYWdlLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJCaXR0ZSBiZWFudHdvcnRlbiBTaWUgbWluZGVzdGVucyBlaW5lIEZyYWdlLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkJpdHRlIGJlYW50d29ydGVuIFNpZSBhbGxlIEZyYWdlbi5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkRlciBXZXJ0IG11c3MgZWluZSBaYWhsIHNlaW4uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG1pbmRlc3RlbnMgezB9IFplaWNoZW4gZWluLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkJpdHRlIGdlYmVuIFNpZSBuaWNodCBtZWhyIGFscyB7MH0gWmVpY2hlbiBlaW4uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG1pbmRlc3RlbnMgezB9IHVuZCBtYXhpbWFsIHsxfSBaZWljaGVuIGVpbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJCaXR0ZSBtYWNoZW4gU2llIGluIG1pbmRlc3RlbnMgezB9IFplaWxlbiBlaW5lIEVpbmdhYmUuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIkJpdHRlIHfDpGhsZW4gU2llIG1pbmRlc3RlbnMgezB9IEFudHdvcnQoZW4pIGF1cy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbmljaHQgbWVociBhbHMgezB9IEFudHdvcnQoZW4pIGF1cy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIG11c3MgZ3LDtsOfZXIgb2RlciBnbGVpY2ggezF9IHVuZCBrbGVpbmVyIG9kZXIgZ2xlaWNoIHsyfSBzZWluXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgbXVzcyBncsO2w59lciBvZGVyIGdsZWljaCB7MX0gc2VpblwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIG11c3Mga2xlaW5lciBvZGVyIGdsZWljaCB7MX0gc2VpblwiLFxuICBpbnZhbGlkRW1haWw6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsLUFkcmVzc2UgZWluLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJEZXIgQXVzZHJ1Y2s6IHswfSBtdXNzIGRlbiBXZXJ0ICd3YWhyJyB6dXLDvGNrZ2ViZW4uXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJFaW4gTmV0endlcmtkaWVuc3QgaGF0IGZvbGdlbmRlbiBGZWhsZXIgenVyw7xja2dlZ2ViZW4gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJFaW5lIE5ldHp3ZXJrZGllbnN0IGhhdCB1bmfDvGx0aWdlIERhdGVuIHp1csO8Y2tnZWdlYmVuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRGllIERhdGVpIGRhcmYgbmljaHQgZ3LDtsOfZXIgYWxzIHswfSBzZWluLlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcnQgYW4uXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJCaXR0ZSB3YXJ0ZW4gU2llIGJpcyBkZXIgVXBsb2FkIElocmVyIERhdGVpZW4gYWJnZXNjaGxvc3NlbiBpc3QuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIldpcmQgaG9jaGdlbGFkZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJEYXRlaShlbikgYXVzd8OkaGxlbi4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiS2VpbmUgRGF0ZWkgYXVzZ2V3w6RobHRcIixcbiAgY29uZmlybURlbGV0ZTogXCJXb2xsZW4gU2llIGRlbiBFaW50cmFnIGzDtnNjaGVuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRpZXNlciBXZXJ0IG11c3MgZWlubWFsaWcgc2Vpbi5cIixcbiAgYWRkQ29sdW1uOiBcIlNwYWx0ZSBoaW56dWbDvGdlblwiLFxuICBhZGRSb3c6IFwiWmVpbGUgaGluenVmw7xnZW5cIixcbiAgcmVtb3ZlUm93OiBcIkVudGZlcm5lblwiLFxuICBhZGRQYW5lbDogXCJOZXUgaGluenVmw7xnZW5cIixcbiAgcmVtb3ZlUGFuZWw6IFwiRW50ZmVybmVuXCIsXG4gIGNob2ljZXNfSXRlbTogXCJFbGVtZW50XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU3BhbHRlXCIsXG4gIG1hdHJpeF9yb3c6IFwiWmVpbGVcIixcbiAgc2F2aW5nRGF0YTogXCJEaWUgRXJnZWJuaXNzZSB3ZXJkZW4gYXVmIGRlbSBTZXJ2ZXIgZ2VzcGVpY2hlcnQuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVzIGlzdCBlaW4gRmVobGVyIGF1ZmdldHJldGVuLiBEaWUgRXJnZWJuaXNzZSBrb25udGVuIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbi5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiRGllIEVyZ2Vibmlzc2Ugd3VyZGVuIGdlc3BlaWNoZXJ0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiRXJuZXV0IGFic2VuZGVuXCIsXG4gIHRpbWVyTWluOiBcIk1pbi5cIixcbiAgdGltZXJTZWM6IFwiU2VrLlwiLFxuICB0aW1lclNwZW50QWxsOiBcIlNpZSB3YXJlbiB7MH0gYXVmIGRpZXNlciBTZWl0ZSB1bmQgYnJhdWNodGVuIGluc2dlc2FtdCB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlNpZSB3YXJlbiB7MH0gYXVmIGRpZXNlciBTZWl0ZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJTaWUgaGFiZW4gaW5zZ2VzYW10IHswfSBnZWJyYXVjaHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJTaWUgd2FyZW4gezB9IHZvbiB7MX0gYXVmIGRpZXNlciBTZWl0ZSB1bmQgYnJhdWNodGVuIGluc2dlc2FtdCB7Mn0gdm9uIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiU2llIHdhcmVuIHswfSB2b24gezF9IGF1ZiBkaWVzZXIgU2VpdGUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiU2llIGhhYmVuIGluc2dlc2FtdCB7MH0gdm9uIHsxfSBnZWJyYXVjaHQuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJBbGxlcyBsw7ZzY2hlblwiLFxuICBjbGVhckNhcHRpb246IFwiQXVzd2FobCBlbnRmZXJuZW5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRGF0ZWkgYXVzd8OkaGxlblwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJEYXRlaSBsw7ZzY2hlblwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWluXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlNpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgZGllc2UgRGF0ZWkgbMO2c2NoZW4gbcO2Y2h0ZW46IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlNpbmQgU2llIHNpY2hlciwgZGFzcyBTaWUgYWxsZSBEYXRlaWVuIGzDtnNjaGVuIG3DtmNodGVuP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiRnJhZ2VudGl0ZWxcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGVcIl0gPSBnZXJtYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZGVcIl0gPSBcImRldXRzY2hcIjtcbiIsIi8vQ3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYWdlbG9zcGFuYWdpb3Rha2lzXG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGdyZWVrU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIs6gz4HOv863zrPOv8+NzrzOtc69zr9cIixcbiAgcGFnZU5leHRUZXh0OiBcIs6Vz4DPjM68zrXOvc6/XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLOn867zr/Ous67zq7Pgc+Jz4POt1wiLFxuICBwcmV2aWV3VGV4dDogXCLOoM+Bzr/Otc+AzrnPg866z4zPgM63z4POt1wiLFxuICBlZGl0VGV4dDogXCLOlc+AzrXOvs61z4HOs86xz4POr86xXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLOkc+Bz4fOrlwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIs6GzrvOu86/ICjPgM6xz4HOsc66zrHOu8+OIM60zrnOtc+FzrrPgc65zr3Or8+Dz4TOtSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIs6azrHOvc6tzr3Osc+CXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIs6Vz4DOuc67zr/Os86uIM+MzrvPic69XCIsXG4gIHByb2dyZXNzVGV4dDogXCLOo861zrvOr860zrEgezB9IM6xz4DPjCB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIs6VzrPOs8+BzrHPhs6uIHswfSDOsc+Az4wgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLOkc+AzrHOvc+Ezq7OuM63zrrOsc69IHswfSAvIHsxfSDOtc+Bz4nPhM6uz4POtc65z4JcIixcbiAgZW1wdHlTdXJ2ZXk6XG4gICAgXCLOlM61zr0gz4XPgM6sz4HPh861zrkgzrrOsc68zq/OsSDOv8+BzrHPhM6uIM+DzrXOu86vzrTOsSDOriDOv8+BzrHPhM6uIM61z4HPjs+EzrfPg863IM+DzrUgzrHPhc+Ez4wgz4TOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OlxuICAgIFwizpXPhc+HzrHPgc65z4PPhM6/z43OvM61IM6zzrnOsSDPhM63zr0gz4PPhc68z4DOu86uz4HPic+DzrcgzrHPhc+Ezr/PjSDPhM6/z4UgzrXPgc+Jz4TOt868zrHPhM6/zrvOv86zzq/Ov8+FIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwizqTOsSDOsc+Bz4fOtc6vzrEgzrzOsc+CIM60zrXOr8+Hzr3Ov8+Fzr0gz4zPhM65IM6tz4fOtc+EzrUgzq7OtM63IM6/zrvOv866zrvOt8+Bz47Pg861zrkgzrHPhc+Ezq7OvSDPhM63zr0gzq3Pgc61z4XOvc6xLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIs6kzr8gzrXPgc+Jz4TOt868zrHPhM6/zrvPjM6zzrnOvyDPhs6/z4HPhM+Ozr3Otc+EzrHOuSDOsc+Azr8gz4TOvyDOtM65zrHOus6/zrzOuc+Dz4TOri4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLOlc+AzrnOu86tzr7PhM61Li4uXCIsXG4gIHZhbHVlOiBcIs6xzr7Or86xXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4PPhM63zr0gzrXPgc+Oz4TOt8+DzrcuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIs6Rz4DOsc69z4TOrs+Dz4TOtSDPg861IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gzrzOr86xIM61z4HPjs+EzrfPg863LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOlxuICAgIFwizqDOsc+BzrHOus6xzrvPjiDOsc+AzrHOvc+Ezq7Pg8+EzrUgz4PPhM65z4IgzrXPgc+Jz4TOrs+DzrXOuc+CIM+DzrUgz4zOu861z4Igz4TOuc+CIM6zz4HOsc68zrzOrc+CLlwiLFxuICBudW1lcmljRXJyb3I6IFwizpcgz4TOuc68zq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOsc+BzrnOuM68zrfPhM65zrrOri5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gz4PPjc68zrLOv867zrEuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwizpXOuc+DzrHOs86szrPOtc+EzrUgzrvOuc6zz4zPhM61z4HOv8+Fz4IgzrHPgM+MIHswfSDPh86xz4HOsc66z4TOrs+BzrXPgi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLOlc65z4POsc6zzqzOs861z4TOtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6/z4XPgiDOsc+Az4wgezB9IM66zrHOuSDOu865zrPPjM+EzrXPgc6/z4XPgiDOsc+Az4wgezF9IM+HzrHPgc6xzrrPhM6uz4HOtc+CLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDOs8+BzrHOvM68zq3Pgi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4zPh865IM+AzrHPgc6xz4DOrM69z4kgzrHPgM6/IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIs6kzr8gJ3swfScgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6vz4POvyDOriDOvM61zrPOsc67z43PhM61z4HOvyDOsc+Azr8gz4TOvyB7MX0gzrrOsc65IM6vz4POvyDOriDOvM65zrrPgc+Mz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrXOs86xzrvPjc+EzrXPgc6/IM6uIM65z4POvyDOvM61IM+Ezr8gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrnOus+Bz4zPhM61z4HOvyDOriDOr8+Dzr8gzrHPgM6/IM+Ezr8gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzrzOuc6xIM6xz4DOv860zrXOus+Ezq4gzrTOuc61z43OuM+Fzr3Pg863IGUtbWFpbC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwizpcgzq3Ous+Gz4HOsc+Dzrc6IHswfSDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61z4DOuc+Dz4TPgc6tz4jOtc65ICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgz4PPhs6szrvOvM6xICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDOus61zr3OrCDOtM61zrTOv868zq3Ovc6xIM6uIM63IM65zrTOuc+Mz4TOt8+EzrEgJ868zr/Ovc6/z4DOrM+EzrkvcGF0aCcgzrXOr869zrHOuSDOtc+Dz4bOsc67zrzOrc69zrdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLOpM6/IM68zq3Os861zrjOv8+CIM60zrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDPhc+AzrXPgc6yzrHOr869zrXOuSDPhM6xIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM63zr0gz4TOuc68zq4gzrPOuc6xIM+Ezr8gz4DOtc60zq/OvyAnzqzOu867zr8nLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwizqTOvyDOsc+Bz4fOtc6vzr8gz4POsc+CIM6xzr3Otc6yzrHOr869zrXOuS4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtSDOus6xz4DOv865zrEgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIM66zrHOuSDOtM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIs6mz4zPgc+Ez4nPg863Li4uXCIsXG4gIGNob29zZUZpbGU6IFwizpXPgM65zrvOv86zzq4gzrHPgc+HzrXOr8+Jzr0gLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLOlM61zr0gzq3Ph861zrkgzrXPgM65zrvOtc6zzrXOryDOsc+Bz4fOtc6vzr9cIixcbiAgY29uZmlybURlbGV0ZTogXCLOmM6tzrvOtc+EzrUgzr3OsSDOtM65zrHOs8+BzqzPiM61z4TOtSDPhM63zr0gzrXOs86zz4HOsc+Gzq47XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwizpHPhc+Ezq4gzrcgz4TOuc68zq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM6/zr3Osc60zrnOus6uLlwiLFxuICBhZGRDb2x1bW46IFwizqDPgc6/z4POuM6uzrrOtyDPg8+Ezq7Ou863z4JcIixcbiAgYWRkUm93OiBcIs6gz4HOv8+DzrjOrs66zrcgzrPPgc6xzrzOvM6uz4JcIixcbiAgcmVtb3ZlUm93OiBcIs6Rz4bOsc6vz4HOtc+DzrdcIixcbiAgYWRkUGFuZWw6IFwizqDPgc6/z4POuM61z4POtSDOvc61zr9cIixcbiAgcmVtb3ZlUGFuZWw6IFwizpHPhs6xzrnPgc+OXCIsXG4gIGNob2ljZXNfSXRlbTogXCLOtc6vzrTOv8+CXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwizqPPhM6uzrvOt1wiLFxuICBtYXRyaXhfcm93OiBcIs6jzrXOuc+BzqxcIixcbiAgc2F2aW5nRGF0YTogXCLOpM6xIM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsSDOsc+Azr/OuM63zrrOtc+Nzr/Ovc+EzrHOuSDPg8+Ezr/OvSDOtM65zrHOus6/zrzOuc+Dz4TOriAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIs6gzrHPgc6/z4XPg865zqzPg8+EzrfOus61IM+Dz4bOrM67zrzOsSDOus6xzrkgzrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOsc+Azr/OuM6uzrrOtc+Fz4POtyDPhM+Jzr0gzrHPgM6/z4TOtc67zrXPg868zqzPhM+Jzr0uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIs6kzrEgzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xIM6xz4DOv864zrfOus61z43PhM63zrrOsc69IM68zrUgzrXPgM65z4TPhc+Hzq/OsSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIs6gz4HOv8+Dz4DOrM64zrfPg861IM6+zrHOvc6sXCIsXG4gIHRpbWVyTWluOiBcIs61zrvOrM+HXCIsXG4gIHRpbWVyU2VjOiBcIs60zrXPhc+EXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwizojPh861z4TOtSDOtM6xz4DOsc69zq7Pg861zrkgezB9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsSDOus6xzrkgezF9IM+Dz4XOvc6/zrvOuc66zqwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIs6Iz4fOtc+EzrUgzr7Ov860zq3PiM61zrkgezB9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLOiM+HzrXPhM61IM6+zr/OtM6tz4jOtc65IM+Dz4XOvc6/zrvOuc66zqwgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwizojPh861z4TOtSDOtM6xz4DOsc69zq7Pg861zrkgezB9IM6xz4DPjCB7MX0gz4POtSDOsc+Fz4TOrs69IM+Ezrcgz4POtc67zq/OtM6xIM66zrHOuSB7Mn0gzrHPgM+MIHszfSDPg8+Fzr3Ov867zrnOus6sLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLOiM+HzrXPhM61IM6+zr/OtM6tz4jOtc65IHswfSDOsc+Az4wgezF9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLOiM+HzrXPhM61IM6+zr/OtM6tz4jOtc65IHswfSDOsc+Az4wgezF9IM+Dz4XOvc6/zrvOuc66zqwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLOms6RzpjOkc6hzpdcIixcbiAgY2xlYXJDYXB0aW9uOiBcIs6jzrHPhs6uXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOvyDOsc+Bz4fOtc6vzr9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwizprOsc+EzrHPgc6zzq7Pg8+EzrUgzrHPhc+Ez4wgz4TOvyDOsc+Bz4fOtc6vzr9cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLOnc6xzq9cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIs6fz4fOuVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLOlc6vz4PPhM61IM6yzq3Oss6xzrnOv865IM+Mz4TOuSDOuM6tzrvOtc+EzrUgzr3OsSDOus6xz4TOsc+BzrPOrs+DzrXPhM61IM6xz4XPhM+MIM+Ezr8gzrHPgc+HzrXOr86/OiB7MH07XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLOlc6vz4PPhM61IM6yzq3Oss6xzrnOv865IM+Mz4TOuSDOuM6tzrvOtc+EzrUgzr3OsSDOus6xz4TOsc+BzrPOrs+DzrXPhM61IM+MzrvOsSDPhM6xIM6xz4HPh861zq/OsTtcIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIs6kzq/PhM67zr/PgiDOtc+Bz47PhM63z4POt8+CXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImdyXCJdID0gZ3JlZWtTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZ3JcIl0gPSBcIs61zrvOu863zr3Ouc66zqxcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaGVicmV3U3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIteQ15fXldeo15RcIixcbiAgcGFnZU5leHRUZXh0OiBcIten15PXmdee15RcIixcbiAgY29tcGxldGVUZXh0OiBcIteh15nXldedXCIsXG4gIHByZXZpZXdUZXh0OiBcIteq16bXldeS15Qg157Xp9eT15nXnteUXCIsXG4gIGVkaXRUZXh0OiBcItec1rfXotay16jXlda515pcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIteU1rfXqteX1rjXnNa415RcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLXkNeX16ggKNeg15Ag15zXqteQ16gpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLXkNejINeQ15fXk1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLXkdeX16gg15TXm9ecXCIsXG4gIHByb2dyZXNzVGV4dDogXCLXk9ejIHsxfSDXnteq15XXmiB7MH1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIteU16fXnNeY15QgezB9INee16rXldeaIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi16LXoNeUINei15wg16nXkNec15XXqlwiLFxuICBlbXB0eVN1cnZleTogXCLXkNeZ158g16nXkNec15XXqlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIteq15XXk9eUINei15wg157Xmdec15XXmSDXlNep15DXnNeV158hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLXlNeo16nXldee15XXqiDXqdec16DXlSDXnteo15DXldeqINep15vXkdeoINeh15nXmdee16og15DXqiDXlNeh16fXqCDXlNeW15QuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi15jXoteZ16DXlCDXnteU16nXqNeqLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIteR15fXqC4uLlwiLFxuICB2YWx1ZTogXCLXoteo15pcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLXkNeg15Ag15TXqdeRINei15wg15TXqdeQ15zXlFwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLXkNeg15Ag16LXoNeUINec16TXl9eV16og16LXnCDXqdeQ15zXlCDXkNeX16ouXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi15DXoNeQINei16DXlCDXotecINep15DXnNeV16og15HXm9ecINeU16nXldeo15XXqi5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIteU16rXqdeV15HXlCDXpteo15nXm9eUINec15TXmdeV16og157Xodek16guXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi15TXltefINec16TXl9eV16ogezB9INeq15XXldeZ150uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi15TXltefINek15fXldeqINeeLSB7MH0g16rXldeV15nXnS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLXlNeW158g15nXldeq16gg154tIHswfSDXldek15fXldeqINeeLSB7MX0g16rXldeV15nXnS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLXkNeg15Ag157XnNeQINec16TXl9eV16ogezB9INep15XXqNeV16ouXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIteR15fXqCDXnNek15fXldeqIHswfSDXkNek16nXqNeV15nXldeqLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLXkdeX16gg16LXkyB7MH0g15DXpNep16jXldeZ15XXqi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nINeX15nXmdeRINec15TXmdeV16og16nXldeV15Qg15DXlSDXkteT15XXnCDXniB7MX0sINeV16nXldeV15Qg15wtIHsyfSDXkNeVINek15fXldeqINeeLSB7fX1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug15LXk9eV15wg154gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg15fXmdeZ15Eg15zXlNeZ15XXqiDXqdeV15XXlCDXkNeVINen15jXnyDXniB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiAn15TXltefINeb16rXldeR16og15PXldeQXCLXnCDXl9eV16fXmdeqLicsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIteU15HXmdeY15XXmTogezB9INem16jXmdeaINec15TXl9eW15nXqCAn15DXnteqJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIteU15HXp9ep15Qg15TXl9eW15nXqNeUINeQ16og15TXqdeS15nXkNeUICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi15TXkden16nXlCDXlNeX15bXmdeo15Qg16DXqteV16DXmdedINeo15nXp9eZ150g15DXlSDXqdeU157XkNek15nXmdefICfXoNeq15nXkScg16nXkteV15lcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLXkteV15PXnCDXlNen15XXkdelINec15Ag15nXotec15Qg16LXnCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogJ9eg15Ag15zXlNeW15nXnyDXoNeq15XXoNeZ150g15HXqdeT15QgXCLXkNeX16hcIicsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLXlNen15XXkdelINep15zXmiDXoNeY16LXny4g15TXnteq158g157Xodek16gg16nXoNeZ15XXqiDXldeg16HXlCDXqdeV15EuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIteY15XXotefLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi15zXkdeX15XXqCDXp9eR16bXmdedLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLXnNeQINeg15HXl9eoINen15XXkdelXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi15TXkNedINeQ16rXlCDXqNeV16bXlCDXnNee15fXldenINeQ16og15TXqNep15XXnteUP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItei16jXmiDXlteUINem16jXmdeaINec15TXmdeV16og15nXmdeX15XXk9eZLlwiLFxuICBhZGRDb2x1bW46IFwi15TXldeh16Mg16LXnteV15PXlFwiLFxuICBhZGRSb3c6IFwi15zXlNeV16HXmdejINep15XXqNeUXCIsXG4gIHJlbW92ZVJvdzogXCLXnNaw15TWt9eh1rTXmdeoXCIsXG4gIGFkZFBhbmVsOiBcIteU15XXodejINeX15PXqVwiLFxuICByZW1vdmVQYW5lbDogXCLXnNaw15TWt9eh1rTXmdeoXCIsXG4gIGNob2ljZXNfSXRlbTogXCLXpNeo15nXmFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIteY15XXqFwiLFxuICBtYXRyaXhfcm93OiBcItep14HXlda816jWuNeUXCIsXG4gIHNhdmluZ0RhdGE6IFwi15TXqteV16bXkNeV16og16DXqdee16jXldeqINeR16nXqNeqIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi15DXmdeo16LXlCDXqdeS15nXkNeUINeV15zXkCDXlNem15zXl9eg15Ug15zXqdee15XXqCDXkNeqINeU16rXldem15DXldeqLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLXlNeq15XXpteQ15XXqiDXoNep157XqNeVINeR15TXptec15fXlCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIteg16HXlCDXqdeV15FcIixcbiAgdGltZXJNaW46IFwi15PXp9eUXCIsXG4gIHRpbWVyU2VjOiBcItep16DXmdeV16pcIixcbiAgdGltZXJTcGVudEFsbDogXCLXlNeV16bXkNeqIHswfSDXkdeT16Mg15bXlCDXldeR16HXmiDXlNeb15wgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLXlNeV16bXkNeqIHswfSDXkdeT16Mg15bXlC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLXlNeV16bXkNeqINeh15vXldedINeb15XXnNecINep15wgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi15TXldem15DXqiB7MH0g157XqteV15ogezF9INeR15PXoyDXlteUINeVLSB7Mn0g157XqteV15ogezN9INeR16HXmiDXlNeb15wuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIteU15XXpteQ16ogezB9INee16rXldeaIHsxfSDXkdeT16Mg15bXlC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLXlNeV16bXkNeqINeh15vXldedINeb15XXnNecINep15wgezB9INee16rXldeaIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItec1rDXoNa316fXlda516pcIixcbiAgY2xlYXJDYXB0aW9uOiBcIteR16jXldeoXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIteR15fXqCDXp9eV15HXpVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLXlNeh16gg16fXldeR16Ug15bXlFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIteb159cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItec15BcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi15TXkNedINeQ16rXlCDXkdeY15XXlyDXqdeR16jXpteV16DXmiDXnNeU16HXmdeoINen15XXkdelINeW15Q6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIteU15DXnSDXkNeq15Qg15HXmNeV15cg16nXkdeo16bXldeg15og15zXlNeh15nXqCDXkNeqINeb15wg15TXp9eR16bXmdedP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi15vXldeq16jXqiDXqdeQ15zXlFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJoZVwiXSA9IGhlYnJld1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJoZVwiXSA9IFwi16LXkdeo15nXqlwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBoaW5kaVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLgpKrgpL/gpJvgpLLgpL5cIixcbiAgcGFnZU5leHRUZXh0OiBcIuCkheCkl+CksuCkvlwiLFxuICBjb21wbGV0ZVRleHQ6IFwi4KSq4KWC4KSw4KS+XCIsXG4gIHByZXZpZXdUZXh0OiBcIuCkquClguCksOCljeCkteCkuOCkruClgOCkleCljeCkt+CkvlwiLFxuICBlZGl0VGV4dDogXCLgpLjgpILgpKrgpL7gpKbgpL/gpKRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuCktuClgeCksOClglwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuCkpuClguCkuOCksOCkviAo4KS14KSw4KWN4KSj4KSoIOCkleCksOClh+CkgilcIixcbiAgbm9uZUl0ZW1UZXg6IFwi4KSV4KWL4KSIIOCkqOCkueClgOCkglwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLgpLjgpK3gpYAg4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIJcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuCkquClg+Ckt+CljeCkoCAxIOCkruClh+CkgiDgpLjgpYcgMFwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiIOCkpuCkuOCljeCkpOCkvuCkteClh+CknCB7MX0g4KSV4KWHIHswfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezF9IOCkuOCkteCkvuCksuCli+CkgiDgpK7gpYfgpIIg4KS44KWHIHswfSDgpJXgpYcg4KSc4KS14KS+4KSsIOCkpuCkv+Ckj1wiLFxuICBlbXB0eVN1cnZleTogXCLgpLjgpLDgpY3gpLXgpYfgpJXgpY3gpLfgpKMg4KSu4KWH4KSCIOCkleCli+CkiCDgpKbgpYPgpLbgpY3gpK/gpK7gpL7gpKgg4KSq4KWD4KS34KWN4KSgIOCkr+CkviDgpKrgpY3gpLDgpLbgpY3gpKgg4KSo4KS54KWA4KSCIOCkueCliFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpJXgpYsg4KSq4KWC4KSw4KS+IOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkp+CkqOCljeCkr+CkteCkvuCkplwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIiDgpLngpK7gpL7gpLDgpYcg4KSw4KS/4KSV4KWJ4KSw4KWN4KShIOCkrOCkpOCkvuCkpOClhyDgpLngpYjgpIIg4KSV4KS/IOCkhuCkqiDgpKrgpLngpLLgpYcg4KS54KWAIOCkh+CkuCDgpLjgpLDgpY3gpLXgpYfgpJXgpY3gpLfgpKMg4KSV4KWLIOCkquClguCksOCkviDgpJXgpLAg4KSa4KWB4KSV4KWHIOCkueCliOCkglwiLFxuICBsb2FkaW5nU3VydmV5OiBcIuCkuOCksOCljeCkteClh+CkleCljeCkt+CkoyDgpJbgpYHgpLIg4KSw4KS54KS+IOCkueCliC7igKZcIixcbiAgb3B0aW9uc0NhcHRpb246IFwi4KSa4KWB4KSo4KWH4KSCXCIsXG4gIHZhbHVlOiBcIuCkruClguCksuCljeCkr1wiLFxuICByZXF1aXJlZEVycm9yOiBcIuCkleClg+CkquCkr+CkviDgpKrgpY3gpLDgpLbgpY3gpKgg4KSV4KS+IOCkieCkpOCljeCkpOCksCDgpKbgpYfgpIJcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIOCkj+CklSDgpKrgpY3gpLDgpLbgpY3gpKgg4KSV4KS+IOCkieCkpOCljeCkpOCksCDgpKbgpYfgpIJcIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KS44KSt4KWAIOCkquCkguCkleCljeCkpOCkv+Ckr+Cli+CkgiDgpK7gpYfgpIIg4KS44KS14KS+4KSy4KWL4KSCIOCkleClhyDgpJzgpLXgpL7gpKwg4KSm4KWH4KSCXCIsXG4gIG51bWVyaWNFcnJvcjogXCLgpK7gpYLgpLLgpY3gpK8g4KS44KSC4KSW4KWN4KSv4KS+4KSk4KWN4KSu4KSVIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4gezB9IOCkteCksOCljeCkoyDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi4KSV4KWD4KSq4KSv4KS+IHswfSDgpLjgpYcg4KSV4KSuIOCkteCksOCljeCkoyDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi4KSV4KWD4KSq4KSv4KS+IHswfSDgpLjgpYcg4KSF4KSn4KS/4KSVIOCklOCksCB7MX0g4KS44KWHIOCkleCkriDgpKrgpL7gpKTgpY3gpLDgpYvgpIIg4KSu4KWH4KSCIOCkquCljeCksOCkteClh+CktiDgpJXgpLDgpYfgpIJcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4gezB9IOCkquCkguCkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSt4KSw4KWH4KSCXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuCkleClg+CkquCkr+CkviDgpJXgpK4g4KS44KWHIOCkleCkriB7MH0g4KS14KS/4KSV4KSy4KWN4KSqIOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuCkleClg+CkquCkr+CkviB7MH0g4KS14KS/4KSV4KSy4KWN4KSq4KWL4KSCIOCkuOClhyDgpIXgpKfgpL/gpJUg4KSo4KS54KWA4KSCIOCkmuClgeCkqOClh+CkglwiLFxuICBudW1lcmljTWluTWF4OiBcIid7MH0nIHsxfSDgpLjgpYcg4KSs4KSw4KS+4KSs4KSwIOCkr+CkviDgpIXgpKfgpL/gpJUg4KSU4KSwIHsyfSDgpLjgpYcg4KSs4KSw4KS+4KSs4KSwIOCkr+CkviDgpJXgpK4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHsxfSDgpLjgpYcg4KSs4KSw4KS+4KSs4KSwIOCkr+CkviDgpIXgpKfgpL/gpJUg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHsxfSDgpLjgpYcg4KSs4KSw4KS+4KSs4KSwIOCkr+CkviDgpJXgpK4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckj1wiLFxuICBpbnZhbGlkRW1haWw6IFwi4KSV4KWD4KSq4KSv4KS+IOCkj+CklSDgpLXgpYjgpKcg4KSI4KSu4KWH4KSyIOCkquCkpOCkviDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIuCkheCkreCkv+CkteCljeCkr+CkleCljeCkpOCkvzogezB9IOCkleCliyAnIOCkuOCkmiAnIOCksuCljOCkn+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIuCkheCkqOClgeCksOCli+CkpyDgpLLgpYzgpJ/gpL7gpK/gpL4g4KSk4KWN4KSw4KWB4KSf4KS/ICd7MH0nIC4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCLgpIXgpKjgpYHgpLDgpYvgpKcg4KSo4KWHIOCkluCkvuCksuClgCDgpKHgpYfgpJ/gpL4g4KS14KS+4KSq4KS4IOCkleCksCDgpKbgpL/gpK/gpL4g4KS54KWIIFwiLFxuICBleGNlZWRNYXhTaXplOiBcIuCkq+CkvOCkvuCkh+CksiDgpJXgpL4g4KSG4KSV4KS+4KSwIHswfSDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPICDgpK/gpL4g4KSr4KS/4KSwICfgpKrgpL7gpKUnIOCkquCljeCksOClieCkquCksOCljeCkn+ClgCDgpJfgpLLgpKQg4KS54KWIXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KSm4KWC4KS44KSw4KS+IOCkruClguCksuCljeCkryDgpKbgpLDgpY3gpJwg4KSV4KSw4KWH4KSCXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi4KSG4KSq4KSV4KWAIOCkq+CkvuCkh+CksiDgpIXgpKrgpLLgpYvgpKEg4KS54KWLIOCksOCkueClgCDgpLngpYjgpaQg4KSV4KWD4KSq4KSv4KS+IOCkleCkiCDgpLjgpYfgpJXgpILgpKEg4KSH4KSC4KSk4KSc4KS+4KSwIOCkleCksOClh+CkgiDgpJTgpLAg4KSr4KS/4KSwIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSC4KWkXCIsXG4gIGxvYWRpbmdGaWxlOiBcIuCksuCli+CkoeCkv+CkguCkl1wiLFxuICBjaG9vc2VGaWxlOiBcIuCkq+CkvOCkvuCkh+CksiDgpJrgpYHgpKjgpYfgpIJcIixcbiAgbm9GaWxlQ2hvc2VuOiBcIuCkleCli+CkiCDgpKvgpL7gpIfgpLIg4KSo4KS54KWA4KSCIOCkmuClgeCkqOClgCDgpJfgpIhcIixcbiAgY29uZmlybURlbGV0ZTogXCLgpJXgpY3gpK/gpL4g4KSG4KSqIOCksOCkv+CkleClieCksOCljeCkoSDgpLngpJ/gpL7gpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkglwiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuCkr+CkuSDgpK7gpL7gpKgg4KSF4KSo4KWL4KSW4KS+IOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgYWRkQ29sdW1uOiBcIuCkleClieCksuCkriDgpJzgpYvgpKHgpLzgpYfgpIJcIixcbiAgYWRkUm93OiBcIuCkquCkguCkleCljeCkpOCkvyDgpJzgpYvgpKHgpLzgpYfgpIJcIixcbiAgcmVtb3ZlUm93OiBcIuCkueCkn+CkvuCkj1wiLFxuICBhZGRQYW5lbDogXCLgpKjgpK/gpL4g4KSc4KWL4KSh4KS84KWH4KSCXCIsXG4gIHJlbW92ZVBhbmVsOiBcIuCkueCkn+CkvuCkj1wiLFxuICBjaG9pY2VzX0l0ZW06IFwi4KSu4KSmXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi4KSV4KWJ4KSy4KSuXCIsXG4gIG1hdHJpeF9yb3c6IFwi4KSq4KSC4KSV4KWN4KSk4KS/XCIsXG4gIHNhdmluZ0RhdGE6IFwi4KSq4KSw4KS/4KSj4KS+4KSuIOCkuOCksOCljeCkteCksCDgpKrgpLAg4KS44KWH4KS1IOCkueCliyDgpLDgpLngpYcg4KS54KWI4KSCXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLgpI/gpJUg4KSk4KWN4KSw4KWB4KSf4KS/IOCkueClgeCkiCDgpJTgpLAg4KS54KSuIOCkquCksOCkv+Cko+CkvuCkruCli+CkgiDgpJXgpYsg4KSo4KS54KWA4KSCIOCkuOClh+CktSDgpJXgpLAg4KS44KSV4KWHXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIuCkquCksOCkv+Cko+CkvuCkriDgpLjgpKvgpLLgpKTgpL7gpKrgpYLgpLDgpY3gpLXgpJUg4KS44KWH4KS1IOCkueCliyDgpJfgpI9cIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIuCkq+Ckv+CksCDgpJXgpYvgpLbgpL/gpLYg4KSV4KSw4KWLXCIsXG4gIHRpbWVyTWluOiBcIuCkruCkv+CkqOCkn1wiLFxuICB0aW1lclNlYzogXCLgpLjgpYfgpJXgpILgpKFcIixcbiAgdGltZXJTcGVudEFsbDogXCLgpIbgpKrgpKjgpYcg4KSH4KS4IOCkquClg+Ckt+CljeCkoCDgpKrgpLAgezB9IOCkluCksOCljeCkmiDgpJXgpL/gpI8g4KS54KWI4KSCIOCklOCksCDgpJXgpYHgpLIgezF9XCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuCkhuCkquCkqOClhyDgpIfgpLgg4KSq4KWD4KS34KWN4KSgIOCkquCksCB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+Ckr+CkviDgpLngpYhcIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLgpIbgpKrgpKjgpYcg4KSV4KWB4KSyIHswfSDgpJbgpLDgpY3gpJog4KSV4KS/4KSv4KS+IOCkueCliFwiLFxuICB0aW1lckxpbWl0QWxsOiBcIuCkhuCkquCkqOClhyDgpIfgpLgg4KSq4KWD4KS34KWN4KSgIOCkquCksCB7MX0g4KSV4KWAIHswfSDgpJTgpLAg4KSV4KWB4KSyIHszfSDgpJXgpYAgezJ9IOCkluCksOCljeCkmiDgpJXgpYAg4KS54KWI4KWkXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIuCkhuCkquCkqOClhyDgpIfgpLgg4KSq4KWD4KS34KWN4KSgIOCkquCksCB7MX0g4KSV4KS+IHswfSDgpJbgpLDgpY3gpJog4KSV4KS/4KSv4KS+IOCkueCliFwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuCkhuCkquCkqOClhyDgpJXgpYHgpLIgezF9IOCkleClgCB7MH0g4KSW4KSw4KWN4KSaIOCkleClgCDgpLngpYhcIixcbiAgY2xlYW5DYXB0aW9uOiBcIuCkuOCkvuCkq1wiLFxuICBjbGVhckNhcHRpb246IFwi4KS44KWN4KSq4KS34KWN4KSfXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIuCkq+CkvOCkvuCkh+CksiDgpJrgpYHgpKjgpYfgpIJcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi4KSH4KS4IOCkq+CkvuCkh+CksiDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KWH4KSCXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi4KS54KS+4KSBXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLgpKjgpLngpYDgpIJcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi4KSV4KWN4KSv4KS+IOCkhuCkqiDgpLjgpYHgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSH4KS4IOCkq+CkvOCkvuCkh+CksiDgpJXgpYsg4KS54KSf4KS+4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII6IHswfVwiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi4KSV4KWN4KSv4KS+IOCkhuCkqiDgpLjgpYHgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KS44KSt4KWAIOCkq+CkvOCkvuCkh+CksuCli+CkgiDgpJXgpYsg4KS54KSf4KS+4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpIJcIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuCkquCljeCksOCktuCljeCkqCDgpJXgpL4g4KS24KWA4KSw4KWN4KS34KSVXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhpXCJdID0gaGluZGlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaGlcIl0gPSBcImhpbmRpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGh1bmdhcmlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJWaXNzemFcIixcbiAgcGFnZU5leHRUZXh0OiBcIlRvdsOhYmJcIixcbiAgY29tcGxldGVUZXh0OiBcIkvDqXN6XCIsXG4gIHByZXZpZXdUZXh0OiBcIkVsxZFuw6l6ZXRcIixcbiAgZWRpdFRleHQ6IFwiU3plcmtlc3p0w6lzXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJSYWp0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiRWd5w6liIChhZGphIG1lZylcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkVneWlrIHNlbVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJNaW5kZXQga2l2w6FsYXN6dFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiezB9Li97MX0gb2xkYWxcIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInswfSAvIHsxfSByZWtvcmRcIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlbDoWxhc3pvbHQga8OpcmTDqXNlazogezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIlRoZXJlIGlzIG5vIHZpc2libGUgcGFnZSBvciBxdWVzdGlvbiBpbiB0aGUgc3VydmV5LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkvDtnN6w7ZuasO8aywgaG9neSBraXTDtmx0w7Z0dGUgZmVsbcOpcsOpc8O8bmtldCFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJNw6FyIGtpdMO2bHTDtnR0ZSBhIGZlbG3DqXLDqXN0LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkZlbG3DqXLDqXMgYmV0w7ZsdMOpc2UuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVsOhbGFzc3pvbi4uLlwiLFxuICB2YWx1ZTogXCLDqXJ0w6lrXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiS8OpcmrDvGssIHbDoWxhc3pvbGphIG1lZyBlenQgYSBrw6lyZMOpc3QhXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkvDqXJqw7xrLCB2w6FsYXN6b2xqb24gbGVnYWzDoWJiIGVneSBrw6lyZMOpc3JlLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkvDqXJqw7xrIGFkam9uIHbDoWxhc3p0IG1pbmRlbiBzb3JiYW4hXCIsXG4gIG51bWVyaWNFcnJvcjogXCJBeiDDqXJ0w6lrIHN6w6FtIGtlbGwsIGhvZ3kgbGVneWVuIVwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkFkam9uIG1lZyBsZWdhbMOhYmIgezB9IGthcmFrdGVydCFcIixcbiAgdGV4dE1heExlbmd0aDogXCJMZWdmZWxqZWJiIHswfSBrYXJha3RlcnQgYWRqb24gbWVnIVwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkFkam9uIG1lZyBsZWdhbMOhYmIgezB9LCBkZSBsZWdmZWxqZWJiIHsxfSBrYXJha3RlcnQhXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVMO2bHRzw7ZuIGtpIG1pbmltdW0gezB9IHNvcnQhXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlbDoWxhc3N6b24ga2kgbGVnYWzDoWJiIHswfSBsZWhldMWRc8OpZ2V0IVwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJOZSB2w6FsYXNzem9uIHTDtmJiZXQsIG1pbnQgezB9IGxlaGV0xZFzw6lnIVwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgbGVneWVuIG5hZ3lvYmIsIHZhZ3kgZWd5ZW5sxZEsIG1pbnQgezF9IMOpcyBraXNlYmIsIHZhZ3kgZWd5ZW5sxZEsIG1pbnQgezJ9IVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGxlZ3llbiBsZWdhbMOhYmIgezF9IVwiLFxuICBudW1lcmljTWF4OiBcIlRoZSAnezB9JyBuZSBsZWd5ZW4gbmFneW9iYiwgbWludCB7MX0hXCIsXG4gIGludmFsaWRFbWFpbDogXCJBZGpvbiBtZWcgZWd5IHZhbMOzcyBlbWFpbCBjw61tZXQhXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkEga8O2dmV0a2V6xZEga2lmZWplesOpczogezB9IHZpc3N6YSBrZWxsIGFkbmlhIGF6IOKAnmlnYXrigJ0gw6lydMOpa2V0LlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiQSBsZWvDqXJkZXrDqXMgaGliw6F2YWwgdMOpcnQgdmlzc3phOiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkEgbGVrw6lyZGV6w6lzIMO8cmVzIGFkYXR0YWwgdMOpcnQgdmlzc3phLCB2YWd5IGEgJ3BhdGgnIHBhcmFtw6l0ZXIgaGVseXRlbGVuLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIkEgbcOpcmV0IG5lbSBsZWhldCBuYWd5b2JiLCBtaW50IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFkamEgbWVnIGF6IGVnecOpYiDDqXJ0w6lrZXQhXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGZWx0w7ZsdMOpcyBmb2x5YW1hdGJhbi4gVsOhcmpvbiBww6FyIG3DoXNvZHBlcmNldCwgbWFqZCBwcsOzYsOhbGphIMO6anJhLlwiLFxuICBsb2FkaW5nRmlsZTogXCJCZXTDtmx0w6lzLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiRsOhamxvayBraXbDoWxhc3p0w6FzYSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5pbmNzIGtpdsOhbGFzenR2YSBmw6FqbFwiLFxuICBjb25maXJtRGVsZXRlOiBcIlTDtnJsaSBlenQgYSByZWtvcmRvdD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJBeiDDqXJ0w6lrbmVrIGVneWVkaW5layBrZWxsIGxlbm5pZS5cIixcbiAgYWRkQ29sdW1uOiBcIk9zemxvcCBob3p6w6FhZMOhc2FcIixcbiAgYWRkUm93OiBcIlNvciBob3p6w6FhZMOhc2FcIixcbiAgcmVtb3ZlUm93OiBcIkVsdMOhdm9sw610w6FzXCIsXG4gIGFkZFBhbmVsOiBcIsOaaiBob3p6w6FhZMOhc2FcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRWx0w6F2b2zDrXTDoXNcIixcbiAgY2hvaWNlc19JdGVtOiBcImVsZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJPc3psb3BcIixcbiAgbWF0cml4X3JvdzogXCJTb3JcIixcbiAgc2F2aW5nRGF0YTogXCJFcmVkbcOpbnkgbWVudMOpc2UgYSBzemVydmVycmUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVneSBoaWJhIGZvbHl0w6FuIG5lbSB0dWR0dWsgZWxtZW50ZW5pIGF6IGVyZWRtw6lueXQuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkVyZWRtw6lueSBzaWtlcmVzZW4gbWVudHZlIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHLDs2LDoWxqYSDDumpyYVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiw5ZuIHswfSDDtnNzemVnZXQga8O2bHTDtnR0IGV6ZW4gYXogb2xkYWxvbiwgw6lzIMO2c3N6ZXNlbiB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcInswfSDDtnNzemVnZXQga8O2bHTDtnR0IGV6ZW4gYXogb2xkYWxvbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLDlnNzemVzZW4gezB9IGvDtmx0w7Z0dC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIsOWbiB7MH0gLyB7MX0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24sIMOpcyDDtnNzemVzZW4gezJ9IC8gezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLDlm4gezB9IC8gezF9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIsOWc3N6ZXNlbiB7MH0gLyB7MX0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlRpc3p0YVwiLFxuICBjbGVhckNhcHRpb246IFwiRWd5w6lydGVsbcWxXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlbDoWxhc3N6IGbDoWpsdFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJUw6F2b2zDrXRzYSBlbCBlenQgYSBmw6FqbHRcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJZ2VuXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZW1cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQml6dG9zYW4gZWx0w6F2b2zDrXRqYSBlenQgYSBmw6FqbHQ6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkJpenRvc2FuIGVsIGFrYXJqYSB0w6F2b2zDrXRhbmkgYXogw7Zzc3plcyBmw6FqbHQ/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLw6lyZMOpcyBjw61tZVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJodVwiXSA9IGh1bmdhcmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJodVwiXSA9IFwibWFneWFyXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGljZWxhbmRpY1N1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWthXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLDgWZyYW1cIixcbiAgY29tcGxldGVUZXh0OiBcIkxva2nDsFwiLFxuICBwcmV2aWV3VGV4dDogXCJGb3Jza2/DsGFcIixcbiAgZWRpdFRleHQ6IFwiQnJleXRhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJCeXJqYcOwdVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkhpbm4gKHNrw71yaW5nKVwiLFxuICBub25lSXRlbVRleHQ6IFwiRW5naW5uXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZlbGphIGFsbHRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlPDrcOwYSB7MH0gb2YgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJUYWthIHVwcCB7MH0gYWYgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJTdmFyYcOwIHswfSAvIHsxfSBzcHVybmluZ3VtXCIsXG4gIGVtcHR5U3VydmV5OiBcIsOeYcOwIGVyIGVuZ2lubiBzw63DsGEgZcOwYSBzcHVybmluZ2FyIMOtIMO+ZXNzYXJpIGvDtm5udW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFrayBmeXJpciBhw7AgZnlsbGphIMO6dCDDvmVzc2Ega8O2bm51biFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlNrcsOhciBva2thciBzw71uYSBhw7Agw77DuiBoZWZ1ciDDvmVnYXIgbG9racOwIMO+ZXNzYXJpIGvDtm5udW4uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiS8O2bm51bmluIGVyIGHDsCBobGHDsGEuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVmVsZHUuLi5cIixcbiAgdmFsdWU6IFwiZ2lsZGlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJWaW5zYW1sZWdhc3Qgc3ZhcmnDsCBzcHVybmluZ3VubmkuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlZpbnNhbWxlZ2FzdCBzdmFyYcOwdSBhw7AgbWlubnN0YSBrb3N0aSBlaW5uaSBzcHVybmluZ3UuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmluc2FtbGVnYXN0IHN2YXJpw7Agc3B1cm5pbmd1bSDDrSDDtmxsdW0gcsO2w7B1bS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIsOeZXR0YSBnaWxkaSB2ZXLDsHVyIGHDsCB2ZXJhIHRhbGEuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiw55hw7Agw6Z0dGkgYcOwIHZlcmEgbWlubnN0IHswfSB0w6Frbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBtZXN0IHswfSB0w6Frbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBmbGVpcmkgZW4gezB9IG9nIGbDpnJyaSBlbiB7MX0gdMOha24uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVmluc2FtbGVnYXN0IGZ5bGxpw7Agw7pyIGHDsCBtaW5uc3RhIGtvc3RpIHswfSByYcOwaXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZpbnNhbWxlZ2FzdCB2ZWxqacOwIGHDsCBtaW5uc3RhIGtvc3RpIHswfSBtw7ZndWxlaWthLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWaW5zYW1sZWdhc3QgdmVsamnDsCBla2tpIGZsZWlyaSBlbiB7MH0gbcO2Z3VsZWlrYS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIMOmdHRpIGHDsCB2ZXJhIG1laXJhIGVuIGXDsGEgamFmbnQgb2cgezF9IG1pbm5hIGVuIGXDsGEgamFmbnQgb2cgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiezB9JyDDpnR0aSBhw7AgdmVyYSBtZWlyYSBlbiBlw7BhIGphZm50IG9nIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIMOmdHRpIGHDsCB2ZXJhIG1pbm5hIGVuIGXDsGEgamFmbnQgb2cgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJWaW5zYW1sZWdhc3Qgc2zDoWnDsCBpbm4gZ2lsdCBuZXRmYW5nLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJUasOhbmluZ2luOiB7MH0gw6Z0dGkgYcOwIHNraWxhICdzYXR0Jy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkJlacOwbmlubiBza2lsYcOwaSBlZnRpcmZhcmFuYWRpIHZpbGx1ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIkJlacOwbmlubmcgc2tpbGHDsGkgZW5ndW0gZ8O2Z251bSBlw7BhIHNsw7PDsGlubiB2YXIgcsO2bmdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJTa3LDoWlubiBza2FsIGVra2kgdmVyYSBzdMOmcnJpIGVuIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZpbmFtbGVnYXN0IGZ5bGxpw7Agw7p0IGhpdHQgZ2lsZGnDsC5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlNrcsOhaW5uIMO+w61uIHZhciBzZW5kLiBWaW5zYW1sZWdhc3QgYsOtw7Bpw7Agw60gbm9ra3JhciBzZWvDum5kdXIgb2cgcmV5bmnDsCBhZnR1ci5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiSGxlw7B1ciAuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWZWxkdSBza3LDoXIgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJFbmdpbiBza3LDoSB2YWxpblwiLFxuICBjb25maXJtRGVsZXRlOiBcIlZpbHR1IGV5w7BhIHNrcsOhbm5pP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIsOeZXR0YSBnaWxkaSDDpnR0aSBhw7AgdmVyYSBlaW5zdGFrdC5cIixcbiAgYWRkQ29sdW1uOiBcIkLDpnRhIHZpw7AgZMOhbGtpXCIsXG4gIGFkZFJvdzogXCJCw6Z0YSB2acOwIHLDtsOwXCIsXG4gIHJlbW92ZVJvdzogXCJGamFybMOmZ2phXCIsXG4gIGFkZFBhbmVsOiBcIkLDpnRhIHZpw7AgbsO9anVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRmphcmzDpmfDsHVcIixcbiAgY2hvaWNlc19JdGVtOiBcImhsdXR1clwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkTDoWxrdXJcIixcbiAgbWF0cml4X3JvdzogXCJSw7bDsFwiLFxuXG4gIHNhdmluZ0RhdGE6IFwiTmnDsHVyc3TDtsOwdXJuYXIgZXJ1IGHDsCBzcGFyYSDDoSBuZXTDvmrDs25pbnVtIC4uLiBcIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlZpbGxhIGtvbSB1cHAgb2cgdmnDsCBnw6F0dW0gZWtraSB2aXN0YcOwIG5pw7B1cnN0w7bDsHVybmFyLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLDgXJhbmd1cmlubiB2YXIgdmlzdGHDsHVyIG1lw7AgZ8Ozw7B1bSDDoXJhbmdyaSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlJleW5kdSBhZnR1clwiLFxuICB0aW1lck1pbjogXCJtw61uXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gw6Egw75lc3Nhcmkgc8Otw7B1IG9nIHsxfSBzYW10YWxzLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLDnsO6IGhlZnVyIGV5dHQgezB9IMOhIMO+ZXNzYXJpIHPDrcOwdS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLDnsO6IGhlZnVyIGV5dHQgezB9IHNhbXRhbHMuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLDnsO6IGhlZnVyIGV5dHQgezB9IGFmIHsxfSDDoSDDvmVzc2FyaSBzw63DsHUgb2cgezJ9IGFmIHszfSBzYW10YWxzLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLDnsO6IGhlZnVyIGV5dHQgezB9IGFmIHsxfSDDoSDDvmVzc2FyaSBzw63DsHUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiw57DuiBoZWZ1ciBleXR0IHswfSBhZiB7MX0gc2FtdGFscy5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkhyZWludFwiLFxuICBjbGVhckNhcHRpb246IFwiSHJlaW5zYVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWZWxkdSBza3LDoVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJGamFybMOmZ8OwdSDDvmVzc2Egc2tyw6FcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKw6FcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5laVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJFcnR1IHZpc3MgdW0gYcOwIMO+w7ogdmlsamlyIGZqYXJsw6ZnamEgw75lc3NhIHNrcsOhOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJFcnR1IHZpc3MgdW0gYcOwIMO+w7ogdmlsamlyIGZqYXJsw6ZnamEgYWxsYXIgc2tyw6FyP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiU3B1cm5pbmdhcnRpdGlsbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJpc1wiXSA9IGljZWxhbmRpY1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJpc1wiXSA9IFwiw61zbGVuc2thXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGluZG9uZXNpYW5TdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiU2ViZWx1bW55YVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2VsYW5qdXRueWFcIixcbiAgY29tcGxldGVUZXh0OiBcIlNlbGVzYWlcIixcbiAgcHJldmlld1RleHQ6IFwiUHJhdGluamF1XCIsXG4gIGVkaXRUZXh0OiBcIlN1bnRpbmdcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIk11bGFpXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiTGFpbm55YSAoamVsYXNrYW4pXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJUaWRhayBBZGFcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiUGlsaWggU2VtdWFcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIkhhbGFtYW4gezB9IGRhcmkgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWthbSB7MH0gZGFyaSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIk1lbmphd2FiIHBlcnRhbnlhYW4gezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIlRpZGFrIGFkYSBoYWxhbWFuIGF0YXUgcGVydGFueWFhbiBkYWxhbSBzdXJ2ZWkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGVyaW1hIGthc2loIHRlbGFoIG1lbnllbGVzYWlrYW4gc3VydmVpIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiQ2F0YXRhbiBrYW1pIG1lbnVuanVra2FuIGJhaHdhIEFuZGEgdGVsYWggbWVueWVsZXNhaWthbiBzdXJ2ZWkgaW5pLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIk1lbXVhdCBzdXJ2ZWkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiUGlsaWguLi5cIixcbiAgdmFsdWU6IFwibmlsYWlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJTaWxhaGthbiBqYXdhYiBwZXJ0YW55YWFuIGJlcmlrdXQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlNpbGFoa2FuIGphd2FiIHNldGlkYWtueWEgc2F0dSBwZXRhbnlhYW4uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiU2lsYWhrYW4gamF3YWIgcGVydGFueWFhbiBwYWRhIHNlbXVhIGJhcmlzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTmlsYWkgaGFydXMgYmVydXBhIGFuZ2thLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlNpbGFoa2FuIG1hc3Vra2FuIHNldGlkYWtueWEgezB9IGthcmFrdGVyLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlNpbGFoa2FuIG1hc3Vra2FuIGt1cmFuZyB7MH0ga2FyYWt0ZXIuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJQU2lsYWhrYW4gbWFzdWtrYW4gbGViaWggZGFyaSB7MH0gZGFuIGt1cmFuZyBkYXJpIHsxfSBrYXJha3Rlci5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaWxhaGthbiBpc2kgc2V0aWRha255YSB7MH0gYmFyaXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNpbGFoa2FuIHBpbGloIHNldGlkYWtueWEgezB9IHZhcmlhbi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2lsYWhrYW4gcGlsaWggdGlkYWsgbGViaWggZGFyaSB7MH0gdmFyaWFuLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBsZWJpaCBkYXJpIHsxfSBkYW4gaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBrdXJhbmcgZGFyaSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBoYXJ1cyBzYW1hIGRlbmdhbiBhdGF1IGxlYmloIGRhcmkgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBrdXJhbmcgZGFyaSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlNpbGFoa2FuIG1hc3Vra2FuIGUtbWFpbCB5YW5nIGJlbmFyLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJFa3NwcmVzaTogezB9IGhhcnVzIG1lbmdlbWJhbGlrYW4gJ2JlbmFyJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlBlcm1pbnRhYW4gbWVuZ2VtYmFsaWthbiBrZXNhbGFoYW4gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJQZXJtaW50YWFuIG1lbmdlbWJhbGlrYW4gZGF0YSBrb3NvbmcgYXRhdSBwcm9wZXJ0aSAncGF0aCcgc2FsYWguXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVWt1cmFuIGJlcmthcyB0aWRhayBib2xlaCBtZWxlYmloaSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJTaWxhaGthbiBtYXN1a2thbiBuaWxhaSBsYWlubm55YS5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkJlcmthcyBBbmRhIHNlZGFuZyBkaXVuZ2dhaC4gU2lsYWhrYW4gdHVuZ2d1IGJlYmVyYXBhIHNhYXQgYXRhdSBjb2JhIGxhZ2kuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIk1lbXVhdC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlBpbGloIGJlcmthcy4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiVGlkYWsgYWRhIGZpbGUgeWFuZyBkaXBpbGloXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQXBha2FoIEFuZGEgaW5naW4gbWVuZ2hhcHVzIGNhdGF0YW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiTmlsYWkgaGFydXMgdW5pay5cIixcbiAgYWRkQ29sdW1uOiBcIlRhbWJhaCBrb2xvbVwiLFxuICBhZGRSb3c6IFwiVGFtYmFoIGJhcmlzXCIsXG4gIHJlbW92ZVJvdzogXCJIYXB1c1wiLFxuICBhZGRQYW5lbDogXCJUYW1iYWggYmFydVwiLFxuICByZW1vdmVQYW5lbDogXCJIYXB1c1wiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9tXCIsXG4gIG1hdHJpeF9yb3c6IFwiQmFyaXNcIixcbiAgc2F2aW5nRGF0YTogXCJIYXNpbCBzZWRhbmcgZGlzaW1wYW4gcGFkYSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIktlc2FsYWhhbiB0ZXJqYWRpIGRhbiBrYW1pIHRpZGFrIGRhcGF0IG1lbnlpbXBhbiBoYXNpbC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiSGFzaWwgdGVsYWggc3Vrc2VzIGRpc2ltcGFuIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiQ29iYSBsYWdpXCIsXG4gIHRpbWVyTWluOiBcIm1lbml0XCIsXG4gIHRpbWVyU2VjOiBcImRldGlrXCIsXG4gIHRpbWVyU3BlbnRBbGw6XG4gICAgXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gcGFkYSBoYWxhbWFuIGluaSBkYW4gezF9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiWUFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBwYWRhIGhhbGFtYW4gaW5pLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBzZWNhcmEga2VzZWx1cnVoYW4uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gcGFkYSBoYWxhbWFuIGluaSBkYW4gezJ9IGRhcmkgezN9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IGRhcmkgezF9IHBhZGEgaGFsYW1hbiBpbmkuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IGRhcmkgezF9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkJlcnNpaGthblwiLFxuICBjbGVhckNhcHRpb246IFwiQmVyc2loa2FuXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlBpbGloIEZpbGVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiSGFwdXMgYmVya2FzIGluaVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkl5YVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiVGlkYWtcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQW5kYSB5YWtpbiBpbmdpbiBtZW5naGFwdXMgZmlsZSBpbmk6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFuZGEgeWFraW4gaW5naW4gbWVuZ2hhcHVzIHNlbXVhIGZpbGU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJKdWR1bCBwZXJ0YW55YWFuXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImlkXCJdID0gaW5kb25lc2lhblN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJpZFwiXSA9IFwiYmFoYXNhIEluZG9uZXNpYVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBpdGFsaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZWNlZGVudGVcIixcbiAgcGFnZU5leHRUZXh0OiBcIlN1Y2Nlc3Npdm9cIixcbiAgY29tcGxldGVUZXh0OiBcIlNhbHZhXCIsXG4gIHByZXZpZXdUZXh0OiBcIkFudGVwcmltYVwiLFxuICBlZGl0VGV4dDogXCJNb2RpZmljYVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiSW5pemlvXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQWx0cm8gKGRlc2NyaXZpKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmVzc3Vub1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlemlvbmEgdHV0dGlcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2luYSB7MH0gZGkgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgZGkgezB9IGRpIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiUmlzcG9zdGUgYSB7MH0vezF9IGRvbWFuZGVcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm9uIGNpIHNvbm8gcGFnaW5lIG8gZG9tYW5kZSB2aXNpYmlsaSBuZWwgcXVlc3Rpb25hcmlvLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkdyYXppZSBwZXIgYXZlciBjb21wbGV0YXRvIGlsIHF1ZXN0aW9uYXJpbyFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIkkgbm9zdHJpIHJlY29yZHMgbW9zdHJhbm8gY2hlIGhhaSBnacOgIGNvbXBsZXRhdG8gcXVlc3RvIHF1ZXN0aW9uYXJpby5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJDYXJpY2FtZW50byBkZWwgcXVlc3Rpb25hcmlvIGluIGNvcnNvLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNjZWdsaS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvcmVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJDYW1wbyBvYmJsaWdhdG9yaW9cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGVyIEZhdm9yZSwgcmlzcG9uZGkgYWQgYWxtZW5vIHVuYSBkb21hbmRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkNvbXBsZXRhcmUgdHV0dGUgbGUgcmlnaGVcIixcbiAgbnVtZXJpY0Vycm9yOiBcIklsIHZhbG9yZSBkZXZlIGVzc2VyZSBudW1lcmljb1wiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkluc2VyaXJlIGFsbWVubyB7MH0gY2FyYXR0ZXJpXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTHVuZ2hlenphIG1hc3NpbWEgY29uc2VudGl0YSB7MH0gY2FyYXR0ZXJpXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJJbnNlcmlyZSB1bmEgc3RyaW5nYSBjb24gbWluaW1vIHswfSBlIG1hc3NpbW8gezF9IGNhcmF0dGVyaVwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkNvbXBsZXRhcmUgYWxtZW5vIHswfSByaWdoZS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2VsZXppb25hcmUgYWxtZW5vIHswfSB2YXJpYW50aS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2VsZXppb25hcmUgbWFzc2ltbyB7MH0gdmFyaWFudGkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBkZXZlIGVzc2VyZSB1Z3VhbGUgbyBzdXBlcmlvcmUgYSB7MX0gZSB1Z3VhbGUgbyBpbmZlcmlvcmUgYSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBkZXZlIGVzc2VyZSB1Z3VhbGUgbyBzdXBlcmlvcmUgYSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBkZXZlIGVzc2VyZSB1Z3VhbGUgbyBpbmZlcmlvcmUgYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIkluc2VyaXJlIGluZGlyaXp6byBtYWlsIHZhbGlkb1wiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMJ2VzcHJlc3Npb25lOiB7MH0gZG92cmViYmUgdG9ybmFyZSAndmVybycuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSByaWNoaWVzdGEgaGEgcmlzcG9zdG8gY29uIHVuIGVycm9yZSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkxhIHJpY2hpZXN0YSBoYSByaXNwb3N0byBudWxsIG9wcHVyZSBpbCBwZXJjb3JzbyBub24gw6ggY29ycmV0dG9cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJJbCBmaWxlIG5vbiBwdcOyIGVjY2VkZXJlIHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiSW5zZXJpcmUgaWwgdmFsb3JlICdhbHRybydcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZpbGUgaW4gY2FyaWNhbWVudG8uIEF0dGVuZGkgYWxjdW5pIHNlY29uZGkgZSByaXByb3ZhXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkNhcmljYW1lbnRvLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiU2VsZXppb25hcmUgZmlsZShzKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVzc3VuIGZpbGUgc2VsZXppb25hdG9cIixcbiAgY29uZmlybURlbGV0ZTogXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGVsbWluYXJlIGlsIHJlY29yZD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJRdWVzdG8gdmFsb3JlIGRldmUgZXNzZXJlIHVuaXZvY28uXCIsXG4gIGFkZENvbHVtbjogXCJBZ2dpdW5naSBjb2xvbm5hXCIsXG4gIGFkZFJvdzogXCJBZ2dpdW5naSByaWdhXCIsXG4gIHJlbW92ZVJvdzogXCJSaW11b3ZpIHJpZ2FcIixcbiAgYWRkUGFuZWw6IFwiQWdnaXVuZ2kgcmlnYVwiLFxuICByZW1vdmVQYW5lbDogXCJFbGltaW5hXCIsXG4gIGNob2ljZXNfSXRlbTogXCJFbGVtZW50b1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbG9ubmFcIixcbiAgbWF0cml4X3JvdzogXCJSaWdhXCIsXG4gIHNhdmluZ0RhdGE6IFwiU2FsdmF0YWdnaW8gZGF0aSBzdWwgc2VydmVyLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJTaSDDqCB2ZXJpZmljYXRvIHVuIGVycm9yZSBlIG5vbiDDqCBzdGF0byBwb3NzaWJpbGUgc2FsdmFyZSBpIHJpc3VsdGF0aS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiSSByaXN1bHRhdGkgc29ubyBzdGF0aSBzYWx2YXRpIGNvbiBzdWNjZXNzbyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlJpcHJvdmFcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkhhaSBpbXBpZWdhdG8gezB9IHN1IHF1ZXN0YSBwYWdpbmEgZSB7MX0gaW4gdG90YWxlLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJIYWkgaW1waWVnYXRvIHswfSBzdSBxdWVzdGEgcGFnaW5hLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkhhaSBpbXBpZWdhdG8gezB9IGluIHRvdGFsZS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkhhaSBpbXBpZWdhdG8gezB9IGRpIHsxfSBzdSBxdWVzdGEgcGFnaW5hIGUgezJ9IGRpIHszfSBpbiB0b3RhbGUuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkhhaSBpbXBpZWdhdG8gezB9IGRpIHsxfSBzdSBxdWVzdGEgcGFnaW5hLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkhhaSBpbXBpZWdhdG8gezB9IGRpIHsxfSBpbiB0b3RhbGUuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJQdWxpc2NpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJDYW5jZWxsYVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJTY2VnbGllcmUgaWwgZmlsZVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJSaW11b3ZlcmUgcXVlc3RvIGZpbGVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJTw6xcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlNlaSBzaWN1cm8gZGkgdm9sZXIgZWxtaW5hcmUgcXVlc3RvIGZpbGU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlNlaSBzaWN1cm8gZGkgdm9sZXIgZWxtaW5hcmUgdHV0dGkgaSBmaWxlcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdG9sbyBkZWxsYSBkb21hbmRhXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIml0XCJdID0gaXRhbGlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJpdFwiXSA9IFwiaXRhbGlhbm9cIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XHJcblxyXG5leHBvcnQgdmFyIGphcGFuZXNlU3VydmV5U3RyaW5ncyA9IHtcclxuICBwYWdlUHJldlRleHQ6IFwi5YmN44G4XCIsXHJcbiAgcGFnZU5leHRUZXh0OiBcIuasoeOBuFwiLFxyXG4gIGNvbXBsZXRlVGV4dDogXCLlrozkuoZcIixcclxuICBwcmV2aWV3VGV4dDogXCLjg5fjg6zjg5Pjg6Xjg7xcIixcclxuICBlZGl0VGV4dDogXCLnt6jpm4ZcIixcclxuICBzdGFydFN1cnZleVRleHQ6IFwi44K544K/44O844OIXCIsXHJcbiAgb3RoZXJJdGVtVGV4dDogXCLjgZ3jga7ku5bvvIjoqqzmmI7vvIlcIixcclxuICBub25lSXRlbVRleHQ6IFwi44Gq44GXXCIsXHJcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi44GZ44G544Gm6YG45oqeXCIsXHJcbiAgcHJvZ3Jlc3NUZXh0OiBcInswfS97MX3poIFcIixcclxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezF944GuezB944KS6KiY6Yyy44GZ44KLXCIsXHJcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfS97MX3jga7os6rllY/jgavlm57nrZTjgZfjgb7jgZfjgZ/jgIJcIixcclxuICBlbXB0eVN1cnZleTogXCLjgZPjga7oqr/mn7vjgavooajnpLrjgafjgY3jgovjg5rjg7zjgrjjgoTos6rllY/jga/jgYLjgorjgb7jgZvjgpNcIixcclxuICBjb21wbGV0aW5nU3VydmV5OiBcIuiqv+afu+OCkuWujOS6huOBl+OBpuOBj+OCjOOBpuOBguOCiuOBjOOBqOOBhuOBlOOBluOBhOOBvuOBl+OBn1wiLFxyXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XHJcbiAgICBcIuW9k+ekvuOBruiomOmMsuOBq+OCiOOCi+OBqOOAgeOBk+OBruiqv+afu+OBr+OBmeOBp+OBq+WujOS6huOBl+OBpuOBhOOBvuOBmeOAglwiLFxyXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi6Kq/5p+744KS44OA44Km44Oz44Ot44O844OJ5LitXCIsXHJcbiAgb3B0aW9uc0NhcHRpb246IFwi6YG45oqeXCIsXHJcbiAgdmFsdWU6IFwi5YCk5omT44GhXCIsXHJcbiAgcmVxdWlyZWRFcnJvcjogXCLos6rllY/jgavjgYrnrZTjgYjkuIvjgZXjgYRcIixcclxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLmnIDkvY7jgafjgoIx44Gk44Gu6LOq5ZWP44Gr562U44GI44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLos6rllY/jgavjga/lhajliJfjgaflm57nrZTjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICBudW1lcmljRXJyb3I6IFwi5pWw5a2X44Gn44GU6KiY5YWl5LiL44GV44GEXCIsXHJcbiAgdGV4dE1pbkxlbmd0aDogXCJ7MH0g5paH5a2X5Lul5LiK44Gn5YWl5Yqb44GX44Gm5LiL44GV44GEXCIsXHJcbiAgdGV4dE1heExlbmd0aDogXCJ7MH3mloflrZfku6XkuIvjgaflhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcInswfeS7peS4insxfeacqua6gOOBruaWh+Wtl+OCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiezB96KGM5Lul5LiK44Gn5YWl5Yqb44GX44Gm5LiL44GV44GEXCIsXHJcbiAgbWluU2VsZWN0RXJyb3I6IFwiezB956iu6aGe5Lul5LiK44KS6YG45oqe44GX44Gm5LiL44GV44GEXCIsXHJcbiAgbWF4U2VsZWN0RXJyb3I6IFwiezB95Lul5LiK44Gu44OQ44Oq44Ki44Oz44OI44KS6YG45oqe44GX44Gq44GE44Gn44GP44Gg44GV44GE44CCXCIsXHJcbiAgbnVtZXJpY01pbk1heDpcclxuICAgIFwiezB944GvezF95Lul5LiK44Gn44GC44KK44CBezJ95Lul5LiL44Gn44GC44KL44GT44Go44GM5pyb44G+44GX44GE44CCXCIsXHJcbiAgbnVtZXJpY01pbjogXCInezB9JyDjga/lkIznrYnjgYt7MX3jgojjgorlpKfjgY3jgY/jgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpNcIixcclxuICBudW1lcmljTWF4OiBcIid7MH0nIOOBr+WQjOetieOBi3sxfeOCiOOCiuWwj+OBleOBj+OBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCk1wiLFxyXG4gIGludmFsaWRFbWFpbDogXCLmnInlirnjgarjg6Hjg7zjg6vjgqLjg4njg6zjgrnjgpLjgZToqJjlhaXkuIvjgZXjgYRcIixcclxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLlvI/jga8gezB944GvJ3RydWUn44KS6L+U44GZ44G544GN44Gn44GZ44CCXCIsXHJcbiAgdXJsUmVxdWVzdEVycm9yOiBcIuODquOCr+OCqOOCueODiOOBr+OCqOODqeODvCAnezB9JyDjgpLov5TjgZfjgb7jgZfjgZ/jgIJ7MX1cIixcclxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XHJcbiAgICBcIuODquOCr+OCqOOCueODiOOBjOepuuOBruODh+ODvOOCv+OCkui/lOOBl+OBn+OBi+OAgSdwYXRoJyDjg5fjg63jg5Hjg4bjgqPjgYzmraPjgZfjgY/jgYLjgorjgb7jgZvjgpPjgIJcIixcclxuICBleGNlZWRNYXhTaXplOiBcIuODleOCoeOCpOODq+OBruOCteOCpOOCuuOBr3swfeOCkui2heOBiOOBpuOBr+OBhOOBkeOBvuOBm+OCk1wiLFxyXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLjgZ3jga7ku5bjga7lgKTjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICB1cGxvYWRpbmdGaWxlOlxyXG4gICAgXCLjg5XjgqHjgqTjg6vjgpLjgqLjg4Pjg5fjg63jg7zjg4nkuK3jgafjgZnjgILjgZfjgbDjgonjgY/jgZfjgabjgYvjgonlho3luqbjgYroqabjgZfkuIvjgZXjgYRcIixcclxuICBsb2FkaW5nRmlsZTogXCLoqq3jgb/ovrzjgb/kuK1cIixcclxuICBjaG9vc2VGaWxlOiBcIuODleOCoeOCpOODq+OCkumBuOaKnlwiLFxyXG4gIG5vRmlsZUNob3NlbjogXCLpgbjmip7jgZXjgozjgZ/jg5XjgqHjgqTjg6vjga/jgYLjgorjgb7jgZvjgpNcIixcclxuICBjb25maXJtRGVsZXRlOiBcIuODrOOCs+ODvOODieOCkuWJiumZpOOBl+OBvuOBmeOBi++8n1wiLFxyXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi44GT44Gu5YCk44Gv5LiA5oSP44Gn44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KT44CCXCIsXHJcbiAgYWRkQ29sdW1uOiBcIuWIl+OBrui/veWKoFwiLFxyXG4gIGFkZFJvdzogXCLov73liqDooYxcIixcclxuICByZW1vdmVSb3c6IFwi6Zmk5Y67XCIsXHJcbiAgYWRkUGFuZWw6IFwi5paw6KaP6L+95YqgXCIsXHJcbiAgcmVtb3ZlUGFuZWw6IFwi6Zmk5Y67XCIsXHJcbiAgY2hvaWNlc19JdGVtOiBcIuWTgeebrlwiLFxyXG4gIG1hdHJpeF9jb2x1bW46IFwi44Kz44Op44OgXCIsXHJcbiAgbWF0cml4X3JvdzogXCLooYxcIixcclxuICBzYXZpbmdEYXRhOiBcIue1kOaenOOBr+OCteODvOODkOODvOOBq+S/neWtmOOBleOCjOOBpuOBhOOBvuOBmS4uLuOAglwiLFxyXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLjgqjjg6njg7zjgYznmbrnlJ/jgZfjgIHntZDmnpzjgpLkv53lrZjjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIJcIixcclxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLntZDmnpzjga/nhKHkuovjgavkv53lrZjjgZXjgozjgb7jgZfjgZ9cIixcclxuICBzYXZlQWdhaW5CdXR0b246IFwi44KC44GG5LiA5bqm6Kmm44GX44Gm44G/44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgdGltZXJNaW46IFwi5YOF5bCRXCIsXHJcbiAgdGltZXJTZWM6IFwi44K744OD44KvXCIsXHJcbiAgdGltZXJTcGVudEFsbDogXCLjgYLjgarjgZ/jga/jgZPjga7jg5rjg7zjgrjjgat7MH3jgpLosrvjgoTjgZfjgIHlkIjoqIjjgad7MX3jgpLosrvjgoTjgZfjgb7jgZfjgZ/jgIJcIixcclxuICB0aW1lclNwZW50UGFnZTogXCLjgYLjgarjgZ/jga/jgZPjga7jg5rjg7zjgrjjgat7MH3jgpLosrvjgoTjgZfjgb7jgZfjgZ/jgIJcIixcclxuICB0aW1lclNwZW50U3VydmV5OiBcIuWQiOioiOOBp3swfeOCkuS9v+OBo+OBn+OBk+OBqOOBq+OBquOCiuOBvuOBmeOAglwiLFxyXG4gIHRpbWVyTGltaXRBbGw6XHJcbiAgICBcIuOBk+OBruODmuODvOOCuOOBq3sxfeOBruOBhuOBoXswfeOCkuiyu+OChOOBl+OAgXszfeOBruOBhuOBoXsyfeOCkuWQiOioiOOBp+iyu+OChOOBl+OBvuOBl+OBn+OAglwiLFxyXG4gIHRpbWVyTGltaXRQYWdlOiBcIuOBk+OBruODmuODvOOCuOOBp3sxfeOBrnswfeOCkuS9v+OBo+OBn+OBk+OBqOOBjOOBguOCiuOBvuOBmeOAglwiLFxyXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi5ZCI6KiI44GnezF944GuezB944KS5L2/44Gj44Gf44GT44Go44GM44GC44KK44G+44GZ44CCXCIsXHJcbiAgY2xlYW5DYXB0aW9uOiBcIuWJiumZpFwiLFxyXG4gIGNsZWFyQ2FwdGlvbjogXCLnqbrnmb1cIixcclxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLjg5XjgqHjgqTjg6vjgpLpgbjmip5cIixcclxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLjgZPjga7jg5XjgqHjgqTjg6vjgpLliYrpmaRcIixcclxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIuWZq1wiLFxyXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLlkKZcIixcclxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLjgZPjga7jg5XjgqHjgqTjg6vjgpLliYrpmaTjgZfjgabjgoLjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ97MH0/XCIsXHJcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuOBmeOBueOBpuOBruODleOCoeOCpOODq+OCkuWJiumZpOOBl+OBpuOCguOCiOOCjeOBl+OBhOOBp+OBmeOBi++8n1wiLFxyXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLos6rllY/lkI1cIixcclxufTtcclxuXHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiamFcIl0gPSBqYXBhbmVzZVN1cnZleVN0cmluZ3M7XHJcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImphXCJdID0gXCLml6XmnKzoqp5cIjtcclxuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBrb3JlYW5TdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi7J207KCEXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLri6TsnYxcIixcbiAgY29tcGxldGVUZXh0OiBcIuyZhOujjFwiLFxuICBwcmV2aWV3VGV4dDogXCLsi5zsgqxcIixcbiAgZWRpdFRleHQ6IFwi7Y647KeR7ZWY64ukXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLsi5zsnpFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLquLDtg4Ao7ISk66qFKVwiLFxuICBub25lSXRlbVRleHQ6IFwi7JeG7J2MXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuuqqOuRkCDshKDtg51cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIu2OmOydtOyngCB7MX0g7KSRIHswfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IC8gezF9IOq4sOuhnVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9IC8gezF9IOqwnOydmCDsp4jrrLjsl5Ag64u167OAIO2VqFwiLFxuICBlbXB0eVN1cnZleTogXCLshKTrrLjsp4Dsl5Ag67O07Jes7KeA64qUIO2OmOydtOyngOuCmCDsp4jrrLjsnbQg7JeG7Iq164uI64ukXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi7ISk66y4IOyhsOyCrOulvCDsmYTro4ztlbQg7KO87IWU7IScIOqwkOyCrO2VqeuLiOuLpCFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLquLDroZ3sl5Ag65Sw66W066m0IOydtOuvuCDshKTrrLgg7KGw7IKs66W8IOuniOy5mOyFqOyKteuLiOuLpC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLshKTrrLjsobDsgqzqsIAg66Gc65Oc7KSR7J6F64uI64ukLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuyEoO2Dne2VmOyLreyLnOyYpC4uLlwiLFxuICB2YWx1ZTogXCLqsJJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLsp4jrrLjsl5Ag64u17ZWY7Iuc7JikLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLtlZjrgpgg7J207IOB7J2YIOyniOusuOyXkCDri7XtlZjsi63si5zsmKQuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi66qo65OgIO2WieyXkCDsnojripQg7KeI66y47JeQIOuLte2VmOyLreyLnOyYpC5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIuqwkuydgCDsiKvsnpDsl6zslbwg7ZWp64uI64ukLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuuLteuzgOydmCDquLjsnbTripQg7LWc7IaMIHswfeyekOyXrOyVvCDsnoXri4jri6QuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi64u167OA7J2YIOq4uOydtOuKlCB7MH3snpDrpbwg7LSI6rO8IO2VoCDsiJgg7JeG7Iq164uI64ukLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuuLteuzgOydmCDquLjsnbTripQgezB9IC0gezF97J6QIOyCrOydtOyXrOyVvCDtlanri4jri6QuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi7LWc7IaMIHswfeqwnOydmCDtlonsnYQg7LGE7Jqw7Iut7Iuc7JikXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuy1nOyGjCB7MH3qsJzsnZgg67OA7IiY66W8IOyEoO2Dne2VmOyLreyLnOyYpC5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi7LWc64yAIHswfeqwnOydmCDrs4DsiJjrpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFxuICBudW1lcmljTWluTWF4OiBcIid7MH0n7J2AIHsxfeuztOuLpCDtgazqsbDrgpgg6rCZ6rOgIHsyfeuztOuLpCDsnpHqsbDrgpgg6rCZ7JWE7JW87ZWp64uI64ukLlwiLFxuICBudW1lcmljTWluOiBcIid7MH0n7J2AIHsxfeuztOuLpCDtgazqsbDrgpgg6rCZ7JWE7JW87ZWp64uI64ukLlwiLFxuICBudW1lcmljTWF4OiBcIid7MH0n7J2AIHsxfeuztOuLpCDsnpHqsbDrgpgg6rCZ7JWE7JW87ZWp64uI64ukLlwiLFxuICBpbnZhbGlkRW1haWw6IFwi7Jis67CU66W4IOydtOuplOydvCDso7zshozrpbwg7J6F66Cl7ZWY7Iut7Iuc7JikLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLtkZztmITsi506IHswfeydgCAn7LC4J+ydtOyWtOyVvCDtlanri4jri6QuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCInezB9J+ycvOuhnCDsnpjrqrvrkJwg7JqU7LKt7J6F64uI64ukLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuu5hOyWtOyeiOuKlCDrjbDsnbTthLDrpbwg7JqU7LKt7ZaI6rGw64KYIOyemOuqu+uQnCDsho3shLHsnZgg6rK966Gc7J6F64uI64ukLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIu2MjOydvCDtgazquLDqsIAgezB97J2EIOy0iOqzvCDtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuuLpOuluCDsp4jrrLjsnYQg7J6R7ISx7ZWY7Iut7Iuc7JikLlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIu2MjOydvCDsl4XroZzrk5wg7KSR7J6F64uI64ukLiDsnqDsi5wg7ZuEIOuLpOyLnCDsi5zrj4TtlZjsi63si5zsmKQuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIuuhnOuTnCDspJEuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLtjIzsnbwg7ISg7YOdLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLshKDtg53rkJwg7YyM7J287J20IOyXhuyKteuLiOuLpFwiLFxuICBjb25maXJtRGVsZXRlOiBcIuq4sOuhneydhCDsgq3soJztlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiIOydtCDqsJLsnYAg6rOg7Jyg7ZW07JW87ZWp64uI64ukLlwiLFxuICBhZGRDb2x1bW46IFwi7Je0IOy2lOqwgFwiLFxuICBhZGRSb3c6IFwi7ZaJIOy2lOqwgFwiLFxuICByZW1vdmVSb3c6IFwi7KCc6rGwXCIsXG4gIGFkZFBhbmVsOiBcIuyDiOuhreqyjCDstpTqsIBcIixcbiAgcmVtb3ZlUGFuZWw6IFwi7KCc6rGwXCIsXG4gIGNob2ljZXNfSXRlbTogXCLtla3rqqlcIixcbiAgbWF0cml4X2NvbHVtbjogXCLsl7RcIixcbiAgbWF0cml4X3JvdzogXCLtlolcIixcbiAgc2F2aW5nRGF0YTogXCLqsrDqs7zqsIAg7ISc67KE7JeQIOyggOyepSDspJHsnoXri4jri6QuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuyYpOulmOqwgCDrsJzsg53tlZjsl6wg6rKw6rO866W8IOyggOyepe2VoCDsiJgg7JeG7Iq164uI64ukLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLqsrDqs7zqsIAg7ISx6rO17KCB7Jy866GcIOyggOyepeuQmOyXiOyKteuLiOuLpCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIuuLpOyLnCDsi5zrj4TtlZjsi63si5zsmKRcIixcbiAgdGltZXJNaW46IFwi67aEXCIsXG4gIHRpbWVyU2VjOiBcIuy0iFwiLFxuICB0aW1lclNwZW50QWxsOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB97J2EIOyGjOyalO2VtCDstJ0gezF97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi7ZiE7J6sIO2OmOydtOyngOyXkOyEnCB7MF3snbQg6rG466C47Iq164uI64ukXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi7LSdIHswfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwi7ZiE7J6sIO2OmOydtOyngOyXkOyEnCB7MH0vezF97J2EIOyGjOyalO2VtCDstJ0gezJ9L3szfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB9L3sxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi7LSdIHswfS97MX3snbQg6rG466C47Iq164uI64ukLlwiLFxuICBjbGVhbkNhcHRpb246IFwi64um6riwXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLsp4DsmrDquLBcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi7YyM7J287J2EIOyEoO2DnVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLsnbQg7YyM7J28IOygnOqxsFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIuyYiFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi7JWE64uIXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcInswfSDtjIzsnbzsnYQg7KCc6rGwIO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuuqqOuToCDtjIzsnbzsnYQg7KCc6rGwIO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuyniOusuCDsoJzrqqlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wia29cIl0gPSBrb3JlYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wia29cIl0gPSBcIu2VnOq1reyWtFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBsYXR2aWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkF0cGFrYcS8XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJUxIFsxIFrXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJQYWJlaWd0XCIsXG4gIHByZXZpZXdUZXh0OiBcIlByaWVrxaFza2F0xKtqdW1zXCIsXG4gIGVkaXRUZXh0OiBcIlJlZGnEo8STdFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU8SBa3RcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJDaXRzIChsxatkenUsIGFwcmFrc3RpZXQhKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmF2XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkl6dsSTbMSTdGllcyB2aXN1c1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiTGFwcHVzZSB7MH0gbm8gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJJZXJha3N0xKt0IHswfSBubyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkF0YmlsZMSTamEgdXogamF1dMSBanVtaWVtIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJOYXYgbmV2aWVuYSBqYXV0xIFqdW1hLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlBhdGVpY2FtaWVzIEp1bXMgcGFyIGFua2V0YXMgYWl6cGlsZMSrxaFhbnUhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJNxatzdSBpZXJha3N0aSBsaWVjaW5hLCBrYSBqxatzIGphdSBlc2F0IGFpenBpbGTEq2ppcyDFoW8gYXB0YXVqdS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJJZWzEgWRlIG5vIHNlcnZlcmEuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiSXp2xJNsxJN0aWVzLi4uXCIsXG4gIHZhbHVlOiBcInZhbHVlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTMWrZHp1LCBhdGJpbGRpZXQgdXogamF1dMSBanVtdSFcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTMWrZHp1LCBhdGJpbGRpZXQgdXogdmlzbWF6IHZpZW51IGphdXTEgWp1bXUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiTMWrZHp1LCBhdGJpbGRpZXQgdXogamF1dMSBanVtaWVtIHZpc8SBcyByaW5kxIFzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiQXRiaWxkZWkgaXIgasSBYsWrdCBza2FpdGxpbS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IHZpc21heiB7MH0gc2ltYm9sdXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTMWrZHp1LCBpZXZhZGlldCBtYXrEgWsgbmVrxIEgezB9IHJha3N0esSrbWVzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkzFq2R6dSwgaWV2YWRpZXQgdmFpcsSBayBuZWvEgSB7MH0gcmFrc3R6xKttZXMgdW4gbWF6xIFrIG5la8SBIHsxfSByYWtzdHrEq21lcy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJMxatkenUsIGFpenBpbGRpZXQgdmlzbWF6IHswfSByaW5kYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIkzFq2R6dSwgaXp2xJNsaWV0aWVzIHZpc21heiB7MH0gdmFyaWFudHUuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIkzFq2R6dSwgaXp2xJNsaWV0aWVzIG5lIHZhaXJhayBwYXIgezB9IHZhcmlhbnRpZW0uXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBqxIFixat0IHZpZW7EgWRhbSB2YWkgbGllbMSBa2FtIG5la8SBIHsxfSwgdW4gdmllbsSBZGFtIHZhaSBtYXrEgWthbSwgbmVrxIEgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBqxIFixat0IHZpZW7EgWRhbSB2YWkgbGllbMSBa2FtIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiTMWrZHp1LCBpZXZhZGlldCBwYXRpZXN1IGUtcGFzdGEgYWRyZXNpIVwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJJenRlaWNpZW5hbTogezB9IGrEgWF0Z3JpZcW+IOKAnHRydWXigJ0uXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJQaWVwcmFzxKtqdW3EgSB0aWthIGF0Z3JpZXp0YSBrxLzFq2RhIOKAnHswfeKAnS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlBpZXByYXPEq2p1bXMgYXRncmllemEgdHVrxaF1cyBkYXR1cyB2YWkgcmVrdml6xKt0cyDigJxwYXRo4oCdIGlyIG5lcGFyZWl6c1wiLFxuICBleGNlZWRNYXhTaXplOiBcIkZhaWxhIGxpZWx1bXMgbmVkcsSra3N0IHDEgXJzbmllZ3QgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTMWrZHp1LCBpZXZhZGlldCBkYXR1cyBsYXVrxIEgJ0NpdHMnXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJKxatzdSBmYWlscyB0aWVrIGF1Z8WhdXBpZWzEgWTEk3RzLiBMxatkenUsIHV6Z2FpZGlldCB2YWlyxIFrYXMgc2VrdW5kZXMgdW4gbcSTxKNpbmlldCB2xJNscmVpei5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTm90aWVrIGllbMSBZGUgLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiSXp2xJNsaWV0aWVzIGZhaWx1cyAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5hdiBpenbEk2zEk3RzIG5ldmllbnMgZmFpbHNcIixcbiAgY29uZmlybURlbGV0ZTogXCJWYWkgdsSTbGF0aWVzIGl6ZHrEk3N0IGllcmFrc3R1P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIsWgYWkgdsSTcnTEq2JhaSBqxIFixat0IHVuaWvEgWxhaS5cIixcbiAgYWRkQ29sdW1uOiBcIlBpZXZpZW5vdCBrb2xvbm51XCIsXG4gIGFkZFJvdzogXCJQaWV2aWVub3QgcmluZHVcIixcbiAgcmVtb3ZlUm93OiBcIk5vxYZlbXRcIixcbiAgYWRkUGFuZWw6IFwiUGlldmllbm8gamF1bnVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiTm/FhmVtdFwiLFxuICBjaG9pY2VzX0l0ZW06IFwibGlldGFcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTbGVqYVwiLFxuICBtYXRyaXhfcm93OiBcIlJpbmRhXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmV6dWx0xIF0aSB0aWVrIHNhZ2xhYsSBdGkgc2VydmVyxKsgLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJSYWTEgXMga8S8xatkYSwgdW4gbcSTcyBuZXZhcsSTasSBbSBzYWdsYWLEgXQgcmV6dWx0xIF0dXMuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlenVsdMSBdGkgdGlrYSB2ZWlrc23Eq2dpIHNhZ2xhYsSBdGkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJNxJPEo2luaSB2xJNscmVpelwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwixaBhasSBIGxhcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9IHVuIGtvcMSBIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwixaBhasSBIGxhcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIktvcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwixaBhasSBIGxhcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9IG5vIHsxfSB1biBrb3DEgSB7Mn0gbm8gezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLFoGFqxIEgbGFwxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0gbm8gezF9LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIktvcMSBIGVzYXQgaXp0xJNyxJNqaXMgezB9IG5vIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlTEq3JzXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJTa2FpZHJzXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkl6dsSTbMSTdGllcyBmYWlsdVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJOb8WGZW1pZXQgxaFvIGZhaWx1XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSsSBXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOxJNcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiVmFpIHRpZcWhxIFtIHbEk2xhdGllcyBub8WGZW10IMWhbyBmYWlsdTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiVmFpIHRpZcWhxIFtIHbEk2xhdGllcyBub8WGZW10IHZpc3VzIGZhaWx1cz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkphdXTEgWp1bWEgbm9zYXVrdW1zXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImx2XCJdID0gbGF0dmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJsdlwiXSA9IFwibGF0dmllxaF1XCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGxpdGh1YW5pYVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBdGdhbFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVG9saWF1XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJCYWlndGlcIixcbiAgcHJldmlld1RleHQ6IFwiUGVyxb5pxatyYVwiLFxuICBlZGl0VGV4dDogXCJSZWRhZ3VvdGlcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlByYWTEl3RpXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiS2l0YSAoxK92ZXN0aSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk7El3JhXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlBhc2lyaW5rdGkgdmlzdXNcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlB1c2xhcGlzIHswfSBpxaEgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLErnJhxaF5dGkgezB9IGnFoSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIkF0c2FrxJcgxK8gezB9IC8gezF9IGtsYXVzaW11c1wiLFxuICBlbXB0eVN1cnZleTogXCJBcGtsYXVzb2plIG7El3JhIG1hdG9tbyBwdXNsYXBpbyBhciBrbGF1c2ltby5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJExJdrb2phbWUgdcW+IGRhbHl2YXZpbcSFIGFwa2xhdXNvamUhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiTcWrc8WzIMSvcmHFoWFpIHJvZG8sIGthZCBqYXUgYXRsaWtvdGUgxaFpxIUgYXBrbGF1c8SFLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlByYcWhb21lIHBhbGF1a3RpLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlBhc2lyaW5rdGkuLi5cIixcbiAgdmFsdWU6IFwicmVpa8WhbcSXXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiQsWrdGluYSBhdHNha3l0aSDEryDFocSvIGtsYXVzaW3EhS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQsWrdGluYSBhdHNha3l0aSBiZW50IMSvIHZpZW7EhSBrbGF1c2ltxIUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUHJhxaFvbWUgYXRzYWt5dGkgxK8ga2xhdXNpbXVzIHZpc29zZSBlaWx1dMSXc2UuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUdXJpIGLFq3RpIHNrYWnEjWlhaS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQcmHFoW9tZSBzdXZlc3RpIGJlbnQgezB9IHNpbWJvbGl1cy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQcmHFoW9tZSBzdXZlc3RpIG1hxb5pYXUgbmVpIHswfSBzaW1ib2xpxbMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJQcmHFoW9tZSBzdXZlc3RpIGRhdWdpYXUgbmVpIHswfSBpciBtYcW+aWF1IG5laSB7MX0gc2ltYm9sacWzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlByYcWhb21lIHN1dmVzdGkgbmUgbWHFvmlhdSBuZWkgezB9IGVpbHXEjWnFsy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUHJhxaFvbWUgcGFzaXJpbmt0aSBiZW50IHswfSB2YXJpYW50xbMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBhc2lyaW5raXRlIG5lIGRhdWdpYXUga2FpcCB7MH0gdmFyaWFudHVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgdHVyaSBixat0aSBseWd1cyBhcmJhIGRpZGVzbmlzIG5laSB7MX0gaXIgbHlndXMgYXJiYSBtYcW+ZXNuaXMgbmVpIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHR1csSXdMWzIGLFq3RpIGx5Z3VzIGFyYmEgZGlkZXNuaXMgbmVpIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHR1csSXdMWzIGLFq3RpIGx5Z3VzIGFyIG1hxb5lc25pcyB1xb4gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQcmHFoW9tZSDEr3Zlc3RpIGdhbGlvamFudMSvIGVsZWt0cm9uaW5pbyBwYcWhdG8gYWRyZXPEhS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiUmVpa8WhbcSXOiB7MH0gdHVyaSBncsSFxb5pbnRpICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlXFvmtsYXVzYSBncsSFxb5pbm8ga2xhaWTEhSd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVcW+a2xhdXNhIGdyxIXFvmlubyB0dcWhxI1pdXMgZHVvbWVuaXMgYXJiYSAncGF0aCcgc2F2eWLElyB5cmEgbmV0ZWlzaW5nYVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZhaWxvIGR5ZGlzIG5ldHVyaSB2aXLFoXl0aSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLErnZlc2tpdGUga2l0xIUgcmVpa8WhbcSZLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiSsWrc8WzIGZhaWxhcyB5cmEga2VsaWFtYXMuIFBhbGF1a2l0ZSBrZWxldMSFIHNla3VuZMW+acWzIGlyIGJhbmR5a2l0ZSBkYXIga2FydMSFLlwiLFxuICBsb2FkaW5nRmlsZTogXCJQcmHFoW9tZSBwYWxhdWt0aS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlBhc2lyaW5rdGkgZmFpbMSFKHVzKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVwYXNpcmlua3RhcyBqb2tzIGZhaWxhc1wiLFxuICBjb25maXJtRGVsZXRlOiBcIkFyIG5vcml0ZSBpxaF0cmludGkgxK9yYcWhxIU/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwixaBpIHJlaWvFoW3ElyB0dXLEl3TFsyBixat0aSB1bmlrYWxpLlwiLFxuICBhZGRDb2x1bW46IFwiUHJpZMSXdGkgc3R1bHBlbMSvXCIsXG4gIGFkZFJvdzogXCJQcmlkxJd0aSBlaWx1dMSZXCIsXG4gIHJlbW92ZVJvdzogXCJJxaF0cmludGlcIixcbiAgYWRkUGFuZWw6IFwiUHJpZMSXdGkgbmF1asSFXCIsXG4gIHJlbW92ZVBhbmVsOiBcIknFoXRyaW50aVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbWVudGFzXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU3R1bHBlbGlzXCIsXG4gIG1hdHJpeF9yb3c6IFwiRWlsdXTEl1wiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdGF0YWkgc2F1Z29taSBzZXJ2ZXJ5amUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIsSudnlrbyBrbGFpZGEgaXIgbWVzIG5lZ2FsxJdqb21lIGnFoXNhdWdvdGkgcmV6dWx0YXTFsy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmV6dWx0YXRhaSBidXZvIGnFoXNhdWdvdGkgc8SXa21pbmdhaSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkJhbmR5dGkgZGFyIGthcnTEhVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiUHJhbGVpZG90ZSB7MH0gxaFpYW1lIHB1c2xhcHlqZSBpciB7MX0gacWhIHZpc28uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlByYWxlaWRvdGUgezB9IMWhaWFtZSBwdXNsYXB5amUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiUHJhbGVpZG90ZSB7MH0gacWhIHZpc28uXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiUHJhbGVpZG90ZSB7MH0gacWhIHsxfSDFoWlhbWUgcHVzbGFweWplIGlyIHsyfSBpxaEgezN9IGnFoSB2aXNvLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJQcmFsZWlkb3RlIHswfSBpxaEgezF9IMWhaWFtZSBwdXNsYXB5amUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUHJhbGVpZG90ZSB7MH0gacWhIHsxfSBpxaEgdmlzby5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIknFoXZhbHl0aVwiLFxuICBjbGVhckNhcHRpb246IFwiVmFseXRpXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlBhc2lyaW5rdGkgZmFpbMSFXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIknFoXRyaW50aSDFocSvIGZhaWzEhVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlRhaXBcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyIHRpa3JhaSBub3JpdGUgcGHFoWFsaW50aSDFocSvIGZhaWzEhTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQXIgdGlrcmFpIG5vcml0ZSBwYcWhYWxpbnRpIHZpc3VzIGZhaWx1cz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIktsYXVzaW1vIHBhdmFkaW5pbWFzXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImx0XCJdID0gbGl0aHVhbmlhU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImx0XCJdID0gXCJsaWV0dXZpxbNcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgbWFjZWRvbmlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQn9GA0LXRgtGF0L7QtNC90LBcIixcbiAgcGFnZU5leHRUZXh0OiBcItCh0LvQtdC00L3QvlwiLFxuICBjb21wbGV0ZVRleHQ6IFwi0JfQsNCy0YDRiNC4XCIsXG4gIHByZXZpZXdUZXh0OiBcItCf0YDQtdCz0LvQtdC0XCIsXG4gIGVkaXRUZXh0OiBcItCj0YDQtdC00YPQstCw0ZrQtVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0JfQsNC/0L7Rh9C90LXRgtC1XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQviAo0L7Qv9C40YjQuClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCd0LjRiNGC0L5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi0KHQtdC70LXQutGC0LjRgNCw0Zgg0YHQtVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi0KHRgtGA0LDQvdC40YbQsCB7MH0g0L7QtCB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItCh0L3QuNC80LggezB9INC+0LQgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLQntC00LPQvtCy0L7RgNC10L3QuCDQvdCwIHswfSAvIHsxfSDQv9GA0LDRiNCw0ZrQsFwiLFxuICBlbXB0eVN1cnZleTogXCLQndC10LzQsCDQstC40LTQu9C40LLQsCDRgdGC0YDQsNC90LjRhtCwINC40LvQuCDQv9GA0LDRiNCw0ZrQtSDQstC+INC40YHRgtGA0LDQttGD0LLQsNGa0LXRgtC+LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCS0Lgg0LHQu9Cw0LPQvtC00LDRgNC40LzQtSDRiNGC0L4g0LPQviDQt9Cw0LLRgNGI0LjQstGC0LUg0LjRgdGC0YDQsNC20YPQstCw0ZrQtdGC0L4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQndCw0YjQuNGC0LUg0LfQsNC/0LjRgdC4INC/0L7QutCw0LbRg9Cy0LDQsNGCINC00LXQutCwINCy0LXRnNC1INGB0YLQtSDQs9C+INC30LDQstGA0YjQuNC70LUg0L7QstCwINC40YHRgtGA0LDQttGD0LLQsNGa0LUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JDQvdC60LXRgtCw0YLQsCDRgdC1INCy0YfQuNGC0YPQstCwIC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLQmNC30LHQtdGA0LXRgtC1IC4uLlwiLFxuICB2YWx1ZTogXCLQstGA0LXQtNC90L7RgdGCXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi0JLQtSDQvNC+0LvQsNC8LCDQvtC00LPQvtCy0L7RgNC10YLQtSDQvdCwINC/0YDQsNGI0LDRmtC10YLQvi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi0JLQtSDQvNC+0LvQsNC8LCDQvtC00LPQvtCy0L7RgNC10YLQtSDQsdCw0YDQtdC8INC90LAg0LXQtNC90L4g0L/RgNCw0YjQsNGa0LUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JLQtSDQvNC+0LvQuNC80LUsINC+0LTQs9C+0LLQvtGA0LXRgtC1INC90LAg0L/RgNCw0YjQsNGa0LAg0LLQviDRgdC40YLQtSDRgNC10LTQvtCy0LguXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQktGA0LXQtNC90L7RgdGC0LAg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC90YPQvNC10YDQuNGH0LrQsC5cIixcbiAgbWluRXJyb3I6IFwi0JLRgNC10LTQvdC+0YHRgtCwINC90LUg0YLRgNC10LHQsCDQtNCwINCx0LjQtNC1INC/0L7QvNCw0LvQsCDQvtC0IHswfVwiLFxuICBtYXhFcnJvcjogXCLQktGA0LXQtNC90L7RgdGC0LAg0L3QtSDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L/QvtCz0L7Qu9C10LzQsCDQvtC0IHswfVwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCS0L3QtdGB0LXRgtC1INC90LDRmNC80LDQu9C60YMgezB9INC30L3QsNC6L9GG0LguXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0JLQvdC10YHQtdGC0LUg0L3QtSDQv9C+0LLQtdGc0LUg0L7QtCB7MH0g0LfQvdCw0Lov0YbQuC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLQktC90LXRgdC10YLQtSDQvdCw0ZjQvNCw0LvQutGDIHswfSDQuCDQvdC1INC/0L7QstC10ZzQtSDQvtC0IHsxfSDQt9C90LDRhtC4LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCf0L7Qv9C+0LvQvdC10YLQtSDQvdCw0ZjQvNCw0LvQutGDIHswfSDRgNC10LQo0L7QstC4KS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JLQtSDQvNC+0LvQuNC80LUg0LjQt9Cx0LXRgNC10YLQtSDQvdCw0ZjQvNCw0LvQutGDIHswfSDQstCw0YDQuNGY0LDQvdGC0LAo0LgpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQmNC30LHQtdGA0LXRgtC1INC90LUg0L/QvtCy0LXRnNC1INC+0LQgezB9INCy0LDRgNC40ZjQsNC90YLQsCjQuCkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L3QsNGY0LzQsNC70LrRgyB7MX0g0Lgg0L3QsNGY0LzQvdC+0LPRgyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L3QsNGY0LzQsNC70LrRgyB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L3QsNGY0LzQvdC+0LPRgyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCS0LUg0LzQvtC70LjQvNC1INCy0L3QtdGB0LXRgtC1INCy0LDQu9C40LTQvdCwINC1LdC80LDQuNC7INCw0LTRgNC10YHQsC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjQt9GA0LDQt9C+0YI6IHswfSDRgtGA0LXQsdCwINC00LAg0YHQtSDQstGA0LDRgtC4ICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCR0LDRgNCw0ZrQtdGC0L4g0LLRgNCw0YLQuCDQs9GA0LXRiNC60LAgJ3swfScuIHsxfSBcIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi0JHQsNGA0LDRmtC10YLQviDQstGA0LDRgtC4INC/0YDQsNC30L3QuCDQv9C+0LTQsNGC0L7RhtC4INC40LvQuCDRgdCy0L7RmNGB0YLQstC+0YLQviAncGF0aCcg0LUg0L3QtdGC0L7Rh9C90L5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQk9C+0LvQtdC80LjQvdCw0YLQsCDQvdCwINC00LDRgtC+0YLQtdC60LDRgtCwINC90LUg0YLRgNC10LHQsCDQtNCwINC90LDQtNC80LjQvdGD0LLQsCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQktC90LXRgdC10YLQtSDRmNCwINC00YDRg9Cz0LDRgtCwINCy0YDQtdC00L3QvtGB0YIuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLQktCw0YjQsNGC0LAg0LTQsNGC0L7RgtC10LrQsCDRgdC1INC/0L7RgdGC0LDQstGD0LLQsC4g0JLQtSDQvNC+0LvQuNC80LUg0L/QvtGH0LXQutCw0ZjRgtC1INC90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4INC4INC+0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3Qvi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0KHQtSDQstGH0LjRgtGD0LLQsCAuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQmNC30LHQtdGA0LXRgtC1INC00LDRgtC+0YLQtdC60LAgKNC4KSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCd0LUg0YHQtSDQuNC30LHRgNCw0L3QuCDQtNCw0YLQvtGC0LXQutC4XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi0JTQsNC70Lgg0YHQsNC60LDRgtC1INC00LAg0LPQviDQuNC30LHRgNC40YjQtdGC0LUg0LfQsNC/0LjRgdC+0YI/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0J7QstCw0LAg0LLRgNC10LTQvdC+0YHRgiDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0LXQtNC40L3RgdGC0LLQtdC90LAuXCIsXG4gIGFkZENvbHVtbjogXCLQlNC+0LTQsNGYINC60L7Qu9C+0L3QsFwiLFxuICBhZGRSb3c6IFwi0JTQvtC00LDQtNC4INGA0LXQtFwiLFxuICByZW1vdmVSb3c6IFwi0J7RgtGB0YLRgNCw0L3QuFwiLFxuICBlbXB0eVJvd3NUZXh0OiBcItCd0LXQvNCwINGA0LXQtNC+0LLQuC5cIixcbiAgYWRkUGFuZWw6IFwi0JTQvtC00LDQtNC4INC90L7QstC+XCIsXG4gIHJlbW92ZVBhbmVsOiBcItCe0YLRgdGC0YDQsNC90LhcIixcbiAgY2hvaWNlc19JdGVtOiBcItGB0YLQsNCy0LrQsFwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0YHQtSDQt9Cw0YfRg9Cy0YPQstCw0LDRgiDQvdCwINGB0LXRgNCy0LXRgNC+0YIgLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLQndCw0YHRgtCw0L3QsCDQs9GA0LXRiNC60LAg0Lgg0L3QtSDQvNC+0LbQtdCy0LzQtSDQtNCwINCz0Lgg0LfQsNGH0YPQstCw0LzQtSDRgNC10LfRg9C70YLQsNGC0LjRgtC1LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INCx0LXQsCDRg9GB0L/QtdGI0L3QviDQt9Cw0YfRg9Cy0LDQvdC4IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0J7QsdC40LTQuCDRgdC1INC/0L7QstGC0L7RgNC90L5cIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCf0L7QvNC40L3QsNCy0YLQtSB7MH0g0L3QsCDQvtCy0LDQsCDRgdGC0YDQsNC90LjRhtCwINC4INCy0LrRg9C/0L3QviB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCf0L7QvNC40L3QsNCy0YLQtSB7MH0g0L3QsCDQvtCy0LDQsCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0LjQtSDQv9C+0YLRgNC+0YjQuNCy0YLQtSDQstC60YPQv9C90L4gezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi0J/QvtC80LjQvdCw0LLRgtC1IHswfSDQvtC0IHsxfSDQvdCwINC+0LLQsNCwINGB0YLRgNCw0L3QuNGG0LAg0LggezJ9INC+0LQgezN9INCy0LrRg9C/0L3Qvi5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0J/QvtC80LjQvdCw0LLRgtC1IHswfSDQvtC0IHsxfSDQvdCwINC+0LLQsNCwINGB0YLRgNCw0L3QuNGG0LAuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0JLQuNC1INC/0L7RgtGA0L7RiNC40LLRgtC1INCy0LrRg9C/0L3QviB7MH0g0L7QtCB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQp9C40YHRgtC4XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQlNCwINGA0LDRgdGH0LjRgdGC0LhcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JjQt9Cx0LXRgNC10YLQtSDQtNCw0YLQvtGC0LXQutCwXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCe0YLRgdGC0YDQsNC90LXRgtC1INGY0LAg0L7QstCw0LAg0LTQsNGC0L7RgtC10LrQsFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItCU0LBcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCd0LVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi0JTQsNC70Lgg0YHRgtC1INGB0LjQs9GD0YDQvdC4INC00LXQutCwINGB0LDQutCw0YLQtSDQtNCwINGY0LAg0L7RgtGB0YLRgNCw0L3QuNGC0LUg0L7QstCw0LAg0LTQsNGC0L7RgtC10LrQsDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0JTQsNC70Lgg0YHRgtC1INGB0LjQs9GD0YDQvdC4INC00LXQutCwINGB0LDQutCw0YLQtSDQtNCwINCz0Lgg0L7RgtGB0YLRgNCw0L3QuNGC0LUg0YHQuNGC0LUg0LTQsNGC0L7RgtC10LrQuD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcItCd0LDRgdC70L7QsiDQvdCwINC/0YDQsNGI0LDRmtC10YLQvlwiLFxuICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi0J7RgtC60LDQttC4XCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcItCQ0L/Qu9C40YbQuNGA0LDRmFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJta1wiXSA9IG1hY2Vkb25pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wibWtcIl0gPSBcItCc0LDQutC10LTQvtC90YHQutC4XCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIG5vcndlZ2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJGb3JyaWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJOZXN0ZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiRnVsbGbDuHJcIixcbiAgcHJldmlld1RleHQ6IFwiRm9yaMOlbmRzdmlzbmluZ1wiLFxuICBlZGl0VGV4dDogXCJSZWRpZ2VyZVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbm5ldCAoYmVza3JpdilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkluZ2VuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZlbGcgYWxsZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2lkZSB7MH0gYXYgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJUYSBvcHAgezB9IGF2IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQmVzdmFydGUgezB9IC8gezF9IHNww7hyc23DpWxcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRGV0IGVyIGluZ2VuIHN5bmxpZyBzaWRlIGVsbGVyIHNww7hyc23DpWwgaSB1bmRlcnPDuGtlbHNlbi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUYWtrIGZvciBhdCBkdSBmdWxsZsO4cnRlIHVuZGVyc8O4a2Vsc2VuIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiVsOlcmUgZGF0YSB2aXNlciBhdCBkdSBhbGxlcmVkZSBoYXIgZ2plbm5vbWbDuHJ0IGRlbm5lIHVuZGVyc8O4a2Vsc2VuLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlVuZGVyc8O4a2Vsc2VuIGxhc3Rlci4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWZWxnLi4uXCIsXG4gIHZhbHVlOiBcInZlcmRpXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmVubmxpZ3N0IHN2YXIgcMOlIHNww7hyc23DpWxldC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVmVubmxpZ3N0IHN2YXIgcMOlIG1pbnN0IGV0dCBzcMO4cnNtw6VsLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZlbm5saWdzdCBzdmFyIHDDpSBzcMO4cnNtw6VsIGkgYWxsZSByYWRlci5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlZlcmRpZW4gc2thbCB2w6ZyZSBudW1lcmlzay5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIG1pbnN0IHswfSB0ZWduLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gbWluZHJlIGVubiB7MH0gdGVnbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIG1lciBlbm4gezB9IG9nIG1pbmRyZSBlbm4gezF9IHRlZ24uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVmVubmxpZ3N0IGZ5bGwgaW5uIG1pbnN0IHswfSByYWRlci5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVmVubmxpZ3N0IHZlbGcgbWluc3QgezB9IHZhcmlhbnRlci5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVmVubmxpZ3N0IGlra2UgdmVsZyBtZXIgZW5uIHswfSB2YXJpYW50ZXIuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBiw7hyIHbDpnJlIGxpayBlbGxlciBtZXIgZW5uIHsxfSBvZyBsaWsgZWxsZXIgbWluZHJlIGVubiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBiw7hyIHbDpnJlIGxpayBlbGxlciBtZXIgZW5uIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGLDuHIgdsOmcmUgbGlrIGVsbGVyIG1pbmRyZSBlbm4gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIGVuIGd5bGRpZyBlLXBvc3QgYWRyZXNzZS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVXR0cnlra2V0OiB7MH0gc2thbCByZXR1cm5lcmUgJ3NhbnQnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRm9yZXNww7hyc2VsZW4gcmV0dXJuZXJ0ZSBmZWlsZW4gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJGb3Jlc3DDuHJzZWxlbiByZXR1cm5lcnRlIHRvbW1lIGRhdGEsIGVsbGVyICdzdGknIC1lZ2Vuc2thcGVuIGVyIGZlaWxcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBiw7hyIGlra2Ugb3ZlcnN0aWdlIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gZGVuIGFuZHJlIHZlcmRpZW4uXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGaWxlbiBkaW4gbGFzdGVzIG9wcC4gVmVubmxpZ3N0IHZlbnQgbm9lbiBzZWt1bmRlciBvZyBwcsO4diBpZ2plbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTGFzdGVyIGlubiAuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWZWxnIGZpbCAoZXIpIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiSW5nZW4gZmlsIHZhbGd0XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiw5huc2tlciBkdSDDpSBzbGV0dGUgcG9zdGVuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRlbm5lIHZlcmRpZW4gc2thbCB2w6ZyZSB1bmlrLlwiLFxuICBhZGRDb2x1bW46IFwiTGVnZyB0aWwga29sb25uZVwiLFxuICBhZGRSb3c6IFwiTGVnZyB0aWwgcmFkXCIsXG4gIHJlbW92ZVJvdzogXCJGamVyblwiLFxuICBhZGRQYW5lbDogXCJMZWdnIHRpbCBueVwiLFxuICByZW1vdmVQYW5lbDogXCJGamVybmVcIixcbiAgY2hvaWNlc19JdGVtOiBcImVsZW1lbnRcIixcbiAgbWF0cml4X2NvbHVtbjogXCJLb2xvbm5lXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmFkXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmVzdWx0YXRlbmUgbGFncmVzIHDDpSBzZXJ2ZXJlbiAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRldCBvcHBzdG8gZW4gZmVpbCwgb2cgdmkga3VubmUgaWtrZSBsYWdyZSByZXN1bHRhdGVuZS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmVzdWx0YXRlbmUgYmxlIGxhZ3JldCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByw7h2IGlnamVuXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJEdSBoYXIgdGlsYnJha3QgezB9IHDDpSBkZW5uZSBzaWRlbiBvZyB7MX0gdG90YWx0LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJEdSBoYXIgdGlsYnJha3QgezB9IHDDpSBkZW5uZSBzaWRlbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJEdSBoYXIgdGlsYnJha3QgezB9IHRvdGFsdC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkR1IGhhciB0aWxicmFrdCB7MH0gYXYgezF9IHDDpSBkZW5uZSBzaWRlbiBvZyB0b3RhbHQgezJ9IGF2IHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBhdiB7MX0gcMOlIGRlbm5lIHNpZGVuLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkR1IGhhciB0aWxicmFrdCB7MH0gYXYgezF9IHRvdGFsdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlJlbnNcIixcbiAgY2xlYXJDYXB0aW9uOiBcIktsYXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmVsZyBGaWxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRmplcm4gZGVubmUgZmlsZW5cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkVyIGR1IHNpa2tlciBww6UgYXQgZHUgdmlsIGZqZXJuZSBkZW5uZSBmaWxlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgZmplcm5lIGFsbGUgZmlsZW5lP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiU3DDuHJzbcOlbHN0aXR0ZWxcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wibm9cIl0gPSBub3J3ZWdpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wibm9cIl0gPSBcIm5vcnNrXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBlcnNpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi2YLYqNmE24xcIixcbiAgcGFnZU5leHRUZXh0OiBcItio2LnYr9uMXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLYqtqp2YXbjNmEXCIsXG4gIHByZXZpZXdUZXh0OiBcItm+24zYtCDZhtmF2KfbjNi0XCIsXG4gIGVkaXRUZXh0OiBcItmI24zYsdin24zYtFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi2LTYsdmI2LlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLYr9uM2q/YsSjYqtmI2LbbjNitKVwiLFxuICBub25lSXRlbVRleHQ6IFwi2YfbjNqGXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItin2YbYqtiu2KfYqCDZh9mF2YdcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIti12YHYrdmHIHswfSDYp9iyIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi2YXZiNix2K8gezB9INin2LIgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLYqti52K/Yp9ivINm+2KfYs9iuIHswfS97MX0g2LPZiNin2YRcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi2LXZgdit2Ycg2KfbjCDbjNinINqv2LLbjNmG2Ycg2KfbjCDYqNix2KfbjCDYp9uM2YYg2b7Ysdiz2LTZhtin2YXZhyDZhdmI2KzZiNivINmG24zYs9iqLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItin2LIg2LTZhdinINio2KfYqNiqINiq2qnZhduM2YQg2KfbjNmGINm+2LHYs9i02YbYp9mF2Ycg2YXYqti02qnYsduM2YVcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcItio2Ycg2YbYuNixINmF24wg2LHYs9ivINmH2YUg2YfZhSDYp9qp2YbZiNmGINm+2LHYs9i02YbYp9mF2Ycg2LHYpyDYqtqp2YXbjNmEINqp2LHYr9mHINin24zYry5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLYr9ix2K3Yp9mEINin24zYrNin2K8g2b7Ysdiz2LTZhtin2YXZh1wiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLYp9mG2KrYrtin2Kgg2qnZhtuM2K8uLi5cIixcbiAgdmFsdWU6IFwi2YXZgtiv2KfYsVwiLFxuICByZXF1aXJlZEVycm9yOiBcItmE2LfZgdinINio2Ycg2LPZiNin2YQg2b7Yp9iz2K4g2K/Zh9uM2K9cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi2YTYt9mB2Kcg2K3Yr9in2YLZhCDYqNmHINuM2qkg2LPZiNin2YQg2b7Yp9iz2K4g2K/Zh9uM2K8uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi2YTYt9mB2Kcg2LPZiNin2YTYp9iqINiq2YXYp9mFINiz2LfYsdmH2Kcg2LHYpyDZvtin2LPYriDYr9mH24zYry5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItmF2YLYr9in2LEg2KjYp9uM2K8g2LnYr9iv24wg2KjYp9i02K9cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLZhNi32YHYpyDYrdiv2KfZgtmEICB7MH0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi2YTYt9mB2Kcg2qnZhdiq2LEg2KfYsiAgezB9INit2LHZgSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLZhNi32YHYpyDYqNuM2LTYqtixINin2LIgIHswfSDYrdix2YEg2Ygg2qnZhdiq2LEg2KfYsiB7MX0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItmE2LfZgdinINit2K/Yp9mC2YQgezB9INiz2LfYsSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi2K3Yr9in2YLZhCB7MH0g2KfZhtiq2K7Yp9ioINqp2YbbjNivLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLZhNi32YHYpyDYqNuM2LTYqtixINin2LIgIHswfSDYp9mG2KrYrtin2Kgg2qnZhtuM2K8uXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICBcIid7MH0nINio2KfbjNivINio24zZhiB7MX0g2YggezJ9INio2KfYtNivXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg2KjYstix2q/YqtixINmF2LPYp9mI24wgezF9INio2KfYtNivXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg2KjYp9uM2K8g2qnZiNqG2qnYqtixINuM2Kcg2YXYs9in2YjbjCB7MX0g2KjYp9i02K9cIixcbiAgaW52YWxpZEVtYWlsOiBcItmE2LfZgdinINin24zZhduM2YQg2LXYrduM2K0g2K/YsdisINqp2YbbjNivXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIti52KjYp9ix2Ko6IHswfSDZvtin2LPYriDYqNin24zYryAndHJ1ZScg2KjYp9i02K8uXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLYr9ix2K7ZiNin2LPYqiDYqNinINiu2LfYpyDYsdmI2KjYsdmIINi02K86ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgXCLYr9ix2K7ZiNin2LPYqiDZhdiz24zYsduMINiu2KfZhNuMINio2KfYstqv2LTYqiDYr9in2K/ZhyDbjNinINmF2LPbjNixINiv2LHYs9iqINiq2YbYuNuM2YUg2YbYtNiv2YdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLYqNuM2LTYqtix24zZhiDYrdis2YUg2YXYrNin2LIg2YHYp9uM2YQ6IHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi2YXZgtiv2KfYsSAn2K/bjNqv2LEnINix2Kcg2YjYp9ix2K8g2qnZhtuM2K9cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgIFwi2YHYp9uM2YQg2K/YsSDYrdin2YQg2KLbjNmE2YjYryDYp9iz2KouINmE2LfZgdinINi12KjYsSDaqdmG24zYry5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi2KjYp9ix2q/bjNix24wuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLYp9mG2KrYrtin2Kgg2YHYp9uM2YQo2YfYpykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItmH24zahiDZgdin24zZhNuMINin2YbYqtiu2KfYqCDZhti02K/Zh1wiLFxuICBjb25maXJtRGVsZXRlOiBcItii24zYpyDZhdin24zZhCDYqNmHINit2LDZgSDYp9uM2YYg2LHYr9uM2YEg2YfYs9iq24zYr9ifXCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi2KfbjNmGINmF2YLYr9in2LEg2KjYp9uM2K8g2LrbjNixINiq2qnYsdin2LHbjCDYqNin2LTYr1wiLFxuICBhZGRDb2x1bW46IFwi2LPYqtmI2YYg2KzYr9uM2K9cIixcbiAgYWRkUm93OiBcItiz2LfYsSDYrNiv24zYr1wiLFxuICByZW1vdmVSb3c6IFwi2K3YsNmBXCIsXG4gIGFkZFBhbmVsOiBcItis2K/bjNivXCIsXG4gIHJlbW92ZVBhbmVsOiBcItit2LDZgVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi2KLbjNiq2YVcIixcbiAgbWF0cml4X2NvbHVtbjogXCLYs9iq2YjZhlwiLFxuICBtYXRyaXhfcm93OiBcItiz2LfYsVwiLFxuICBzYXZpbmdEYXRhOiBcItmG2KrYp9uM2Kwg2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYs9in2LLbjCDYr9ixINiz2LHZiNixINin2LPYqlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi2K7Yt9in24zbjCDYr9ixINiw2K7bjNix2Ycg2LPYp9iy24wg2YbYqtin24zYrCDYsdiuINiv2KfYr9mHINin2LPYqlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLZhtiq2KfbjNisINio2Kcg2YXZiNmB2YLbjNiqINiw2K7bjNix2Ycg2LTYr1wiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi2YXYrNiv2K8g2KrZhNin2LQg2qnZhtuM2K9cIixcbiAgdGltZXJNaW46IFwi2K/ZgtuM2YLZh1wiLFxuICB0aW1lclNlYzogXCLYq9in2YbbjNmHXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi2LTZhdinINmF2K/YqiB7MH0g2K/YsSDYp9uM2YYg2LXZgdit2Ycg2Ygg2YXYr9iqIHsxfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIti02YXYpyDZhdiv2KogezB9INix2Kcg2K/YsSDYp9uM2YYg2LXZgdit2Ycg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIti02YXYpyDZhdiv2KogezB9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIti02YXYpyDZhdiv2KogezB9INin2LIgezF9INiv2LEg2KfbjNmGINi12YHYrdmHINmIINmF2K/YqiB7Mn0g2KfYsiB7M30g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYp9iyIHsxfSDYsdinINiv2LEg2KfbjNmGINi12YHYrdmHINiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYp9iyIHsxfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLZvtin2qnYs9in2LLbjFwiLFxuICBjbGVhckNhcHRpb246IFwi2K7Yp9mE24wg2qnYsdiv2YZcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi2KfZhtiq2K7Yp9ioINmB2KfbjNmEXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItit2LDZgSDYp9uM2YYg2YHYp9uM2YRcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLYqNmE2YdcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItiu24zYsVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLYotuM2Kcg2YXbjNiu2YjYp9mH24zYryDYp9uM2YYg2YHYp9uM2YQg2LHYpyDZvtin2qkg2qnZhtuM2K86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItii24zYpyDZhduM2K7ZiNin2YfbjNivINiq2YXYp9mFINmB2KfbjNmEINmH2Kcg2LHYpyDZvtin2qkg2qnZhtuM2K8/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLYudmG2YjYp9mGINiz2YjYp9mEXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZhXCJdID0gcGVyc2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJmYVwiXSA9IFwi2YHYp9ix2ZLYs9mQ2YlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcG9saXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIldzdGVjelwiLFxuICBwYWdlTmV4dFRleHQ6IFwiRGFsZWpcIixcbiAgY29tcGxldGVUZXh0OiBcIkdvdG93ZVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmVtaWVyYVwiLFxuICBlZGl0VGV4dDogXCJFZHljamFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiSW5uYSBvZHBvd2llZMW6ICh3cGlzeilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkJyYWtcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiV3liaWVyeiB3c3p5c3RraWVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlN0cm9uYSB7MH0geiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlphcGlzIHswfSB6IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rwb3dpZWR6aSBuYSB7MH0vezF9IHB5dGFuaWFcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTmllIG1hIHdpZG9jem55Y2ggcHl0YcWELlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkR6acSZa3VqZW15IHphIHd5cGXFgm5pZW5pZSBhbmtpZXR5IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiWiBuYXN6eWNoIHphcGlzw7N3IHd5bmlrYSwgxbxlIHd5cGXFgm5pxYJlxZsganXFvCB0xJkgYW5raWV0xJkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiVHJ3YSB3Y3p5dHl3YW5pZSBhbmtpZXR5Li4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIld5YmllcnouLi5cIixcbiAgdmFsdWU6IFwiV2FydG/Fm8SHXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUHJvc3rEmSBvZHBvd2llZHppZcSHIG5hIHRvIHB5dGFuaWUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSBjbyBuYWptbmllaiBqZWRubyBweXRhbmllLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByb3N6xJkgb2Rwb3dpZWR6aWXEhyBuYSB3c3p5c3RraWUgcHl0YW5pYS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlcgdHltIHBvbHUgbW/FvG5hIHdwaXNhxIcgdHlsa28gbGljemJ5LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyBjbyBuYWptbmllaiB7MH0gem5ha8Ozdy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgbW5pZWogbmnFvCB7MH0gem5ha8Ozdy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgd2nEmWNlaiBuacW8IHswfSBpIG1uaWVqIG5pxbwgezF9IHpuYWvDs3cuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJvc3rEmSB1enVwZcWCbmnEhyBwcnp5bmFqbW5pZWogezB9IHdpZXJzenkuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlByb3N6xJkgd3licmHEhyBjbyBuYWptbmllaiB7MH0gcG96eWNqaS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIG5pZSB3acSZY2VqIG5pxbwgezB9IHBvenljamkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfSBvcmF6IG1uaWVqc3phIGx1YiByw7N3bmEgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyBtbmllanN6YSBsdWIgcsOzd25hIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUHJvc3rEmSBwb2RhxIcgcHJhd2lkxYJvd3kgYWRyZXMgZW1haWwuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIld5cmHFvGVuaWU6IHswfSBwb3dpbm5vIHdyYWNhxIcgJ3ByYXdkeml3ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLFu8SFZGFuaWUgendyw7NjacWCbyBixYLEhWQgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLFu8SFZGFuaWUgbmllIHp3csOzY2nFgm8gZGFueWNoIGFsYm8gxZtjaWXFvGthIGplc3QgbmllcHJhd2lkxYJvd2FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJSb3ptaWFyIHByemVzxYJhbmVnbyBwbGlrdSBuaWUgbW/FvGUgcHJ6ZWtyYWN6YcSHIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlByb3N6xJkgcG9kYcSHIGlubsSFIG9kcG93aWVkxbouXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJUcndhIHByemVub3N6ZW5pZSBUd29qZWdvIHBsaWt1LCBwcm9zesSZIHNwcsOzYm93YcSHIHBvbm93bmllIHphIGtpbGthIHNla3VuZC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwixYFhZG93YW5pZS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIld5YmllcnogcGxpayhpKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmllIHd5YnJhbm8gxbxhZG5lZ28gcGxpa3VcIixcbiAgY29uZmlybURlbGV0ZTogXCJDaGNlc3ogc2thc293YcSHIG5hZ3JhbmllP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhIHdhcnRvxZvEhyBwb3dpbm5hIGJ5xIcgd3lqxIV0a293YS5cIixcbiAgYWRkQ29sdW1uOiBcIkRvZGFqIGtvbHVtbsSZXCIsXG4gIGFkZFJvdzogXCJEb2RhaiB3aWVyc3pcIixcbiAgcmVtb3ZlUm93OiBcIlVzdcWEXCIsXG4gIGFkZFBhbmVsOiBcIkRvZGFqIHBhbmVsXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlVzdcWEXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtZW50XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sdW1uYVwiLFxuICBtYXRyaXhfcm93OiBcIldpZXJzelwiLFxuICBzYXZpbmdEYXRhOiBcIlphcGlzdWrEmSB3eW5pa2kgYW5raWV0eSBuYSBzZXJ3ZXJ6ZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiV3lzdMSFcGnFgiBixYLEhWQgaSB3eW5pa2kgbmllIG1vZ8WCeSB6b3N0YcSHIHphcGlzYW5lLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJXeW5pa2kgem9zdGHFgnkgcG9wcmF3bmllIHphcGlzYW5lIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiU3Byw7NidWogcG9ub3duaWVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlNwxJlkemnFgmXFmyB7MH0gbmEgdGVqIHN0cm9uaWUgYSB3IHN1bWllIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiU3DEmWR6acWCZcWbIHswfSBuYSB0ZWogc3Ryb25pZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJTcMSZZHppxYJlxZsgdyBzdW1pZSB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfSBuYSB0ZWogc3Ryb25pZSBhIHcgc3VtaWUgezJ9IHogezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJTcMSZZHppxYJlxZsgezB9IHogezF9IG5hIHRlaiBzdHJvbmllXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIld5Y3p5xZvEh1wiLFxuICBjbGVhckNhcHRpb246IFwiSmFzbmVcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiV3liaWVyeiBwbGlrXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlVzdcWEIHRlbiBwbGlrXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiVGFrXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOaWVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiSmVzdGXFmyBwZXdpZW4sIMW8ZSBjaGNlc3ogdXN1bsSFxIcgdGVuIHBsaWs6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkplc3RlxZsgcGV3aWVuLCDFvGUgY2hjZXN6IHVzdW7EhcSHIHdzenlzdGtpZSBwbGlraT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlR5dHXFgiBweXRhbmlhXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInBsXCJdID0gcG9saXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInBsXCJdID0gXCJwb2xza2lcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcG9ydHVndWVzZUJyU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJQcsOzeGltb1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyXCIsXG4gIHByZXZpZXdUZXh0OiBcIlByw6ktdmlzdWFsaXphw6fDo29cIixcbiAgZWRpdFRleHQ6IFwiRWRpdGFyXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21lw6dhclwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk91dHJvcyAoZGVzY3JldmVyKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmVuaHVtXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjaW9uYXIgVG9kb3NcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlDDoWdpbmEgezB9IGRlIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVnaXN0cm8gezB9IGRlIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiUmVzcG9zdGFzIHswfS97MX0gcGVyZ3VudGFzXCIsXG4gIGVtcHR5U3VydmV5OiBcIk7Do28gaMOhIHDDoWdpbmEgdmlzw612ZWwgb3UgcGVyZ3VudGEgbmEgcGVzcXVpc2EuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiT2JyaWdhZG8gcG9yIGZpbmFsaXphciBhIHBlc3F1aXNhIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTm9zc29zIHJlZ2lzdHJvcyBtb3N0cmFtIHF1ZSB2b2PDqiBqw6EgZmluYWxpem91IGEgcGVzcXVpc2EuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQSBwZXNxdWlzYSBlc3TDoSBjYXJyZWdhbmRvLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNlbGVjaW9uZS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvclwiLFxuICByZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgYSBwZXJndW50YS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBwZWxvIG1lbm9zIHVtYSBwZXJndW50YS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjpcbiAgICBcIlBvciBmYXZvciwgcmVzcG9uZGEgYXMgcGVyZ3VudGFzIGVtIHRvZGFzIGFzIGxpbmhhcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIk8gdmFsb3IgZGV2ZSBzZXIgbnVtw6lyaWNvLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIHBlbG8gbWVub3MgezB9IGNhcmFjdGVyZXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWVub3MgZGUgezB9IGNhcmFjdGVyZXMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWFpcyBkZSB7MH0gZSBtZW5vcyBkZSB7MX0gY2FyYWN0ZXJlcy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQcmVlbmNoYSBwZWxvIG1lbm9zIHswfSBsaW5oYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNlbGVjaW9uZSBwZWxvIG1lbm9zIHswfSBvcMOnw7Vlcy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUG9yIGZhdm9yLCBzZWxlY2lvbmUgbsOjbyBtYWlzIGRvIHF1ZSB7MH0gb3DDp8O1ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9IGUgaWd1YWwgb3UgbWVub3IgcXVlIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3Ugc3VwZXJpb3IgYSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IGluZmVyaW9yIGEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQb3IgZmF2b3IsIGluZm9ybWUgdW0gZS1tYWlsIHbDoWxpZG8uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkEgZXhwcmVzc8OjbzogezB9IGRldmUgcmV0b3JuYXIgJ3ZlcmRhZGVpcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiQSByZXF1aXNpw6fDo28gcmV0b3Jub3UgbyBlcnJvICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiQSByZXF1aXNpw6fDo28gbsOjbyByZXRvcm5vdSBkYWRvcyBvdSBvICdjYW1pbmhvJyBkYSByZXF1aXNpw6fDo28gbsOjbyBlc3TDoSBjb3JyZXRvXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiTyB0YW1hbmhvIGRvIGFycXVpdm8gbsOjbyBkZXZlIGV4Y2VkZXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCBpbmZvcm1lIG8gb3V0cm8gdmFsb3IuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJTZXUgYXJxdWl2byBlc3TDoSBzZW5kbyBjYXJyZWdhZG8uIFBvciBmYXZvciwgYWd1YXJkZSBhbGd1bnMgc2VndW5kb3MgZSB0ZW50ZSBub3ZhbWVudGUuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkNhcnJlZ2FuZG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJTZWxlY2lvbmUgbyhzKSBhcnF1aXZvKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZW5odW0gYXJxdWl2byBlc2NvbGhpZG9cIixcbiAgY29uZmlybURlbGV0ZTogXCJUZW0gY2VydGV6YSBxdWUgZGVzZWphIGRlbGV0YXI/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXNzZSB2YWxvciBkZXZlIHNlciDDum5pY28uXCIsXG4gIGFkZENvbHVtbjogXCJBZGljaW9uYXIgY29sdW5hXCIsXG4gIGFkZFJvdzogXCJBZGljaW9uYXIgbGluaGFcIixcbiAgcmVtb3ZlUm93OiBcIlJlbW92ZXIgbGluaGFcIixcbiAgYWRkUGFuZWw6IFwiQWRpY2lvbmFyIG5vdm9cIixcbiAgcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlclwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbHVuYVwiLFxuICBtYXRyaXhfcm93OiBcIkxpbmhhXCIsXG4gIHNhdmluZ0RhdGE6IFwiT3MgcmVzdWx0YWRvcyBlc3RvIHNlbmRvIHNhbHZvcyBubyBzZXJ2aWRvci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiT2NvcnJldSB1bSBlcnJvIGUgbsOjbyBmb2kgcG9zc8OtdmVsIHNhbHZhciBvcyByZXN1bHRhZG9zLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJPcyByZXN1bHRhZG9zIGZvcmFtIHNhbHZvcyBjb20gc3VjZXNzbyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRlbnRlIG5vdmFtZW50ZVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VnXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hIGUgezF9IG5vIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJWb2PDqiBnYXN0b3UgezB9IG5lc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVm9jw6ogZ2FzdG91IHswfSBubyB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hIGUgezJ9IGRlIHszfSBubyB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBubyB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkxpbXBhclwiLFxuICBjbGVhckNhcHRpb246IFwiTGltcGFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkVzY29saGVyIGFycXVpdm9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmVtb3ZlciBlc3RlIGFycXVpdm9cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJTaW1cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk7Do29cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiVGVtIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIGVzdGUgYXJxdWl2bzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiVGVtIGNlcnRlemEgcXVlIGRlc2VqYSByZW1vdmVyIHRvZG9zIG9zIGFycXVpdm9zP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkYSBxdWVzdMOjb1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwdC1iclwiXSA9IHBvcnR1Z3Vlc2VCclN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJwdC1iclwiXSA9IFwicG9ydHVndcOqcyBicmFzaWxlaXJvXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBvcnR1Z3Vlc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgcGFnZU5leHRUZXh0OiBcIlByw7N4aW1vXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGaW5hbGl6YXJcIixcbiAgcHJldmlld1RleHQ6IFwiUHLDqS12aXN1YWxpemHDp8Ojb1wiLFxuICBlZGl0VGV4dDogXCJFZGl0YXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkNvbWXDp2FyXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3V0cm9zIChkZXNjcmV2ZXIpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOZW5odW1cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWNpb25hciBUb2Rvc1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUMOhZ2luYSB7MH0gZGUgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWdpc3RvIHswfSBkZSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJlc3Bvc3RhcyB7MH0vezF9IHBlcmd1bnRhc1wiLFxuICBlbXB0eVN1cnZleTogXCJOw6NvIGjDoSBww6FnaW5hIHZpc8OtdmVsIG91IHBlcmd1bnRhIG5vIHF1ZXN0aW9uw6FyaW8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiT2JyaWdhZG8gcG9yIGZpbmFsaXphciBvIHF1ZXN0aW9uw6FyaW8hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJPcyBub3Nzb3MgcmVnaXN0b3MgbW9zdHJhbSBxdWUgasOhIGZpbmFsaXpvdSBvIHF1ZXN0aW9uw6FyaW8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTyBxdWVzdGlvbsOhcmlvIGVzdMOhIGEgY2FycmVnYXIuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNpb25lLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9yXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCByZXNwb25kYSDDoCBwZXJndW50YS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBwZWxvIG1lbm9zIGEgdW1hIHBlcmd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOlxuICAgIFwiUG9yIGZhdm9yLCByZXNwb25kYSDDoHMgcGVyZ3VudGFzIGVtIHRvZGFzIGFzIGxpbmhhcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIk8gdmFsb3IgZGV2ZSBzZXIgbnVtw6lyaWNvLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIHBlbG8gbWVub3MgezB9IGNhcmFjdGVyZXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWVub3MgZGUgezB9IGNhcmFjdGVyZXMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWFpcyBkZSB7MH0gZSBtZW5vcyBkZSB7MX0gY2FyYWN0ZXJlcy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQcmVlbmNoYSBwZWxvIG1lbm9zIHswfSBsaW5oYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNlbGVjaW9uZSBwZWxvIG1lbm9zIHswfSBvcMOnw7Vlcy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUG9yIGZhdm9yLCBzZWxlY2lvbmUgbm8gbcOheGltbyB7MH0gb3DDp8O1ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9IGUgaWd1YWwgb3UgbWVub3IgcXVlIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3Ugc3VwZXJpb3IgYSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IGluZmVyaW9yIGEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQb3IgZmF2b3IsIGluc2lyYSB1bSBlLW1haWwgdsOhbGlkby5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiQSBleHByZXNzw6NvOiB7MH0gZGV2ZSByZXRvcm5hciAndmVyZGFkZWlybycuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJPIHBlZGlkbyByZXRvcm5vdSBvIGVycm8gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJPIHBlZGlkbyBuw6NvIHJldG9ybm91IGRhZG9zIG91IG8gJ2NhbWluaG8nIGRvIHBlZGlkbyBuw6NvIGVzdMOhIGNvcnJldG9cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJPIHRhbWFuaG8gZG8gYXJxdWl2byBuw6NvIGRldmUgZXhjZWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IsIGluc2lyYSBvIG91dHJvIHZhbG9yLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiTyBzZXUgZmljaGVpcm8gZXN0w6EgYSBjYXJyZWdhci4gUG9yIGZhdm9yLCBhZ3VhcmRlIGFsZ3VucyBzZWd1bmRvcyBlIHRlbnRlIG5vdmFtZW50ZS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQSBjYXJyZWdhci4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlNlbGVjaW9uZSBvKHMpIGFycXVpdm8ocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5lbmh1bSBmaWNoZWlybyBlc2NvbGhpZG9cIixcbiAgY29uZmlybURlbGV0ZTogXCJUZW0gYSBjZXJ0ZXphIHF1ZSBkZXNlamEgYXBhZ2FyP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkVzdGUgdmFsb3IgZGV2ZSBzZXIgw7puaWNvLlwiLFxuICBhZGRDb2x1bW46IFwiQWRpY2lvbmFyIGNvbHVuYVwiLFxuICBhZGRSb3c6IFwiQWRpY2lvbmFyIGxpbmhhXCIsXG4gIHJlbW92ZVJvdzogXCJSZW1vdmVyIGxpbmhhXCIsXG4gIGFkZFBhbmVsOiBcIkFkaWNpb25hciBub3ZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bmFcIixcbiAgbWF0cml4X3JvdzogXCJMaW5oYVwiLFxuICBzYXZpbmdEYXRhOiBcIk9zIHJlc3VsdGFkb3MgZXN0w6NvIGEgc2VyIGd1YXJkYWRvcyBubyBzZXJ2aWRvci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiT2NvcnJldSB1bSBlcnJvIGUgbsOjbyBmb2kgcG9zc8OtdmVsIGd1YXJkYXIgb3MgcmVzdWx0YWRvcy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiT3MgcmVzdWx0YWRvcyBmb3JhbSBndWFyZGFkb3MgY29tIHN1Y2Vzc28hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUZW50ZSBub3ZhbWVudGVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYSBlIHsxfSBubyB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYSBlIHsyfSBkZSB7M30gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5lc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbm8gdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJMaW1wYXJcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkxpbXBhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJFc2NvbGhlciBmaWNoZWlyb1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJSZW1vdmVyIGVzdGUgZmljaGVpcm9cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJTaW1cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk7Do29cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiVGVtIGEgY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgZXN0ZSBmaWNoZWlybzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiVGVtIGEgY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgdG9kb3Mgb3MgZmljaGVpcm9zP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkYSBxdWVzdMOjb1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwdFwiXSA9IHBvcnR1Z3Vlc2VTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicHRcIl0gPSBcInBvcnR1Z3XDqnNcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcm9tYW5pYW5TdXJ2ZXlTdHJpbmdzOiBhbnkgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJQcmVjZWRlbnRcIixcbiAgcGFnZU5leHRUZXh0OiBcIlVybcSDdG9yXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGaW5hbGl6YXJlXCIsXG4gIHByZXZpZXdUZXh0OiBcInByZXZpenVhbGl6YXJlXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhyJtpXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJzdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFsdHVsKHByZWNpemHFo2kpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOaWNpIHVudWxcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWN0ZWF6xIMgdG90XCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IGRpbiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIsOObnJlZ2lzdHJhcmUgezB9IGRpbiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlLEg3NwdW5zdXJpIGxhIHswfSAvIHsxfSDDrm50cmVixINyaVwiLFxuICBlbXB0eVN1cnZleTogXCJOdSBzdW50IMOubnRyZWLEg3JpIHBlbnRydSBhY2VzdCBjaGVzdGlvbmFyXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVsSDIG11bMWjdW1pbSBwZW50cnUgdGltcHVsIGFjb3JkYXQhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJEaW4gw65ucmVnaXN0csSDcmlsZSBub2FzdHJlIHJlaWVzZSBjxIMgYcibaSBjb21wbGV0YXQgZGVqYSBhY2VzdCBjaGVzdGlvbmFyLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkNoZXN0aW9uYXJ1bCBzZSDDrm5jYXJjxIMuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQWxlZ2XFo2kuLi5cIixcbiAgdmFsdWU6IFwidmFsb2FyZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlLEg3NwdW5zdWwgbGEgYWNlYXN0xIMgw65udHJlYmFyZSBlc3RlIG9ibGlnYXRvcml1LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWxIMgcnVnxINtIHPEgyByxINzcHVuZGXIm2kgbGEgY2VsIHB1yJtpbiBvIMOubnRyZWJhcmUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG9hdGUgcsSDc3B1bnN1cmlsZSBzdW50IG9ibGlnYXRvcmlpXCIsXG4gIG51bWVyaWNFcnJvcjogXCJSxINzcHVuc3VsIHRyZWJ1aWUgc8SDIGZpZSBudW1lcmljLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcibaSBtaW5pbSB7MH0gY2FyYWN0ZXJlLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcibaSBtYXhpbSB7MH0gY2FyYWN0ZXJlLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlyJtpIG1haSBtdWx0IGRlIHswfSDImWkgbWFpIHB1yJtpbiBkZSB7MX0gY2FyYWN0ZXJlLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlRyZWJ1aWUgc8SDIGNvbXBsZXRhyJtpIG1pbmltIHswfSByw6JuZHVyaS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVHJlYnVpZSBzxIMgc2VsZWN0YcibaSBtaW5pbSB7MH0gb3DFo2l1bmkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGHIm2kgbWF4aW0gezB9IG9wxaNpdW5pLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9IMWfw64gbWFpIG1pYyBzYXUgZWdhbCBjdSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWFyZSBzYXUgZWdhbCBjYSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWljIHNhdSBlZ2FsIGNhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlxaNpIG8gYWRyZXNhIGRlIGVtYWlsIHZhbGlkxIMuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkV4cHJlc2lhOiB7MH0gYXIgdHJlYnVpIHPEgyByZXR1cm5lemUg4oCeYWRldsSDcmF04oCdLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUmVxdWVzdC11bCBhIHJldHVybmF0IGVyb2FyZWEgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJSZXF1ZXN0LXVsIG51IGEgcmV0dXJuYXQgZGF0ZSBzYXUgcHJvcHJpZXRhdGVhICdwYXRoJyBlc3RlIGluY29yZWN0xINcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEaW1lbnNpdW5lYSBmacWfaWVydWx1aSBudSB0cmVidWllIHPEgyBkZXDEg8WfZWFzY8SDIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlRyZWJ1aWUgc8SDIGNvbXBsZXRhyJtpIGPDom1wdWwgJ0FsdHVsJy5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZpyJlpZXJ1bCBkdW1uZWF2b2FzdHLEgyBlc3RlIMOubiBjdXJzIGRlIMOubmPEg3JjYXJlLiBWxIMgcnVnxINtIGHImXRlcHRhyJtpIGPDonRldmEgc2VjdW5kZSDImWkgcmV2ZW5pyJtpIGFwb2kuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIlNlIMOubmNhcmPEgy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkFsZWdlIGZpc2llcmVsZS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmljaXVuIGZpyJlpZXIgYWxlc1wiLFxuICBjb25maXJtRGVsZXRlOiBcIlN1bnRlyJtpIHNpZ3VyIGPEgyBkb3JpyJtpIHPEgyDImXRlcmdlyJtpIMOubnJlZ2lzdHJhcmVhP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlZhbG9hcmVhIHRyZWJ1aWUgc8SDIGZpZSB1bmljxIMuXCIsXG4gIGFkZENvbHVtbjogXCJBZMSDdWdhyJtpIGNvbG9hbsSDXCIsXG4gIGFkZFJvdzogXCJBZMSDdWdhcmUgcsOibmRcIixcbiAgcmVtb3ZlUm93OiBcIsiYdGVyZ2VyZVwiLFxuICBhZGRQYW5lbDogXCJBZMSDdWdhcmVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiyJh0ZXJnZXJlXCIsXG4gIGNob2ljZXNfSXRlbTogXCJvcMibaXVuZVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbG9hbsSDXCIsXG4gIG1hdHJpeF9yb3c6IFwiUsOibmRcIixcbiAgc2F2aW5nRGF0YTogXCJSZXp1bHRhdGVsZSBzdW50IMOubiBjdXJzIGRlIHNhbHZhcmUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkEgaW50ZXJ2ZW5pdCBvIGVyb2FyZSwgcmV6dWx0YXRlbGUgbnUgYXUgcHV0dXQgZmkgc2FsdmF0ZS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmV6dWx0YXRlbGUgYXUgZm9zdCBzYWx2YXRlIGN1IHN1Y2NlcyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIsOObmNlcmNhyJtpIGRpbiBub3VcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkHIm2kgcGV0cmVjdXQgezB9IHBlIGFjZWFzdMSDIHBhZ2luxIMgyJlpIHsxfSDDrm4gdG90YWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkHIm2kgcGV0cmVjdXQgezB9IHBlIGFjZWFzdMSDIHBhZ2luxIMuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiQcibaSBwZXRyZWN1dCB7MH0gw65uIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiQcibaSBwZXRyZWN1dCB7MH0gZGluIHsxfSBwZSBhY2Vhc3TEgyBwYWdpbsSDIMiZaSB7Mn0gZGluIHszfSDDrm4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gcGUgYWNlYXN0xIMgcGFnaW7Egy5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJByJtpIHBldHJlY3V0IHswfSBkaW4gezF9IMOubiB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkN1cmF0XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJjbGFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkFsZWdlIGZpyJlpZXJ1bFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJFbGltaW5hyJtpIGFjZXN0IGZpyJlpZXJcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJkYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTnVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiU2lndXIgZG9yacibaSBzxIMgZWxpbWluYcibaSBhY2VzdCBmaciZaWVyOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJTaWd1ciBkb3JpyJtpIHPEgyBlbGltaW5hyJtpIHRvYXRlIGZpyJlpZXJlbGU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUaXRsdWwgaW50cmViYXJpaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJyb1wiXSA9IHJvbWFuaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInJvXCJdID0gXCJyb23Dom7Eg1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBydXNzaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCd0LDQt9Cw0LRcIixcbiAgcGFnZU5leHRUZXh0OiBcItCU0LDQu9C10LVcIixcbiAgY29tcGxldGVUZXh0OiBcItCT0L7RgtC+0LLQvlwiLFxuICBwcmV2aWV3VGV4dDogXCLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgFwiLFxuICBlZGl0VGV4dDogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQndCw0YfQsNGC0YxcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQlNGA0YPQs9C+0LUgKNC/0L7QttCw0LvRg9C50YHRgtCwLCDQvtC/0LjRiNC40YLQtSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCd0LXRglwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktGL0LHRgNCw0YLRjCDQstGB0ZFcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLRgNCw0L3QuNGG0LAgezB9INC40LcgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQl9Cw0L/QuNGB0YwgezB9INC40LcgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLQntGC0LLQtdGC0Ysg0L3QsCB7MH0vezF90LLQvtC/0YDQvtGB0YtcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdGCINC90Lgg0L7QtNC90L7Qs9C+INCy0L7Qv9GA0L7RgdCwLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCR0LvQsNCz0L7QtNCw0YDQuNC8INCS0LDRgSDQt9CwINC30LDQv9C+0LvQvdC10L3QuNC1INCw0L3QutC10YLRiyFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcItCS0Ysg0YPQttC1INC/0YDQvtGF0L7QtNC40LvQuCDRjdGC0L7RgiDQvtC/0YDQvtGBLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCX0LDQs9GA0YPQt9C60LAg0YEg0YHQtdGA0LLQtdGA0LAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JLRi9Cx0YDQsNGC0YwuLi5cIixcbiAgdmFsdWU6IFwi0LfQvdCw0YfQtdC90LjQtVwiLFxuICByZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGC0LLQtdGC0YzRgtC1INC90LAg0LLQvtC/0YDQvtGBLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQv9C+INC60YDQsNC50L3QtdC5INC80LXRgNC1INC90LAg0L7QtNC40L0g0LLQvtC/0YDQvtGBLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGC0LLQtdGC0YzRgtC1INC90LAg0LLQvtC/0YDQvtGB0Ysg0LIg0LrQsNC20LTQvtC5INGB0YLRgNC+0LrQtS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCe0YLQstC10YIg0LTQvtC70LbQtdC9INCx0YvRgtGMINGH0LjRgdC70L7QvC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCDQstCy0LXQtNC40YLQtSDQsdC+0LvRjNGI0LUgezB9INGB0LjQvNCy0L7Qu9C+0LIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAg0LLQstC10LTQuNGC0LUg0LzQtdC90YzRiNC1IHswfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INCx0L7Qu9GM0YjQtSB7MH0g0Lgg0LzQtdC90YzRiNC1IHsxfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQt9Cw0L/QvtC70L3QuNGC0LUg0L3QtSDQvNC10L3RjNGI0LUgezB9INGB0YLRgNC+0LouXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INGF0L7RgtGPINCx0YsgezB9INCy0LDRgNC40LDQvdGC0L7Qsi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0L3QtSDQsdC+0LvQtdC1IHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QtSDQvNC10L3RjNGI0LUg0YfQtdC8IHsxfSwg0Lgg0L3QtSDQsdC+0LvRjNGI0LUg0YfQtdC8IHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvdC1INC80LXQvdGM0YjQtSDRh9C10LwgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LUg0LHQvtC70YzRiNC1INGH0LXQvCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQktGL0YDQsNC20LXQvdC40LUgezB9INC00L7Qu9C20L3QviDQstC+0LfQstGA0LDRidCw0YLRjCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQl9Cw0L/RgNC+0YEg0LLQtdGA0L3Rg9C7INC+0YjQuNCx0LrRgyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCe0YLQstC10YIg0L3QsCDQt9Cw0L/RgNC+0YEg0L/RgNC40YjQtdC7INC/0YPRgdGC0L7QuSDQuNC70Lgg0YHQstC+0LnRgdGC0LLQviAncGF0aCcg0YPQutCw0LfQsNC90L4g0L3QtdCy0LXRgNC90L5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQoNCw0LfQvNC10YAg0YTQsNC50LvQsCDQvdC1INC00L7Qu9C20LXQvSDQv9GA0LXQstGL0YjQsNGC0YwgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC00LDQvdC90YvQtSDQsiDQv9C+0LvQtSAn0JTRgNGD0LPQvtC1J1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGIINGE0LDQudC7INC30LDQs9GA0YPQttCw0LXRgtGB0Y8uINCf0L7QtNC+0LbQtNC40YLQtSDQvdC10YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0INC4INC/0L7Qv9GA0L7QsdGD0LnRgtC1INGB0L3QvtCy0LAuXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCX0LDQs9GA0YPQt9C60LAuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQktGL0LHQtdGA0LjRgtC1INGE0LDQudC7KNGLKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi0KTQsNC50Lsg0L3QtSDQstGL0LHRgNCw0L1cIixcbiAgY29uZmlybURlbGV0ZTogXCLQktGLINGC0L7Rh9C90L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINC30LDQv9C40YHRjD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQrdGC0L4g0LfQvdCw0YfQtdC90LjQtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YPQvdC40LrQsNC70YzQvdGL0LwuXCIsXG4gIGFkZENvbHVtbjogXCLQlNC+0LHQsNCy0LjRgtGMINC60L7Qu9C+0L3QutGDXCIsXG4gIGFkZFJvdzogXCLQlNC+0LHQsNCy0LjRgtGMINGB0YLRgNC+0LrRg1wiLFxuICByZW1vdmVSb3c6IFwi0KPQtNCw0LvQuNGC0YxcIixcbiAgYWRkUGFuZWw6IFwi0JTQvtCx0LDQstC40YLRjCDQvdC+0LLRg9GOXCIsXG4gIHJlbW92ZVBhbmVsOiBcItCj0LTQsNC70LjRgtGMXCIsXG4gIGNob2ljZXNfSXRlbTogXCLQktCw0YDQuNCw0L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QutCwXCIsXG4gIG1hdHJpeF9yb3c6IFwi0KHRgtGA0L7QutCwXCIsXG4gIHNhdmluZ0RhdGE6IFwi0KDQtdC30YPQu9GM0YLQsNGC0Ysg0YHQvtGF0YDQsNC90Y/RjtGC0YHRjyDQvdCwINGB0LXRgNCy0LXRgC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCwg0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRi9C7INGB0L7RhdGA0LDQvdGR0L0uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCg0LXQt9GD0LvRjNGC0LDRgiDRg9GB0L/QtdGI0L3QviDRgdC+0YXRgNCw0L3RkdC9IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0J/QvtC/0YDQvtCx0L7QstCw0YLRjCDRgdC90L7QstCwXCIsXG4gIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC4IHsxfSDQstGB0LXQs9C+LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQsiDRgtC10YfQtdC90LjQtSDRgtC10YHRgtCwLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC40LcgezF9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtSDQuCB7Mn0g0LjQtyB7M30g0LTQu9GPINCy0YHQtdCz0L4g0YLQtdGB0YLQsC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INC40LcgezF9INC90LAg0Y3RgtC+0Lkg0YHRgtGA0LDQvdC40YbQtS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0LTQu9GPINCy0YHQtdCz0L4g0YLQtdGB0YLQsC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCe0YfQuNGB0YLQuNGC0YxcIixcbiAgY2xlYXJDYXB0aW9uOiBcItCe0YfQuNGB0YLQuNGC0YxcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi0JLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQu1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQo9C00LDQu9C40YLRjCDRhNCw0LnQu1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItCU0LBcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCd0LXRglwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINGN0YLQvtGCINGE0LDQudC7OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0YHQtSDRhNCw0LnQu9GLP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi0J3QsNC30LLQsNC90LjQtSDQstC+0L/RgNC+0YHQsFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJydVwiXSA9IHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicnVcIl0gPSBcItGA0YPRgdGB0LrQuNC5XCI7XG4iLCIvL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlXG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHNlcmJpYW5TdHJpbmdzID0ge1xuICAgIHBhZ2VQcmV2VGV4dDogXCJOYXphZFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJEYWxqZVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJaYXZyxaFpXCIsXG4gICAgcHJldmlld1RleHQ6IFwiUHJlZ2xlZGFqXCIsXG4gICAgZWRpdFRleHQ6IFwiSXptZW5pXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlphcG/EjW5pXCIsXG4gICAgb3RoZXJJdGVtVGV4dDogXCJEcnVnbyAodXBpxaFpKVwiLFxuICAgIG5vbmVJdGVtVGV4dDogXCJOacWhdGFcIixcbiAgICBzZWxlY3RBbGxJdGVtVGV4dDogXCJJemFiZXJpIHN2ZVwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJTdHJhbmljYSB7MH0gb2QgezF9XCIsXG4gICAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlVwaXMgezB9IG9kIHsxfVwiLFxuICAgIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJPZGdvdm9yZW5vIG5hIHswfS97MX0gcGl0YW5qYVwiLFxuICAgIGVtcHR5U3VydmV5OiBcIk5lbWEgdmlkbGppdmloIHN0cmFuaWNhIGlsaSBwaXRhbmphIHUgYW5rZXRpLlwiLFxuICAgIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiSHZhbGEgbmEgcG9wdW5qYXZhbmp1IGFua2V0ZSFcIixcbiAgICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgICAgXCJQcmVtYSBuYcWhaW0gcG9kYWNpbWEsIHZlxIcgc3RlIHBvcHVuaWxpIG92dSBhbmtldHUuXCIsXG4gICAgbG9hZGluZ1N1cnZleTogXCJVxI1pdGF2YW0gYW5rZXR1Li4uXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiSXphYmVyaS4uLlwiLFxuICAgIHZhbHVlOiBcInZyZWRub3N0XCIsXG4gICAgcmVxdWlyZWRFcnJvcjogXCJNb2xpbW8gb2Rnb3Zvcml0ZSBuYSBvdm8gcGl0YW5qZS5cIixcbiAgICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJNb2xpbW8gb2Rnb3Zvcml0ZSBuYSBiYXIgamVkbm8gcGl0YW5qZS5cIixcbiAgICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk1vbGltbyBvZGdvdm9yaXRlIG5hIHBpdGFuamEgdSBzdmltIHJlZG92aW1hLlwiLFxuICAgIG51bWVyaWNFcnJvcjogXCJWcmVkbm9zdCBiaSB0cmViYWxvIGRhIGJ1ZGUgbnVtZXJpxI1rYS5cIixcbiAgICBtaW5FcnJvcjogXCJWcmVkbm9zdCBuZSBiaSB0cmViYWxvIGRhIGJ1ZGUgbWFuamEgb2QgezB9XCIsXG4gICAgbWF4RXJyb3I6IFwiVnJlZG5vc3QgbmUgYmkgdHJlYmFsbyBkYSBidWRlIHZlxIdhIG9kIHswfVwiLFxuICAgIHRleHRNaW5MZW5ndGg6IFwiTW9saW1vIHVuZXNpdGUgYmFyIHswfSB6bmFrKG92KWEuXCIsXG4gICAgdGV4dE1heExlbmd0aDogXCJNb2xpbW8gdW5lc2l0ZSBuYWp2acWhZSB7MH0gem5hayhvdilhLlwiLFxuICAgIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgICBcIk1vbGltbyB1bmVzaXRlIG5ham1hbmplIHswfSBpIG5lIHZpxaFlIG9kIHsxfSB6bmFrKG92KWEuXCIsXG4gICAgbWluUm93Q291bnRFcnJvcjogXCJNb2xpbW8gcG9wdW5pdGUgbmFqbWFuamUgezB9IHJlZChvdmEpLlwiLFxuICAgIG1pblNlbGVjdEVycm9yOiBcIk1vbGltbyBpemFiZXJpdGUgbmFqbWFuamUgezB9IG9wY2lqYS9lLlwiLFxuICAgIG1heFNlbGVjdEVycm9yOiBcIk1vbGltbyBpemFiZXJpdGUgbmFqdmnFoWUgezB9IG9wY2lqYS9lLlwiLFxuICAgIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgYmkgdHJlYmFsbyBkYSBidWRlIG5ham1hbmplIHsxfSBpIG5hanZpxaFlIHsyfVwiLFxuICAgIG51bWVyaWNNaW46IFwiJ3swfScgYmkgdHJlYmFsbyBkYSBidWRlIG5ham1hbmplIHsxfVwiLFxuICAgIG51bWVyaWNNYXg6IFwiJ3swfScgYmkgdHJlYmFsbyBkYSBidWRlIG5hanZpxaFlIHsxfVwiLFxuICAgIGludmFsaWRFbWFpbDogXCJNb2xpbW8gdW5lc2l0ZSBpc3ByYXZudSBlLW1haWwgYWRyZXN1LlwiLFxuICAgIC8vIHZyYXRpdGkgXCJ0cnVlXCIgP1xuICAgIGludmFsaWRFeHByZXNzaW9uOiBcIkl6cmF6OiB7MH0gYmkgdHJlYmFsbyBkYSBidWRlIHRhxI1hbi5cIixcbiAgICB1cmxSZXF1ZXN0RXJyb3I6IFwiWmFodGV2IGplIG5hacWhYW8gbmEgZ3JlxaFrdSAnezB9Jy4gezF9XCIsXG4gICAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgICAgXCJaYWh0ZXYgbmlqZSBwcm9uYcWhYW8gcG9kYXRrZSwgaWxpIGplIHB1dGFuamEgbmV0YcSNbmFcIixcbiAgICBleGNlZWRNYXhTaXplOiBcIlZlbGnEjWluYSBmYWpsYSBuZSBiaSB0cmViYWxvIGRhIHByZWxhemkgezB9LlwiLFxuICAgIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNb2xpbW8gdW5lc2l0ZSBkcnVndSB2cmVkbm9zdC5cIixcbiAgICB1cGxvYWRpbmdGaWxlOlxuICAgICAgXCJGYWpsIHNlIMWhYWxqZS4gTW9saW1vIHNhxI1la2FqdGUgbmVrbyB2cmVtZSBpIHBva3XFoWFqdGUgcG9ub3ZvLlwiLFxuICAgIGxvYWRpbmdGaWxlOiBcIlXEjWl0YXZhbmplLi4uXCIsXG4gICAgY2hvb3NlRmlsZTogXCJJemFiZXJpdGUgZmFqbG92ZS4uLlwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJOaWplIGl6YWJyYW4gbmlqZWRhbiBmYWpsXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJEYSBsaSDFvmVsaXRlIGRhIGl6YnJpxaFldGUgdW5vcz9cIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIk92YSB2cmVkbm9zdCB0cmViYSBkYSBidWRlIGplZGluc3R2ZW5hLlwiLFxuICAgIGFkZENvbHVtbjogXCJEb2RhaiBrb2xvbnVcIixcbiAgICBhZGRSb3c6IFwiRG9kYWogcmVkXCIsXG4gICAgcmVtb3ZlUm93OiBcIlVrbG9uaVwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwiTmVtYSByZWRvdmEuXCIsXG4gICAgYWRkUGFuZWw6IFwiRG9kYWogbm92b1wiLFxuICAgIHJlbW92ZVBhbmVsOiBcIlVrbG9uaVwiLFxuICAgIGNob2ljZXNfSXRlbTogXCJzdGF2a2FcIixcbiAgICBtYXRyaXhfY29sdW1uOiBcIktvbG9uYVwiLFxuICAgIG1hdHJpeF9yb3c6IFwiUmVkXCIsXG4gICAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRla3N0XCIsXG4gICAgc2F2aW5nRGF0YTogXCJVIHRva3UgamUgxI11dmFuamUgcG9kYXRha2EgbmEgc2VydmVydS4uLlwiLFxuICAgIHNhdmluZ0RhdGFFcnJvcjogXCJEb8WhbG8gamUgZG8gZ3JlxaFrZSBpIHJlenVsdGF0aSBuaXN1IHNhxI11dmFuaS5cIixcbiAgICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGkgc3UgdXNwZcWhbm8gc2HEjXV2YW5pIVwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJQb2t1xaFhanRlIHBvbm92b1wiLFxuICAgIHRpbWVyTWluOiBcIm1pblwiLFxuICAgIHRpbWVyU2VjOiBcInNla1wiLFxuICAgIHRpbWVyU3BlbnRBbGw6IFwiUHJvdmVsaSBzdGUgezB9IG5hIG92b2ogc3RyYW5pY2kgaSB7MX0gdWt1cG5vLlwiLFxuICAgIHRpbWVyU3BlbnRQYWdlOiBcIlByb3ZlbGkgc3RlIHswfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICAgIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiUHJvdmVsaSBzdGUgezB9IHVrdXBuby5cIixcbiAgICB0aW1lckxpbWl0QWxsOlxuICAgICAgXCJQcm92ZWxpIHN0ZSB7MH0gb2QgezF9IG5hIG92b2ogc3RyYW5pY2kgaSB7Mn0gb2QgezN9IHVrdXBuby5cIixcbiAgICB0aW1lckxpbWl0UGFnZTogXCJQcm92ZWxpIHN0ZSB7MH0gb2QgezF9IG5hIG92b2ogc3RyYW5pY2kuXCIsXG4gICAgdGltZXJMaW1pdFN1cnZleTogXCJQcm92ZWxpIHN0ZSB7MH0gb2QgezF9IHVrdXBuby5cIixcbiAgICBjbGVhbkNhcHRpb246IFwiT8SNaXN0aVwiLFxuICAgIGNsZWFyQ2FwdGlvbjogXCJQb25pxaF0aVwiLFxuICAgIGNob29zZUZpbGVDYXB0aW9uOiBcIkl6YWJlcmkgZmFqbFwiLFxuICAgIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlVrbG9uaSBvdmFqIGZhamxcIixcbiAgICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkRhXCIsXG4gICAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lXCIsXG4gICAgY29uZmlybVJlbW92ZUZpbGU6IFwiRGEgbGkgc3RlIHNpZ3VybmkgZGEgxb5lbGl0ZSBkYSB1a2xvbml0ZSBvdmFqIGZhamw6IHswfT9cIixcbiAgICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiRGEgbGkgc3RlIHNpZ3VybmkgZGEgxb5lbGl0ZSBkYSB1a2xvbml0ZSBzdmUgZmFqbG92ZT9cIixcbiAgICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTmFzbG92IHBpdGFuamFcIixcbiAgICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiT3RrYcW+aVwiLFxuICAgIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlByaW1lbmlcIixcbiAgfTtcbiAgXG4gIC8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuICBzdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJzXCJdID0gc2VyYmlhblN0cmluZ3M7XG4gIHN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInJzXCJdID0gXCJTcnBza2lcIjtcbiAgIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLkuIrkuIDpobVcIixcbiAgcGFnZU5leHRUZXh0OiBcIuS4i+S4gOmhtVwiLFxuICBjb21wbGV0ZVRleHQ6IFwi5o+Q5Lqk6Zeu5Y23XCIsXG4gIHByZXZpZXdUZXh0OiBcIumihOiniFwiLFxuICBlZGl0VGV4dDogXCLnvJbovpFcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuW8gOWni+mXruWNt1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuWhq+WGmeWFtuS7luetlOahiFwiLFxuICBub25lSXRlbVRleHQ6IFwi5pegXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIumAieaLqeWFqOmDqFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi56ysIHswfSDpobUsIOWFsSB7MX0g6aG1XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gb2YgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLnrKwgezB9L3sxfSDpophcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi6Zeu5Y235Lit5rKh5pyJ6Zeu6aKY5oiW6aG16Z2iXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi5oSf6LCi5oKo55qE5Y+C5LiOIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIuS9oOW3suWujOaIkOmXruWNty5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLpl67ljbfmraPlnKjliqDovb3kuK0uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi6K+36YCJ5oupLi4uXCIsXG4gIHZhbHVlOiBcIuWAvFwiLFxuICByZXF1aXJlZEVycm9yOiBcIuivt+Whq+WGmeatpOmXrumimFwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLoh7PlsJHlm57nrZTkuIDpopguXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi6K+35aGr5YaZ5omA5pyJ6KGM5Lit6Zeu6aKYXCIsXG4gIG51bWVyaWNFcnJvcjogXCLnrZTmoYjlv4XpobvmmK/kuKrmlbDlrZdcIixcbiAgbWluRXJyb3I6IFwi6K+l5YC85LiN6IO95bCP5LqOIHswfVwiLFxuICBtYXhFcnJvcjogXCLor6XlgLzkuI3og73lpKfkuo4gezB9XCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi562U5qGI6ZW/5bqm6Iez5bCRIHswfSDkuKrlrZfnrKZcIixcbiAgdGV4dE1heExlbmd0aDogXCLnrZTmoYjplb/luqbkuI3og73otoXov4cgezB9IOS4quWtl+esplwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuetlOahiOmVv+W6puW/hemhu+WcqCB7MH0gLSB7MX0g5Liq5a2X56ym5LmL6Ze0XCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi5pyA5bCR6ZyA6KaB5aGr5YaZIHswfSDooYznrZTmoYhcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi5pyA5bCR6ZyA6KaB6YCJ5oupIHswfSDpobnnrZTmoYhcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi5pyA5aSa5Y+q6IO96YCJ5oupIHswfSDpobnnrZTmoYhcIixcbiAgbnVtZXJpY01pbk1heDogXCLnrZTmoYggJ3swfScg5b+F6aG75aSn5LqO562J5LqOIHsxfSDkuJTlsI/kuo7nrYnkuo4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwi562U5qGIICd7MH0nIOW/hemhu+Wkp+S6juetieS6jiB7MX1cIixcbiAgbnVtZXJpY01heDogXCLnrZTmoYggJ3swfScg5b+F6aG75bCP5LqO562J5LqOIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi6K+36L6T5YWl5pyJ5pWI55qEIEVtYWlsIOWcsOWdgFwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLlhazlvI86IHswfSDml6DmlYguXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLovb3lhaXpgInpobnml7blj5HnlJ/plJnor68gJ3swfSc6IHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi5pyq6IO96L295YWl5pyJ5pWI55qE6YCJ6aG55oiW6K+35rGC5Y+C5pWw6Lev5b6E5pyJ6K+vXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi5paH5Lu25aSn5bCP5LiN6IO96LaF6L+HIHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi6K+35a6M5oiQ5YW25LuW6Zeu6aKYXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi5paH5Lu25LiK5Lyg5LitLi4uIOivt+iAkOW/g+etieW+heWHoOenkuWQjumHjeivlVwiLFxuICBsb2FkaW5nRmlsZTogXCLliqDovb0uLi5cIixcbiAgY2hvb3NlRmlsZTogXCLpgInmi6nmlofku7YuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIuacqumAieaLqeaWh+S7tlwiLFxuICBjb25maXJtRGVsZXRlOiBcIuWIoOmZpOiusOW9lT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLkuLvplK7kuI3og73ph43lpI1cIixcbiAgYWRkQ29sdW1uOiBcIua3u+WKoOWIl1wiLFxuICBhZGRSb3c6IFwi5re75Yqg6KGMXCIsXG4gIHJlbW92ZVJvdzogXCLliKDpmaTnrZTmoYhcIixcbiAgZW1wdHlSb3dzVGV4dDogXCLml6DlhoXlrrlcIixcbiAgYWRkUGFuZWw6IFwi5paw5re7XCIsXG4gIHJlbW92ZVBhbmVsOiBcIuWIoOmZpFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi6YCJ6aG5XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi5YiXXCIsXG4gIG1hdHJpeF9yb3c6IFwi6KGMXCIsXG4gIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCLmlofmnKxcIixcbiAgc2F2aW5nRGF0YTogXCLmraPlnKjlsIbnu5Pmnpzkv53lrZjliLDmnI3liqHlmaguLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuWcqOS/neWtmOe7k+aenOi/h+eoi+S4reWPkeeUn+S6humUmeivr++8jOe7k+aenOacquiDveS/neWtmFwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLnu5Pmnpzkv53lrZjmiJDlip8hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLor7fph43or5VcIixcbiAgdGltZXJNaW46IFwi5YiGXCIsXG4gIHRpbWVyU2VjOiBcIuenklwiLFxuICB0aW1lclNwZW50QWxsOiBcIuacrOmhteeUqOaXtiB7MH0g5oC76K6h55So5pe2ezF9IC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi5pys6aG155So5pe2ezB9IC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLmgLvorqHnlKjml7YgezB9IC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIuacrOmhteeUqOaXtiB7MH0g5YWxIHsxfe+8jCDmgLvorqHnlKjml7YgezJ9IOWFsSB7M30gLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLmnKzpobXnlKjml7YgezB9IOWFsSB7MX0gLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuaAu+iuoeeUqOaXtiB7MH0g5YWxIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIua4heeQhlwiLFxuICBjbGVhckNhcHRpb246IFwi5riF6ZmkXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIumAieaLqeaWh+S7tlwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLnp7vpmaTmlofku7ZcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLmmK9cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuWQplwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLliKDpmaTmlofku7Y6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuWIoOmZpOaJgOacieaWh+S7tj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIuagh+mimFwiLFxuICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwi5Y+W5raIXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuehruWumlwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ6aC1jblwiXSA9IHNpbXBsaWZpZWRDaGluZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInpoLWNuXCJdID0gXCLnroDkvZPkuK3mlodcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc3BhbmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2lndWllbnRlXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0YXJcIixcbiAgcHJldmlld1RleHQ6IFwiVmlzdGEgcHJldmlhXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21pZW56YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk90cm8gKGRlc2NyaWJhKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmluZ3Vub1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2Npb25hciB0b2RvXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlZ2lzdHJvIHswfSBkZSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJlc3BvbmRpw7MgYSB7MH0vezF9IHByZWd1bnRhc1wiLFxuICBlbXB0eVN1cnZleTogXCJObyBoYXkgcMOhZ2luYSB2aXNpYmxlIG8gcHJlZ3VudGEgZW4gbGEgZW5jdWVzdGEuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiR3JhY2lhcyBwb3IgY29tcGxldGFyIGxhIGVuY3Vlc3RhIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTnVlc3Ryb3MgcmVnaXN0cm9zIG11ZXN0cmFuIHF1ZSB5YSBoYSBjb21wbGV0YWRvIGVzdGEgZW5jdWVzdGEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTGEgZW5jdWVzdGEgZXN0w6EgY2FyZ2FuZG8uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uZS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvclwiLFxuICByZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciBjb250ZXN0ZSBsYSBwcmVndW50YS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBhbCBtZW5vcyB1bmEgcHJlZ3VudGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUG9yIGZhdm9yIGNvbnRlc3RlIGxhcyBwcmVndW50YXMgZW4gY2FkYSBoaWxlcmEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJMYSBlc3RpbWFjacOzbiBkZWJlIHNlciBudW3DqXJpY2EuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUG9yIGZhdm9yIGVudHJlIHBvciBsbyBtZW5vcyB7MH0gc8OtbWJvbG9zLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBtZW5vcyBkZSB7MH0gc8OtbWJvbG9zLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBtw6FzIGRlIHswfSB5IG1lbm9zIGRlIHsxfSBzw61tYm9sb3MuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUG9yIGZhdm9yIGxsZW5lIHBvciBsbyBtZW5vcyB7MH0gaGlsZXJhcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUG9yIGZhdm9yIHNlbGVjY2lvbmUgcG9yIGxvIG1lbm9zIHswfSB2YXJpYW50ZXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIG5vIG3DoXMgZGUgezB9IHZhcmlhbnRlcy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIkVsICd7MH0nIGRlYmUgZGUgc2VyIGlndWFsIG8gbcOhcyBkZSB7MX0geSBpZ3VhbCBvIG1lbm9zIGRlIHsyfVwiLFxuICBudW1lcmljTWluOiBcIkVsICd7MH0nIGRlYmUgc2VyIGlndWFsIG8gbcOhcyBkZSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJFbCAnezB9JyBkZWJlIHNlciBpZ3VhbCBvIG1lbm9zIGRlIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUG9yIGZhdm9yIGFncmVndWUgdW4gY29ycmVvIGVsZWN0csOzbmljbyB2w6FsaWRvLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMYSBleHByZXNpw7NuOiB7MH0gZGViZXLDrWEgZGV2b2x2ZXIgJ3ZlcmRhZGVybycuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSBzb2xpY2l0dWQgcmVncmVzw7MgZXJyb3IgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJMYSBzb2xpY2l0dWQgcmVncmVzw7MgdmFjw61vIGRlIGRhdGEgbyBsYSBwcm9waWVkYWQgJ3RyYXllY3RvcmlhJyBubyBlcyBjb3JyZWN0YVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkVsIHRhbWHDsW8gZGVsIGFyY2hpdm8gbm8gZGViZSBkZSBleGNlZGVyIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciBhZ3JlZ3VlIGxhIG90cmEgZXN0aW1hY2nDs24uXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJTdSBhcmNoaXZvIHNlIGVzdMOhIHN1YmllbmRvLiBQb3IgZmF2b3IgZXNwZXJlIHVub3Mgc2VndW5kb3MgZSBpbnRlbnRlIGRlIG51ZXZvLlwiLFxuICBsb2FkaW5nRmlsZTogXCJDYXJnYW5kby4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkVsaWphIGFyY2hpdm8ocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5vIHNlIGhhIGVsZWdpZG8gbmluZ8O6biBhcmNoaXZvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiwr9RdWllcmVzIGJvcnJhciBlbCByZWdpc3Rybz9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJFc3RlIHZhbG9yIGRlYmUgc2VyIMO6bmljby5cIixcbiAgYWRkQ29sdW1uOiBcIkHDsWFkaXIgY29sdW1uYVwiLFxuICBhZGRSb3c6IFwiQWdyZWd1ZSB1bmEgaGlsZXJhXCIsXG4gIHJlbW92ZVJvdzogXCJFbGltaW5hciB1bmEgaGlsZXJhXCIsXG4gIGFkZFBhbmVsOiBcIkHDsWFkaXIgbnVldm9cIixcbiAgcmVtb3ZlUGFuZWw6IFwiUmV0aXJlXCIsXG4gIGNob2ljZXNfSXRlbTogXCJhcnTDrWN1bG9cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiSGlsZXJhXCIsXG4gIHNhdmluZ0RhdGE6IFwiTG9zIHJlc3VsdGFkb3Mgc2UgZXN0w6FuIGd1YXJkYW5kbyBlbiBlbCBzZXJ2aWRvci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiTG9zIHJlc3VsdGFkb3Mgc2UgZXN0w6FuIGd1YXJkYW5kbyBlbiBlbCBzZXJ2aWRvci4uLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLCoUxvcyByZXN1bHRhZG9zIHNlIGd1YXJkYXJvbiBjb24gw6l4aXRvIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiSW50w6ludGFsbyBkZSBudWV2by5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkhhcyBnYXN0YWRvIHswfSBlbiBlc3RhIHDDoWdpbmEgeSB7MX0gZW4gdG90YWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlVzdGVkIGhhIHBhc2FkbyB7MH0gZW4gZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkhhcyBnYXN0YWRvIGVuIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiSGFzIGdhc3RhZG8gezB9IGRlIHsxfSBlbiBlc3RhIHDDoWdpbmEgeSB7Mn0gZGUgezN9IGVuIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJIYXMgZ2FzdGFkbyB7MH0gZGUgezF9IGVuIGVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJVc3RlZCBoYSBnYXN0YWRvIHswfSBkZSB7MX0gZW4gdG90YWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJMaW1waWFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkRlc3BlamVuXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkVsaWphIGVsIGFyY2hpdm9cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRWxpbWluYSBlc3RlIGFyY2hpdm9cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJTw61cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsK/RXN0w6FzIHNlZ3VybyBkZSBxdWUgcXVpZXJlcyBlbGltaW5hciBlc3RlIGFyY2hpdm86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIsK/RXN0w6FzIHNlZ3VybyBkZSBxdWUgcXVpZXJlcyBlbGltaW5hciB0b2RvcyBsb3MgYXJjaGl2b3M/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUw610dWxvIGRlIGxhIHByZWd1bnRhXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImVzXCJdID0gc3BhbmlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJlc1wiXSA9IFwiZXNwYcOxb2xcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc3dhaGlsaVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJJbGl5b3Rhbmd1bGlhXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJJZnVhdGF5b1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiS2FtaWxpXCIsXG4gIHByZXZpZXdUZXh0OiBcIkhha2lraVwiLFxuICBlZGl0VGV4dDogXCJIYXJpcmlcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkFuemFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJOeWluZ2luZSAoZWxlemEpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJIYWt1bmFcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiQ2hhZ3VhIFpvdGVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlVrdXJhc2EgezB9IHdhIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVrb2RpIHswfSB5YSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIllhbGl5b2ppYml3YSB7MH0vezF9IG1hc3dhbGlcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiSGFrdW5hIHVrdXJhc2EgdW5hb29uZWthbmEgYXUgc3dhbGkga2F0aWthIHV0YWZpdGkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQXNhbnRpIGt3YSBrdWthbWlsaXNoYSB1dGFmaXRpIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiUmVjb2RpIHpldHUgemluYXR1b255ZXNoYSB0YXlhcmkgdW1la2FtaWxpc2hhIHV0YWZpdGkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiVHVuYWFuZGFhIHV0YWZpdGkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQ2hhZ3VhLi4uXCIsXG4gIHZhbHVlOiBcInRoYW1hbmlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJUYWZhZGhhbGkgamlidSBoaWxpIHN3YWxpLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJUYWZhZGhhbGkgamlidSBzd2FsaSBhbmdhbGF1IG1vamEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVGFmYWRoYWxpIGppYnUgbWFzd2FsaSBrYXRpa2Egc2FmdSB6b3RlLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVGhhbWFuaSBpbmFwYXN3YSBrdXdhIHlhIG5hbWJhcmkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVGFmYWRoYWxpIGluZ2l6YSBhbmdhbGF1ezB9IGh1c2lrYS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJUYWZhZGhhbGkgaW5naXphIGlzaW96aWRpIHswfSBodXNpa2EuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJUYWZhZGhhbGkgaW5naXphIGtpd2FuZ28gemFpZGkgeWEgezB9IG5hIGtpc2ljaG9wdW5ndWEgezF9IGh1c2lrYS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUYWZhZGhhbGkgamF6YSBpc2lvcHVuZ3VhIHswfSBzYWZ1LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJUYWZhZGhhbGkgY2hhZ3VhIGFuZ2FsYXUgezB9IGxhaGFqYS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVGFmYWRoYWxpIGNoYW5ndWEgaXNpb3ppZGkgezB9IGxhaGFqYS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIiAnezB9JyBpbmFwYXN3YSBrdXdhIHNhd2EgYXUgemFpZGkgeWEgezF9IG5hIHNhd2EgYXUgY2hpbmkgeWEgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiICd7MH0naW5hcGFzd2Ega3V3YSBzYXdhIGF1IHphaWRpIHlhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIiAnezB9J2luYXBhc3dhIGt1d2Egc2F3YSBhdSBjaGluaSB5YSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlRhZmFkaGFsaSBpbmdpemEgYW53YW5pIGhhbGFsaSB5YSBiYXJ1YS1wZXBlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVc2VtaTp7MH0gaW5hcGFzd2Ega3VydWRpICdrd2VsaScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJPbWJpIGxpbmEga29zYSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIk9tYmkgbGlsaXJ1ZGlzaGEgZGF0YSB0dXB1IGF1IHRoZSAncGF0aCcgbWFsaSB5YSBuamlhIHNpbyBzYWhpaGlcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJTYWl6aSB5YSBmYWlsaSBoYWlwYXN3aSBrdXppZGkgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVGFmYWRoYWxpIGluZ2l6YSB0aGFtYW5pIG55aW5naW5lLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmFpbGkgeWFrbyBpbmFwYWtpYS5UYWZhZGhhbGkgc3ViaXJpIHNla3VuZGUga2FkaGFhIG5hIHVqYXJpYnUgdGVuYS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiSW5hcGFraWEuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJDaGFndWEgZmFpbGkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkh1amFjaGFndWEgZmFpbGlcIixcbiAgY29uZmlybURlbGV0ZTogXCJKZSEgVW5hdGFrYSBrdWZ1dGEgcmVrb2RpP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoYW1hbmkgaGlpIGluYXBhc3dhIGt1d2EgeWEga2lwZWtlZS5cIixcbiAgYWRkQ29sdW1uOiBcIk9uZ2V6YSBLb2xhbXVcIixcbiAgYWRkUm93OiBcIk9uZ2V6YSBzYWZ1XCIsXG4gIHJlbW92ZVJvdzogXCJUb2FcIixcbiAgYWRkUGFuZWw6IFwiT25nZXphIG1weWFcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVG9hXCIsXG4gIGNob2ljZXNfSXRlbTogXCJraXR1XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sYW11XCIsXG4gIG1hdHJpeF9yb3c6IFwiU2FmdVwiLFxuICBzYXZpbmdEYXRhOiBcIk1hdG9rZW8geWFtZWhpZmFkaGl3YSBrd2Egc2V2YS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiS29zYSBsaW1ldG9rZWEgbmEgaGF0dWt1d2V6YSBrdWhpZmFkaGkgbWF0b2tlby5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiTWF0b2tlbyB5YW1laGlmYWRoaXdhIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiSmFyaWJ1IHRlbmFcIixcbiAgdGltZXJNaW46IFwiZGFraWthXCIsXG4gIHRpbWVyU2VjOiBcInNla3VuZGVcIixcbiAgdGltZXJTcGVudEFsbDogXCJVbWV0dW1pYSB7MH0ga3dlbnllIHVrdXJhc2EgaHV1IG5hIHsxfSBrd2EganVtbGEuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlVtZXR1bWlhIHswfSBrd2VueWUgdWt1cmFzYSBodXUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVW1ldHVtaWEgezB9IGt3YSBqdW1sYS5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3ZW55ZSB1a3VyYXNhIGh1dSB7Mn0gd2EgezN9IGt3YSBqdW1sYS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVW1ldHVtaWEgezB9IHlhIHsxfSBrd2VueWUgdWt1cmFzYSBodXUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVW1ldHVtaWEgezB9IHlhIHsxfSBrd2EganVtbGEuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJTYWZpc2hhXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJPbmRvYVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJDaGFndWEgZmFpbGlcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiT25kb2EgZmFpbGlcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJOZGlvXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJIYXBhbmFcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiSmUhIFVuYSB1aGFraWthIGt1d2EgdW5hdGFrYSBrdW9uZG9hIGZhaWxpIGhpaTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSmUhIFVuYSB1aGFraWthIGt1d2EgdW5hdGFrYSBrdW9uZG9hIGZhaWxpIHpvdGU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLaWNod2EgY2hhIFN3YWxpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInN3XCJdID0gc3dhaGlsaVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJzd1wiXSA9IFwic3dhaGlsaVwiO1xuIiwiLy9DcmVhdGUgYnkgTWF0dGlhcyBBc3BsdW5kXG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiRsO2cmVnw6VlbmRlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJOw6RzdGFcIixcbiAgY29tcGxldGVUZXh0OiBcIkbDpHJkaWdcIixcbiAgcHJldmlld1RleHQ6IFwiRsO2cmhhbmRzdmlzbmluZ1wiLFxuICBlZGl0VGV4dDogXCJSZWRpZ2VyYVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbm5hdCAoYmVza3JpdilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkluZ2VuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlbDpGxqIGFsbGFcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGEgezB9IGF2IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiU3BlbGEgaW4gezB9IGF2IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQmVzdmFyYWRlIHswfSAvIHsxfSBmcsOlZ29yXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRldCBmaW5ucyBpbmdlbiBzeW5saWcgc2lkYSBlbGxlciBmcsOlZ2EgaSBlbmvDpHRlbi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUYWNrIGbDtnIgYXR0IGR1IGdlbm9tZsO2cnQgZW5rw6R0ZW4hIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiVsOlcmEgcmVnaXN0ZXIgdmlzYXIgYXR0IGR1IHJlZGFuIGhhciBzbHV0ZsO2cnQgZGVubmEgdW5kZXJzw7ZrbmluZy5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJFbmvDpHRlbiBsYWRkYXMuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVsOkbGouLi5cIixcbiAgdmFsdWU6IFwidsOkcmRlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ2FuLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWw6RubGlnZW4gc3ZhcmEgcMOlIG1pbnN0IGVuIGZyw6VnYS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6Vnb3JuYSBww6UgYWxsYSByYWRlci5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlbDpHJkZXQgc2thIHZhcmEgbnVtZXJpc2t0LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlZhciB2w6RubGlnIGFuZ2UgbWluc3QgezB9IHRlY2tlbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJBbmdlIGbDpHJyZSDDpG4gezB9IHRlY2tlbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJBbmdlIG1lciDDpG4gezB9IG9jaCBmw6RycmUgw6RuIHsxfSB0ZWNrZW4uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVmFyIHbDpG5saWcgZnlsbCBpIG1pbnN0IHswfSByYWRlci5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogw6V0bWluc3RvbmUgezB9IHZhcmlhbnRlci5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVmFyIHbDpG5saWcgdsOkbGogaW50ZSBmbGVyIMOkbiB7MH0gdmFyaWFudGVyLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWVyIMOkbiB7MX0gc2FtdCBsaWthIG1lZCBlbGxlciBtaW5kcmUgw6RuIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZhciB2w6RubGlnIGFuZ2UgZW4ga29ycmVrdCBlLXBvc3RhZHJlc3MuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlV0dHJ5Y2tldDogezB9IHNrYSByZXR1cm5lcmEgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRsO2cmZyw6VnYW4gcmV0dXJuZXJhZGUgZmVsZXQgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJBbnRpbmdlbiByZXR1cm5lcmFkZSBmw7ZyZnLDpWdhbiBpbmdlbiBkYXRhIGVsbGVyIHPDpSDDpHIgZWdlbnNrYXBlbiAncGF0aCcgaW50ZSBrb3JyZWt0XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmlsc3Rvcmxla2VuIGbDpXIgZWogw7Z2ZXJzdGlnYSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBhbmdlIGRldCBhbmRyYSB2w6RyZGV0LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRGluIGZpbCBsYWRkYXMgdXBwLiBWYXIgdsOkbmxpZyB2w6RudGEgbsOlZ3JhIHNla3VuZGVyIG9jaCBmw7Zyc8O2ayBzZWRhbiBpZ2VuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMw6RzZXIgaW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWw6RsaiBmaWwgKGVyKSAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkluZ2VuIGZpbCB2YWxkXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVmlsbCBkdSByYWRlcmEgcG9zdGVuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRldHRhIHbDpHJkZSBza2EgdmFyYSB1bmlrdC5cIixcbiAgYWRkQ29sdW1uOiBcIkzDpGdnIHRpbGwga29sdW1uXCIsXG4gIGFkZFJvdzogXCJMw6RnZyB0aWxsIHJhZFwiLFxuICByZW1vdmVSb3c6IFwiVGEgYm9ydFwiLFxuICBhZGRQYW5lbDogXCJMw6RnZyB0aWxsIG55XCIsXG4gIHJlbW92ZVBhbmVsOiBcIlRhIGJvcnRcIixcbiAgY2hvaWNlc19JdGVtOiBcIkFydGlrZWxcIixcbiAgbWF0cml4X2NvbHVtbjogXCJLb2x1bW5cIixcbiAgbWF0cml4X3JvdzogXCJSYWRcIixcbiAgc2F2aW5nRGF0YTogXCJSZXN1bHRhdGVuIHNwYXJhcyBww6Ugc2VydmVybiAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkV0dCBmZWwgaW50csOkZmZhZGUgb2NoIHZpIGt1bmRlIGludGUgc3BhcmEgcmVzdWx0YXRlbi5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmVzdWx0YXRlbiBzcGFyYWRlcyBmcmFtZ8OlbmdzcmlrdCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkbDtnJzw7ZrIGlnZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IHDDpSBkZW4gaMOkciBzaWRhbiBvY2ggezF9IHRvdGFsdC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gcMOlIGRlbiBow6RyIHNpZGFuLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IHRvdGFsdC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkR1IGhhciBzcGVuZGVyYXQgezB9IGF2IHsxfSBww6UgZGVuIGjDpHIgc2lkYW4gb2NoIHsyfSBhdiB7M30gdG90YWx0LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBhdiB7MX0gcMOlIGRlbiBow6RyIHNpZGFuLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IGF2IHsxfSB0b3RhbHQuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJSZW5hXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJLbGFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlbDpGxqIEZJTFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJUYSBib3J0IGRlbiBow6RyIGZpbGVuXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSmFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5lalwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCB0YSBib3J0IGRlbiBow6RyIGZpbGVuOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCB0YSBib3J0IGFsbGEgZmlsZXI/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJGcsOlZ2V0aXRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJzdlwiXSA9IHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wic3ZcIl0gPSBcInN2ZW5za2FcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdGFqaWtTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0JHQvtC30LPQsNGI0YJcIixcbiAgcGFnZU5leHRUZXh0OiBcItCe0Y/QvdC00LBcIixcbiAgY29tcGxldGVUZXh0OiBcItCY0rfRgNC+INGI0YPQtFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J7Sk9C+0LdcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQlNC40LPQsNGAICjQu9GD0YLRhNCw0L0g0YLQsNCy0YHQuNGEINC60YPQvdC10LQpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC1XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItKy0LDQvNCw0YDQviDQuNC90YLQuNGF0L7QsSDQutCw0YDQtNCw0L1cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0LDSs9C40YTQsNC4IHswfSDQsNC3IHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCLQr9Cz0L7QvSDRgdCw0LLQvtC7INCy0YPSt9GD0LQg0L3QsNC00L7RgNCw0LQuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0KLQsNGI0LDQutC60YPRgCDQsdCw0YDQvtC4INC/0YPRgCDQutCw0YDQtNCw0L3QuCDRgdCw0LLQvtC70L3QvtC80LAhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQqNGD0LzQviDQsNC70LvQsNC60LDQuSDQuNC9INC/0YPRgNGB0LjRiNGA0L4g0LDQvdK30L7QvCDQtNC+0LTQsNC10LQuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JHQvtGA0LPQuNGA06Mg0LDQtyDRgdC10YDQstC10YAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JjQvdGC0LjRhdC+0LEg0LrQsNGA0LTQsNC9Li4uXCIsXG4gIHZhbHVlOiBcItKb0LjQvNC80LDRglwiLFxuICByZXF1aXJlZEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQsdCwINGB0LDQstC+0Lsg0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQmNC70YLQuNC80L7RgSwg0LDSm9Cw0LvQsNC9INCx0LAg0Y/QuiDRgdCw0LLQvtC7INK30LDQstC+0LEg0LTQuNKz0LXQtC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LHQsCDSs9Cw0LzQsNC4INGB0LDQstC+0LvSs9C+INC00LDRgCDSs9Cw0LzQsNC4INGB0LDRgtGA0rPQviDSt9Cw0LLQvtCxINC00LjSs9C10LQuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLSttCw0LLQvtCxINCx0L7Rj9C0INGA0LDSm9Cw0Lwg0LHQvtGI0LDQtC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQmNC70YLQuNC80L7RgSwg0LDQtyB7MH0g0LfQuNGR0LTRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCY0LvRgtC40LzQvtGBLCDQsNC3IHswfSDQutCw0LzRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCY0LvRgtC40LzQvtGBLCDQsNC3IHswfSDQt9C40ZHQtNGC0LDRgCDQstCwINCw0LcgezF9INC60LDQvNGC0LDRgCDRgNCw0LzQtyDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINC90LAg0LrQsNC80YLQsNGAINCw0LcgezB9INGB0LDRgtGAINC/0YPRgCDQutGD0L3QtdC0LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LDSm9Cw0LvQsNC9IHswfSDQstCw0YDQuNCw0L3RgiDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0L3QsCDQt9C40ZHQtNGC0LDRgCDQsNC3IHswfSDQstCw0YDQuNCw0L3RgiDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0LlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0LHQvtGP0LQg0L3QsCDQutCw0Lwg0LDQtyB7MX0g0LLQsCDQvdCwINCx0LjRgdGR0YAg0LDQtyB7Mn0g0LHQvtGI0LDQtFwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINCx0L7Rj9C0INC90LAg0LrQsNC8INCw0LcgezF9INCx0L7RiNCw0LRcIixcbiAgbnVtZXJpY01heDogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC30LjRkdC0INCw0LcgezF9INCx0L7RiNCw0LRcIixcbiAgaW52YWxpZEVtYWlsOiBcItCY0LvRgtC40LzQvtGBLCDQv9C+0YfRgtCw0Lgg0Y3Qu9C10LrRgtGA0L7QvdC40Lgg0LLQvtKb0LXQuNGA0L4g0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQmNGE0L7QtNCw0LggezB9INCx0L7Rj9C0ICd0cnVlJyDQsdCw0YDQs9Cw0YDQtNC+0L3QsNC0LlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JTQsNGA0YXQvtGB0YIg0YXQsNGC0L7Qs9OjINCx0L7Qt9Cz0LDRgNC00L7QvdC0ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi0rbQsNCy0L7QsSDQsdCwINC00LDRgNGF0L7RgdGCINGF0L7Qu9OjINC+0LzQsNC0INGRINGF0L7RgdC40Y/RgtC4ICdwYXRoJyDQvdC+0LTRg9GA0YPRgdGCINC80YPQsNC50Y/QvSDQutCw0YDQtNCwINGI0YPQtNCw0LDRgdGCXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0JDQvdC00L7Qt9Cw0Lgg0YTQsNC50Lsg0LHQvtGP0LQg0L3QsCDQutCw0LvQvtC9INCw0LcgezB9INCx0L7RiNCw0LQuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LHQsCDQvNCw0LnQtNC+0L3QuCAn0JTQuNCz0LDRgCcg0LTQvtC00LDSs9C+0YDQviDQstC+0YDQuNC0INC60YPQvdC10LRcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCk0LDQudC70Lgg0YjRg9C80L4g0LHQvtGAINGI0YPQtNCwINC40YHRgtC+0LTQsNCw0YHRgi4g0K/QutGH0LDQvdC0INGB0L7QvdC40Y8g0LjQvdGC0LjQt9C+0YAg0YjQsNCy0LXQtCDQstCwINCx0L7RgNC4INC00LjQs9Cw0YAg0LrTr9GI0LjRiCDQutGD0L3QtdC0LlwiLFxuICBsb2FkaW5nRmlsZTogXCLQkdC+0YDQutGD0L3Toy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCk0LDQudC7KNKz0L4pLdGA0L4g0LjQvdGC0LjRhdC+0LEg0LrRg9C90LXQtC4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcItCo0YPQvNC+INC80YPRgtC80LDQuNC9INKz0LDRgdGC0LXQtCwg0LrQuCDQvNC10YXQvtKz0LXQtCDQstC+0YDQuNC00YDQviDRgtC+0LfQsCDQutGD0L3QtdC0P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCY0L0g0LDRgNC30LjRiCDQsdC+0Y/QtCDQsdC10L3QsNC30LjRgCDQsdC+0YjQsNC0LlwiLFxuICBhZGRDb2x1bW46IFwi0JjQu9C+0LLQsNC4INGB0YPRgtGD0L1cIixcbiAgYWRkUm93OiBcItCY0LvQvtCy0LDQuCDRgdCw0YLRgFwiLFxuICByZW1vdmVSb3c6IFwi0J3QtdGB0YIg0LrQsNGA0LTQsNC9XCIsXG4gIGFkZFBhbmVsOiBcItCY0LvQvtCy0LAg0LrQsNGA0LTQsNC9XCIsXG4gIHJlbW92ZVBhbmVsOiBcItCd0LXRgdGCINC60LDRgNC00LDQvVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0JLQsNGA0LjQsNC90YJcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQodGD0YLRg9C9XCIsXG4gIG1hdHJpeF9yb3c6IFwi0KHQsNGC0YBcIixcbiAgc2F2aW5nRGF0YTogXCLQndCw0YLQuNK30LAg0LHQsCDRgdC10YDQstC10YAg0YHQsNCx0YIg0YjRg9C00LAg0LjRgdGC0L7QtNCw0LDQvdC0Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLQpdCw0YLQvtCz06Mg0LHQsCDQsNC80LDQuyDQvtC80LDQtCwg0L3QsNGC0LjSt9CwINGB0LDQsdGCINC90LDRiNGD0LQuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCd0LDRgtC40rfQsCDQsdC+0LzRg9Cy0LDRhNGE0LDQutC40Y/RgiDRgdCw0LHRgiDRiNGD0LQhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQkdC+0YDQuCDQtNC40LPQsNGAINC606/RiNC40Ygg0LrQsNGA0LTQsNC90LRcIixcbiAgdGltZXJNaW46IFwi0LTQsNKbXCIsXG4gIHRpbWVyU2VjOiBcItGB0L7QvVwiLFxuICB0aW1lclNwZW50QWxsOiBcItCo0YPQvNC+IHswfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0LLQsCB7MX0g0LTQsNGAINGD0LzRg9C8INGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0KjRg9C80L4gezB9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0KjRg9C80L4gezB9INC00LDRgCDQuNC9INGC0LXRgdGCINGB0LDRgNGEINC90LDQvNGD0LTQtdC0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDQstCwIHsyfSDQsNC3IHszfSDQtNCw0YAg0YPQvNGD0Lwg0YHQsNGA0YQg0LrQsNGA0LTQtdC0INC00LDRgCDQtNC+0YXQuNC70Lgg0LjQvSDRgtC10YHRgi5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDSs9Cw0LzQsNC4INGC0LXRgdGCINGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCi0L7Qt9CwINC60LDRgNC00LDQvVwiLFxuICBjbGVhckNhcHRpb246IFwi0KLQvtC30LAg0LrQsNGA0LTQsNC9XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCk0LDQudC70YDQviDQvdC10YHRgiDQutCw0YDQtNCw0L1cIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0Z1wiXSA9IHRhamlrU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInRnXCJdID0gXCLRgtC+0rfQuNC606NcIjtcbiIsIi8vQ3JlYXRlZCBieSBQYWRldCBUYXdlZWt1bmthblxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB0aGFpU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuC4geC5iOC4reC4meC4q+C4meC5ieC4slwiLFxuICBwYWdlTmV4dFRleHQ6IFwi4LiW4Lix4LiU4LmE4LibXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLguKrguLPguYDguKPguYfguIhcIixcbiAgcHJldmlld1RleHQ6IFwi4LiU4Li54LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiHXCIsXG4gIGVkaXRUZXh0OiBcIuC5geC4geC5ieC5hOC4glwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi4LmA4Lij4Li04LmI4LihXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi4Lit4Li34LmI4LiZ4LmGICjguYLguJvguKPguJTguKPguLDguJrguLgpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLguYTguKHguYjguKHguLVcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi4LmA4Lil4Li34Lit4LiB4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIHByb2dyZXNzVGV4dDogXCLguKvguJnguYnguLLguJfguLXguYggezB9IOC4iOC4suC4gSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIuC4o+C4suC4ouC4geC4suC4o+C4l+C4teC5iCB7MH0g4LiI4Liy4LiBIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi4LiE4Liz4LiV4Lit4Lia4LiX4Li14LmIIHswfS97MX0g4LiI4Liz4LiZ4Lin4LiZ4LiE4Liz4LiW4Liy4LihXCIsXG4gIGVtcHR5U3VydmV5OiBcIuC5hOC4oeC5iOC4oeC4teC4q+C4meC5ieC4suC5gOC4nuC4iOC4l+C4teC5iOC4oeC4reC4h+C5gOC4q+C5h+C4mSDguKvguKPguLfguK0g4LiE4Liz4LiW4Liy4Lih4LmD4LiZIHN1cnZleSDguJnguLXguYlcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLguILguK3guJrguITguLjguJPguJfguLXguYjguJfguLMgc3VydmV5IOC4iOC4meC5gOC4quC4o+C5h+C4iFwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi4Lij4Liy4Lii4LiB4Liy4Lij4LiC4Lit4LiH4LmA4Lij4Liy4LmB4Liq4LiU4LiH4Lin4LmI4Liy4LiE4Li44LiT4LmE4LiU4LmJ4LiX4LizIHN1cnZleSDguYDguKrguKPguYfguIjguYDguKPguLXguKLguJrguKPguYnguK3guKLguYHguKXguYnguKdcIixcbiAgbG9hZGluZ1N1cnZleTogXCLguIHguLPguKXguLHguIfguYLguKvguKXguJQgU3VydmV5Li4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuC5gOC4peC4t+C4reC4gS4uLlwiLFxuICB2YWx1ZTogXCLguILguYnguK3guKHguLnguKVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLguIHguKPguLjguJPguLLguJXguK3guJrguITguLPguJbguLLguKFcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi4LiB4Lij4Li44LiT4Liy4LiV4Lit4Lia4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz4Lir4LiZ4Li24LmI4LiH4LiE4Liz4LiW4Liy4LihXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LiV4Lit4Lia4LiE4Liz4LiW4Liy4Lih4LmD4LiZ4LiX4Li44LiB4LmG4LmB4LiW4LinXCIsXG4gIG51bWVyaWNFcnJvcjogXCLguILguYnguK3guKHguLnguKXguJfguLXguYjguYPguKrguYjguJXguYnguK3guIfguYDguJvguYfguJnguJXguLHguKfguYDguKXguIJcIixcbiAgdGV4dE1pbkxlbmd0aDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguILguLHguYnguJnguJXguYjguLPguIjguLPguJnguKfguJkgezB9IOC4leC4seC4p+C4reC4seC4geC4qeC4o1wiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC5hOC4oeC5iOC5gOC4geC4tOC4meC4iOC4s+C4meC4p+C4mSB7MH0g4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz4LiI4Liz4LiZ4Lin4LiZIHswfSDguYHguKXguLDguYTguKHguYjguYDguIHguLTguJnguIjguLPguJnguKfguJkgezF9IOC4leC4seC4p+C4reC4seC4geC4qeC4o1wiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LmB4LiW4LinXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC5gOC4peC4t+C4reC4geC4reC4ouC5iOC4suC4h+C4meC5ieC4reC4oiB7MH0g4Lij4Liy4Lii4LiB4Liy4LijXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC5gOC4peC4t+C4reC4geC5hOC4oeC5iOC5gOC4geC4tOC4mSB7MH0g4Lij4Liy4Lii4LiB4Liy4LijXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfScg4LiV4LmJ4Lit4LiH4Lih4Liy4LiB4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsxfSDguYHguKXguLDguJnguYnguK3guKLguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg4LiV4LmJ4Lit4LiH4Lih4Liy4LiB4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIOC4meC5ieC4reC4ouC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4reC4teC5gOC4oeC4peC5jOC5geC4reC4lOC5gOC4lOC4o+C4quC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJUaGUgZXhwcmVzc2lvbjogezB9IOC4leC5ieC4reC4h+C4o+C4teC5gOC4l+C4tOC4o+C5jOC4mSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLguKPguLXguYDguITguKfguKrguKPguLXguYDguJfguLTguKPguYzguJkgZXJyb3IgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLguKPguLXguYDguITguKfguKrguKPguLXguYDguJfguLTguKPguYzguJnguILguYnguK3guKHguLnguKXguKfguYjguLLguIfguYDguJvguKXguYjguLIg4Lir4Lij4Li34LitICdwYXRoJyBwcm9wZXJ0eSDguYTguKHguYjguJbguLnguIHguJXguYnguK3guIdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLguILguJnguLLguJTguYTguJ/guKXguYzguJXguYnguK3guIfguYTguKHguYjguYDguIHguLTguJkgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LiE4LmI4Liy4Lit4Li34LmI4LiZXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLguYTguJ/guKXguYzguILguK3guIfguITguLjguJPguIHguLPguKXguLHguIfguK3guLHguJ7guYLguKvguKXguJTguK3guKLguLnguYguIOC4geC4o+C4uOC4k+C4suC4o+C4reC4quC4seC4geC4hOC4o+C4ueC5iOC5geC4peC5ieC4p+C4l+C4s+C4geC4suC4o+C4peC4reC4h+C4reC4teC4geC4hOC4o+C4seC5ieC4h1wiLFxuICBsb2FkaW5nRmlsZTogXCLguIHguLPguKXguLHguIfguYLguKvguKXguJQuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLguYDguKXguLfguK3guIHguYTguJ/guKXguYwuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIuC5hOC4oeC5iOC5hOC4n+C4peC5jOC4l+C4teC5iOC5gOC4peC4t+C4reC4gVwiLFxuICBjb25maXJtRGVsZXRlOiBcIuC4hOC4uOC4k+C4leC5ieC4reC4h+C4geC4suC4o+C4peC4muC4o+C4suC4ouC4geC4suC4o+C4meC4teC5ieC4iOC4o+C4tOC4h+C4q+C4o+C4t+C4reC5hOC4oeC5iD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLguILguYnguK3guKHguLnguKXguJnguLXguYnguJXguYnguK3guIfguYDguJvguYfguJkgdW5pcXVlLlwiLFxuICBhZGRDb2x1bW46IFwi4LmA4Lie4Li04LmI4Lih4LiE4Lit4Lil4Lix4Lih4LiZ4LmMXCIsXG4gIGFkZFJvdzogXCLguYDguJ7guLTguYjguKHguYHguJbguKdcIixcbiAgcmVtb3ZlUm93OiBcIuC4peC4mlwiLFxuICBhZGRQYW5lbDogXCLguYDguJ7guLTguYjguKFcIixcbiAgcmVtb3ZlUGFuZWw6IFwi4Lil4LiaXCIsXG4gIGNob2ljZXNfSXRlbTogXCLguIrguLTguYnguJlcIixcbiAgbWF0cml4X2NvbHVtbjogXCLguITguK3guKXguLHguKHguJnguYxcIixcbiAgbWF0cml4X3JvdzogXCLguYHguJbguKdcIixcbiAgc2F2aW5nRGF0YTogXCLguJzguKXguKXguLHguJ7guJfguYzguIHguLPguKXguLHguIfguJrguLHguJnguJfguLbguIHguKXguIfguJfguLXguYjguYDguIvguLTguKPguYzguJ/guYDguKfguK3guKPguYwuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuC4oeC4teC4hOC4p+C4suC4oeC4nOC4tOC4lOC4nuC4peC4suC4lOC5gOC4geC4tOC4lOC4guC4tuC5ieC4meC4quC5iOC4h+C4nOC4peC5g+C4q+C5ieC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC4muC4seC4meC4l+C4tuC4geC4nOC4peC5hOC4lOC5iVwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLguJrguLHguJnguJfguLbguIHguKrguLPguYDguKPguYfguIjguYHguKXguYnguKdcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIuC4o+C4muC4geC4p+C4meC4peC4reC4h+C4reC4teC4geC4hOC4o+C4seC5ieC4h1wiLFxuICB0aW1lck1pbjogXCLguJnguLLguJfguLVcIixcbiAgdGltZXJTZWM6IFwi4Lin4Li04LiZ4Liy4LiX4Li1XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguJrguJnguKvguJnguYnguLLguJnguLXguYnguYHguKXguLAgezF9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICB0aW1lclNwZW50UGFnZTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4muC4meC4q+C4meC5ieC4suC4meC4teC5iVwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguILguK3guIcgezF9IOC4muC4meC4q+C4meC5ieC4suC4meC4teC5ieC5geC4peC4sCB7Mn0g4LiC4Lit4LiHIHszfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguILguK3guIcgezF9IOC4muC4meC4q+C4meC5ieC4suC4meC4teC5iVwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4LiC4Lit4LiHIHsxfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgY2xlYW5DYXB0aW9uOiBcIuC4hOC4peC4teC4mVwiLFxuICBjbGVhckNhcHRpb246IFwi4LmA4LiE4Lil4Li14Lii4Lij4LmMXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIuC5gOC4peC4t+C4reC4geC5hOC4n+C4peC5jFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLguJnguLPguYTguJ/guKXguYzguJnguLXguYnguK3guK3guIFcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLguYPguIrguYhcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIuC5hOC4oeC5iOC5g+C4iuC5iFwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLguITguLjguJPguYHguJnguYjguYPguIjguJfguLXguYjguIjguLDguJnguLPguYTguJ/guKXguYzguJnguLXguYnguK3guK3guIHguYPguIrguYjguKvguKPguLfguK3guYTguKHguYg6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuC4hOC4uOC4k+C5geC4meC5iOC5g+C4iOC4l+C4teC5iOC4iOC4sOC4meC4s+C5hOC4n+C4peC5jOC4l+C4seC5ieC4h+C4q+C4oeC4lOC4reC4reC4geC5g+C4iuC5iOC4q+C4o+C4t+C4reC5hOC4oeC5iFwiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi4LiK4Li34LmI4Lit4LiE4Liz4LiW4Liy4LihXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInRoXCJdID0gdGhhaVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ0aFwiXSA9IFwi4LmE4LiX4LiiXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHRyYWRpdGlvbmFsQ2hpbmVzZVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLkuIrkuIDpoIFcIixcbiAgcGFnZU5leHRUZXh0OiBcIuS4i+S4gOmggVwiLFxuICBjb21wbGV0ZVRleHQ6IFwi5o+Q5Lqk5ZWP5Y23XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi5aGr5a+r5YW25LuW562U5qGIXCIsXG4gIHByb2dyZXNzVGV4dDogXCLnrKwgezB9IOmggSwg5YWxIHsxfSDpoIFcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi5ZWP5Y235Lit5rKS5pyJ5ZWP6aGM5oiW6aCB6Z2iXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi5oSf6Kyd5oKo55qE5Y+D6IiHIVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIuWVj+WNt+i8ieWFpeS4rS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLoq4vpgbjmk4cuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLoq4vloavlr6vmraTllY/poYxcIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLoq4vloavlr6vmiYDmnInooYzkuK3llY/poYxcIixcbiAgbnVtZXJpY0Vycm9yOiBcIuetlOahiOW/hemgiOaYr+WAi+aVuOWtl1wiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuetlOahiOmVt+W6puiHs+WwkSB7MH0g5YCL5a2X5YWDXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi562U5qGI6ZW35bqm5LiN6IO96LaF6YGOIHswfSDlgIvlrZflhYNcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLnrZTmoYjplbfluqblv4XpoIjlnKggezB9IC0gezF9IOWAi+Wtl+WFg+S5i+mWk1wiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuacgOWwkemcgOimgeWhq+WvqyB7MH0g6KGM562U5qGIXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuacgOWwkemcgOimgemBuOaThyB7MH0g6aCF562U5qGIXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuacgOWkmuWPquiDvemBuOaThyB7MH0g6aCF562U5qGIXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwi562U5qGIICd7MH0nIOW/hemgiOWkp+aWvOetieaWvCB7MX0g5LiU5bCP5pa8562J5pa8IHsyfVwiLFxuICBudW1lcmljTWluOiBcIuetlOahiCAnezB9JyDlv4XpoIjlpKfmlrznrYnmlrwgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwi562U5qGIICd7MH0nIOW/hemgiOWwj+aWvOetieaWvCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuiri+i8uOWFpeacieaViOeahCBFbWFpbCDlnLDlnYBcIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIui8ieWFpemBuOmgheaZgueZvOeUn+mMr+iqpCAnezB9JzogezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCLmnKrog73ovInlhaXmnInmlYjnmoTpgbjpoIXmiJboq4vmsYLlj4Pmlbjot6/lvpHmnInoqqRcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLmlofku7blpKflsI/kuI3og73otoXpgY4gezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLoq4vlrozmiJDlhbbku5bllY/poYxcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLmlofku7bkuIrlgrPkuK0uLi4g6KuL6ICQ5b+D562J5b6F5bm+56eS5b6M6YeN6KmmXCIsXG4gIGFkZFJvdzogXCLmt7vliqDnrZTmoYhcIixcbiAgcmVtb3ZlUm93OiBcIuWIqumZpOetlOahiFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi6YG46aCFXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi5YiXXCIsXG4gIG1hdHJpeF9yb3c6IFwi6KGMXCIsXG4gIHNhdmluZ0RhdGE6IFwi5q2j5Zyo5bCH57WQ5p6c5L+d5a2Y5Yiw5pyN5YuZ5ZmoLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLlnKjkv53lrZjntZDmnpzpgY7nqIvkuK3nmbznlJ/kuobpjK/oqqTvvIzntZDmnpzmnKrog73kv53lrZhcIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi57WQ5p6c5L+d5a2Y5oiQ5YqfIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi6KuL6YeN6KmmXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiemgtdHdcIl0gPSB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiemgtdHdcIl0gPSBcIue5gemrlOS4reaWh1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB0dXJraXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkdlcmlcIixcbiAgcGFnZU5leHRUZXh0OiBcIsSwbGVyaVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQW5rZXRpIFRhbWFtbGFcIixcbiAgcHJldmlld1RleHQ6IFwiw5ZuIGl6bGVtZVwiLFxuICBlZGl0VGV4dDogXCJEw7x6ZW5sZVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQmHFn2xhdFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkRpxJ9lciAoYcOnxLFrbGF5xLFuxLF6KVwiLFxuICBub25lSXRlbVRleHQ6IFwiWW9rXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkhlcHNpbmkgc2XDp1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2F5ZmEgezB9IC8gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJLYXnEsXQgezB9IC8gezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJTb3J1bGFyxLEgY2V2YXBsYWTEsSB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiQW5rZXR0ZSBnw7Zyw7xudMO8bGVuZWNlayBzYXlmYSB5YSBkYSBzb3J1IG1ldmN1dCBkZcSfaWwuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQW5rZXRpbWl6aSB0YW1hbWxhZMSxxJ/EsW7EsXogacOnaW4gdGXFn2Vra8O8ciBlZGVyaXouXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJLYXnEsXRsYXLEsW3EsXosIGJ1IGFua2V0aSB6YXRlbiB0YW1hbWxhZMSxxJ/EsW7EsXrEsSBnw7ZzdGVyaXlvci5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJBbmtldCBzdW51Y3VkYW4gecO8a2xlbml5b3IgLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlNlw6dpbml6IC4uLlwiLFxuICB2YWx1ZTogXCJkZcSfZXJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIHNvcnV5YSBjZXZhcCB2ZXJpbml6XCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkzDvHRmZW4gZW4gYXogYmlyIHNvcnV5dSB5YW7EsXRsYXnEsW4uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiTMO8dGZlbiB0w7xtIHNhdMSxcmxhcmRha2kgc29ydWxhcsSxIGNldmFwbGF5xLFuxLF6LlwiLFxuICBudW1lcmljRXJyb3I6IFwiR2lyaWxlbiBkZcSfZXIgbnVtZXJpayBvbG1hbMSxZMSxclwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkVuIGF6IHswfSBzZW1ib2wgZ2lyaW5pei5cIixcbiAgdGV4dE1heExlbmd0aDogXCJMw7x0ZmVuIHswfSBrYXJha3RlcmRlbiBheiBnaXJpbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJMw7x0ZmVuIHswfSDigJlkZW4gZmF6bGEgdmUgezF9IOKAmWRlbiBheiBrYXJha3RlciBnaXJpbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJMw7x0ZmVuIGVuIGF6IHswfSBzYXTEsXLEsSBkb2xkdXJ1bi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiTMO8dGZlbiBlbiBheiB7MH0gc2XDp2VuZcSfaSBzZcOnaW5pei5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTMO8dGZlbiB7MH0gYWRldHRlbiBmYXpsYSBzZcOnbWV5aW5pei5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB2ZXlhIGLDvHnDvGsgb2xtYWzEsWTEsXJcIixcbiAgbnVtZXJpY01heDogXCInezB9JyBkZcSfZXJpIHsxfSBkZcSfZXJpbmUgZcWfaXQgeWEgZGEga8O8w6fDvGsgb2xtYWzEsWTEsXIuXCIsXG4gIGludmFsaWRFbWFpbDogXCJMw7x0ZmVuIGdlw6dlcmxpIGJpciBlcG9zdGEgYWRyZXNpIGdpcmluaXouXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIsSwZmFkZTogezB9ICd0cnVlJyBkw7ZuZMO8cm1lbGlkaXIuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJUYWxlYmkgxZ91IGhhdGF5xLEgZMO2bmTDvCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlRhbGVwIGhlcmhhbmdpIGJpciB2ZXJpIGTDtm5tZWRpIHlhIGRhICdwYXRoJyDDtnplbGxpxJ9pIGhhdGFsxLEuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRG9zeWEgYm95dXR1IHswfSBkZcSfZXJpbmkgZ2XDp2VtZXouXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIGRpxJ9lciBkZcSfZXJsZXJpIGdpcmluaXouXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJEb3N5YW7EsXogecO8a2xlbml5b3IuIEzDnHRmZW4gYmlya2HDpyBzYW5peWUgYmVrbGV5aW4gdmUgdGVrcmFyIGRlbmV5aW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIlnDvGtsZW5peW9yLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiRG9zeWFsYXLEsSBzZcOnaW4gLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJEb3N5YSBzZcOnaWxpIGRlxJ9pbFwiLFxuICBjb25maXJtRGVsZXRlOiBcIktheWTEsSBzaWxtZWsgaXN0aXlvciBtdXN1bnV6P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkJ1IGRlxJ9lciBiZW56ZXJzaXogb2xtYWzEsWTEsXIuXCIsXG4gIGFkZENvbHVtbjogXCJTw7x0dW4gZWtsZXlpblwiLFxuICBhZGRSb3c6IFwiU2F0xLFyIEVrbGVcIixcbiAgcmVtb3ZlUm93OiBcIkthbGTEsXJcIixcbiAgYWRkUGFuZWw6IFwiWWVuaSBla2xlXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkthbGTEsXJtYWtcIixcbiAgY2hvaWNlc19JdGVtOiBcImXFn3lhXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU8O8dHVuXCIsXG4gIG1hdHJpeF9yb3c6IFwiS8O8cmVrIMOnZWttZWtcIixcbiAgc2F2aW5nRGF0YTogXCJTb251w6dsYXIgc3VudWN1eWEga2F5ZGVkaWxpeW9yIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQmlyIGhhdGEgb2x1xZ90dSB2ZSBzb251w6dsYXLEsSBrYXlkZWRlbWVkaWsuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlNvbnXDp2xhciBiYcWfYXLEsXlsYSBrYXlkZWRpbGRpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiVGVrcmFyIGRlbmV5aW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNhbml5ZVwiLFxuICB0aW1lclNwZW50QWxsOiBcIkJ1IHNheWZhZGEgezB9IHZlIHRvcGxhbWRhIHsxfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkJ1IHNheWZheWEgezB9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJUb3BsYW1kYSB7MH0gaGFyY2FkxLFuxLF6LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiQnUgc2F5ZmF5YSB7MH0gLyB7MX0gdmUgdG9wbGFtZGEgezJ9IC8gezN9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiQnUgc2F5ZmF5YSB7MH0gLyB7MX0gaGFyY2FkxLFuxLF6LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlRvcGxhbWRhIHswfSAvIHsxfSBoYXJjYWTEsW7EsXouXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJUZW1pelwiLFxuICBjbGVhckNhcHRpb246IFwiQcOnxLFrXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkRvc3lhIHNlw6dpblwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJCdSBkb3N5YXnEsSBrYWxkxLFyXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiRXZldFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiSGF5xLFyXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJ1IGRvc3lhecSxIGthbGTEsXJtYWsgaXN0ZWRpxJ9pbml6ZGVuIGVtaW4gbWlzaW5pejogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiVMO8bSBkb3N5YWxhcsSxIGthbGTEsXJtYWsgaXN0ZWRpxJ9pbml6ZGVuIGVtaW4gbWlzaW5pej9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNvcnUgYmHFn2zEscSfxLFcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widHJcIl0gPSB0dXJraXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInRyXCJdID0gXCJ0w7xya8OnZVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0JTQsNC70ZZcIixcbiAgY29tcGxldGVUZXh0OiBcItCX0LDQstC10YDRiNC40YLQuFwiLFxuICBwcmV2aWV3VGV4dDogXCLQn9C+0L/QtdGA0LXQtNC90ZbQuSDQv9C10YDQtdCz0LvRj9C0XCIsXG4gIGVkaXRUZXh0OiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQn9C+0YfQsNGC0LhcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQhtC90YjQtSAo0LHRg9C00Ywg0LvQsNGB0LrQsCwg0L7Qv9C40YjRltGC0YwpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQltC+0LTQtdC9XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCS0LjQsdGA0LDRgtC4INCy0YHQtVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi0KHRgtC+0YDRltC90LrQsCB7MH0g0LcgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLQl9Cw0L/QuNGBIHswfSDRltC3IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0JLRltC00L/QvtCy0ZbQu9C4INC90LAgezB9L3sxfSDQv9C40YLQsNC90YxcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdC80LDRlCDQttC+0LTQvdC+0LPQviDQv9C40YLQsNC90L3Rjy5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQlNGP0LrRg9GU0LzQviDQktCw0Lwg0LfQsCDQt9Cw0L/QvtCy0L3QtdC90L3RjyDQsNC90LrQtdGC0LghXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQktC4INCy0LbQtSDQv9GA0L7RhdC+0LTQuNC70Lgg0YbQtSDQvtC/0LjRgtGD0LLQsNC90L3Rjy5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0LLQsNC90YLQsNC20LXQvdC90Y8g0L7Qv9C40YLRg9Cy0LDQvdC90Y8uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JLQuNCx0YDQsNGC0LguLi5cIixcbiAgdmFsdWU6IFwi0LfQvdCw0YfQtdC90L3Rj1wiLFxuICByZXF1aXJlZEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjCDRhdC+0YfQsCDQsSDQvdCwINC+0LTQvdC1INC/0LjRgtCw0L3QvdGPLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMINC90LAg0L/QuNGC0LDQvdC90Y8g0LIg0LrQvtC20L3QvtC80YMg0YDRj9C00LrRgy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCS0ZbQtNC/0L7QstGW0LTRjCDQv9C+0LLQuNC90L3QsCDQsdGD0YLQuCDRh9C40YHQu9C+0LwuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQsdGW0LvRjNGI0LUgezB9INGB0LjQvNCy0L7Qu9GW0LIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQvNC10L3RiNC1IHswfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LHRltC70YzRiNC1IHswfSDQuCDQvNC10L3RiNC1IHsxfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC30LDQv9C+0LLQvdGW0YLRjCDQvdC1INC80LXQvdGI0LUgezB9INGA0Y/QtNC60ZbQsi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDRhdC+0YfQsCDQsSB7MH0g0LLQsNGA0ZbQsNC90YLRltCyLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstC40LHQtdGA0ZbRgtGMINC90LUg0LHRltC70YzRiNC1IHswfSDQstCw0YDRltCw0L3RgtGW0LIuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvdC1INC80LXQvdGI0LUg0L3RltC2IHsxfSwg0ZYg0L3QtSDQsdGW0LvRjNGI0LUg0L3RltC2IHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINC/0L7QstC40L3QvdC+INCx0YPRgtC4INC90LUg0LzQtdC90YjQtSDQvdGW0LYgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0L3QtSDQsdGW0LvRjNGI0LUg0L3RltC2IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LTRltC50YHQvdGDINCw0LTRgNC10YHRgyDQtdC70LXQutGC0YDQvtC90L3QvtGXINC/0L7RiNGC0LguXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItCS0LjRgNCw0LcgezB9INC/0L7QstC40L3QtdC9INC/0L7QstC10YDRgtCw0YLQuCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQl9Cw0L/QuNGCINC/0L7QstC10YDQvdGD0LIg0L/QvtC80LjQu9C60YMgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQktGW0LTQv9C+0LLRltC00Ywg0L3QsCDQt9Cw0L/QuNGCINC/0L7QstC10YDQvdGD0LvQsNGB0Ywg0L/QvtGA0L7QttC90YzQvtGOINCw0LHQviDQstC70LDRgdGC0LjQstGW0YLRjCAncGF0aCcg0LLQutCw0LfQsNC90L4g0L3QtdCy0ZbRgNC90L5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQoNC+0LfQvNGW0YAg0YTQsNC50LvRgyDQvdC1INC/0L7QstC40L3QtdC9INC/0LXRgNC10LLQuNGJ0YPQstCw0YLQuCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDQtNCw0L3RliDQsiDQv9C+0LvQtSAn0IbQvdGI0LUnXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLQktCw0Ygg0YTQsNC50Lsg0LfQsNCy0LDQvdGC0LDQttGD0ZTRgtGM0YHRjy4g0JfQsNGH0LXQutCw0LnRgtC1INC00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0INGWINGB0L/RgNC+0LHRg9C50YLQtSDQt9C90L7QstGDLlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0LLQsNC90YLQsNC20LXQvdC90Y8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQktC40LHQtdGA0ZbRgtGMINGE0LDQudC7KNC4KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi0KTQsNC50Lsg0L3QtSDQstC40LHRgNCw0L3QvlwiLFxuICBjb25maXJtRGVsZXRlOiBcItCS0Lgg0YXQvtGH0LXRgtC1INCy0LjQtNCw0LvQuNGC0Lgg0LfQsNC/0LjRgT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQptC1INC30L3QsNGH0LXQvdC90Y8g0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0YPQvdGW0LrQsNC70YzQvdC40LwuXCIsXG4gIGFkZENvbHVtbjogXCLQlNC+0LTQsNGC0Lgg0LrQvtC70L7QvdC60YNcIixcbiAgYWRkUm93OiBcItCU0L7QtNCw0YLQuCDRgNGP0LTQvtC6XCIsXG4gIHJlbW92ZVJvdzogXCLQktC40LTQsNC70LjRgtC4XCIsXG4gIGFkZFBhbmVsOiBcItCU0L7QtNCw0YLQuCDQvdC+0LLRg1wiLFxuICByZW1vdmVQYW5lbDogXCLQktC40LTQsNC70LjRgtC4XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQktCw0YDRltCw0L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QutCwXCIsXG4gIG1hdHJpeF9yb3c6IFwi0KDRj9C00L7QulwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRjNGC0LDRgtC4INC30LHQtdGA0ZbQs9Cw0Y7RgtGM0YHRjyDQvdCwINGB0LXRgNCy0LXRgC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0JLRltC00LHRg9C70LDRgdGPINC/0L7QvNC40LvQutCwLCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQsdGD0LIg0LfQsdC10YDQtdC20LXQvdC40LkuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCg0LXQt9Cy0YPQu9GM0YLQsNGCINGD0YHQv9GW0YjQvdC+INC30LHQtdGA0LXQttC10L3QuNC5IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0KHQv9GA0L7QsdGD0LLQsNGC0Lgg0LfQvdC+0LLRg1wiLFxuICB0aW1lck1pbjogXCLRhdCyXCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWINGWIHsxfSDQt9Cw0LPQsNC70L7QvC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC/0YDQvtGC0Y/Qs9C+0Lwg0YLQtdGB0YLRgy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRliDRliB7Mn0g0LcgezN9INC00LvRjyDQstGB0YzQvtCz0L4g0YLQtdGB0YLRgy5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC3IHsxfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0LTQu9GPINCy0YHRjNC+0LPQviDRgtC10YHRgtGDLlwiLFxuICBjbGVhbkNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLQuFwiLFxuICBjbGVhckNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLQuFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLQktC40LHQtdGA0ZbRgtGMINGE0LDQudC7XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCS0LjQtNCw0LvQuNGC0Lgg0YTQsNC50LtcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQotCw0LpcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItCd0ZZcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi0JLQuCDQstC/0LXQstC90LXQvdGWLCDRidC+INGF0L7Rh9C10YLQtSDQstC40LTQsNC70LjRgtC4INGG0LXQuSDRhNCw0LnQuzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi0JLQuCDQstC/0LXQstC90LXQvdGWLCDRidC+INGF0L7Rh9C10YLQtSDQstC40LTQsNC70LjRgtC4INCy0YHRliDRhNCw0LnQu9C4P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi0J3QsNC30LLQsCDQt9Cw0L/QuNGC0LDQvdC90Y9cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widWFcIl0gPSB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widWFcIl0gPSBcItGD0LrRgNCw0ZfQvdGB0YzQutCwXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHdlbHNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkJsYWVub3JvbFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiTmVzYWZcIixcbiAgY29tcGxldGVUZXh0OiBcIkN3YmxoYXVcIixcbiAgcHJldmlld1RleHQ6IFwiUmhhZ29sd2dcIixcbiAgZWRpdFRleHQ6IFwiR29seWd1XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJEZWNocmF1XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQXJhbGwgKGRpc2dyaWZpd2NoKVwiLFxuICBub25lSXRlbVRleHQ6IFwiRGltXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkRld2lzIHkgQ3lmYW4gXCIsXG4gIHByb2dyZXNzVGV4dDogXCJUdWRhbGVuIHswfSBvIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiQ29mbm9kIHswfSBvIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiV2VkaSBhdGViIHswfS97MX0gY3dlc3Rpd25cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRG9lcyBkaW0gbW9kZCBnd2VsZCB0dWRhbGVuIG5hIGNod2VzdGl3biB5biB5ciBhcm9sd2cuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRGlvbGNoIGFtIGxlbndp4oCZciBob2xpYWR1ciFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJSeWR5Y2ggY2hpIHdlZGkgbGxlbndp4oCZciBhcm9sd2cgaHduIHluIGJhcm9kIHluIMO0bCBlaW4gY29mbm9kaW9uLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIldydGhp4oCZbiBMbHd5dGhv4oCZciBBcm9sd2cuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiRGV3aXN3Y2guLi5cIixcbiAgdmFsdWU6IFwiZ3dlcnRoXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiQXRlYndjaCB5IGN3ZXN0aXduLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJBdGVid2NoIG8gbGVpYWYgdW4gY3dlc3Rpd24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQXRlYndjaCB5IGN3ZXN0aXluYXUgeW0gbWhvYiByaGVzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiRHlsYWnigJlyIGd3ZXJ0aCBmb2QgeW4gcmhpZi5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJSaG93Y2ggbyBsZWlhZiB7MH0gbm9kLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlJob3djaCBsYWkgbmEgezB9IG5vZC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJSaG93Y2ggbyBsZWlhZiB7MH0gbm9kIG9uZCBkaW0gbXd5IG5hIHsxfS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJMbGVud2NoIG8gbGVpYWYgezB9IHJoZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIkRld2lzd2NoIG8gbGVpYWYgezB9IGFtcnl3aW9seW4uXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBlaWRpd2NoIMOiIGRld2lzIG13eSBuYSB7MH0gYW1yeXdpb2x5bi5cIixcbiAgbnVtZXJpY01pbk1heDogXCJEeWxhaeKAmXIgJ3swfScgZm9kIHlyIHVuIGZhdGggw6IgezF9IG5ldeKAmW4gZnd5LCBh4oCZciBmYXRoIMOiIHsyfSBuZXXigJluIGxsYWlcIixcbiAgbnVtZXJpY01pbjogXCJEeWxhaeKAmXIgJ3swfScgZm9kIHlyIHVuIGZhdGggw6IgezF9IG5ldeKAmW4gZnd5XCIsXG4gIG51bWVyaWNNYXg6IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGxsYWlcIixcbiAgaW52YWxpZEVtYWlsOiBcIlJob3djaCBneWZlaXJpYWQgZS1ib3N0IGRpbHlzLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJEeWxhaeKAmXIgbXluZWdpYWQgezB9IGFyd2FpbiBhdCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJSb2VkZCB5IGNhaXMgd2VkaSBhcndhaW4gYXQgeSBnd2FsbCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJSb2VkZCB5IGNhaXMgd2VkaSBhcndhaW4gYXQgZGRhdGEgZ3dhZyBuZXUgbWFlIHByaW9kd2VkZCB5IOKAmHBhdGjigJkgeW4gYW5naHl3aXIgXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRGR5bGFp4oCZciBmZmVpbCBkZGltIGJvZCB5biBmd3kgbmEgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUmhvd2NoIHkgZ3dlcnRoIGFyYWxsLlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIk1hZSBlaWNoIGZmZWlsIHdydGhp4oCZbiBsbHd5dGhvIGkgZnlueS4gQXJob3N3Y2ggeWNoeWRpZyBvIGVpbGlhZGF1IGEgcmhvaSBjeW5uaWcgYXJhbGwgYXJuaS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiV3J0aGnigJluIGxsd3l0aG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJEZXdpc3djaCBmZmVpbChpYXUpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJIZWIgZGRld2lzIGZmZWlsIFwiLFxuICBjb25maXJtRGVsZXRlOiBcIllkeWNoIGNoaSBhbSBkZGlsZXXigJlyIGNvZm5vZD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEeWxhaeKAmXIgZ3dlcnRoIGh3biBmb2QgeW4gdW5pZ3J5dy5cIixcbiAgYWRkQ29sdW1uOiBcIlljaHdhbmVndSBjb2xvZm4gXCIsXG4gIGFkZFJvdzogXCJZY2h3YW5lZ3Ugcmhlc1wiLFxuICByZW1vdmVSb3c6IFwiVHlubnVcIixcbiAgYWRkUGFuZWw6IFwiWWNod2FuZWd1IG/igJlyIG5ld3lkZFwiLFxuICByZW1vdmVQYW5lbDogXCJUeW5udVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWl0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2xvZm5cIixcbiAgbWF0cml4X3JvdzogXCJSaGVzXCIsXG4gIHNhdmluZ0RhdGE6IFwiTWFl4oCZciBjYW5seW5pYWRhdeKAmW4gY2FlbCBldSBjYWR3IGFyIHkgZ3dlaW55ZGQuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlJvZWRkIGd3YWxsIGEgZG9lZGQgZGltIG1vZGQgY2Fkd+KAmXIgY2FubHluaWFkYXUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIldlZGkgbGx3eWRkbyBpIGdhZHfigJlyIGNhbmx5bmlhZGF1IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUmhvd2NoIGd5bm5pZyBhcmFsbCBhcm5pXCIsXG4gIHRpbWVyTWluOiBcIm11blwiLFxuICB0aW1lclNlYzogXCJlaWxcIixcbiAgdGltZXJTcGVudEFsbDogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gYXIgeSBkdWRhbGVuIGhvbiBhIHsxfSBneWRh4oCZaSBnaWx5ZGQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlJ5ZHljaCBjaGkgd2VkaSB0cmV1bGlvIHswfSBhciB5IGR1ZGFsZW4gaG9uLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlJ5ZHljaCBjaGkgd2VkaSB0cmV1bGlvIHswfSBneWRh4oCZaSBnaWx5ZGQuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGFyIHkgZHVkYWxlbiBob24gYSB7Mn0gbyB7M30gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gbyB7MX0gYXIgeSBkdWRhbGVuIGhvbi5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gbyB7MX0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICBjbGVhbkNhcHRpb246IFwiR2xhbmhhdVwiLFxuICBjbGVhckNhcHRpb246IFwiQ2xpcmlvXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkRld2lzd2NoIGZmZWlsIFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJUeW5udeKAmXIgZmZlaWwgaG9uIFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIklhd25cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5hXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIllkeWNoIGNoaeKAmW4gc2nFtXIgZWljaCBib2QgYW0gZHlubnXigJlyIGZmZWlsIGhvbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiWWR5Y2ggY2hp4oCZbiBzacW1ciBlaWNoIGJvZCBhbSBkeW5udSBwb2IgZmZlaWw/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUZWl0bCB5IEN3ZXN0aXduIFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJjeVwiXSA9IHdlbHNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImN5XCJdID0gXCJjeW1yYWVnXCI7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IFNvcnRhYmxlTGliIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5cbmNvbnN0IFNvcnRhYmxlID0gPGFueT5Tb3J0YWJsZUxpYjtcbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggYmFzZSBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPFRSb3csIFRDb2x1bW4+IGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxUQ29sdW1uPjtcbiAgcHJvdGVjdGVkIGZpbHRlcmVkUm93czogQXJyYXk8SXRlbVZhbHVlPjtcbiAgcHJvdGVjdGVkIGdlbmVyYXRlZFZpc2libGVSb3dzOiBBcnJheTxUUm93PiA9IG51bGw7XG4gIHByb3RlY3RlZCBnZW5lcmF0ZWRUb3RhbFJvdzogVFJvdyA9IG51bGw7XG4gIHB1YmxpYyB2aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNvbHVtbnNcIik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBudWxsO1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY3JlYXRlQ29sdW1uVmFsdWVzKCk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwicm93c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGJhc2VcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBoaWRlIHRhYmxlIGhlYWRlci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0hlYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0hlYWRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dIZWFkZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0hlYWRlclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBhbGxvdyByb3dzIGRyYWcgYW5kIGRyb3AuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93Um93c0RyYWdBbmREcm9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93Um93c0RyYWdBbmREcm9wKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93Um93c0RyYWdBbmREcm9wXCIsIHZhbCk7XG4gIH1cbiAgLy9jcm9zcyBmcmFtZXdvcmsgaW5pdGlhbGl6YXRpb25cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghIWVsICYmIHRoaXMuYWxsb3dSb3dzRHJhZ0FuZERyb3ApIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKGVsLnF1ZXJ5U2VsZWN0b3IoXCJ0Ym9keVwiKSk7XG4gICAgfVxuICAgIHN1cGVyLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgfVxuICAvL2Nyb3NzIGZyYW1ld29yayBkZXN0cm95XG4gIHB1YmxpYyBiZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnNvcnRhYmxlSW5zdCkgdGhpcy5zb3J0YWJsZUluc3QuZGVzdHJveSgpO1xuICAgIHN1cGVyLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBjb2x1bW5zLiBBIGNvbHVtbiBoYXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgdGV4dFxuICAgKi9cbiAgZ2V0IGNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNcIik7XG4gIH1cbiAgc2V0IGNvbHVtbnMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zXCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVDb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiAhIXRoaXMuZmlsdGVyZWRDb2x1bW5zID8gdGhpcy5maWx0ZXJlZENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHJvd3MuIEEgcm93IGhhcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCB0ZXh0XG4gICAqL1xuICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xuICAgIHZhciBuZXdSb3dzID0gdGhpcy5wcm9jZXNzUm93c09uU2V0KG5ld1ZhbHVlKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIsIG5ld1Jvd3MpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jvd3NPblNldChuZXdSb3dzOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIG5ld1Jvd3M7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZpc2libGVSb3dzKCk6IEFycmF5PFRSb3c+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdmlzaWJsZSByb3dzIGFzIG1vZGVsIG9iamVjdHMuXG4gICAqIEBzZWUgcm93c1Zpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlUm93cygpOiBBcnJheTxUUm93PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCByb3cgaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCByb3dzVmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NWaXNpYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCByb3dzVmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1Zpc2libGVJZlwiLCB2YWwpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSXQgcnVucyBhZ2FpbnN0IGVhY2ggY29sdW1uIGl0ZW0gYW5kIGlmIGZvciB0aGlzIGl0ZW0gaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSBpdGVtIGlzIHZpc2libGUgb3RoZXJ3aXNlIHRoZSBpdGVtIGJlY29tZXMgaW52aXNpYmxlLiBQbGVhc2UgdXNlIHtpdGVtfSB0byBnZXQgdGhlIGN1cnJlbnQgaXRlbSB2YWx1ZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbnNWaXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uc1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbHVtbnNWaXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGZpbHRlckl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZykge1xuICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8ICF0aGlzLmRhdGEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5ydW5JdGVtc0NvbmRpdGlvbihcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksXG4gICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ29sdW1uc0NoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25Sb3dzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2hvdWxkUnVuQ29sdW1uRXhwcmVzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Jvd3NBc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBydW5JdGVtc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBvbGRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5maWx0ZXJlZFJvd3MgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKSkge1xuICAgICAgb2xkVmlzaWJsZVJvd3MgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb2xkVmlzaWJsZVJvd3MucHVzaCh0aGlzLmZpbHRlcmVkUm93c1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBoYXNDaGFuZ2VzID1cbiAgICAgIHRoaXMuaGFzUm93c0FzSXRlbXMoKSAmJiB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JSb3dzKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdmFyIGhhc0NvbHVtbnNDaGFuZ2VkID0gdGhpcy5ydW5Db25kaXRpb25zRm9yQ29sdW1ucyh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGhhc0NoYW5nZXMgPSBoYXNDb2x1bW5zQ2hhbmdlZCB8fCBoYXNDaGFuZ2VzO1xuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICAgdGhpcy5zdXJ2ZXkuaXNDbGVhclZhbHVlT25IaWRkZW4gJiZcbiAgICAgICAgKCEhdGhpcy5maWx0ZXJlZENvbHVtbnMgfHwgISF0aGlzLmZpbHRlcmVkUm93cylcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgICB9XG4gICAgICBpZiAoISFvbGRWaXNpYmxlUm93cykge1xuICAgICAgICB0aGlzLnJlc3RvcmVOZXdWaXNpYmxlUm93c1ZhbHVlcyhvbGRWaXNpYmxlUm93cyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgaWYgKGhhc0NvbHVtbnNDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBoYXNDaGFuZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckdlbmVyYXRlZFJvd3MoKSB7XG4gICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zRm9yUm93cyhcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBzaG93SW52aXNpYmlsZSA9XG4gICAgICAhIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB2YXIgcnVubmVyID1cbiAgICAgICFzaG93SW52aXNpYmlsZSAmJiAhIXRoaXMucm93c1Zpc2libGVJZlxuICAgICAgICA/IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5yb3dzVmlzaWJsZUlmKVxuICAgICAgICA6IG51bGw7XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBbXTtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IEl0ZW1WYWx1ZS5ydW5Db25kaXRpb25zRm9ySXRlbXMoXG4gICAgICB0aGlzLnJvd3MsXG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyxcbiAgICAgIHJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICAhc2hvd0ludmlzaWJpbGVcbiAgICApO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGggPT09IHRoaXMucm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zRm9yQ29sdW1ucyhcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciB1c2VDb2x1bW5zRXhwcmVzc2lvbiA9XG4gICAgICAhIXRoaXMuc3VydmV5ICYmICF0aGlzLnN1cnZleS5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmc7XG4gICAgdmFyIHJ1bm5lciA9XG4gICAgICB1c2VDb2x1bW5zRXhwcmVzc2lvbiAmJiAhIXRoaXMuY29sdW1uc1Zpc2libGVJZlxuICAgICAgICA/IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5jb2x1bW5zVmlzaWJsZUlmKVxuICAgICAgICA6IG51bGw7XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBbXTtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IEl0ZW1WYWx1ZS5ydW5Db25kaXRpb25zRm9ySXRlbXMoXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICA8YW55PnRoaXMuZmlsdGVyZWRDb2x1bW5zLFxuICAgICAgcnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuc2hvdWxkUnVuQ29sdW1uRXhwcmVzc2lvbigpXG4gICAgKTtcbiAgICBpZiAodGhpcy5maWx0ZXJlZENvbHVtbnMubGVuZ3RoID09PSB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBoYXNDaGFuZ2VkO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIHZhciBuZXdWYWwgPSBudWxsO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICB2YXIgY29sdW1ucyA9ICEhdGhpcy5maWx0ZXJlZENvbHVtbnMgPyB0aGlzLmZpbHRlcmVkQ29sdW1ucyA6IHRoaXMuY29sdW1ucztcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICBpZiAoXG4gICAgICAgIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShyb3dzLCBrZXkpICYmXG4gICAgICAgIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShjb2x1bW5zLCB2YWxba2V5XSlcbiAgICAgICkge1xuICAgICAgICBpZiAobmV3VmFsID09IG51bGwpIG5ld1ZhbCA9IHt9O1xuICAgICAgICAoPGFueT5uZXdWYWwpW2tleV0gPSB2YWxba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgfVxuICAgIHN1cGVyLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFySW52aXNpYmxlVmFsdWVzSW5Sb3dzKCkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIHZhciBuZXdEYXRhID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSByb3dzW2ldLnZhbHVlO1xuICAgICAgaWYgKCEhbmV3RGF0YVtrZXldICYmICFyb3dzW2ldLmlzVmlzaWJsZSkge1xuICAgICAgICBkZWxldGUgbmV3RGF0YVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld0RhdGEsIHRoaXMudmFsdWUpKSByZXR1cm47XG4gICAgdGhpcy52YWx1ZSA9IG5ld0RhdGE7XG4gIH1cbiAgcHJpdmF0ZSByZXN0b3JlTmV3VmlzaWJsZVJvd3NWYWx1ZXMob2xkVmlzaWJsZVJvd3M6IGFueSkge1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIHZhciB2YWwgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICBpZiAoXG4gICAgICAgIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShyb3dzLCBrZXkpICYmXG4gICAgICAgICFJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUob2xkVmlzaWJsZVJvd3MsIGtleSlcbiAgICAgICkge1xuICAgICAgICBpZiAobmV3VmFsdWUgPT0gbnVsbCkgbmV3VmFsdWUgPSB7fTtcbiAgICAgICAgKDxhbnk+bmV3VmFsdWUpW2tleV0gPSB2YWxba2V5XTtcbiAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNvcnRhYmxlKGRvbU5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCFkb21Ob2RlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZG9tTm9kZSA9IGRvbU5vZGU7XG5cbiAgICBzZWxmLnNvcnRhYmxlSW5zdCA9IG5ldyBTb3J0YWJsZShkb21Ob2RlLCB7XG4gICAgICBhbmltYXRpb246IDEwMCxcbiAgICAgIGZvcmNlRmFsbGJhY2s6IHRydWUsXG4gICAgICBkZWxheTogMjAwLFxuICAgICAgZGVsYXlPblRvdWNoT25seTogdHJ1ZSxcbiAgICAgIGhhbmRsZTogXCJ0clwiLFxuICAgICAgb25FbmQoZXZ0OiBhbnkpIHtcbiAgICAgICAgc2VsZi5tb3ZlUm93QnlJbmRleChcbiAgICAgICAgICBzZWxmLnJvd3MsXG4gICAgICAgICAgZXZ0Lm9sZERyYWdnYWJsZUluZGV4LFxuICAgICAgICAgIGV2dC5uZXdEcmFnZ2FibGVJbmRleFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIG1vdmVSb3dCeUluZGV4ID0gKFxuICAgIHJvd3M6IEFycmF5PGFueT4sXG4gICAgZnJvbUluZGV4OiBudW1iZXIsXG4gICAgdG9JbmRleDogbnVtYmVyXG4gICkgPT4ge1xuICAgIGNvbnN0IG1vdmFibGVSb3cgPSByb3dzW2Zyb21JbmRleF07XG5cbiAgICBpZiAoIW1vdmFibGVSb3cpIHJldHVybjtcblxuICAgIHJvd3Muc3BsaWNlKGZyb21JbmRleCwgMSk7XG4gICAgcm93cy5zcGxpY2UodG9JbmRleCwgMCwgbW92YWJsZVJvdyk7XG4gIH07XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4YmFzZVwiLFxuICBbXG4gICAgXCJjb2x1bW5zVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICB7IG5hbWU6IFwic2hvd0hlYWRlcjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFsbG93Um93c0RyYWdBbmREcm9wXCIsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG4gIHVuZGVmaW5lZCxcbiAgXCJxdWVzdGlvblwiXG4pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJUGFnZSwgSVBhbmVsLCBJRWxlbWVudCwgSVN1cnZleUVsZW1lbnQsIElRdWVzdGlvbiB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IERyYWdEcm9wSW5mbywgUGFuZWxNb2RlbEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuLyoqXG4gKiBUaGUgcGFnZSBvYmplY3QuIEl0IGhhcyBlbGVtZW50cyBjb2xsZWN0aW9uLCB0aGF0IGNvbnRhaW5zIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICovXG5leHBvcnQgY2xhc3MgUGFnZU1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJUGFnZSB7XG4gIHByaXZhdGUgaGFzU2hvd25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubG9jVGl0bGUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICBpZiAoc2VsZi5udW0gPiAwKSByZXR1cm4gc2VsZi5udW0gKyBcIi4gXCIgKyB0ZXh0O1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvblRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIiwgdGhpcywgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYWdlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUGFnZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2hvdyB0aXRsZSBpbiBuYXZpZ2F0aW9uIGJ1dHRvbnMuIElmIHRoZSB2YWx1ZSBpcyBlbXB0eSB0aGVuIHBhZ2UgbmFtZSBpcyB1c2VkLlxuICAgKiBAc2VlIHN1cnZleS5wcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvblRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGlvblRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uVGl0bGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY05hdmlnYXRpb25UaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uVGl0bGVcIik7XG4gIH1cbiAgcHVibGljIGdldCBuYXZpZ2F0aW9uRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0aW9uRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhc3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFzc2VkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhc3NlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXNzZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnN1cnZleS5wYWdlcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIGlmICh0aGlzLndhc1Nob3duKSByZXR1cm47XG4gICAgc3VwZXIub25GaXJzdFJlbmRlcmluZygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdmlzaWJsZSBpbmRleCBvZiB0aGUgcGFnZS4gSXQgaGFzIHZhbHVlcyBmcm9tIDAgdG8gdmlzaWJsZSBwYWdlIGNvdW50IC0gMS5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC52aXNpYmxlUGFnZXNcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5wYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBwYWdlIGlzIHN0YXJ0ZWQgcGFnZSBpbiB0aGUgc3VydmV5LiBJdCBjYW4gYmUgc2hvd24gb24gdGhlIHN0YXJ0IG9ubHkgYW5kIHRoZSBlbmQtdXNlciBjb3VsZCBub3QgY29tZWJhY2sgdG8gaXQgYWZ0ZXIgaXQgcGFzc2VkIGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzUGFnZVN0YXJ0ZWQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGNDc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgdmFyIGNzcyA9IHRoaXMuY3NzO1xuICAgIHZhciBjbGFzc2VzID0geyBwYWdlOiB7fSwgcGFnZVRpdGxlOiBcIlwiLCBwYWdlRGVzY3JpcHRpb246IFwiXCIsIHJvdzogXCJcIiB9O1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5wYWdlLCBjc3MucGFnZSk7XG4gICAgaWYgKCEhY3NzLnBhZ2VUaXRsZSkge1xuICAgICAgY2xhc3Nlcy5wYWdlVGl0bGUgPSBjc3MucGFnZVRpdGxlO1xuICAgIH1cbiAgICBpZiAoISFjc3MucGFnZURlc2NyaXB0aW9uKSB7XG4gICAgICBjbGFzc2VzLnBhZ2VEZXNjcmlwdGlvbiA9IGNzcy5wYWdlRGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmICghIWNzcy5yb3cpIHtcbiAgICAgIGNsYXNzZXMucm93ID0gY3NzLnJvdztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS51cGRhdGVQYWdlQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbiAgZ2V0SXNQYWdlVmlzaWJsZShleGNlcHRpb25RdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmdldElzUGFnZVZpc2libGUoZXhjZXB0aW9uUXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBnZXQgbnVtKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJudW1cIiwgLTEpO1xuICB9XG4gIHB1YmxpYyBzZXQgbnVtKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubnVtID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm51bVwiLCB2YWwpO1xuICAgIHRoaXMub25OdW1DaGFuZ2VkKHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwiaGlkZVwiIHRvIG1ha2UgXCJQcmV2XCIsIFwiTmV4dFwiIGFuZCBcIkNvbXBsZXRlXCIgYnV0dG9ucyBhcmUgaW52aXNpYmxlIGZvciB0aGlzIHBhZ2UuIFNldCB0aGlzIHByb3BlcnR5IHRvIFwic2hvd1wiIHRvIG1ha2UgdGhlc2UgYnV0dG9ucyB2aXNpYmxlLCBldmVuIGlmIHN1cnZleSBzaG93TmF2aWdhdGlvbkJ1dHRvbnMgcHJvcGVydHkgaXMgZmFsc2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZS5zaG93TmF2aWdhdGlvbkJ1dHRvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSByZXR1cm5zIHRydWUsIGlmIHRoZSBwYWdlIGhhcyBiZWVuIHNob3duIHRvIHRoZSBlbmQtdXNlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2FzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzU2hvd25WYWx1ZTtcbiAgfVxuICBnZXQgaGFzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2FzU2hvd247XG4gIH1cbiAgcHVibGljIHNldFdhc1Nob3duKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy5oYXNTaG93blZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5oYXNTaG93blZhbHVlID0gdmFsO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWwgPT0gdHJ1ZSAmJiB0aGlzLmFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQpIHtcbiAgICAgIHRoaXMucmFuZG9taXplRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1JhbmRvbWl6aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmFuZG9taXplRWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMuaXNSYW5kb21pemluZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSYW5kb21pemluZyA9IHRydWU7XG4gICAgdmFyIG9sZEVsZW1lbnRzID0gW107XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRFbGVtZW50cy5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gICAgdmFyIG5ld0VsZW1lbnRzID0gSGVscGVycy5yYW5kb21pemVBcnJheTxJRWxlbWVudD4ob2xkRWxlbWVudHMpO1xuICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKDAsIHRoaXMuZWxlbWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnB1c2gobmV3RWxlbWVudHNbaV0pO1xuICAgIH1cbiAgICB0aGlzLmlzUmFuZG9taXppbmcgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdHJ1ZSwgaWYgdGhlIGVsZW1lbnRzIGFyZSByYW5kb21pemVkIG9uIHRoZSBwYWdlXG4gICAqIEBzZWUgaGFzU2hvd25cbiAgICogQHNlZSBxdWVzdGlvbnNPcmRlclxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9yZGVyID1cbiAgICAgIHRoaXMucXVlc3Rpb25zT3JkZXIgPT0gXCJkZWZhdWx0XCIgJiYgdGhpcy5zdXJ2ZXlcbiAgICAgICAgPyB0aGlzLnN1cnZleS5xdWVzdGlvbnNPcmRlclxuICAgICAgICA6IHRoaXMucXVlc3Rpb25zT3JkZXI7XG4gICAgcmV0dXJuIG9yZGVyID09IFwicmFuZG9tXCI7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJhbmRvbWl6ZSBxdWVzdGlvbnMuIFNldCBpdCB0byAncmFuZG9tJyB0byByYW5kb21pemUgcXVlc3Rpb25zLCAnaW5pdGlhbCcgdG8ga2VlcCB0aGVtIGluIHRoZSBzYW1lIG9yZGVyIG9yICdkZWZhdWx0JyB0byB1c2UgdGhlIFN1cnZleSBxdWVzdGlvbnNPcmRlciBwcm9wZXJ0eVxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqIEBzZWUgYXJlUXVlc3Rpb25zUmFuZG9taXplZFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnNPcmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT3JkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbnNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gc2Nyb2xsIHRvIHRoZSBwYWdlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb1RvcCgpIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2Nyb2xsRWxlbWVudFRvVG9wKHRoaXMsIG51bGwsIHRoaXMsIHRoaXMuaWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGltZSBpbiBzZWNvbmRzIGVuZC11c2VyIHNwZW50IG9uIHRoaXMgcGFnZVxuICAgKi9cbiAgcHVibGljIHRpbWVTcGVudCA9IDA7XG4gIC8vIHB1YmxpYyBnZXQgdGltZVNwZW50KCk6IG51bWJlciB7XG4gIC8vICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCAwKTtcbiAgLy8gfVxuICAvLyBwdWJsaWMgc2V0IHRpbWVTcGVudCh2YWw6IG51bWJlcikge1xuICAvLyAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCB2YWwpO1xuICAvLyB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYW5lbHMgaW4gdGhlIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgdGhpcy5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQtdXNlciBoYXMgdG8gY29tcGxldGUgdGhlIHBhZ2UuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIHRoZSBlbmQtdXNlciBoYXMgdW5saW1pdGVkIG51bWJlciBvZiB0aW1lIHRvIGZpbmlzaCB0aGUgcGFnZS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTnVtQ2hhbmdlZCh2YWx1ZTogbnVtYmVyKSB7fVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKSByZXR1cm47XG4gICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYWdlVmlzaWJpbGl0eUNoYW5nZWQodGhpcywgdGhpcy5pc1Zpc2libGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvO1xuICBwdWJsaWMgZHJhZ0Ryb3BTdGFydChcbiAgICBzcmM6IElFbGVtZW50LFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7XG4gICAgdGhpcy5kcmFnRHJvcEluZm8gPSBuZXcgRHJhZ0Ryb3BJbmZvKHNyYywgdGFyZ2V0LCBuZXN0ZWRQYW5lbERlcHRoKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgZGVzdGluYXRpb246IElTdXJ2ZXlFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFZGdlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSW5mbykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgdGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgPSBpc0VkZ2U7XG4gICAgdGhpcy5jb3JyZWN0RHJhZ0Ryb3BJbmZvKHRoaXMuZHJhZ0Ryb3BJbmZvKTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wU291cmNlKCkgfHwgIXRoaXMuZHJhZ0Ryb3BBbGxvd0Zyb21TdXJ2ZXkoKSkge1xuICAgICAgaWYgKCEhdGhpcy5kcmFnRHJvcEluZm8uc291cmNlKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsIHJvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXQodGhpcy5kcmFnRHJvcEluZm8pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRUaXRsZUFjdGlvbnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHRpdGxlQWN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuICAgIHRoaXMudGl0bGVBY3Rpb25zID0gdGhpcy5zdXJ2ZXkuZ2V0VXBkYXRlZFBhZ2VUaXRsZUFjdGlvbnMoXG4gICAgICB0aGlzLFxuICAgICAgdGl0bGVBY3Rpb25zXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy50aXRsZUFjdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSBjb3JyZWN0RHJhZ0Ryb3BJbmZvKGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvKSB7XG4gICAgaWYgKCFkcmFnRHJvcEluZm8uZGVzdGluYXRpb24pIHJldHVybjtcbiAgICB2YXIgcGFuZWwgPSAoPElFbGVtZW50PmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbikuaXNQYW5lbFxuICAgICAgPyA8SVBhbmVsPig8YW55PmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICBpZiAoIXBhbmVsKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgIWRyYWdEcm9wSW5mby50YXJnZXQuaXNMYXlvdXRUeXBlU3VwcG9ydGVkKHBhbmVsLmdldENoaWxkcmVuTGF5b3V0VHlwZSgpKVxuICAgICkge1xuICAgICAgZHJhZ0Ryb3BJbmZvLmlzRWRnZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBbGxvd0Zyb21TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgdmFyIGRlc3QgPSB0aGlzLmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbjtcbiAgICBpZiAoIWRlc3QgfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgaW5zZXJ0QmVmb3JlOiBJRWxlbWVudCA9IG51bGw7XG4gICAgdmFyIGluc2VydEFmdGVyOiBJRWxlbWVudCA9IG51bGw7XG4gICAgdmFyIHBhcmVudCA9XG4gICAgICBkZXN0LmlzUGFnZSB8fCAoIXRoaXMuZHJhZ0Ryb3BJbmZvLmlzRWRnZSAmJiAoPElFbGVtZW50PmRlc3QpLmlzUGFuZWwpXG4gICAgICAgID8gZGVzdFxuICAgICAgICA6ICg8SUVsZW1lbnQ+ZGVzdCkucGFyZW50O1xuICAgIGlmICghZGVzdC5pc1BhZ2UpIHtcbiAgICAgIHZhciBjb250YWluZXIgPSAoPElFbGVtZW50PmRlc3QpLnBhcmVudDtcbiAgICAgIGlmICghIWNvbnRhaW5lcikge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSAoPFBhbmVsTW9kZWxCYXNlPmNvbnRhaW5lcikuZWxlbWVudHM7XG4gICAgICAgIHZhciBpbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoPElFbGVtZW50PmRlc3QpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIGluc2VydEJlZm9yZSA9IDxJRWxlbWVudD5kZXN0O1xuICAgICAgICAgIGluc2VydEFmdGVyID0gPElFbGVtZW50PmRlc3Q7XG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ0Ryb3BJbmZvLmlzQm90dG9tKSB7XG4gICAgICAgICAgICBpbnNlcnRCZWZvcmUgPVxuICAgICAgICAgICAgICBpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAtIDEgPyBlbGVtZW50c1tpbmRleCArIDFdIDogbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zZXJ0QWZ0ZXIgPSBpbmRleCA+IDAgPyBlbGVtZW50c1tpbmRleCAtIDFdIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXQ6IHRoaXMuZHJhZ0Ryb3BJbmZvLnRhcmdldCxcbiAgICAgIHNvdXJjZTogdGhpcy5kcmFnRHJvcEluZm8uc291cmNlLFxuICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICBpbnNlcnRBZnRlcjogaW5zZXJ0QWZ0ZXIsXG4gICAgICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5kcmFnQW5kRHJvcEFsbG93KG9wdGlvbnMpO1xuICB9XG4gIHB1YmxpYyBkcmFnRHJvcEZpbmlzaChpc0NhbmNlbDogYm9vbGVhbiA9IGZhbHNlKTogSUVsZW1lbnQge1xuICAgIGlmICghdGhpcy5kcmFnRHJvcEluZm8pIHJldHVybjtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0O1xuICAgIHZhciByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyh0YXJnZXQpO1xuICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuZHJhZ0Ryb3BHZXRFbGVtZW50SW5kZXgodGFyZ2V0LCByb3cpO1xuICAgIHRoaXMudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KHRhcmdldCwgcm93KTtcbiAgICBpZiAoIWlzQ2FuY2VsICYmICEhcm93KSB7XG4gICAgICB2YXIgc3JjID0gdGhpcy5kcmFnRHJvcEluZm8uc291cmNlO1xuICAgICAgdmFyIGlzU2FtZVBhbmVsID0gZmFsc2U7XG4gICAgICBpZiAoISFzcmMgJiYgISFzcmMucGFyZW50KSB7XG4gICAgICAgIGlzU2FtZVBhbmVsID0gcm93LnBhbmVsID09IHNyYy5wYXJlbnQ7XG4gICAgICAgIGlmIChpc1NhbWVQYW5lbCkge1xuICAgICAgICAgIHJvdy5wYW5lbC5kcmFnRHJvcE1vdmVFbGVtZW50KHNyYywgdGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcmMucGFyZW50LnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldEluZGV4ID4gLTEpIHtcbiAgICAgICAgcm93LnBhbmVsLmFkZEVsZW1lbnQodGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvID0gbnVsbDtcbiAgICByZXR1cm4gIWlzQ2FuY2VsID8gdGFyZ2V0IDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wR2V0RWxlbWVudEluZGV4KFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgcm93OiBRdWVzdGlvblJvd01vZGVsXG4gICk6IG51bWJlciB7XG4gICAgaWYgKCFyb3cpIHJldHVybiAtMTtcbiAgICB2YXIgaW5kZXggPSByb3cuZWxlbWVudHMuaW5kZXhPZih0YXJnZXQpO1xuICAgIGlmIChyb3cuaW5kZXggPT0gMCkgcmV0dXJuIGluZGV4O1xuICAgIHZhciBwcmV2Um93ID0gcm93LnBhbmVsLnJvd3Nbcm93LmluZGV4IC0gMV07XG4gICAgdmFyIHByZXZFbGVtZW50ID0gcHJldlJvdy5lbGVtZW50c1twcmV2Um93LmVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBpbmRleCArIHJvdy5wYW5lbC5lbGVtZW50cy5pbmRleE9mKHByZXZFbGVtZW50KSArIDE7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BUYWdlcnQoKTogYm9vbGVhbiB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCFkZXN0aW5hdGlvbiB8fCBkZXN0aW5hdGlvbi5pc1BhZ2UpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQ2FuRHJvcENvcmUoXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICA8SUVsZW1lbnQ+ZGVzdGluYXRpb25cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BDYW5Ecm9wU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzb3VyY2UgPSB0aGlzLmRyYWdEcm9wSW5mby5zb3VyY2U7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiB0cnVlO1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IDxJRWxlbWVudD50aGlzLmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbjtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wQ29yZShzb3VyY2UsIGRlc3RpbmF0aW9uKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQ2FuRHJvcE5vdE5leHQoXG4gICAgICBzb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmlzRWRnZSxcbiAgICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmlzQm90dG9tXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcENvcmUoXG4gICAgdGFyZ2V0OiBJRWxlbWVudCxcbiAgICBkZXN0aW5hdGlvbjogSUVsZW1lbnRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BJc1NhbWVFbGVtZW50KGRlc3RpbmF0aW9uLCB0YXJnZXQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcmdldC5pc1BhbmVsKSB7XG4gICAgICB2YXIgcG5sID0gPFBhbmVsTW9kZWxCYXNlPig8YW55PnRhcmdldCk7XG4gICAgICBpZiAoXG4gICAgICAgIHBubC5jb250YWluc0VsZW1lbnQoZGVzdGluYXRpb24pIHx8XG4gICAgICAgICEhcG5sLmdldEVsZW1lbnRCeU5hbWUoZGVzdGluYXRpb24ubmFtZSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcE5vdE5leHQoXG4gICAgc291cmNlOiBJRWxlbWVudCxcbiAgICBkZXN0aW5hdGlvbjogSUVsZW1lbnQsXG4gICAgaXNFZGdlOiBib29sZWFuLFxuICAgIGlzQm90dG9tOiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgKGRlc3RpbmF0aW9uLmlzUGFuZWwgJiYgIWlzRWRnZSkpIHJldHVybiB0cnVlO1xuICAgIGlmIChzb3VyY2UucGFyZW50ICE9PSBkZXN0aW5hdGlvbi5wYXJlbnQpIHJldHVybiB0cnVlO1xuICAgIHZhciBwbmwgPSA8UGFuZWxNb2RlbEJhc2U+c291cmNlLnBhcmVudDtcbiAgICB2YXIgc3JjSW5kZXggPSBwbmwuZWxlbWVudHMuaW5kZXhPZihzb3VyY2UpO1xuICAgIHZhciBkZXN0SW5kZXggPSBwbmwuZWxlbWVudHMuaW5kZXhPZihkZXN0aW5hdGlvbik7XG4gICAgaWYgKGRlc3RJbmRleCA8IHNyY0luZGV4ICYmICFpc0JvdHRvbSkgZGVzdEluZGV4LS07XG4gICAgaWYgKGlzQm90dG9tKSBkZXN0SW5kZXgrKztcbiAgICByZXR1cm4gc3JjSW5kZXggPCBkZXN0SW5kZXhcbiAgICAgID8gZGVzdEluZGV4IC0gc3JjSW5kZXggPiAxXG4gICAgICA6IHNyY0luZGV4IC0gZGVzdEluZGV4ID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgZHJhZ0Ryb3BJc1NhbWVFbGVtZW50KGVsMTogSUVsZW1lbnQsIGVsMjogSUVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWwxID09IGVsMiB8fCBlbDEubmFtZSA9PSBlbDIubmFtZTtcbiAgfVxuICBwdWJsaWMgZW5zdXJlUm93c1Zpc2liaWxpdHkoKSB7XG4gICAgc3VwZXIuZW5zdXJlUm93c1Zpc2liaWxpdHkoKTtcbiAgICB0aGlzLmdldFBhbmVscygpLmZvckVhY2gocGFuZWwgPT4gcGFuZWwuZW5zdXJlUm93c1Zpc2liaWxpdHkoKSk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYWdlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLFxuICAgICAgZGVmYXVsdDogXCJpbmhlcml0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbmhlcml0XCIsIFwic2hvd1wiLCBcImhpZGVcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1heFRpbWVUb0ZpbmlzaDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25UaXRsZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTmF2aWdhdGlvblRpdGxlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25EZXNjcmlwdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmouc3VydmV5ICYmIG9iai5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlID09PSBcImJ1dHRvbnNcIjtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uXCIsXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlTW9kZWwoKTtcbiAgfSxcbiAgXCJwYW5lbGJhc2VcIlxuKTtcbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIsIHByb3BlcnR5IH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgSVN1cnZleUltcGwsXG4gIElQYWdlLFxuICBJUGFuZWwsXG4gIElDb25kaXRpb25SdW5uZXIsXG4gIElFbGVtZW50LFxuICBJU3VydmV5RWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlFcnJvcixcbiAgSVN1cnZleUVycm9yT3duZXIsXG4gIElUaXRsZU93bmVyLFxuICBJUHJvZ3Jlc3NJbmZvLFxuICBJU3VydmV5LFxuICBJRmluZEVsZW1lbnQsXG59IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IEVsZW1lbnRGYWN0b3J5LCBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IGZpbmRTY3JvbGxhYmxlUGFyZW50LCBpc0VsZW1lbnRWaXNpYmxlIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIERyYWdEcm9wSW5mbyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzb3VyY2U6IElFbGVtZW50LFxuICAgIHB1YmxpYyB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHB1YmxpYyBuZXN0ZWRQYW5lbERlcHRoOiBudW1iZXIgPSAtMVxuICApIHt9XG4gIHB1YmxpYyBkZXN0aW5hdGlvbjogSVN1cnZleUVsZW1lbnQ7XG4gIHB1YmxpYyBpc0JvdHRvbTogYm9vbGVhbjtcbiAgcHVibGljIGlzRWRnZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUm93TW9kZWwgZXh0ZW5kcyBCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcm93Q291bnRlciA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Um93SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwcl9cIiArIFF1ZXN0aW9uUm93TW9kZWwucm93Q291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBfc2Nyb2xsYWJsZVBhcmVudDogYW55ID0gdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgX3VwZGF0ZVZpc2liaWxpdHk6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXJ0TGF6eVJlbmRlcmluZyhcbiAgICByb3dDb250YWluZXJEaXY6IEhUTUxFbGVtZW50LFxuICAgIGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyID0gZmluZFNjcm9sbGFibGVQYXJlbnRcbiAgKSB7XG4gICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCA9IGZpbmRTY3JvbGxhYmxlQ29udGFpbmVyKHJvd0NvbnRhaW5lckRpdik7XG4gICAgdGhpcy5pc05lZWRSZW5kZXIgPSAhKFxuICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LmNsaWVudEhlaWdodFxuICAgICk7XG4gICAgLy8gaWYgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgaXMgaHRtbCB0aGUgc2Nyb2xsIGV2ZW50IGlzbid0IGZpcmVkLCBzbyB3ZSBzaG91bGQgdXNlIHdpbmRvd1xuICAgIGlmICh0aGlzLl9zY3JvbGxhYmxlUGFyZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB3aW5kb3c7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc05lZWRSZW5kZXIpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICAgIHZhciBpc1Jvd0NvbnRhaW5lckRpdlZpc2libGUgPSBpc0VsZW1lbnRWaXNpYmxlKHJvd0NvbnRhaW5lckRpdiwgNTApO1xuICAgICAgICBpZiAoIXRoaXMuaXNOZWVkUmVuZGVyICYmIGlzUm93Q29udGFpbmVyRGl2VmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNOZWVkUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCAmJlxuICAgICAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGVuc3VyZVZpc2liaWxpdHkoKSB7XG4gICAgaWYgKCEhdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSkge1xuICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RvcExhenlSZW5kZXJpbmcoKSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLl9zY3JvbGxhYmxlUGFyZW50ICYmXG4gICAgICAhIXRoaXMuX3VwZGF0ZVZpc2liaWxpdHkgJiZcbiAgICAgICEhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgKSB7XG4gICAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwic2Nyb2xsXCIsXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHVibGljIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25Sb3dNb2RlbC5nZXRSb3dJZCgpO1xuICAgIHRoaXMuaXNOZWVkUmVuZGVyID0gIXRoaXMuaXNMYXp5UmVuZGVyaW5nO1xuICAgIHRoaXMudmlzaWJsZSA9IHBhbmVsLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiZWxlbWVudHNcIik7XG4gIH1cbiAgcHVibGljIGdldCBpc0xhenlSZW5kZXJpbmcoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5wYW5lbCAmJiAhIXRoaXMucGFuZWwuc3VydmV5ICYmIHRoaXMucGFuZWwuc3VydmV5LmlzTGF6eVJlbmRlcmluZ1xuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbGVtZW50c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTmVlZFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNuZWVkcmVuZGVyXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNOZWVkUmVuZGVyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzbmVlZHJlbmRlclwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKChlKSA9PiBlLmlzVmlzaWJsZSk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZVZpc2libGUoKSB7XG4gICAgdGhpcy52aXNpYmxlID0gdGhpcy5jYWxjVmlzaWJsZSgpO1xuICAgIHRoaXMuc2V0V2lkdGgoKTtcbiAgfVxuICBwdWJsaWMgYWRkRWxlbWVudChxOiBJRWxlbWVudCkge1xuICAgIHRoaXMuZWxlbWVudHMucHVzaChxKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWwucm93cy5pbmRleE9mKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgc2V0V2lkdGgoKSB7XG4gICAgdmFyIHZpc0NvdW50ID0gdGhpcy52aXNpYmxlRWxlbWVudHMubGVuZ3RoO1xuICAgIGlmICh2aXNDb3VudCA9PSAwKSByZXR1cm47XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmVTZXRXaWR0aEVsZW1lbnRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgdGhpcy5zZXRFbGVtZW50TWF4TWluV2lkdGgoZWwpO1xuXG4gICAgICBpZiAoZWwuaXNWaXNpYmxlKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0RWxlbWVudFdpZHRoKGVsKTtcbiAgICAgICAgaWYgKCEhd2lkdGgpIHtcbiAgICAgICAgICBlbC5yZW5kZXJXaWR0aCA9IHRoaXMuZ2V0UmVuZGVyZWRXaWR0aEZyb21XaWR0aCh3aWR0aCk7XG4gICAgICAgICAgcHJlU2V0V2lkdGhFbGVtZW50cy5wdXNoKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbC5yaWdodEluZGVudCA9IGNvdW50ZXIgPCB2aXNDb3VudCAtIDEgPyAxIDogMDtcbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwucmVuZGVyV2lkdGggPSBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICBpZiAoIWVsLmlzVmlzaWJsZSB8fCBwcmVTZXRXaWR0aEVsZW1lbnRzLmluZGV4T2YoZWwpID4gLTEpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByZVNldFdpZHRoRWxlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgZWwucmVuZGVyV2lkdGggPSAoMTAwIC8gdmlzQ291bnQpLnRvRml4ZWQoNikgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnJlbmRlcldpZHRoID0gdGhpcy5nZXRSZW5kZXJlZENhbGNXaWR0aChcbiAgICAgICAgICBlbCxcbiAgICAgICAgICBwcmVTZXRXaWR0aEVsZW1lbnRzLFxuICAgICAgICAgIHZpc0NvdW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRFbGVtZW50TWF4TWluV2lkdGgoZWw6IElFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgZWwud2lkdGggJiZcbiAgICAgIHR5cGVvZiBlbC53aWR0aCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgZWwud2lkdGguaW5kZXhPZihcIiVcIikgPT09IC0xXG4gICAgKSB7XG4gICAgICBlbC5taW5XaWR0aCA9IGVsLndpZHRoO1xuICAgICAgZWwubWF4V2lkdGggPSBlbC53aWR0aDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJlbmRlcmVkQ2FsY1dpZHRoKFxuICAgIGVsOiBJRWxlbWVudCxcbiAgICBwcmVTZXRXaWR0aEVsZW1lbnRzOiBBcnJheTxJRWxlbWVudD4sXG4gICAgdmlzQ291bnQ6IG51bWJlclxuICApOiBzdHJpbmcge1xuICAgIHZhciBleHByZXNzaW9uID0gXCIxMDAlXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVTZXRXaWR0aEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHByZXNzaW9uICs9IFwiIC0gXCIgKyBwcmVTZXRXaWR0aEVsZW1lbnRzW2ldLnJlbmRlcldpZHRoO1xuICAgIH1cbiAgICB2YXIgY2FsY1dpZHRoRWwgPSB2aXNDb3VudCAtIHByZVNldFdpZHRoRWxlbWVudHMubGVuZ3RoO1xuICAgIGlmIChjYWxjV2lkdGhFbCA+IDEpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBcIihcIiArIGV4cHJlc3Npb24gKyBcIikvXCIgKyBjYWxjV2lkdGhFbC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gXCJjYWxjKFwiICsgZXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0RWxlbWVudFdpZHRoKGVsOiBJRWxlbWVudCk6IHN0cmluZyB7XG4gICAgdmFyIHdpZHRoID0gZWwud2lkdGg7XG4gICAgaWYgKCF3aWR0aCB8fCB0eXBlb2Ygd2lkdGggIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiB3aWR0aC50cmltKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRSZW5kZXJlZFdpZHRoRnJvbVdpZHRoKHdpZHRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBIZWxwZXJzLmlzTnVtYmVyKHdpZHRoKSA/IHdpZHRoICsgXCJweFwiIDogd2lkdGg7XG4gIH1cbiAgcHJpdmF0ZSBjYWxjVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgfVxuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICB9XG59XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhIFBhbmVsIGFuZCBQYWdlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsQmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRcbiAgaW1wbGVtZW50cyBJUGFuZWwsIElDb25kaXRpb25SdW5uZXIsIElMb2NhbGl6YWJsZU93bmVyLCBJU3VydmV5RXJyb3JPd25lciB7XG4gIHByaXZhdGUgc3RhdGljIHBhbmVsQ291bnRlciA9IDEwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFuZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNwX1wiICsgUGFuZWxNb2RlbEJhc2UucGFuZWxDb3VudGVyKys7XG4gIH1cblxuICBwcml2YXRlIGVsZW1lbnRzVmFsdWU6IEFycmF5PElFbGVtZW50PjtcbiAgcHJpdmF0ZSBpc1F1ZXN0aW9uc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcXVlc3Rpb25zVmFsdWU6IEFycmF5PFF1ZXN0aW9uPiA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgYWRkRWxlbWVudENhbGxiYWNrOiAoZWxlbWVudDogSUVsZW1lbnQpID0+IHZvaWQ7XG4gIHJlbW92ZUVsZW1lbnRDYWxsYmFjazogKGVsZW1lbnQ6IElFbGVtZW50KSA9PiB2b2lkO1xuICBvbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogKCkgPT4gc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmVsZW1lbnRzVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJlbGVtZW50c1wiLFxuICAgICAgdGhpcy5vbkFkZEVsZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50LmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMuaWQgPSBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkKCk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCAoKSA9PiB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInBhbmVsYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIH1cbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUGFuZWxNb2RlbCBvciBQYWdlTW9kZWwgdGl0bGUgcHJvcGVydHkuXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKi9cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xuICB9XG4gIGdldCBfc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoKDxhbnk+dGhpcy5zdXJ2ZXkpLnNob3dQYWdlVGl0bGVzICYmIHRoaXMudGl0bGUubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmlzRGVzaWduTW9kZSAmJiBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGl0bGVBY3Rpb25zKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciB0aXRsZUFjdGlvbnMgPSBzdXBlci5nZXRUaXRsZUFjdGlvbnMoKTtcbiAgICB0aGlzLnRpdGxlQWN0aW9ucyA9IHRoaXMuc3VydmV5LmdldFVwZGF0ZWRQYW5lbFRpdGxlQWN0aW9ucyhcbiAgICAgIHRoaXMsXG4gICAgICB0aXRsZUFjdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnRpdGxlQWN0aW9ucztcbiAgfVxuXG4gIGdldCBfc2hvd0Rlc2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoKDxhbnk+dGhpcy5zdXJ2ZXkpLnNob3dQYWdlVGl0bGVzICYmIHRoaXMuZGVzY3JpcHRpb24ubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmlzRGVzaWduTW9kZSAmJlxuICAgICAgICBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlICYmXG4gICAgICAgIHNldHRpbmdzLmFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGUpXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUGFuZWxNb2RlbCBvciBQYWdlTW9kZWwgZGVzY3JpcHRpb24gcHJvcGVydHkuIEl0IHJlbmRlcnMgdW5kZXIgdGl0bGUgYnkgdXNpbmcgc21hbGxlciBmb250LiBVbmxpa2UgdGhlIHRpdGxlLCBkZXNjcmlwdGlvbiBjYW4gYmUgZW1wdHkuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoPEJhc2U+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSkpLmxvY2FsZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjaGFyL3N0cmluZyBmb3IgYSByZXF1aXJlZCBwYW5lbC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5yZXF1aXJlZFRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgJiYgdGhpcy5pc1JlcXVpcmVkXG4gICAgICA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dFxuICAgICAgOiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGl0bGVQYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlUGF0dGVybiA6IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0T25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwicmVxdWlyZU51bVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVJlcXVpcmVUaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHRleHQgdGhhdCB3aWxsIGJlIHNob3duIG9uIHJlcXVpcmVkIGVycm9yLiBVc2UgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHNob3cgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlcbiAgICAgID8gKDxJTG9jYWxpemFibGVPd25lcj4oPGFueT50aGlzLnN1cnZleSkpLmdldExvY2FsZSgpXG4gICAgICA6IFwiXCI7XG4gIH1cbiAgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKVxuICAgICAgOiBudWxsO1xuICB9XG4gIGdldFJlbmRlcmVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0UmVuZGVyZXJGb3JTdHJpbmcodGhpcywgbmFtZSkgOiBudWxsO1xuICB9XG4gIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yXG4gICAgICA/IHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dCh0ZXh0LCB0cnVlKVxuICAgICAgOiB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBBIHBhcmVudCBlbGVtZW50LiBJdCBpcyBhbHdheXMgbnVsbCBmb3IgdGhlIFBhZ2Ugb2JqZWN0IGFuZCBhbHdheXMgbm90IG51bGwgZm9yIHRoZSBQYW5lbCBvYmplY3QuIFBhbmVsIG9iamVjdCBtYXkgY29udGFpbiBRdWVzdGlvbnMgYW5kIG90aGVyIFBhbmVscy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFyZW50KHZhbDogUGFuZWxNb2RlbEJhc2UpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXJlbnRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlcHRoKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMucGFyZW50ID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5kZXB0aCArIDE7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgdHJ1ZSB0aGUgUGFuZWwgYmVjb21lcyB2aXNpYmxlIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlIHRoZSBQYW5lbCBiZWNvbWVzIGludmlzaWJsZS4gVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIHZpc2libGUgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSB2aXNpYmxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSWZcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGNzc0NsYXNzZXNWYWx1ZTogYW55O1xuICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHRoaXMuY2FsY0Nzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBjYWxjQ3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHZhciBjbGFzc2VzID0geyBwYW5lbDoge30sIGVycm9yOiB7fSwgcm93OiBcIlwiIH07XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLnBhbmVsLCB0aGlzLmNzcy5wYW5lbCk7XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLmVycm9yLCB0aGlzLmNzcy5lcnJvcik7XG4gICAgaWYgKCEhdGhpcy5jc3Mucm93KSB7XG4gICAgICBjbGFzc2VzLnJvdyA9IHRoaXMuY3NzLnJvdztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS51cGRhdGVQYW5lbENzc0NsYXNzZXModGhpcywgY2xhc3Nlcyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBlbGVtZW50IGlkZW50aWZpY2F0b3IuIEl0IGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpZFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYW5lbC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgY3VycmVudCBvYmplY3QgaXMgUGFnZSAoYSByb290IFBhbmVsKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFBhbmVsKCk6IElQYW5lbCB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0TGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIGlzTGF5b3V0VHlwZVN1cHBvcnRlZChsYXlvdXRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGF5b3V0VHlwZSAhPT0gXCJmbG93XCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxsIHF1ZXN0aW9ucyBsb2NhdGVkIGluIHRoZSBQYW5lbC9QYWdlLCBpbmNsdWRpbmcgaW4gdGhlIG5lc3RlZCBQYW5lbHMuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICogQHNlZSBlbGVtZW50c1xuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnMoKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICBpZiAoIXRoaXMuaXNRdWVzdGlvbnNSZWFkeSkge1xuICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZSA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICAgdmFyIHFzID0gKDxQYW5lbE1vZGVsPmVsKS5xdWVzdGlvbnM7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZS5wdXNoKHFzW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbnNWYWx1ZS5wdXNoKDxRdWVzdGlvbj5lbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNRdWVzdGlvbnNSZWFkeSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25zVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbGlkTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghIW5hbWUpIHJldHVybiBuYW1lLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcXVlc3Rpb24gYnkgaXRzIG5hbWVcbiAgICogQHBhcmFtIG5hbWUgdGhlIHF1ZXN0aW9uIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHF1ZXN0aW9uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEl0IHdvcmtzIHJlY3Vyc2l2ZWx5LlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgZWxlbWVudCBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0RWxlbWVudEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBJRWxlbWVudCB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmIChlbC5uYW1lID09IG5hbWUpIHJldHVybiBlbDtcbiAgICAgIHZhciBwbmwgPSBlbC5nZXRQYW5lbCgpO1xuICAgICAgaWYgKCEhcG5sKSB7XG4gICAgICAgIHZhciByZXMgPSAoPFBhbmVsTW9kZWxCYXNlPnBubCkuZ2V0RWxlbWVudEJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZSh2YWx1ZU5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCkgPT0gdmFsdWVOYW1lKSByZXR1cm4gcXVlc3Rpb25zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbiB2YWx1ZXMgb24gdGhlIGN1cnJlbnQgcGFnZVxuICAgKi9cbiAgcHVibGljIGdldFZhbHVlKCk6IGFueSB7XG4gICAgdmFyIGRhdGE6IGFueSA9IHt9O1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmIChxLmlzRW1wdHkoKSkgY29udGludWU7XG4gICAgICB2YXIgdmFsdWVOYW1lID0gcS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIGRhdGFbdmFsdWVOYW1lXSA9IHEudmFsdWU7XG4gICAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLmRhdGEuZ2V0Q29tbWVudCh2YWx1ZU5hbWUpO1xuICAgICAgICBpZiAoISFjb21tZW50KSB7XG4gICAgICAgICAgZGF0YVt2YWx1ZU5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4XSA9IGNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBxdWVzdGlvbnMgdmFsdWVzIGFzIGEgSlNPTiBvYmplY3Qgd2l0aCBkaXNwbGF5IHRleHQuIEZvciBleGFtcGxlLCBmb3IgZHJvcGRvd24sIGl0IHdvdWxkIHJldHVybiB0aGUgaXRlbSB0ZXh0IGluc3RlYWQgb2YgaXRlbSB2YWx1ZS5cbiAgICogQHBhcmFtIGtleXNBc1RleHQgU2V0IHRoaXMgdmFsdWUgdG8gdHJ1ZSwgdG8gcmV0dXJuIGtleSAoaW4gbWF0cmljZXMgcXVlc3Rpb25zKSBhcyBkaXNwbGF5IHRleHQgYXMgd2VsbC5cbiAgICovXG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dDogYm9vbGVhbik6IGFueSB7XG4gICAgdmFyIGRhdGE6IGFueSA9IHt9O1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmIChxLmlzRW1wdHkoKSkgY29udGludWU7XG4gICAgICB2YXIgdmFsdWVOYW1lID0ga2V5c0FzVGV4dCA/IHEudGl0bGUgOiBxLmdldFZhbHVlTmFtZSgpO1xuICAgICAgZGF0YVt2YWx1ZU5hbWVdID0gcS5nZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9uIGNvbW1lbnRzIG9uIHRoZSBjdXJyZW50IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRDb21tZW50cygpOiBhbnkge1xuICAgIHZhciBjb21tZW50cyA9IHt9O1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gY29tbWVudHM7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBjb21tZW50ID0gdGhpcy5kYXRhLmdldENvbW1lbnQocS5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgICBpZiAoISFjb21tZW50KSB7XG4gICAgICAgICg8YW55PmNvbW1lbnRzKVtxLmdldFZhbHVlTmFtZSgpXSA9IGNvbW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21tZW50cztcbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbGwgcXVlc3Rpb24gdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQgcGFnZS9wYW5lbCwgdGhhdCBlbmQtdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIGVudGVyLlxuICAgKiBGb3IgZXhhbXBsZSB0aGUgdmFsdWUgdGhhdCBkb2Vzbid0IGV4aXN0cyBpbiBhIHJhZGlncm91cC9kcm9wZG93bi9jaGVja2JveCBjaG9pY2VzIG9yIG1hdHJpeCByb3dzL2NvbHVtbnMuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2xlYXIgdmFsdWVzIGZvciBpbnZpc2libGUgcXVlc3Rpb25zIG9yIHZhbHVlcyB0aGF0IGRvZXNuJ3QgYXNzb2NpYXRlZCB3aXRoIHF1ZXN0aW9ucy5cbiAgICogQHNlZSBRdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlc1xuICAgKi9cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIGFsbCBlcnJvcnMgaW4gdGhlIHBhbmVsIC8gcGFnZSBhbmQgYWxsIGl0cyBjaGlsZCBlbGVtZW50cyAocGFuZWxzIGFuZCBxdWVzdGlvbnMpXG4gICAqL1xuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cbiAgcHJpdmF0ZSBtYXJrUXVlc3Rpb25MaXN0RGlydHkoKSB7XG4gICAgdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucGFyZW50KSB0aGlzLnBhcmVudC5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIG9iamVjdCwgUGFuZWwvUGFnZS4gRWxlbWVudHMgY2FuIGJlIHF1ZXN0aW9ucyBvciBwYW5lbHMuIFRoZSBmdW5jdGlvbiBkb2Vzbid0IHJldHVybiBlbGVtZW50cyBpbiB0aGUgbmVzdGVkIFBhbmVscy5cbiAgICovXG4gIHB1YmxpYyBnZXQgZWxlbWVudHMoKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50c1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBlbGVtZW50IGJlbG9uZ3MgdG8gdGhlIFBhbmVsL1BhZ2UuIEl0IGxvb2tzIGluIG5lc3RlZCBQYW5lbHMgYXMgd2VsbC5cbiAgICogQHBhcmFtIGVsZW1lbnRcbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnNFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWw6IGFueSA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICBpZiAoZWwgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgcG5sID0gZWwuZ2V0UGFuZWwoKTtcbiAgICAgIGlmICghIXBubCkge1xuICAgICAgICBpZiAoKDxQYW5lbE1vZGVsQmFzZT5wbmwpLmNvbnRhaW5zRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gcmVxdWlyZSB0aGUgYW5zd2VyIGF0IGxlYXN0IGluIG9uZSBxdWVzdGlvbiBpbiB0aGUgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNSZXF1aXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgdHJ1ZSB0aGUgUGFuZWwvUGFnZSBiZWNvbWVzIHJlcXVpcmVkLlxuICAgKiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gaXNSZXF1aXJlZCBwcm9wZXJ0eSBpcyB1c2VkLlxuICAgKiBAc2VlIGlzUmVxdWlyZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgc2VhcmNoVGV4dCh0ZXh0OiBzdHJpbmcsIGZvdW5kZWQ6IEFycmF5PElGaW5kRWxlbWVudD4pIHtcbiAgICBzdXBlci5zZWFyY2hUZXh0KHRleHQsIGZvdW5kZWQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgKDxCYXNlPig8YW55PnRoaXMuZWxlbWVudHNbaV0pKS5zZWFyY2hUZXh0KHRleHQsIGZvdW5kZWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiB0aGVyZSBpcyBhbiBlcnJvciBvbiB0aGlzIFBhZ2Ugb3IgaW5zaWRlIHRoZSBjdXJyZW50IFBhbmVsXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIHRydWUsIHRvIHNob3cgZXJyb3JzIGluIFVJXG4gICAqIEBwYXJhbSBmb2N1c09uRmlyc3RFcnJvciBzZXQgaXQgdG8gdHJ1ZSB0byBmb2N1cyBvbiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBkb2Vzbid0IHBhc3MgdGhlIHZhbGlkYXRpb25cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSxcbiAgICBmb2N1c09uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHJlYzogYW55ID0gbnVsbFxuICApOiBib29sZWFuIHtcbiAgICByZWMgPSAhIXJlY1xuICAgICAgPyByZWNcbiAgICAgIDoge1xuICAgICAgICAgIGZpcmVDYWxsYmFjazogZmlyZUNhbGxiYWNrLFxuICAgICAgICAgIGZvY3VzZU9uRmlyc3RFcnJvcjogZm9jdXNPbkZpcnN0RXJyb3IsXG4gICAgICAgICAgZmlyc3RFcnJvclF1ZXN0aW9uOiA8YW55Pm51bGwsXG4gICAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB0aGlzLmhhc0Vycm9yc0NvcmUocmVjKTtcbiAgICBpZiAocmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbi5mb2N1cyh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYy5yZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvcnNJblBhbmVscyhyZWM6IGFueSkge1xuICAgIHZhciBlcnJvcnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB0aGlzLmhhc1JlcXVpcmVkRXJyb3IocmVjLCBlcnJvcnMpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIGN1c3RvbUVycm9yID0gdGhpcy5zdXJ2ZXkudmFsaWRhdGVQYW5lbCh0aGlzKTtcbiAgICAgIGlmIChjdXN0b21FcnJvcikge1xuICAgICAgICBlcnJvcnMucHVzaChjdXN0b21FcnJvcik7XG4gICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISFyZWMuZmlyZUNhbGxiYWNrKSB7XG4gICAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5iZWZvcmVTZXR0aW5nUGFuZWxFcnJvcnModGhpcywgZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH1cbiAgfVxuICAvL0lTdXJ2ZXlFcnJvck93bmVyXG4gIGdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvcik6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5nZXRFcnJvckN1c3RvbVRleHQodGV4dCwgZXJyb3IpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNSZXF1aXJlZEVycm9yKHJlYzogYW55LCBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xuICAgIGlmICghdGhpcy5pc1JlcXVpcmVkKSByZXR1cm47XG4gICAgdmFyIHZpc1F1ZXN0aW9ucyA9IDxBcnJheTxhbnk+PltdO1xuICAgIHRoaXMuYWRkUXVlc3Rpb25zVG9MaXN0KHZpc1F1ZXN0aW9ucywgdHJ1ZSk7XG4gICAgaWYgKHZpc1F1ZXN0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXZpc1F1ZXN0aW9uc1tpXS5pc0VtcHR5KCkpIHJldHVybjtcbiAgICB9XG4gICAgcmVjLnJlc3VsdCA9IHRydWU7XG4gICAgZXJyb3JzLnB1c2gobmV3IE9uZUFuc3dlclJlcXVpcmVkRXJyb3IodGhpcy5yZXF1aXJlZEVycm9yVGV4dCwgdGhpcykpO1xuICAgIGlmIChyZWMuZm9jdXNlT25GaXJzdEVycm9yICYmICFyZWMuZmlyc3RFcnJvclF1ZXN0aW9uKSB7XG4gICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gdmlzUXVlc3Rpb25zWzBdO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFzRXJyb3JzQ29yZShyZWM6IGFueSkge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuXG4gICAgICBpZiAoIWVsZW1lbnQuaXNWaXNpYmxlKSBjb250aW51ZTtcblxuICAgICAgaWYgKGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgICAoPFBhbmVsTW9kZWxCYXNlPig8YW55PmVsZW1lbnQpKS5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSA8UXVlc3Rpb24+ZWxlbWVudDtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocXVlc3Rpb24uaGFzRXJyb3JzKHJlYy5maXJlQ2FsbGJhY2ssIHJlYykpIHtcbiAgICAgICAgICBpZiAocmVjLmZvY3VzZU9uRmlyc3RFcnJvciAmJiByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLnJlc3VsdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5oYXNFcnJvcnNJblBhbmVscyhyZWMpO1xuICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldENvbnRhaW5zRXJyb3JzKCk7XG4gICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlbGVtZW50c1tpXS5jb250YWluc0Vycm9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB1cGRhdGVFbGVtZW50VmlzaWJpbGl0eSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAoPEJhc2U+KDxhbnk+ZWwpKS5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIGVsLmlzVmlzaWJsZSk7XG4gICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICAoPFBhbmVsTW9kZWxCYXNlPig8YW55PmVsKSkudXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMod2l0aEVycm9yOiBib29sZWFuID0gZmFsc2UpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmICghZWwuaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgIHZhciByZXMgPSAoPFBhbmVsTW9kZWxCYXNlPig8YW55PmVsKSkuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMoXG4gICAgICAgICAgd2l0aEVycm9yXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBxID0gPFF1ZXN0aW9uPmVsO1xuICAgICAgICBpZiAocS5oYXNJbnB1dCAmJiAoIXdpdGhFcnJvciB8fCBxLmN1cnJlbnRFcnJvckNvdW50ID4gMCkpIHJldHVybiBxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogQ2FsbCBpdCB0byBmb2N1cyB0aGUgaW5wdXQgb24gdGhlIGZpcnN0IHF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xuICAgIHZhciBxID0gdGhpcy5nZXRGaXJzdFF1ZXN0aW9uVG9Gb2N1cygpO1xuICAgIGlmICghIXEpIHtcbiAgICAgIHEuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gZm9jdXMgdGhlIGlucHV0IG9mIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGhhcyBhbiBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBmb2N1c0ZpcnN0RXJyb3JRdWVzdGlvbigpIHtcbiAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXModHJ1ZSk7XG4gICAgaWYgKCEhcSkge1xuICAgICAgcS5mb2N1cygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRmlsbCBsaXN0IGFycmF5IHdpdGggdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIGxpc3RcbiAgICogQHBhcmFtIHZpc2libGVPbmx5IHNldCBpdCB0byB0cnVlIHRvIGdldCB2aXNpYmxlIHF1ZXN0aW9ucyBvbmx5XG4gICAqL1xuICBwdWJsaWMgYWRkUXVlc3Rpb25zVG9MaXN0KFxuICAgIGxpc3Q6IEFycmF5PElRdWVzdGlvbj4sXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdChsaXN0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSwgZmFsc2UpO1xuICB9XG4gIC8qKlxuICAgKiBGaWxsIGxpc3QgYXJyYXkgd2l0aCB0aGUgcGFuZWxzLlxuICAgKiBAcGFyYW0gbGlzdFxuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsc0ludG9MaXN0KFxuICAgIGxpc3Q6IEFycmF5PElQYW5lbD4sXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdChcbiAgICAgIDxBcnJheTxJRWxlbWVudD4+KDxBcnJheTxhbnk+Pmxpc3QpLFxuICAgICAgdmlzaWJsZU9ubHksXG4gICAgICBpbmNsdWRpbmdEZXNpZ25UaW1lLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRFbGVtZW50c1RvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJRWxlbWVudD4sXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4sXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbixcbiAgICBpc1BhbmVsOiBib29sZWFuXG4gICkge1xuICAgIGlmICh2aXNpYmxlT25seSAmJiAhdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdENvcmUoXG4gICAgICBsaXN0LFxuICAgICAgdGhpcy5lbGVtZW50cyxcbiAgICAgIHZpc2libGVPbmx5LFxuICAgICAgaW5jbHVkaW5nRGVzaWduVGltZSxcbiAgICAgIGlzUGFuZWxcbiAgICApO1xuICB9XG4gIHByaXZhdGUgYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgIGxpc3Q6IEFycmF5PElFbGVtZW50PixcbiAgICBlbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuLFxuICAgIGluY2x1ZGluZ0Rlc2lnblRpbWU6IGJvb2xlYW4sXG4gICAgaXNQYW5lbDogYm9vbGVhblxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmICh2aXNpYmxlT25seSAmJiAhZWwudmlzaWJsZSkgY29udGludWU7XG4gICAgICBpZiAoKGlzUGFuZWwgJiYgZWwuaXNQYW5lbCkgfHwgKCFpc1BhbmVsICYmICFlbC5pc1BhbmVsKSkge1xuICAgICAgICBsaXN0LnB1c2goZWwpO1xuICAgICAgfVxuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5hZGRFbGVtZW50c1RvTGlzdENvcmUoXG4gICAgICAgICAgbGlzdCxcbiAgICAgICAgICAoPFBhbmVsTW9kZWw+ZWwpLmVsZW1lbnRzLFxuICAgICAgICAgIHZpc2libGVPbmx5LFxuICAgICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICAgICAgaXNQYW5lbFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluY2x1ZGluZ0Rlc2lnblRpbWUpIHtcbiAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRzVG9MaXN0Q29yZShcbiAgICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgICAoPFN1cnZleUVsZW1lbnQ+KDxhbnk+ZWwpKS5nZXRFbGVtZW50c0luRGVzaWduKGZhbHNlKSxcbiAgICAgICAgICAgIHZpc2libGVPbmx5LFxuICAgICAgICAgICAgaW5jbHVkaW5nRGVzaWduVGltZSxcbiAgICAgICAgICAgIGlzUGFuZWxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIFBhZ2UgYW5kIGl0IGlzIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkgfHwgPFBhZ2VNb2RlbD50aGlzLnN1cnZleS5jdXJyZW50UGFnZSA9PSB0aGlzLnJvb3Q7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUN1c3RvbVdpZGdldHMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IGRpZmZlcmVudCBmcm9tIFwiZGVmYXVsdFwiIHRvIHNldCB0aGUgc3BlY2lmaWMgcXVlc3Rpb24gdGl0bGUgbG9jYXRpb24gZm9yIHRoaXMgcGFuZWwvcGFnZS5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIGdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKVxuICAgICAgcmV0dXJuIHRoaXMub25HZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb24gIT0gXCJkZWZhdWx0XCIpXG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gICAgaWYgKHRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uIDogXCJ0b3BcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRJbmRleCgpO1xuICB9XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhcbiAgICAgIDxBcnJheTxTdXJ2ZXlFbGVtZW50Pj4oPGFueT50aGlzLmVsZW1lbnRzKSxcbiAgICAgIHRoaXMuaXNSZXF1aXJlZFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCByb290KCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICB2YXIgcmVzID0gPFBhbmVsTW9kZWxCYXNlPnRoaXM7XG4gICAgd2hpbGUgKHJlcy5wYXJlbnQpIHJlcyA9IHJlcy5wYXJlbnQ7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgY2hpbGRWaXNpYmlsaXR5Q2hhbmdlZCgpIHtcbiAgICB2YXIgbmV3SXNWaXNpYmxlVmFsdWUgPSB0aGlzLmdldElzUGFnZVZpc2libGUobnVsbCk7XG4gICAgdmFyIG9sZElzVmlzaWJsZVZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRydWUpO1xuICAgIGlmIChuZXdJc1Zpc2libGVWYWx1ZSAhPT0gb2xkSXNWaXNpYmxlVmFsdWUpIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIik7XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlUm93c1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgcm93LmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCB0aGlzLmJ1aWxkUm93cygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZWxlbWVudC5zZXRTdXJ2ZXlJbXBsKHRoaXMuc3VydmV5SW1wbCk7XG4gICAgZWxlbWVudC5wYXJlbnQgPSB0aGlzO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudCwgaW5kZXgpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHZhciBwID0gPFBhbmVsTW9kZWw+ZWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+ZWxlbWVudDtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25BZGRlZChxLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hZGRFbGVtZW50Q2FsbGJhY2spIHRoaXMuYWRkRWxlbWVudENhbGxiYWNrKGVsZW1lbnQpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgKDxCYXNlPig8YW55PmVsZW1lbnQpKS5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic3RhcnRXaXRoTmV3TGluZVwiLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25FbGVtZW50U3RhcnRXaXRoTmV3TGluZUNoYW5nZWQoZWxlbWVudCk7XG4gICAgICB9LFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgZWxlbWVudC5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgKDxCYXNlPig8YW55PmVsZW1lbnQpKS51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCIsIFwic3RhcnRXaXRoTmV3TGluZVwiXSxcbiAgICAgIHRoaXMuaWRcbiAgICApO1xuICAgIHRoaXMudXBkYXRlUm93c09uRWxlbWVudFJlbW92ZWQoZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW1vdmVkKDxRdWVzdGlvbj5lbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5wYW5lbFJlbW92ZWQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMucmVtb3ZlRWxlbWVudENhbGxiYWNrKSB0aGlzLnJlbW92ZUVsZW1lbnRDYWxsYmFjayhlbGVtZW50KTtcbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgb25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQpO1xuICAgIHRoaXMuY2hpbGRWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudC5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBvbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVJvd3NWaXNpYmlsaXR5KGVsZW1lbnQ6IGFueSkge1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkge1xuICAgICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjYW5CdWlsZFJvd3MoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkgPT0gXCJyb3dcIjtcbiAgfVxuICBwcml2YXRlIGJ1aWxkUm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgaWYgKCF0aGlzLmNhbkJ1aWxkUm93cygpKSByZXR1cm4gW107XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvblJvd01vZGVsPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHZhciBpc05ld1JvdyA9IGkgPT0gMCB8fCBlbC5zdGFydFdpdGhOZXdMaW5lO1xuICAgICAgdmFyIHJvdyA9IGlzTmV3Um93ID8gdGhpcy5jcmVhdGVSb3coKSA6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoaXNOZXdSb3cpIHJlc3VsdC5wdXNoKHJvdyk7XG4gICAgICByb3cuYWRkRWxlbWVudChlbCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0udXBkYXRlVmlzaWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUm93c09uRWxlbWVudEFkZGVkKGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNhbkJ1aWxkUm93cygpKSByZXR1cm47XG4gICAgdmFyIGRyYWdEcm9wSW5mbyA9IG5ldyBEcmFnRHJvcEluZm8obnVsbCwgZWxlbWVudCk7XG4gICAgZHJhZ0Ryb3BJbmZvLnRhcmdldCA9IGVsZW1lbnQ7XG4gICAgZHJhZ0Ryb3BJbmZvLmlzRWRnZSA9IHRoaXMuZWxlbWVudHMubGVuZ3RoID4gMTtcbiAgICBpZiAodGhpcy5lbGVtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPSB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcmFnRHJvcEluZm8uaXNCb3R0b20gPSBpbmRleCA+IDA7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPSB0aGlzLmVsZW1lbnRzWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gdGhpcy5lbGVtZW50c1tpbmRleCAtIDFdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9Sb3coZHJhZ0Ryb3BJbmZvLCBudWxsKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVJvd3NPbkVsZW1lbnRSZW1vdmVkKGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLmNhbkJ1aWxkUm93cygpKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3coXG4gICAgICBlbGVtZW50LFxuICAgICAgdGhpcy5maW5kUm93QnlFbGVtZW50KGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KFxuICAgIGVsZW1lbnQ6IElFbGVtZW50LFxuICAgIHJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApIHtcbiAgICBpZiAoIXJvdyB8fCAhcm93LnBhbmVsKSByZXR1cm47XG4gICAgdmFyIGVsSW5kZXggPSByb3cuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgICBpZiAoZWxJbmRleCA8IDApIHJldHVybjtcbiAgICByb3cuZWxlbWVudHMuc3BsaWNlKGVsSW5kZXgsIDEpO1xuICAgIGlmIChyb3cuZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJvdy5pbmRleCA+PSAwKSB7XG4gICAgICAgIHJvdy5wYW5lbC5yb3dzLnNwbGljZShyb3cuaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbmRSb3dCeUVsZW1lbnQoZWw6IElFbGVtZW50KTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocm93c1tpXS5lbGVtZW50cy5pbmRleE9mKGVsKSA+IC0xKSByZXR1cm4gcm93c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZWxlbWVudFdpZHRoQ2hhbmdlZChlbDogSUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciByb3cgPSB0aGlzLmZpbmRSb3dCeUVsZW1lbnQoZWwpO1xuICAgIGlmICghIXJvdykge1xuICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcmVuZGVyZWQgdGl0bGUgdGV4dCBvciBodG1sLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFRpdGxlKHRoaXMubG9jVGl0bGUudGV4dE9ySHRtbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkVGl0bGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3IgIT0gbnVsbFxuICAgICAgPyB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQoc3RyLCB0cnVlKVxuICAgICAgOiBzdHI7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBnZXQvc2V0IHRoZSBvYmplY3QgdmlzaWJpbGl0eS5cbiAgICogQHNlZSB2aXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdmFsdWUpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0aGlzLmlzVmlzaWJsZSk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgIHRoaXMuc3VydmV5LmlzQ2xlYXJWYWx1ZU9uSGlkZGVuQ29udGFpbmVyICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvblxuICAgICkge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlc3Rpb25zW2ldLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBvYmplY3QgaXMgdmlzaWJsZSBvciBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nIHx8IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTtcbiAgfVxuICBnZXRJc1BhZ2VWaXNpYmxlKGV4Y2VwdGlvblF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0gPT0gZXhjZXB0aW9uUXVlc3Rpb24pIGNvbnRpbnVlO1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgbGFzdFZpc2libGVJbmRleDogbnVtYmVyO1xuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1Zpc2libGUgfHwgaW5kZXggPCAwKSB7XG4gICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0aGlzLmxhc3RWaXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICB2YXIgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgIGluZGV4ICs9IHRoaXMuYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICB2YXIgcGFuZWxTdGFydEluZGV4ID0gdGhpcy5nZXRQYW5lbFN0YXJ0SW5kZXgoaW5kZXgpO1xuICAgIHZhciBwYW5lbEluZGV4ID0gcGFuZWxTdGFydEluZGV4O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFuZWxJbmRleCArPSB0aGlzLmVsZW1lbnRzW2ldLnNldFZpc2libGVJbmRleChwYW5lbEluZGV4KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDb250aW51ZU51bWJlcmluZygpKSB7XG4gICAgICBpbmRleCArPSBwYW5lbEluZGV4IC0gcGFuZWxTdGFydEluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggLSBzdGFydEluZGV4O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgaWYgKHRoaXMubGFzdFZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5yZXNldFZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5zZXRWaXNpYmxlSW5kZXgodGhpcy5sYXN0VmlzaWJsZUluZGV4KTtcbiAgfVxuICBwcml2YXRlIHJlc2V0VmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFZpc2libGVJbmRleCgtMSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsU3RhcnRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGludWVOdW1iZXJpbmcoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiByZWFkT25seSBwcm9wZXJ0eSBpcyB0cnVlIG9yIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgcGFyZW50IHBhbmVsL3BhZ2UgaXMgcmVhZE9ubHkuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubW9kZWxcbiAgICogQHNlZSByZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHZhciBpc1BhcmVudFJlYWRPbmx5ID0gISF0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5pc1JlYWRPbmx5O1xuICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSA8U3VydmV5RWxlbWVudD4oPGFueT50aGlzLmVsZW1lbnRzW2ldKTtcbiAgICAgIGVsLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlYWRPbmx5XCIsIGVsLmlzUmVhZE9ubHkpO1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbikge1xuICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gPFN1cnZleUVsZW1lbnQ+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSk7XG4gICAgICBlbC51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gICAgc3VwZXIudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUGFuZWwvUGFnZSBiZWNvbWVzIHJlYWQgb25seSBhbmQgYW4gZW5kLXVzZXIgd2lsbCBub3QgYWJsZSB0byBhbnN3ZXIgb24gcXVzdGlvbnMgaW5zaWRlIGl0LlxuICAgKiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gcmVhZE9ubHkgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSByZWFkT25seVxuICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhbiBlbGVtZW50IGludG8gUGFuZWwgb3IgUGFnZS4gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5BZGRFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGluc2VydEVsZW1lbnRBZnRlcihlbGVtZW50OiBJRWxlbWVudCwgYWZ0ZXI6IElFbGVtZW50KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoYWZ0ZXIpO1xuICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmFkZEVsZW1lbnQoZWxlbWVudCwgaW5kZXggKyAxKTtcbiAgfVxuICBwdWJsaWMgaW5zZXJ0RWxlbWVudEJlZm9yZShlbGVtZW50OiBJRWxlbWVudCwgYmVmb3JlOiBJRWxlbWVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGJlZm9yZSk7XG4gICAgaWYgKGluZGV4ID49IDApIHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuQWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIWVsZW1lbnQgJiYgZWxlbWVudC5pc0xheW91dFR5cGVTdXBwb3J0ZWQodGhpcy5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSlcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBxdWVzdGlvbiBpbnRvIFBhbmVsIG9yIFBhZ2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gYWRkZWQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICogQHBhcmFtIHF1ZXN0aW9uXG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbiwgaW5kZXg6IG51bWJlciA9IC0xKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRWxlbWVudChxdWVzdGlvbiwgaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwYW5lbCBpbnRvIFBhbmVsIG9yIFBhZ2UuICBSZXR1cm5zIHRydWUgaWYgdGhlIHBhbmVsIGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqIEBwYXJhbSBwYW5lbFxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbChwYW5lbDogUGFuZWxNb2RlbCwgaW5kZXg6IG51bWJlciA9IC0xKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRWxlbWVudChwYW5lbCwgaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHF1ZXN0aW9uIGFuZCBhZGRzIGl0IGF0IGxvY2F0aW9uIG9mIGluZGV4LCBieSBkZWZhdWx0IHRoZSBlbmQgb2YgdGhlIGVsZW1lbnRzIGxpc3QuIFJldHVybnMgbnVsbCwgaWYgdGhlIHF1ZXN0aW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkIG9yIGNvdWxkIG5vdCBiZSBhZGRlZCBpbnRvIHBhZ2Ugb3IgcGFuZWwuXG4gICAqIEBwYXJhbSBxdWVzdGlvblR5cGUgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6IFwidGV4dFwiLCBcImNoZWNrYm94XCIsIFwiZHJvcGRvd25cIiwgXCJtYXRyaXhcIiwgXCJodG1sXCIsIFwibWF0cml4ZHluYW1pY1wiLCBcIm1hdHJpeGRyb3Bkb3duXCIgYW5kIHNvIG9uLlxuICAgKiBAcGFyYW0gbmFtZSBhIHF1ZXN0aW9uIG5hbWVcbiAgICogQHBhcmFtIGluZGV4IGVsZW1lbnQgaW5kZXggaW4gdGhlIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgYWRkTmV3UXVlc3Rpb24oXG4gICAgcXVlc3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICBpbmRleDogbnVtYmVyID0gLTFcbiAgKTogUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbiA9IFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGUsIG5hbWUpO1xuICAgIGlmICghdGhpcy5hZGRRdWVzdGlvbihxdWVzdGlvbiwgaW5kZXgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGFuZWwgYW5kIGFkZHMgaXQgaW50byB0aGUgZW5kIG9mIHRoZSBlbGVtZW50cyBsaXN0LiBSZXR1cm5zIG51bGwsIGlmIHRoZSBwYW5lbCBjb3VsZCBub3QgYmUgY3JlYXRlZCBvciBjb3VsZCBub3QgYmUgYWRkZWQgaW50byBwYWdlIG9yIHBhbmVsLlxuICAgKiBAcGFyYW0gbmFtZSBhIHBhbmVsIG5hbWVcbiAgICovXG4gIHB1YmxpYyBhZGROZXdQYW5lbChuYW1lOiBzdHJpbmcgPSBudWxsKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbChuYW1lKTtcbiAgICBpZiAoIXRoaXMuYWRkUGFuZWwocGFuZWwpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcGFuZWw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGluZGV4IG9mIGVsZW1lbnQgcGFyYW1ldGVyIGluIHRoZSBlbGVtZW50cyBsaXN0LlxuICAgKiBAcGFyYW0gZWxlbWVudCBxdWVzdGlvbiBvciBwYW5lbFxuICAgKi9cbiAgcHVibGljIGluZGV4T2YoZWxlbWVudDogSUVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKG5hbWU6IHN0cmluZyk6IFBhbmVsTW9kZWwge1xuICAgIHZhciByZXMgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgcmVzLm5hbWUgPSBuYW1lO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBlbGVtZW50IChQYW5lbCBvciBRdWVzdGlvbikgZnJvbSB0aGUgZWxlbWVudHMgbGlzdC5cbiAgICogQHBhcmFtIGVsZW1lbnRcbiAgICogQHNlZSBlbGVtZW50c1xuICAgKi9cbiAgcHVibGljIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLnJlbW92ZUVsZW1lbnQoZWxlbWVudCkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBxdWVzdGlvbiAgZnJvbSB0aGUgZWxlbWVudHMgbGlzdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uXG4gICAqIEBzZWUgZWxlbWVudHNcbiAgICogQHNlZSByZW1vdmVFbGVtZW50XG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdGhpcy5yZW1vdmVFbGVtZW50KHF1ZXN0aW9uKTtcbiAgfVxuICBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHMuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbGVtZW50c1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZykge1xuICAgICAgdGhpcy5ydW5WaXNpYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMucnVuRW5hYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5ydW5SZXF1aXJlZENvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuVmlzaWJsZUNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybjtcbiAgICB2YXIgY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XG4gICAgY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnZpc2libGUgPSByZXM7XG4gICAgfTtcbiAgICBjb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSBydW5FbmFibGVDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlSWYpIHJldHVybjtcbiAgICB2YXIgY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmVuYWJsZUlmKTtcbiAgICBjb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMucmVhZE9ubHkgPSAhcmVzO1xuICAgIH07XG4gICAgY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuUmVxdWlyZWRDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMucmVxdWlyZWRJZikgcmV0dXJuO1xuICAgIHZhciBjb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMucmVxdWlyZWRJZik7XG4gICAgY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLmlzUmVxdWlyZWQgPSByZXM7XG4gICAgfTtcbiAgICBjb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gIH1cbiAgY2hlY2tCaW5kaW5ncyh2YWx1ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHZhciBlbHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoPEJhc2U+KDxhbnk+ZWxzW2ldKSkuY2hlY2tCaW5kaW5ncyh2YWx1ZU5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGRyYWdEcm9wQWRkVGFyZ2V0KGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvKSB7XG4gICAgdmFyIHByZXZSb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyhkcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICBpZiAodGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvUm93KGRyYWdEcm9wSW5mbywgcHJldlJvdykpIHtcbiAgICAgIHRoaXMudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KGRyYWdEcm9wSW5mby50YXJnZXQsIHByZXZSb3cpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZHJhZ0Ryb3BGaW5kUm93KGZpbmRFbGVtZW50OiBJU3VydmV5RWxlbWVudCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIGlmICghZmluZEVsZW1lbnQgfHwgZmluZEVsZW1lbnQuaXNQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZWxlbWVudCA9IDxJRWxlbWVudD5maW5kRWxlbWVudDtcbiAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dzW2ldLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPiAtMSkgcmV0dXJuIHJvd3NbaV07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBubCA9IHRoaXMuZWxlbWVudHNbaV0uZ2V0UGFuZWwoKTtcbiAgICAgIGlmICghcG5sKSBjb250aW51ZTtcbiAgICAgIHZhciByb3cgPSAoPFBhbmVsTW9kZWxCYXNlPnBubCkuZHJhZ0Ryb3BGaW5kUm93KGVsZW1lbnQpO1xuICAgICAgaWYgKCEhcm93KSByZXR1cm4gcm93O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9Sb3coXG4gICAgZHJhZ0Ryb3BJbmZvOiBEcmFnRHJvcEluZm8sXG4gICAgcHJldlJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWwoZHJhZ0Ryb3BJbmZvKSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIGRlc3QgPSBkcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgdmFyIGRlc3RSb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyhkZXN0KTtcbiAgICBpZiAoIWRlc3RSb3cpIHJldHVybiB0cnVlO1xuICAgIGlmICghZHJhZ0Ryb3BJbmZvLnRhcmdldC5zdGFydFdpdGhOZXdMaW5lKVxuICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KFxuICAgICAgICBkcmFnRHJvcEluZm8sXG4gICAgICAgIGRlc3RSb3csXG4gICAgICAgIHByZXZSb3dcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb05ld1JvdyhkcmFnRHJvcEluZm8sIGRlc3RSb3csIHByZXZSb3cpO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWwoZHJhZ0Ryb3BJbmZvOiBEcmFnRHJvcEluZm8pOiBib29sZWFuIHtcbiAgICBpZiAoZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uLmlzUGFnZSkge1xuICAgICAgdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRW1wdHlQYW5lbENvcmUoXG4gICAgICAgIHRoaXMucm9vdCxcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLnRhcmdldCxcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLmlzQm90dG9tXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBkZXN0ID0gPElFbGVtZW50PmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbjtcbiAgICBpZiAoZGVzdC5pc1BhbmVsICYmICFkcmFnRHJvcEluZm8uaXNFZGdlKSB7XG4gICAgICB2YXIgcGFuZWwgPSA8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZGVzdCk7XG4gICAgICBpZiAoKDxhbnk+ZHJhZ0Ryb3BJbmZvLnRhcmdldClbXCJ0ZW1wbGF0ZVwiXSA9PT0gZGVzdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGRyYWdEcm9wSW5mby5uZXN0ZWRQYW5lbERlcHRoIDwgMCB8fFxuICAgICAgICBkcmFnRHJvcEluZm8ubmVzdGVkUGFuZWxEZXB0aCA+PSBwYW5lbC5kZXB0aFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgICAgICAgIDxQYW5lbE1vZGVsQmFzZT4oPGFueT5kZXN0KSxcbiAgICAgICAgICBkcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIGRlc3RSb3c6IFF1ZXN0aW9uUm93TW9kZWwsXG4gICAgcHJldlJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBib29sZWFuIHtcbiAgICB2YXIgaW5kZXggPSBkZXN0Um93LmVsZW1lbnRzLmluZGV4T2YoPElFbGVtZW50PmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbik7XG4gICAgaWYgKFxuICAgICAgaW5kZXggPT0gMCAmJlxuICAgICAgIWRyYWdEcm9wSW5mby5pc0JvdHRvbSAmJlxuICAgICAgZGVzdFJvdy5lbGVtZW50c1swXS5zdGFydFdpdGhOZXdMaW5lXG4gICAgKSB7XG4gICAgICBpZiAoZGVzdFJvdy5pbmRleCA+IDApIHtcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLmlzQm90dG9tID0gdHJ1ZTtcbiAgICAgICAgZGVzdFJvdyA9IGRlc3RSb3cucGFuZWwucm93c1tkZXN0Um93LmluZGV4IC0gMV07XG4gICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9XG4gICAgICAgICAgZGVzdFJvdy5lbGVtZW50c1tkZXN0Um93LmVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRXhpc3RpbmdSb3coXG4gICAgICAgICAgZHJhZ0Ryb3BJbmZvLFxuICAgICAgICAgIGRlc3RSb3csXG4gICAgICAgICAgcHJldlJvd1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb05ld1JvdyhkcmFnRHJvcEluZm8sIGRlc3RSb3csIHByZXZSb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcHJldlJvd0luZGV4ID0gLTE7XG4gICAgaWYgKHByZXZSb3cgPT0gZGVzdFJvdykge1xuICAgICAgcHJldlJvd0luZGV4ID0gZGVzdFJvdy5lbGVtZW50cy5pbmRleE9mKGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIH1cbiAgICBpZiAoZHJhZ0Ryb3BJbmZvLmlzQm90dG9tKSBpbmRleCsrO1xuICAgIHZhciBzcmNSb3cgPSB0aGlzLmZpbmRSb3dCeUVsZW1lbnQoZHJhZ0Ryb3BJbmZvLnNvdXJjZSk7XG4gICAgaWYgKFxuICAgICAgc3JjUm93ID09IGRlc3RSb3cgJiZcbiAgICAgIHNyY1Jvdy5lbGVtZW50cy5pbmRleE9mKGRyYWdEcm9wSW5mby5zb3VyY2UpID09IGluZGV4XG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA9PSBwcmV2Um93SW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJldlJvd0luZGV4ID4gLTEpIHtcbiAgICAgIGRlc3RSb3cuZWxlbWVudHMuc3BsaWNlKHByZXZSb3dJbmRleCwgMSk7XG4gICAgICBpZiAocHJldlJvd0luZGV4IDwgaW5kZXgpIGluZGV4LS07XG4gICAgfVxuICAgIGRlc3RSb3cuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAwLCBkcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICBkZXN0Um93LnVwZGF0ZVZpc2libGUoKTtcbiAgICByZXR1cm4gcHJldlJvd0luZGV4IDwgMDtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coXG4gICAgZHJhZ0Ryb3BJbmZvOiBEcmFnRHJvcEluZm8sXG4gICAgZGVzdFJvdzogUXVlc3Rpb25Sb3dNb2RlbCxcbiAgICBwcmV2Um93OiBRdWVzdGlvblJvd01vZGVsXG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciB0YXJnZXRSb3cgPSBkZXN0Um93LnBhbmVsLmNyZWF0ZVJvdygpO1xuICAgIHRhcmdldFJvdy5hZGRFbGVtZW50KGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIHZhciBpbmRleCA9IGRlc3RSb3cuaW5kZXg7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgLy9zYW1lIHJvd1xuICAgIGlmICghIXByZXZSb3cgJiYgcHJldlJvdy5wYW5lbCA9PSB0YXJnZXRSb3cucGFuZWwgJiYgcHJldlJvdy5pbmRleCA9PSBpbmRleClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgICEhc3JjUm93ICYmXG4gICAgICBzcmNSb3cucGFuZWwgPT0gdGFyZ2V0Um93LnBhbmVsICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMubGVuZ3RoID09IDEgJiZcbiAgICAgIHNyY1Jvdy5pbmRleCA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZXN0Um93LnBhbmVsLnJvd3Muc3BsaWNlKGluZGV4LCAwLCB0YXJnZXRSb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSxcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuXG4gICkge1xuICAgIHZhciB0YXJnZXRSb3cgPSBwYW5lbC5jcmVhdGVSb3coKTtcbiAgICB0YXJnZXRSb3cuYWRkRWxlbWVudCh0YXJnZXQpO1xuICAgIGlmIChwYW5lbC5lbGVtZW50cy5sZW5ndGggPT0gMCB8fCBpc0JvdHRvbSkge1xuICAgICAgcGFuZWwucm93cy5wdXNoKHRhcmdldFJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnJvd3Muc3BsaWNlKDAsIDAsIHRhcmdldFJvdyk7XG4gICAgfVxuICB9XG4gIGRyYWdEcm9wTW92ZUVsZW1lbnQoc3JjOiBJRWxlbWVudCwgdGFyZ2V0OiBJRWxlbWVudCwgdGFyZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIHZhciBzcmNJbmRleCA9ICg8UGFuZWxNb2RlbEJhc2U+c3JjLnBhcmVudCkuZWxlbWVudHMuaW5kZXhPZihzcmMpO1xuICAgIGlmICh0YXJnZXRJbmRleCA+IHNyY0luZGV4KSB7XG4gICAgICB0YXJnZXRJbmRleC0tO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICB0aGlzLmFkZEVsZW1lbnQodGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGlmICh0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucm93c1tpXS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKDAsIHRoaXMucm93cy5sZW5ndGgpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRzLnNwbGljZSgwLCB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBlbGVtZW50LCBzaW1pbGFyIHRvIHRoZSBQYWdlIG9iamVjdHMuIEhvd2V2ZXIsIHVubGlrZSB0aGUgUGFnZSwgUGFuZWwgY2FuJ3QgYmUgYSByb290LlxuICogSXQgbWF5IGNvbnRhaW4gcXVlc3Rpb25zIGFuZCBvdGhlciBwYW5lbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYW5lbE1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJRWxlbWVudCwgSVRpdGxlT3duZXIge1xuICBwdWJsaWMgbWluV2lkdGg/OiBzdHJpbmc7XG4gIHB1YmxpYyBtYXhXaWR0aD86IHN0cmluZztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwid2lkdGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoISFzZWxmLnBhcmVudCkge1xuICAgICAgICBzZWxmLnBhcmVudC5lbGVtZW50V2lkdGhDaGFuZ2VkKHNlbGYpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImluZGVudFwiLCBcImlubmVySW5kZW50XCIsIFwicmlnaHRJbmRlbnRcIl0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWxcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfY29udGVudFwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgaWYgKGxpdmUpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0U3VydmV5KGxpdmUpIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldFN1cnZleShsaXZlKTtcbiAgfVxuICBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQvc2V0IHRoZSBwYWdlIHdoZXJlIHRoZSBwYW5lbCBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlKCk6IElQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2UodmFsOiBJUGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHBhbmVsIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcGFuZWwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhbmVsIGluIHRoZSBzdXJ2ZXkuIENvbW1vbmx5IGl0IGlzIC0xIGFuZCBpdCBkb2Vzbid0IHNob3cuXG4gICAqIFlvdSBoYXZlIHRvIHNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc2hvdyBpbmRleC9udW1iZXJpbmcgZm9yIHRoZSBQYW5lbFxuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc3RhcnQgc2hvd2luZyB0aGUgbnVtYmVyIGZvciB0aGlzIHBhbmVsLlxuICAgKiBAc2VlIHZpc2libGVJbmRleFxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TnVtYmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd051bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGVsZW1lbnRzIG51bWJlcnMgaW5zaWRlIHBhbmVsIGFyZSBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBkZWZhdWx0YCAtIGRpc3BsYXkgcXVlc3Rpb25zIG51bWJlcnMgYXMgZGVmaW5lZCBpbiBwYXJlbnQgcGFuZWwgb3Igc3VydmV5XG4gICAqIC0gYG9ucGFuZWxgIC0gZGlzcGxheSBxdWVzdGlvbnMgbnVtYmVycywgc3RhcnQgbnVtYmVyaW5nIGZyb20gYmVnaW5uaW5nIG9mIHRoaXMgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1F1ZXN0aW9uTnVtYmVycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIFwiZGVmYXVsdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4IGZvciBlbGVtZW50cyBpbnNpZGUgdGhlIHBhbmVsLiBUaGUgZmlyc3QgcXVlc3Rpb24gaW5kZXggaXMgJzEuJyBieSBkZWZhdWx0IGFuZCBpdCBpcyB0YWtlbiBmcm9tIHN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXggcHJvcGVydHkuXG4gICAqIFlvdSBtYXkgc3RhcnQgaXQgZnJvbSAnMTAwJyBvciBmcm9tICdBJywgYnkgc2V0dGluZyAnMTAwJyBvciAnQScgdG8gdGhpcyBwcm9wZXJ0eS5cbiAgICogWW91IGNhbiBzZXQgdGhlIHN0YXJ0IGluZGV4IHRvIFwiKDEpXCIgb3IgXCIjIEEpXCIgb3IgXCJhKVwiIHRvIHJlbmRlciBxdWVzdGlvbiBudW1iZXIgYXMgKDEpLCAjIEEpIGFuZCBhKSBhY2NvcmRpbmdseS5cbiAgICogQHNlZSBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCkgcmV0dXJuIHRoaXMucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBzdXBlci5nZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5vKHZpc2libGVJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCJub1wiLFxuICAgICAgSGVscGVycy5nZXROdW1iZXJCeUluZGV4KHRoaXMudmlzaWJsZUluZGV4LCB0aGlzLmdldFN0YXJ0SW5kZXgoKSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZpc2libGVJbmRleCA9IC0xO1xuICAgIGlmICh0aGlzLnNob3dOdW1iZXIgJiYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8ICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkpKSB7XG4gICAgICB2aXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIHZpc2libGVJbmRleCk7XG4gICAgdGhpcy5zZXRObyh2aXNpYmxlSW5kZXgpO1xuICAgIHJldHVybiB2aXNpYmxlSW5kZXggPCAwID8gMCA6IDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsU3RhcnRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib2ZmXCIpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25wYW5lbFwiKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGludWVOdW1iZXJpbmcoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9mZlwiICYmIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9ucGFuZWxcIlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICBzdXBlci5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQgJiYgcmVjLnJlc3VsdCAmJiByZWMuZmlyZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRUaXRsZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRSZW5kZXJlZFRpdGxlKHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsZWZ0IGluZGVudC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gaW5jcmVhc2UgdGhlIHBhbmVsIGxlZnQgaW5kZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbm5lciBpbmRlbnQuIFNldCB0aGlzIHByb3BlcnR5IHRvIGluY3JlYXNlIHRoZSBwYW5lbCBjb250ZW50IG1hcmdpbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJJbmRlbnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlubmVySW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIpO1xuICB9XG4gIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcGFuZWwgdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJpZ2h0IGluZGVudCBvZiB0aGUgUGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJpZ2h0SW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCB2YWwpO1xuICB9XG4gIGdldCBwYWRkaW5nTGVmdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCB2YWwpO1xuICB9XG4gIGdldCBpbm5lclBhZGRpbmdMZWZ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlubmVyUGFkZGluZ0xlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IGlubmVyUGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbm5lclBhZGRpbmdMZWZ0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdSaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nUmlnaHRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdSaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgb25JbmRlbnRDaGFuZ2VkKCkge1xuICAgIGlmICghdGhpcy5nZXRTdXJ2ZXkoKSkgcmV0dXJuO1xuICAgIHRoaXMuaW5uZXJQYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmlubmVySW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLnJpZ2h0SW5kZW50KTtcbiAgfVxuICBwcml2YXRlIGdldEluZGVudFNpemUoaW5kZW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRlbnQgPCAxKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgY3NzID0gKDxhbnk+dGhpcykuc3VydmV5W1wiY3NzXCJdO1xuICAgIGlmICghY3NzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gaW5kZW50ICogY3NzLnF1ZXN0aW9uLmluZGVudCArIFwicHhcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBRdWVzdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgUGFuZWxNb2RlbCkge1xuICAgICAgICBlbGVtZW50LmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRWRpdEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJwcmV2aWV3XCIpIHJldHVybiB0aGlzLmRlcHRoID09IDE7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3KCkge1xuICAgIGlmICghdGhpcy5oYXNFZGl0QnV0dG9uKSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2FuY2VsUHJldmlld0J5UGFnZSh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgdGhpcy5ub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYW5lbGJhc2VcIixcbiAgW1xuICAgIFwibmFtZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZWxlbWVudHNcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidmlzaWJsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAgICBcInJlYWRPbmx5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLCBcImhpZGRlblwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsQmFzZSgpO1xuICB9XG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInBhbmVsXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcInN0YXRlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJjb2xsYXBzZWRcIiwgXCJleHBhbmRlZFwiXSxcbiAgICB9LFxuICAgIFwiaXNSZXF1aXJlZDpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dDp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVxdWlyZWRFcnJvclRleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzdGFydFdpdGhOZXdMaW5lOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwid2lkdGhcIixcbiAgICB7IG5hbWU6IFwiaW5uZXJJbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXSB9LFxuICAgIHsgbmFtZTogXCJpbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFnZVwiLFxuICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICB2YXIgc3VydmV5ID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHN1cnZleVxuICAgICAgICAgID8gc3VydmV5LnBhZ2VzLm1hcCgocDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBbXTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBcInNob3dOdW1iZXI6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwib25wYW5lbFwiLCBcIm9mZlwiXSxcbiAgICB9LFxuICAgIFwicXVlc3Rpb25TdGFydEluZGV4XCIsXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbCgpO1xuICB9LFxuICBcInBhbmVsYmFzZVwiXG4pO1xuXG5FbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJwYW5lbFwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFBhbmVsTW9kZWwobmFtZSk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UsIEV2ZW50QmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcclxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuaW1wb3J0IHtcclxuICBQb3B1cFV0aWxzLFxyXG4gIFZlcnRpY2FsUG9zaXRpb24sXHJcbiAgSG9yaXpvbnRhbFBvc2l0aW9uLFxyXG4gIElQb3NpdGlvbixcclxufSBmcm9tIFwiLi91dGlscy9wb3B1cFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwTW9kZWwgZXh0ZW5kcyBCYXNlIHtcclxuICBAcHJvcGVydHkoKSBjb250ZW50Q29tcG9uZW50TmFtZTogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGNvbnRlbnRDb21wb25lbnREYXRhOiBhbnk7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImJvdHRvbVwiIH0pIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb247XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImxlZnRcIiB9KSBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pIHNob3dQb2ludGVyOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgaXNNb2RhbDogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6ICgpID0+IHt9IH0pIG9uQ2FuY2VsOiAoKSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogKCkgPT4ge30gfSkgb25BcHBseTogKCkgPT4gdm9pZDtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6ICgpID0+IHt9IH0pIG9uSGlkZTogKCkgPT4gdm9pZDtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6ICgpID0+IHt9IH0pIG9uU2hvdzogKCkgPT4gdm9pZDtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiXCIgfSkgY3NzQ2xhc3M6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbnRlbnRDb21wb25lbnROYW1lOiBzdHJpbmcsXHJcbiAgICBjb250ZW50Q29tcG9uZW50RGF0YTogYW55LFxyXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbiA9IFwiYm90dG9tXCIsXHJcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbiA9IFwibGVmdFwiLFxyXG4gICAgc2hvd1BvaW50ZXI6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgaXNNb2RhbDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgb25DYW5jZWwgPSAoKSA9PiB7fSxcclxuICAgIG9uQXBwbHkgPSAoKSA9PiB7fSxcclxuICAgIG9uSGlkZSA9ICgpID0+IHt9LFxyXG4gICAgb25TaG93ID0gKCkgPT4ge30sXHJcbiAgICBjc3NDbGFzczogc3RyaW5nID0gXCJcIlxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuY29udGVudENvbXBvbmVudE5hbWUgPSBjb250ZW50Q29tcG9uZW50TmFtZTtcclxuICAgIHRoaXMuY29udGVudENvbXBvbmVudERhdGEgPSBjb250ZW50Q29tcG9uZW50RGF0YTtcclxuICAgIHRoaXMudmVydGljYWxQb3NpdGlvbiA9IHZlcnRpY2FsUG9zaXRpb247XHJcbiAgICB0aGlzLmhvcml6b250YWxQb3NpdGlvbiA9IGhvcml6b250YWxQb3NpdGlvbjtcclxuICAgIHRoaXMuc2hvd1BvaW50ZXIgPSBzaG93UG9pbnRlcjtcclxuICAgIHRoaXMuaXNNb2RhbCA9IGlzTW9kYWw7XHJcbiAgICB0aGlzLm9uQ2FuY2VsID0gb25DYW5jZWw7XHJcbiAgICB0aGlzLm9uQXBwbHkgPSBvbkFwcGx5O1xyXG4gICAgdGhpcy5vbkhpZGUgPSBvbkhpZGU7XHJcbiAgICB0aGlzLm9uU2hvdyA9IG9uU2hvdztcclxuICAgIHRoaXMuY3NzQ2xhc3MgPSBjc3NDbGFzcztcclxuICB9XHJcbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBpc1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLmlzVmlzaWJsZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHZhbHVlKTtcclxuICAgIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCAmJiB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQodmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMub25TaG93KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9uSGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgdG9nZ2xlVmlzaWJpbGl0eSgpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gIXRoaXMuaXNWaXNpYmxlO1xyXG4gIH1cclxuICBwdWJsaWMgb25WaXNpYmlsaXR5Q2hhbmdlZDogKGlzVmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwQmFzZVZpZXdNb2RlbCBleHRlbmRzIEJhc2Uge1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCIwcHhcIiB9KSB0b3A6IHN0cmluZztcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiMHB4XCIgfSkgbGVmdDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJsZWZ0XCIgfSkgcG9wdXBEaXJlY3Rpb246IHN0cmluZztcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IHsgbGVmdDogXCIwcHhcIiwgdG9wOiBcIjBweFwiIH0gfSlcclxuICBwb2ludGVyVGFyZ2V0OiBJUG9zaXRpb247XHJcbiAgcHVibGljIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgY29uc3RydWN0b3IocHVibGljIG1vZGVsOiBQb3B1cE1vZGVsLCBwdWJsaWMgdGFyZ2V0RWxlbWVudD86IEhUTUxFbGVtZW50KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5tb2RlbC5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzVmlzaWJsZVwiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc1Zpc2libGU7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHVibGljIGdldCBjb250ZW50Q29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29udGVudENvbXBvbmVudERhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNob3dQb2ludGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWwuc2hvd1BvaW50ZXI7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNNb2RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLmlzTW9kYWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc3R5bGVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNzcyA9IHRoaXMubW9kZWwuY3NzQ2xhc3M7XHJcbiAgICBpZiAodGhpcy5pc01vZGFsKSB7XHJcbiAgICAgIGNzcyArPSBcIiBzdi1wb3B1cC0tbW9kYWxcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zaG93UG9pbnRlcikge1xyXG4gICAgICBjc3MgKz0gXCIgc3YtcG9wdXAtLXNob3ctcG9pbnRlclwiO1xyXG4gICAgICBjc3MgKz0gYCBzdi1wb3B1cC0tJHt0aGlzLnBvcHVwRGlyZWN0aW9ufWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNzcztcclxuICB9XHJcbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGJhY2tncm91bmQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5jb250YWluZXIuY2hpbGRyZW5bMF07XHJcbiAgICBjb25zdCBwb3B1cENvbnRhaW5lciA9IDxIVE1MRWxlbWVudD5iYWNrZ3JvdW5kLmNoaWxkcmVuWzBdO1xyXG4gICAgdGhpcy5wb3B1cERpcmVjdGlvbiA9IFBvcHVwVXRpbHMuY2FsY3VsYXRlUG9wdXBEaXJlY3Rpb24oXHJcbiAgICAgIHRoaXMubW9kZWwudmVydGljYWxQb3NpdGlvbixcclxuICAgICAgdGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb25cclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSBwb3B1cENvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCB3aWR0aCA9IHBvcHVwQ29udGFpbmVyLm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3QgcG9zID0gUG9wdXBVdGlscy5jYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgcmVjdCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgdGhpcy5tb2RlbC52ZXJ0aWNhbFBvc2l0aW9uLFxyXG4gICAgICB0aGlzLm1vZGVsLmhvcml6b250YWxQb3NpdGlvbixcclxuICAgICAgdGhpcy5zaG93UG9pbnRlclxyXG4gICAgKTtcclxuICAgIHRoaXMubGVmdCA9IHBvcy5sZWZ0ICsgXCJweFwiO1xyXG4gICAgdGhpcy50b3AgPSBwb3MudG9wICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dQb2ludGVyKSB7XHJcbiAgICAgIHRoaXMucG9pbnRlclRhcmdldCA9IFBvcHVwVXRpbHMuY2FsY3VsYXRlUG9pbnRlclRhcmdldChcclxuICAgICAgICByZWN0LFxyXG4gICAgICAgIHBvcy50b3AsXHJcbiAgICAgICAgcG9zLmxlZnQsXHJcbiAgICAgICAgdGhpcy5tb2RlbC52ZXJ0aWNhbFBvc2l0aW9uLFxyXG4gICAgICAgIHRoaXMubW9kZWwuaG9yaXpvbnRhbFBvc2l0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvaW50ZXJUYXJnZXQudG9wICs9IFwicHhcIjtcclxuICAgIHRoaXMucG9pbnRlclRhcmdldC5sZWZ0ICs9IFwicHhcIjtcclxuICB9XHJcbiAgcHVibGljIGNsaWNrT3V0c2lkZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RlbC5pc1Zpc2libGUgPSBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGNhbmNlbCgpIHtcclxuICAgIHRoaXMubW9kZWwub25DYW5jZWwoKTtcclxuICAgIHRoaXMubW9kZWwuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBhcHBseSgpIHtcclxuICAgIHRoaXMubW9kZWwub25BcHBseSgpO1xyXG4gICAgdGhpcy5tb2RlbC5pc1Zpc2libGUgPSBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGdldCBjYW5jZWxCdXR0b25UZXh0KCkge1xyXG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtb2RhbENhbmNlbEJ1dHRvblRleHRcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYXBwbHlCdXR0b25UZXh0KCkge1xyXG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtb2RhbEFwcGx5QnV0dG9uVGV4dFwiKTtcclxuICB9XHJcbiAgcHVibGljIGRpc3Bvc2UoKSB7XHJcbiAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLm1vZGVsLm9uVmlzaWJpbGl0eUNoYW5nZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBpbml0aWFsaXplUG9wdXBDb250YWluZXIoKSB7XHJcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7XHJcbiAgfVxyXG4gIHB1YmxpYyBkZXN0cm95UG9wdXBDb250YWluZXIoKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgIHRoaXMuY29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBTZXJpYWxpemVyLCBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7XG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlFbGVtZW50LFxuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElDb25kaXRpb25SdW5uZXIsXG4gIElTdXJ2ZXlJbXBsLFxuICBJUGFnZSxcbiAgRXZlbnRCYXNlLFxuICBJVGl0bGVPd25lcixcbiAgSVByb2dyZXNzSW5mbyxcbiAgQmFzZSxcbiAgSVN1cnZleSxcbn0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgQW5zd2VyUmVxdWlyZWRFcnJvciwgQ3VzdG9tRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgU3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIsIFZhbGlkYXRvclJ1bm5lciB9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgVGV4dFByZVByb2Nlc3NvciwgVGV4dFByZVByb2Nlc3NvclZhbHVlIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XG5pbXBvcnQgeyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwiLi9yZW5kZXJlckZhY3RvcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZGl0aW9uT2JqZWN0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRcbiAgaW1wbGVtZW50c1xuICAgIElRdWVzdGlvbixcbiAgICBJQ29uZGl0aW9uUnVubmVyLFxuICAgIElMb2NhbGl6YWJsZU93bmVyLFxuICAgIElWYWxpZGF0b3JPd25lcixcbiAgICBJVGl0bGVPd25lciB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBUZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwID0ge1xuICAgIHRpdGxlOiBcInByb2Nlc3NlZFRpdGxlXCIsXG4gICAgcmVxdWlyZTogXCJyZXF1aXJlZFRleHRcIixcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcXVlc3Rpb25Db3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbi5xdWVzdGlvbkNvdW50ZXIrKztcbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0N1c3RvbVdpZGdldFJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGN1c3RvbVdpZGdldFZhbHVlOiBRdWVzdGlvbkN1c3RvbVdpZGdldDtcbiAgY3VzdG9tV2lkZ2V0RGF0YSA9IHsgaXNOZWVkUmVuZGVyOiB0cnVlIH07XG4gIGZvY3VzQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHN1cnZleUxvYWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29uZGl0aW9uRW5hYmVsUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29uZGl0aW9uUmVxdWlyZWRSdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGNvbW1lbnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHZhbGlkYXRlVmFsdWVDYWxsYmFjazogKCkgPT4gU3VydmV5RXJyb3I7XG4gIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZUNhbGxiYWNrOiAoKSA9PiBzdHJpbmc7XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjazogKHF1ZXN0aW9uOiBRdWVzdGlvbiwgZWxlbWVudDogYW55KSA9PiBhbnk7XG4gIHZhbHVlRnJvbURhdGFDYWxsYmFjazogKHZhbDogYW55KSA9PiBhbnk7XG4gIHZhbHVlVG9EYXRhQ2FsbGJhY2s6ICh2YWw6IGFueSkgPT4gYW55O1xuICBvbkdldFN1cnZleTogKCkgPT4gSVN1cnZleTtcbiAgcHJpdmF0ZSBsb2NQcm9jZXNzZWRUaXRsZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHByb3RlY3RlZCBpc1JlYWR5VmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiBpc1JlYWR5IHByb3BlcnR5IG9mIHF1ZXN0aW9uIGlzIGNoYW5nZWQuXG4gICAqIDxici8+IG9wdGlvbnMucXVlc3Rpb24gLSB0aGUgcXVlc3Rpb25cbiAgICogPGJyLz4gb3B0aW9ucy5pc1JlYWR5IC0gY3VycmVudCB2YWx1ZSBvZiBpc1JlYWR5XG4gICAqIDxici8+IG9wdGlvbnMub2xkSXNSZWFkeSAtIG9sZCB2YWx1ZSBvZiBpc1JlYWR5XG4gICAqL1xuICBwdWJsaWMgb25SZWFkeUNoYW5nZWQ6IEV2ZW50QmFzZTxRdWVzdGlvbj4gPSB0aGlzLmFkZEV2ZW50PFF1ZXN0aW9uPigpO1xuXG4gIHB1YmxpYyBpc1JlYWRPbmx5UmVuZGVyRGl2KCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkgJiYgc2V0dGluZ3MucmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZSA9PT0gXCJkaXZcIjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuaWQgPSBRdWVzdGlvbi5nZXRRdWVzdGlvbklkKCk7XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbGlkYXRvcnNcIiwgKHZhbGlkYXRvcjogYW55KSA9PiB7XG4gICAgICB2YWxpZGF0b3IuZXJyb3JPd25lciA9IHRoaXM7XG4gICAgfSk7XG4gICAgdmFyIGxvY1RpdGxlVmFsdWUgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbG9jVGl0bGVWYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gdGV4dDtcbiAgICAgIHJldHVybiB0aGlzLnN1cnZleS5nZXRVcGRhdGVkUXVlc3Rpb25UaXRsZSh0aGlzLCB0ZXh0KTtcbiAgICB9O1xuICAgIHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5sb2NQcm9jZXNzZWRUaXRsZS5zaGFyZWREYXRhID0gbG9jVGl0bGVWYWx1ZTtcbiAgICB2YXIgbG9jQ29tbWVudFRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgICAgXCJjb21tZW50VGV4dFwiLFxuICAgICAgdGhpcyxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIGxvY0NvbW1lbnRUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIndpZHRoXCIsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICAgIHRoaXMucGFyZW50LmVsZW1lbnRXaWR0aENoYW5nZWQodGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzUmVxdWlyZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sb2NUaXRsZS5vbkNoYW5nZWQoKTtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImluZGVudFwiLCBcInJpZ2h0SW5kZW50XCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLm9uSW5kZW50Q2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJoYXNDb21tZW50XCIsIFwiaGFzT3RoZXJcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdENvbW1lbnRGcm9tU3VydmV5KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIGlmIChsaXZlKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhcmVudCA/ICg8QmFzZT4oPGFueT50aGlzLnBhcmVudCkpLmdldFN1cnZleShsaXZlKSA6IG51bGw7XG4gICAgfVxuICAgIGlmICghIXRoaXMub25HZXRTdXJ2ZXkpIHJldHVybiB0aGlzLm9uR2V0U3VydmV5KCk7XG4gICAgcmV0dXJuIHN1cGVyLmdldFN1cnZleSgpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZU5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIHRoaXMudmFsdWVOYW1lLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgaWYgeW91IHdhbnQgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIHJlc3VsdCBpbiB0aGUgbmFtZSBkaWZmZXJlbnQgZnJvbSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogUXVlc3Rpb24gbmFtZSBzaG91bGQgYmUgdW5pcXVlIGluIHRoZSBzdXJ2ZXkgYW5kIHZhbHVlTmFtZSBjb3VsZCBiZSBub3QgdW5pcXVlLiBJdCBhbGxvd3MgdG8gc2hhcmUgZGF0YSBiZXR3ZWVuIHNldmVyYWwgcXVlc3Rpb25zIHdpdGggdGhlIHNhbWUgdmFsdWVOYW1lLlxuICAgKiBUaGUgbGlicmFyeSBzZXQgdGhlIHZhbHVlIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHF1ZXN0aW9uLm5hbWUgcHJvcGVydHkgaXMgbm90IHZhbGlkLiBGb3IgZXhhbXBsZSwgaWYgaXQgY29udGFpbnMgdGhlIHBlcmlvZCAnLicgc3ltYm9sLlxuICAgKiBJbiB0aGlzIGNhc2UgaWYgeW91IHNldCB0aGUgcXVlc3Rpb24ubmFtZSBwcm9wZXJ0eSB0byAneC55JyB0aGVuIHRoZSB2YWx1ZU5hbWUgYmVjb21lcyAneCB5Jy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB2YXIgb2xkVmFsdWVOYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmFsdWVOYW1lQ2hhbmdlZChvbGRWYWx1ZU5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlTmFtZUNoYW5nZWQob2xkVmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblJlbmFtZWQoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgISFvbGRWYWx1ZSA/IG9sZFZhbHVlIDogdGhpcy5uYW1lXG4gICAgKTtcbiAgICB0aGlzLmluaXREYXRhRnJvbVN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBvbk5hbWVDaGFuZ2VkKG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvY1RpdGxlLm9uQ2hhbmdlZCgpO1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblJlbmFtZWQoXG4gICAgICB0aGlzLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICB0aGlzLnZhbHVlTmFtZSA/IHRoaXMudmFsdWVOYW1lIDogb2xkVmFsdWVcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWR5VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBpcyBxdWVzdGlvbiByZWFkeSB0byB1c2VcbiAgICovXG4gIHB1YmxpYyBjaG9pY2VzTG9hZGVkKCk6IHZvaWQge31cbiAgLyoqXG4gICAqIEdldC9zZXQgdGhlIHBhZ2Ugd2hlcmUgdGhlIHF1ZXN0aW9uIGlzIGxvY2F0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2UoKTogSVBhZ2Uge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2UodGhpcy5wYXJlbnQpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFnZSh2YWw6IElQYWdlKSB7XG4gICAgdGhpcy5zZXRQYWdlKHRoaXMucGFyZW50LCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBkZWxldGUoKSB7XG4gICAgaWYgKCEhdGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2VsZkZyb21MaXN0KHRoaXMucGFyZW50LmVsZW1lbnRzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0Zsb3dMYXlvdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF5b3V0VHlwZSgpID09PSBcImZsb3dcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXlvdXRUeXBlICE9PSBcImZsb3dcIjtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldC9zZXQgdGhlIHF1ZXN0aW9uIHZpc2liaWxpdHkuXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbikge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlICYmIHRoaXMuZXJyb3JzICYmIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gY2hvb3NlIGhvdyBvdGhlciBxdWVzdGlvbiB2YWx1ZXMgd2lsbCBiZSByZW5kZXJlZCBpbiB0aXRsZSBpZiByZWZlcmVuY2VkIGluIHt9LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgdHJ1ZSB0aGUgUXVlc3Rpb24gYmVjb21lcyB2aXNpYmxlIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlIHRoZSBRdWVzdGlvbiBiZWNvbWVzIGludmlzaWJsZS4gVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIHZpc2libGUgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSB2aXNpYmxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBpcyB2aXNpYmxlIG9yIHN1cnZleSBpcyBpbiBkZXNpZ24gbW9kZSByaWdodCBub3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXJlRW1wdHlFbGVtZW50c0hpZGRlbiAmJiB0aGlzLmlzRW1wdHkoKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlIHx8IHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2aXNpYmxlIGluZGV4IG9mIHRoZSBxdWVzdGlvbiBpbiB0aGUgc3VydmV5LiBJdCBjYW4gYmUgZnJvbSAwIHRvIGFsbCB2aXNpYmxlIHF1ZXN0aW9ucyBjb3VudCAtIDFcbiAgICogVGhlIHZpc2libGVJbmRleCBpcyAtMSBpZiB0aGUgdGl0bGUgaXMgJ2hpZGRlbicgb3IgaGlkZU51bWJlciBpcyB0cnVlXG4gICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgKiBAc2VlIGhpZGVOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBoaWRlTnVtYmVyIHRvIHRydWUgdG8gc3RvcCBzaG93aW5nIHRoZSBudW1iZXIgZm9yIHRoaXMgcXVlc3Rpb24uIFRoZSBxdWVzdGlvbiB3aWxsIG5vdCBiZSBjb3VudGVyXG4gICAqIEBzZWUgdmlzaWJsZUluZGV4XG4gICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBoaWRlTnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoaWRlTnVtYmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZU51bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBtYXkgaGF2ZSBhIHRpdGxlIGxvY2F0ZWQgb24gdGhlIGxlZnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nIGFzIGl0IHJlcHJlc2VudHMgaW4gdGhlIGpzb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInF1ZXN0aW9uXCI7XG4gIH1cbiAgLyoqXG4gICAqIE1vdmUgcXVlc3Rpb24gdG8gYSBuZXcgY29udGFpbmVyIFBhZ2UvUGFuZWwuIEFkZCBhcyBhIGxhc3QgZWxlbWVudCBpZiBpbnNlcnRCZWZvcmUgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIG9yIGluc2VydGVkIGludG8gdGhlIGdpdmVuIGluZGV4LFxuICAgKiBpZiBpbnNlcnQgcGFyYW1ldGVyIGlzIG51bWJlciwgb3IgYmVmb3JlIHRoZSBnaXZlbiBlbGVtZW50LCBpZiB0aGUgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBhIHF1ZXN0aW9uIG9yIHBhbmVsXG4gICAqIEBwYXJhbSBjb250YWluZXIgUGFnZSBvciBQYW5lbCB0byB3aGVyZSBhIHF1ZXN0aW9uIGlzIHJlbG9jYXRlZC5cbiAgICogQHBhcmFtIGluc2VydEJlZm9yZSBVc2UgaXQgaWYgeW91IHdhbnQgdG8gc2V0IHRoZSBxdWVzdGlvbiB0byBhIHNwZWNpZmljIHBvc2l0aW9uLiBZb3UgbWF5IHVzZSBhIG51bWJlciAodXNlIDAgdG8gaW5zZXJ0IGludCB0aGUgYmVnaW5uaW5nKSBvciBlbGVtZW50LCBpZiB5b3Ugd2FudCB0byBpbnNlcnQgYmVmb3JlIHRoaXMgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBtb3ZlVG8oY29udGFpbmVyOiBJUGFuZWwsIGluc2VydEJlZm9yZTogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vdmVUb0Jhc2UodGhpcy5wYXJlbnQsIGNvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIGlmICghdGhpcy5oYXNJbnB1dCkgcmV0dXJuIHN1cGVyLmdldFByb2dyZXNzSW5mbygpO1xuICAgIHJldHVybiB7XG4gICAgICBxdWVzdGlvbkNvdW50OiAxLFxuICAgICAgYW5zd2VyZWRRdWVzdGlvbkNvdW50OiAhdGhpcy5pc0VtcHR5KCkgPyAxIDogMCxcbiAgICAgIHJlcXVpcmVkUXVlc3Rpb25Db3VudDogdGhpcy5pc1JlcXVpcmVkID8gMSA6IDAsXG4gICAgICByZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDogIXRoaXMuaXNFbXB0eSgpICYmIHRoaXMuaXNSZXF1aXJlZCA/IDEgOiAwLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zKCkge1xuICAgIGlmICh0aGlzLmRhdGEgJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgICAgdGhpcy5ydW5Db25kaXRpb24oXG4gICAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uQ3JlYXRlZCh0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSAmJiAhdGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgdmFyIHByb3BzID0gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCkgOiB7fTtcbiAgICBwcm9wcy5xdWVzdGlvbiA9IHRoaXM7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIC8qKlxuICAgKiBBIHBhcmVudCBlbGVtZW50LiBJdCBjYW4gYmUgcGFuZWwgb3IgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYW5lbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IElQYW5lbCkge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5kZWxldGUoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXJlbnRcIiwgdmFsKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgdGhpcy5vblBhcmVudENoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHBhcmVudFF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uID0gbnVsbDtcbiAgLyoqXG4gICAqIEEgcGFyZW50IHF1ZXN0aW9uLiBJdCBjYW4gYmUgYSBkeW5hbWljIHBhbmVsIG9yIGR5bmFtaWMvZHJvcGRvd24gbWF0cmljZXMuIElmIHRoZSB2YWx1ZSBpcyBhIG1hdHJpeCwgaXQgbWVhbnMgdGhhdCBxdWVzdGlvbiBpcyBhIGNlbGwgcXVlc3Rpb24uXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgbnVsbCBmb3IgYSBzdGFuZCBhbG9uZSBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyZW50UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudFF1ZXN0aW9uVmFsdWU7XG4gIH1cbiAgc2V0UGFyZW50UXVlc3Rpb24odmFsOiBRdWVzdGlvbikge1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25WYWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uUGFyZW50UXVlc3Rpb25DaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUGFyZW50UXVlc3Rpb25DaGFuZ2VkKCkge31cbiAgcHJvdGVjdGVkIG9uUGFyZW50Q2hhbmdlZCgpIHt9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBxdWVzdGlvbiBkb2Vzbid0IGhhdmUgYSB0aXRsZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGU6IFF1ZXN0aW9uSHRtbE1vZGVsLCBvciB0aXRsZUxvY2F0aW9uIHByb3BlcnR5IGVxdWFscyB0byBcImhpZGRlblwiXG4gICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgIT09IFwiaGlkZGVuXCI7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IGRpZmZlcmVudCBmcm9tIFwiZGVmYXVsdFwiIHRvIHNldCB0aGUgc3BlY2lmaWMgcXVlc3Rpb24gdGl0bGUgbG9jYXRpb24gZm9yIHRoaXMgcGFuZWwvcGFnZS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGlzVmlzaWJpbGl0eUNoYW5nZWQgPVxuICAgICAgdGhpcy50aXRsZUxvY2F0aW9uID09IFwiaGlkZGVuXCIgfHwgdmFsdWUgPT0gXCJoaWRkZW5cIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICBpZiAoaXNWaXNpYmlsaXR5Q2hhbmdlZCkge1xuICAgICAgdGhpcy5ub3RpZnlTdXJ2ZXlWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQodGhpcywgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICh0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJiAhdGhpcy52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGl0bGUgbG9jYXRpb24gYmFzZWQgb24gcXVlc3Rpb24gdGl0bGVMb2NhdGlvbiBwcm9wZXJ0eSBhbmQgUXVlc3Rpb25UaXRsZUxvY2F0aW9uIG9mIGl0J3MgcGFyZW50c1xuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5RdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5RdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGbG93TGF5b3V0KSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLmdldFRpdGxlTG9jYXRpb25Db3JlKCk7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcImxlZnRcIiAmJiAhdGhpcy5pc0FsbG93VGl0bGVMZWZ0KSBsb2NhdGlvbiA9IFwidG9wXCI7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRUaXRsZUxvY2F0aW9uQ29yZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRpdGxlTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy50aXRsZUxvY2F0aW9uO1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gICAgcmV0dXJuIFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25MZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1RpdGxlICYmIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpID09PSBcImxlZnRcIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJ0b3BcIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJib3R0b21cIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPbkxlZnRUb3AoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc1RpdGxlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGxvY2F0aW9uID0gdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCk7XG4gICAgcmV0dXJuIGxvY2F0aW9uID09PSBcImxlZnRcIiB8fCBsb2NhdGlvbiA9PT0gXCJ0b3BcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gOiBcInRvcFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBxdWVzdGlvbiBkb2Vzbid0IGhhdmUgYW4gaW5wdXQgZWxlbWVudCwgZm9yIGV4YW1wbGU6IFF1ZXN0aW9uSHRtbE1vZGVsXG4gICAqIEBzZWUgaGFzU2luZ2xlSW5wdXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHF1ZXN0aW9uIGRvZXNuJ3QgaGF2ZSBhbiBpbnB1dCBlbGVtZW50IG9yIGhhdmUgbXVsdGlwbGUgaW5wdXRzOiBtYXRyaWNlcyBvciBwYW5lbCBkeW5hbWljXG4gICAqIEBzZWUgaGFzSW5wdXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzSW5wdXQ7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQgKyBcImlcIjtcbiAgfVxuICAvKipcbiAgICogUXVlc3Rpb24gdGl0bGUuIFVzZSBzdXJ2ZXkgcXVlc3Rpb25UaXRsZVRlbXBsYXRlIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgdGl0bGUgcXVlc3Rpb24gaXMgcmVuZGVyZWQuIElmIGl0IGlzIGVtcHR5LCB0aGVuIHF1ZXN0aW9uIG5hbWUgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlVGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB0aGlzLm5hbWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xuICB9XG4gIC8qKlxuICAgKiBRdWVzdGlvbiBkZXNjcmlwdGlvbi4gSXQgcmVuZGVycyB1bmRlciBxdWVzdGlvbiB0aXRsZSBieSB1c2luZyBzbWFsbGVyIGZvbnQuIFVubGlrZSB0aGUgdGl0bGUsIGRlc2NyaXB0aW9uIGNhbiBiZSBlbXB0eS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSB0aXRsZVxuICAgKi9cbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHRydWUgfSlcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFF1ZXN0aW9uIGRlc2NyaXB0aW9uIGxvY2F0aW9uLiBCeSBkZWZhdWx0LCB2YWx1ZSBpcyBcImRlZmF1bHRcIiBhbmQgaXQgZGVwZW5kcyBvbiBzdXJ2ZXkgcXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uIHByb3BlcnR5XG4gICAqIFlvdSBtYXkgY2hhbmdlIGl0IHRvIFwidW5kZXJJbnB1dFwiIHRvIHJlbmRlciBpdCB1bmRlciBxdWVzdGlvbiBpbnB1dCBvciBcInVuZGVyVGl0bGVcIiB0byByZW5kZXJlZCBpdCB1bmRlciB0aXRsZS5cbiAgICogQHNlZSBkZXNjcmlwdGlvblxuICAgKiBAc2VlIFN1cnZleS5xdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb25Mb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXNjcmlwdGlvbkxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRpb25Mb2NhdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlc2NyaXB0aW9uTG9jYXRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgaGFzRGVzY3JpcHRpb25VbmRlclRpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldERlc2NyaXB0aW9uTG9jYXRpb24oKSA9PSBcInVuZGVyVGl0bGVcIjtcbiAgfVxuICBnZXQgaGFzRGVzY3JpcHRpb25VbmRlcklucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldERlc2NyaXB0aW9uTG9jYXRpb24oKSA9PSBcInVuZGVySW5wdXRcIjtcbiAgfVxuICBwcml2YXRlIGdldERlc2NyaXB0aW9uTG9jYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb25Mb2NhdGlvbiAhPT0gXCJkZWZhdWx0XCIpIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uTG9jYXRpb247XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXlcbiAgICAgID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXG4gICAgICA6IFwidW5kZXJUaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY2xpY2tUaXRsZUZ1bmN0aW9uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaGFzSW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5mb2N1cygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGV4dCB0aGF0IHdpbGwgYmUgc2hvd24gb24gcmVxdWlyZWQgZXJyb3IuIFVzZSB0aGlzIHByb3BlcnR5LCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUmVxdWlyZWRFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBnZXQgb3Igc2V0IHRoZSBjb21tZW50IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb21tZW50VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29tbWVudFRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbW1lbnRUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21tZW50VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NDb21tZW50VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb21tZW50VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGNvcHkgb2YgcXVlc3Rpb24gZXJyb3JzIHN1cnZleS4gRm9yIHNvbWUgcXVlc3Rpb25zIGxpa2UgbWF0cml4IGFuZCBwYW5lbCBkeW5hbWljIGl0IGluY2x1ZGVzIHRoZSBlcnJvcnMgb2YgbmVzdGVkIHF1ZXN0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMuc2xpY2UoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JCeVR5cGUoZXJyb3JUeXBlOiBzdHJpbmcpOiBTdXJ2ZXlFcnJvciB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZXJyb3JzW2ldLmdldEVycm9yVHlwZSgpID09PSBlcnJvclR5cGUpIHJldHVybiB0aGlzLmVycm9yc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaW5rIHRvIHRoZSBjdXN0b20gd2lkZ2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXN0b21XaWRnZXQoKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICAgIGlmICghdGhpcy5pc0N1c3RvbVdpZGdldFJlcXVlc3RlZCAmJiAhdGhpcy5jdXN0b21XaWRnZXRWYWx1ZSkge1xuICAgICAgdGhpcy5pc0N1c3RvbVdpZGdldFJlcXVlc3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnVwZGF0ZUN1c3RvbVdpZGdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXN0b21XaWRnZXRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlQ3VzdG9tV2lkZ2V0KCkge1xuICAgIHRoaXMuY3VzdG9tV2lkZ2V0VmFsdWUgPSBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmdldEN1c3RvbVdpZGdldChcbiAgICAgIHRoaXNcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuaGFzU2luZ2xlSW5wdXQpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQodGhpcywgZWwpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJRdWVzdGlvbih0aGlzLCBlbCk7XG4gICAgaWYgKCEhdGhpcy5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrKHRoaXMsIGVsKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7fVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVuZHJlZCBxdWVzdGlvbiB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUudGV4dE9ySHRtbDtcbiAgICByZXR1cm4gcmVzID8gcmVzIDogdGhpcy5uYW1lO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0aXRsZSBhZnRlciBwcm9jZXNzaW5nIHRoZSBxdWVzdGlvbiB0ZW1wbGF0ZS5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlVGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGl0bGVQYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlUGF0dGVybiA6IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0T25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwicmVxdWlyZU51bVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVJlcXVpcmVUaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgUXVlc3Rpb24gcmVuZGVycyBvbiB0aGUgbmV3IGxpbmUgaWYgdGhlIHByb3BlcnR5IGlzIHRydWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBmYWxzZSwgdGhlIHF1ZXN0aW9uIHRyaWVzIHRvIHJlbmRlciBvbiB0aGUgc2FtZSBsaW5lL3JvdyB3aXRoIGEgcHJldmlvdXMgcXVlc3Rpb24vcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXJ0V2l0aE5ld0xpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXJ0V2l0aE5ld0xpbmVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzdGFydFdpdGhOZXdMaW5lKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnN0YXJ0V2l0aE5ld0xpbmUgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB2YWwpO1xuICB9XG4gIEBwcm9wZXJ0eSgpIGNzc0NsYXNzZXNWYWx1ZTogYW55O1xuICAvKipcbiAgICogUmV0dXJucyBhbGwgY3NzIGNsYXNzZXMgdGhhdCB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHF1ZXN0aW9uLiBZb3UgbWF5IHVzZSBzdXJ2ZXkudXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzIGV2ZW50IHRvIG92ZXJyaWRlIGNzcyBjbGFzc2VzIGZvciBhIHF1ZXN0aW9uLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlc1xuICAgKi9cbiAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIHRoaXMuY2FsY0Nzc0NsYXNzZXMoKTtcbiAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHRoaXMuY2FsY0Nzc0NsYXNzZXMoKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzc0NvcmUodGhpcy5jc3NDbGFzc2VzVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jc3NDbGFzc2VzVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBjYWxjQ3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICB2YXIgY2xhc3NlcyA9IHsgZXJyb3I6IHt9IH07XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLCBjc3MucXVlc3Rpb24pO1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5lcnJvciwgY3NzLmVycm9yKTtcbiAgICB0aGlzLnVwZGF0ZUNzc0NsYXNzZXMoY2xhc3NlcywgY3NzKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbiAgcHVibGljIGdldCBjc3NSb290KCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc1Jvb3QodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NSb290XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc1Jvb3QoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID1cbiAgICAgIHRoaXMuaXNGbG93TGF5b3V0ICYmICF0aGlzLmlzRGVzaWduTW9kZVxuICAgICAgICA/IGNzc0NsYXNzZXMuZmxvd1Jvb3RcbiAgICAgICAgOiBjc3NDbGFzc2VzLm1haW5Sb290O1xuICAgIGlmICghcmVzKSByZXMgPSBcIlwiO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzRmxvd0xheW91dCAmJlxuICAgICAgdGhpcy5oYXNUaXRsZU9uTGVmdCAmJlxuICAgICAgISFjc3NDbGFzc2VzLnRpdGxlTGVmdFJvb3RcbiAgICApIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMudGl0bGVMZWZ0Um9vdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgJiYgISFjc3NDbGFzc2VzLmhhc0Vycm9yKSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmhhc0Vycm9yO1xuICAgIH1cbiAgICBpZiAoY3NzQ2xhc3Nlcy5zbWFsbCAmJiAhdGhpcy53aWR0aCkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5zbWFsbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc0hlYWRlcigpOiBzdHJpbmcge1xuICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NIZWFkZXJcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc0hlYWRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3NIZWFkZXIoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gY3NzQ2xhc3Nlcy5oZWFkZXIgfHwgXCJcIjtcbiAgICBpZiAodGhpcy5oYXNUaXRsZU9uVG9wICYmICEhY3NzQ2xhc3Nlcy5oZWFkZXJUb3ApIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuaGVhZGVyVG9wO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUaXRsZU9uTGVmdCAmJiAhIWNzc0NsYXNzZXMuaGVhZGVyTGVmdCkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJMZWZ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUaXRsZU9uQm90dG9tICYmICEhY3NzQ2xhc3Nlcy5oZWFkZXJCb3R0b20pIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuaGVhZGVyQm90dG9tO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzQ29udGVudCgpOiBzdHJpbmcge1xuICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NDb250ZW50XCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRDc3NDb250ZW50KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzQ29udGVudFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3NDb250ZW50KGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IGNzc0NsYXNzZXMuY29udGVudCB8fCBcIlwiO1xuICAgIGlmICh0aGlzLmhhc1RpdGxlT25MZWZ0ICYmICEhY3NzQ2xhc3Nlcy5jb250ZW50TGVmdCkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5jb250ZW50TGVmdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1RpdGxlKCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc1RpdGxlXCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRDc3NUaXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1RpdGxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc1RpdGxlKGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIHJlc3VsdCA9IGNzc0NsYXNzZXMudGl0bGU7XG5cbiAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCB8fCB0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIGNzc0NsYXNzZXMudGl0bGVFeHBhbmRhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRhaW5zRXJyb3JzKSB7XG4gICAgICBpZiAoISFjc3NDbGFzc2VzLnRpdGxlT25FcnJvcikge1xuICAgICAgICByZXN1bHQgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnRpdGxlT25FcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNBbnN3ZXJlZCAmJiAhIWNzc0NsYXNzZXMudGl0bGVPbkFuc3dlcikge1xuICAgICAgcmVzdWx0ICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZU9uQW5zd2VyO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzRXJyb3IoKTogc3RyaW5nIHtcbiAgICB0aGlzLmVuc3VyZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzRXJyb3JcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc0Vycm9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzRXJyb3JcIiwgdmFsKTtcbiAgfVxuICAvL1RPRE8gd2FzIG5vdCByZW1vdmVkIGZyb20gb3RoZXIgcGxhY2VzXG4gIHByb3RlY3RlZCBnZXRDc3NFcnJvcihjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBjc3NDbGFzc2VzLmVycm9yLnJvb3QgfHwgXCJcIjtcbiAgICBpZiAodGhpcy5lcnJvckxvY2F0aW9uID09IFwidG9wXCIpIHtcbiAgICAgIGlmICghIWNzc0NsYXNzZXMuZXJyb3IubG9jYXRpb25Ub3ApIHtcbiAgICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvblRvcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5lcnJvckxvY2F0aW9uID09PSBcImJvdHRvbVwiICYmXG4gICAgICAhIWNzc0NsYXNzZXMuZXJyb3IubG9jYXRpb25Cb3R0b21cbiAgICApIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuZXJyb3IubG9jYXRpb25Cb3R0b207XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MocmVOZXc/OiBib29sZWFuKSB7XG4gICAgdGhpcy5jc3NDbGFzc2VzVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlTmV3KSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKHRydWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlUXVlc3Rpb25Dc3MocmVOZXc/OiBib29sZWFuKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgIXRoaXMuc3VydmV5IHx8XG4gICAgICAocmVOZXcgIT09IHRydWUgJiYgIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHRoaXMuY2FsY0Nzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZSh0aGlzLmNzc0NsYXNzZXMpO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlRWxlbWVudENzcygpIHtcbiAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKHRydWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzc0NvcmUoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdGhpcy5zZXRDc3NSb290KHRoaXMuZ2V0Q3NzUm9vdChjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NIZWFkZXIodGhpcy5nZXRDc3NIZWFkZXIoY3NzQ2xhc3NlcykpO1xuICAgIHRoaXMuc2V0Q3NzQ29udGVudCh0aGlzLmdldENzc0NvbnRlbnQoY3NzQ2xhc3NlcykpO1xuICAgIHRoaXMuc2V0Q3NzVGl0bGUodGhpcy5nZXRDc3NUaXRsZShjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NFcnJvcih0aGlzLmdldENzc0Vycm9yKGNzc0NsYXNzZXMpKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQ3NzQ2xhc3NlcyhyZXM6IGFueSwgY3NzOiBhbnkpIHtcbiAgICBpZiAoIWNzcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgIGlmICghIWNzcy5xdWVzdGlvbi5yZXF1aXJlZCkge1xuICAgICAgICByZXMucm9vdCA9IChyZXMucm9vdCA/IHJlcy5yb290ICsgXCIgXCIgOiBcIlwiKSArIG9iakNzcztcbiAgICAgIH1cbiAgICAgIGlmIChjc3MucXVlc3Rpb24udGl0bGVSZXF1aXJlZCkge1xuICAgICAgICByZXMudGl0bGUgKz0gXCIgXCIgKyBjc3MucXVlc3Rpb24udGl0bGVSZXF1aXJlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9iakNzcyA9IGNzc1t0aGlzLmdldENzc1R5cGUoKV07XG4gICAgaWYgKG9iakNzcyA9PT0gdW5kZWZpbmVkIHx8IG9iakNzcyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygb2JqQ3NzID09PSBcInN0cmluZ1wiIHx8IG9iakNzcyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgcmVzLnJvb3QgPSAocmVzLnJvb3QgPyByZXMucm9vdCArIFwiIFwiIDogXCJcIikgKyBvYmpDc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmpDc3MpIHtcbiAgICAgICAgcmVzW2tleV0gPSBvYmpDc3Nba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyB3aWR0aCB0byB0aGUgcXVlc3Rpb24gbGlrZSBjc3Mgc3R5bGUgKCUsIHB4LCBlbSBldGMpLlxuICAgKi9cbiAgcHVibGljIGdldCB3aWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgbWluV2lkdGggY29uc3RyYWludCB0byB0aGUgcXVlc3Rpb24gbGlrZSBjc3Mgc3R5bGUgKCUsIHB4LCBlbSBldGMpLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5XaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiLCBzZXR0aW5ncy5taW5XaWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBtaW5XaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIG1heFdpZHRoIGNvbnN0cmFpbnQgdG8gdGhlIHF1ZXN0aW9uIGxpa2UgY3NzIHN0eWxlICglLCBweCwgZW0gZXRjKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4V2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4V2lkdGhcIiwgc2V0dGluZ3MubWF4V2lkdGgpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4V2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgd2lkdGggb2YgdGhlIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCByZW5kZXJXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlbmRlcldpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IGRpZmZlcmVudCBmcm9tIDAgdG8gaW5jcmVhc2UgdGhlIGxlZnQgcGFkZGluZy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImluZGVudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IGluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImluZGVudFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgZGlmZmVyZW50IGZyb20gMCB0byBpbmNyZWFzZSB0aGUgcmlnaHQgcGFkZGluZy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmlnaHRJbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCByaWdodEluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJpZ2h0SW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdMZWZ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbnRMZWZ0XCIsIFwiXCIpO1xuICB9XG4gIHNldCBwYWRkaW5nTGVmdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbnRMZWZ0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdSaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nUmlnaHRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdSaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgb25JbmRlbnRDaGFuZ2VkKCkge1xuICAgIHRoaXMucGFkZGluZ0xlZnQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5pbmRlbnQpO1xuICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMucmlnaHRJbmRlbnQpO1xuICB9XG4gIHByaXZhdGUgZ2V0SW5kZW50U2l6ZShpbmRlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGluZGVudCA8IDEgfHwgIXRoaXMuZ2V0U3VydmV5KCkgfHwgIXRoaXMuY3NzQ2xhc3NlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGluZGVudCAqIHRoaXMuY3NzQ2xhc3Nlcy5pbmRlbnQgKyBcInB4XCI7XG4gIH1cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGZvY3VzIHRvIHRoZSBpbnB1dCBvZiB0aGlzIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gb25FcnJvciBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSwgdG8gZm9jdXMgdGhlIGlucHV0IHdpdGggdGhlIGZpcnN0IGVycm9yLCBvdGhlciB3aXNlIHRoZSBmaXJzdCBpbnB1dCB3aWxsIGJlIGZvY3VzZWQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG5cbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2Nyb2xsRWxlbWVudFRvVG9wKHRoaXMsIHRoaXMsIG51bGwsIHRoaXMuaWQpO1xuICAgIH1cbiAgICB2YXIgaWQgPSAhb25FcnJvclxuICAgICAgPyB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKVxuICAgICAgOiB0aGlzLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpO1xuICAgIGlmIChTdXJ2ZXlFbGVtZW50LkZvY3VzRWxlbWVudChpZCkpIHtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuZm9jdXNDYWxsYmFjayk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBmaXJlQ2FsbGJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gIH1cbiAgcHVibGljIGdldE90aGVyc01heExlbmd0aCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXhPdGhlcnNMZW5ndGggPiAwID8gdGhpcy5zdXJ2ZXkubWF4T3RoZXJzTGVuZ3RoIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHt9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpIHtcbiAgICB2YXIgbmFtZSA9IHRleHRWYWx1ZS5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGV4dFZhbHVlLmlzRXhpc3RzID1cbiAgICAgIE9iamVjdC5rZXlzKFF1ZXN0aW9uLlRleHRQcmVwcm9jZXNzb3JWYWx1ZXNNYXApLmluZGV4T2YobmFtZSkgIT09IC0xIHx8XG4gICAgICAoPGFueT50aGlzKVt0ZXh0VmFsdWUubmFtZV0gIT09IHVuZGVmaW5lZDtcbiAgICB0ZXh0VmFsdWUudmFsdWUgPSAoPGFueT50aGlzKVtcbiAgICAgICg8YW55PlF1ZXN0aW9uLlRleHRQcmVwcm9jZXNzb3JWYWx1ZXNNYXApW25hbWVdIHx8IHRleHRWYWx1ZS5uYW1lXG4gICAgXTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBtYWtlIHRoZSBxdWVzdGlvbiBhIHJlcXVpcmVkLiBJZiBhIHVzZXIgZG9lc24ndCBhbnN3ZXIgdGhlIHF1ZXN0aW9uIHRoZW4gYSB2YWxpZGF0aW9uIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNSZXF1aXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgdHJ1ZSB0aGUgUXVlc3Rpb24gYmVjb21lcyByZXF1aXJlZCBhbmQgYW4gZW5kLXVzZXIgaGFzIHRvIGFuc3dlciBpdC5cbiAgICogSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gdGhlbiBhbiBlbmQtdXNlciBtYXkgbm90IGFuc3dlciBpdCB0aGUgUXVlc3Rpb24gbWF5YmUgZW1wdHkuXG4gICAqIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiBpc1JlcXVpcmVkIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBpc1JlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIHZhbCk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlLCB0byBhZGQgYSBjb21tZW50IGZvciB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc0NvbW1lbnRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzQ29tbWVudCh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydENvbW1lbnQoKSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc0NvbW1lbnRcIiwgdmFsKTtcbiAgICBpZiAodGhpcy5oYXNDb21tZW50KSB0aGlzLmhhc090aGVyID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmljYXRvci4gSXQgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlkXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpZFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJpYVRpdGxlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZCArIFwiX2FyaWFUaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJpYVJvbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc090aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNPdGhlclwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoYXNPdGhlcih2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydE90aGVyKCkgfHwgdGhpcy5oYXNPdGhlciA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNPdGhlclwiLCB2YWwpO1xuICAgIGlmICh0aGlzLmhhc090aGVyKSB0aGlzLmhhc0NvbW1lbnQgPSBmYWxzZTtcbiAgICB0aGlzLmhhc090aGVyQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBoYXNPdGhlckNoYW5nZWQoKSB7fVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ29tbWVudCB8fCB0aGlzLmhhc090aGVyO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgcmVhZE9ubHkgcHJvcGVydHkgaXMgdHJ1ZSBvciBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIHBhcmVudCBwYW5lbC9wYWdlIGlzIHJlYWRPbmx5LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1vZGVsXG4gICAqIEBzZWUgcmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpIHtcbiAgICB2YXIgaXNQYXJlbnRSZWFkT25seSA9ICEhdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuaXNSZWFkT25seTtcbiAgICB2YXIgaXNTdXJ2ZXlSZWFkT25seSA9ICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seSB8fCBpc1BhcmVudFJlYWRPbmx5IHx8IGlzU3VydmV5UmVhZE9ubHk7XG4gIH1cbiAgcHVibGljIGdldCBpc0lucHV0UmVhZE9ubHkoKSB7XG4gICAgdmFyIGlzRGVzaWduTW9kZVYyID0gc2V0dGluZ3Muc3VwcG9ydENyZWF0b3JWMiAmJiB0aGlzLmlzRGVzaWduTW9kZTtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5IHx8IGlzRGVzaWduTW9kZVYyO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0lucHV0UmVhZE9ubHlcIiwgdGhpcy5pc0lucHV0UmVhZE9ubHkpO1xuICAgIHN1cGVyLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIElmIGl0IHJldHVybnMgZmFsc2UgdGhlIFF1ZXN0aW9uIGJlY29tZXMgcmVhZCBvbmx5IGFuZCBhbiBlbmQtdXNlciB3aWxsIG5vdCBhYmxlIHRvIGFuc3dlciBvbiB0aGUgcXVzdGlvbi4gVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIHJlYWRPbmx5IHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSByZWFkT25seVxuICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJ1biB2aXNpYmxlSWYgYW5kIGVuYWJsZUlmIGV4cHJlc3Npb25zLiBJZiB2aXNpYmxlSWYgb3IvYW5kIGVuYWJsZWRJZiBhcmUgbm90IGVtcHR5LCB0aGVuIHRoZSByZXN1bHRzIG9mIHBlcmZvcm1pbmcgdGhlIGV4cHJlc3Npb24gKHRydWUgb3IgZmFsc2UpIHNldCB0byB0aGUgdmlzaWJsZS9yZWFkT25seSBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0gdmFsdWVzIFR5cGljYWxseSBzdXJ2ZXkgcmVzdWx0c1xuICAgKiBAc2VlIHZpc2libGVcbiAgICogQHNlZSB2aXNpYmxlSWZcbiAgICogQHNlZSByZWFkT25seVxuICAgKiBAc2VlIGVuYWJsZUlmXG4gICAqL1xuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSBwcm9wZXJ0aWVzID0ge307XG4gICAgcHJvcGVydGllc1tcInF1ZXN0aW9uXCJdID0gdGhpcztcbiAgICBpZiAoIXRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKSB7XG4gICAgICB0aGlzLnJ1blZpc2libGVJZkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLnJ1bkVuYWJsZUlmQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5ydW5SZXF1aXJlZElmQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSBydW5WaXNpYmxlSWZDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvblJ1bm5lcilcbiAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIuZXhwcmVzc2lvbiA9IHRoaXMudmlzaWJsZUlmO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnZpc2libGUgPSByZXM7XG4gICAgfTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1bkVuYWJsZUlmQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUlmKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbkVuYWJlbFJ1bm5lcilcbiAgICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmVuYWJsZUlmKTtcbiAgICB0aGlzLmNvbmRpdGlvbkVuYWJlbFJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5lbmFibGVJZjtcbiAgICB0aGlzLmNvbmRpdGlvbkVuYWJlbFJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5yZWFkT25seSA9ICFyZXM7XG4gICAgfTtcbiAgICB0aGlzLmNvbmRpdGlvbkVuYWJlbFJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blJlcXVpcmVkSWZDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMucmVxdWlyZWRJZikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lcilcbiAgICAgIHRoaXMuY29uZGl0aW9uUmVxdWlyZWRSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMucmVxdWlyZWRJZik7XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5yZXF1aXJlZElmO1xuICAgIHRoaXMuY29uZGl0aW9uUmVxdWlyZWRSdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMuaXNSZXF1aXJlZCA9IHJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uUmVxdWlyZWRSdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSByZXR1cm5zIHRoZSBxdWVzdGlvbiBudW1iZXIuIElmIHF1ZXN0aW9uIGlzIGludmlzaWJsZSB0aGVuIGl0IHJldHVybnMgZW1wdHkgc3RyaW5nLlxuICAgKiBJZiB2aXNpYmxlSW5kZXggaXMgMSwgdGhlbiBubyBpcyAyLCBvciAnQicgaWYgc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleCBpcyAnQScuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25TdGFydEluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5vXCIpO1xuICB9XG4gIHByaXZhdGUgY2FsY05vKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmhhc1RpdGxlIHx8IHRoaXMuaGlkZU51bWJlcikgcmV0dXJuIFwiXCI7XG4gICAgdmFyIG5vID0gSGVscGVycy5nZXROdW1iZXJCeUluZGV4KHRoaXMudmlzaWJsZUluZGV4LCB0aGlzLmdldFN0YXJ0SW5kZXgoKSk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIG5vID0gdGhpcy5zdXJ2ZXkuZ2V0VXBkYXRlZFF1ZXN0aW9uTm8odGhpcywgbm8pO1xuICAgIH1cbiAgICByZXR1cm4gbm87XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5zdXJ2ZXlMb2FkQ2FsbGJhY2spO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIHRoaXMuaW5pdERhdGFGcm9tU3VydmV5KCk7XG4gICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGluaXREYXRhRnJvbVN1cnZleSgpIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tU3VydmV5KHRoaXMuZGF0YS5nZXRWYWx1ZSh0aGlzLmdldFZhbHVlTmFtZSgpKSk7XG4gICAgICB0aGlzLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaW5pdENvbW1lbnRGcm9tU3VydmV5KCkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiB0aGlzLnJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkodGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5nZXRWYWx1ZU5hbWUoKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KFwiXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcnVuRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIWV4cHJlc3Npb24pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb25WYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiKTtcbiAgfVxuICBwcml2YXRlIHNldCBxdWVzdGlvblZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbkNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29tbWVudFwiKTtcbiAgfVxuICBwcml2YXRlIHNldCBxdWVzdGlvbkNvbW1lbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb21tZW50XCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb21tZW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogR2V0L1NldCB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIEBzZWUgU3VydmV5TW9kZS5zZXRWYWx1ZVxuICAgKiBAc2VlIFN1cnZleU1vZGUuZ2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlRm9yU3VydmV5KCk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZVRvRGF0YUNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXIgdGhlIHF1ZXN0aW9uIHZhbHVlLiBJdCBjbGVhcnMgdGhlIHF1ZXN0aW9uIGNvbW1lbnQgYXMgd2VsbC5cbiAgICovXG4gIHB1YmxpYyBjbGVhclZhbHVlKCkge1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuY29tbWVudCA9IG51bGw7XG4gIH1cbiAgcHVibGljIHVuYmluZFZhbHVlKCkge1xuICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVWYWx1ZUNvcHkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNFZGl0aW5nU3VydmV5RWxlbWVudCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJhc2UuaXNTdXJ2ZXlFbGVtZW50KHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VW5iaW5kVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRWRpdGluZ1N1cnZleUVsZW1lbnQodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgY2FuQ2xlYXJWYWx1ZUFzSW52aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmlzUGFyZW50VmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghIXRoaXMucGFnZSAmJiB0aGlzLnBhZ2UuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy52YWx1ZU5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkuaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodGhpcy52YWx1ZU5hbWUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUGFyZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKCFwYXJlbnQuaXNWaXNpYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIGlmICh0aGlzLmNhbkNsZWFyVmFsdWVBc0ludmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5VmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHF1ZXN0aW9uIHZhbHVlIGFzIGEgZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdGhpcyBwYXJhbWV0ZXIsIGlmIHlvdSB3YW50IHRvIGdldCBkaXNwbGF5IHZhbHVlIGZvciB0aGlzIHZhbHVlIGFuZCBub3QgcXVlc3Rpb24udmFsdWUuIEl0IGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAodGhpcy5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmN1c3RvbVdpZGdldC5nZXREaXNwbGF5VmFsdWUodGhpcywgdmFsdWUpO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSA9PSB1bmRlZmluZWQgPyB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpIDogdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSB0byB0aGUgcXVlc3Rpb24uIEl0IHdpbGwgYmUgYXNzaWduIHRvIHRoZSBxdWVzdGlvbiBvbiBsb2FkaW5nIHRoZSBzdXJ2ZXkgZnJvbSBKU09OIG9yIGFkZGluZyBhIHF1ZXN0aW9uIHRvIHRoZSBzdXJ2ZXkgb3Igb24gc2V0dGluZyB0aGlzIHByb3BlcnR5IG9mIHRoZSB2YWx1ZSBpcyBlbXB0eS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUV4cHJlc3Npb24odmFsKSkge1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVFeHByZXNzaW9uID0gdmFsLnN1YnN0cigxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIsIHRoaXMuY29udmVydERlZmF1bHRWYWx1ZSh2YWwpKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gIH1cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWVFeHByZXNzaW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWVFeHByZXNzaW9uKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRXhwcmVzc2lvblwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbiBhbnN3ZXIgZGF0YSBhcyBhIHBsYWluIG9iamVjdDogd2l0aCBxdWVzdGlvbiB0aXRsZSwgbmFtZSwgdmFsdWUgYW5kIGRpc3BsYXlWYWx1ZS5cbiAgICogRm9yIGNvbXBsZXggcXVlc3Rpb25zIChsaWtlIG1hdHJpeCwgZXRjLikgaXNOb2RlIGZsYWcgaXMgc2V0IHRvIHRydWUgYW5kIGRhdGEgY29udGFpbnMgYXJyYXkgb2YgbmVzdGVkIG9iamVjdHMgKHJvd3MpXG4gICAqIHNldCBvcHRpb25zLmluY2x1ZGVFbXB0eSB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBza2lwIGVtcHR5IGFuc3dlcnNcbiAgICovXG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzPzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM6IGZhbHNlLFxuICAgIH1cbiAgKSB7XG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZUVtcHR5IHx8ICF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gPGFueT57XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgdGl0bGU6IHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmRpc3BsYXlWYWx1ZSxcbiAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICB9O1xuICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVF1ZXN0aW9uVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEucXVlc3Rpb25UeXBlID0gdGhpcy5nZXRUeXBlKCk7XG4gICAgICB9XG4gICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSB0aGlzW1xuICAgICAgICAgIGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZVxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5oYXNDb21tZW50KSB7XG4gICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogMCxcbiAgICAgICAgICAgIGlzQ29tbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIHRpdGxlOiBcIkNvbW1lbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5jb21tZW50UHJlZml4LFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmNvbW1lbnQsXG4gICAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjb3JyZWN0IGFuc3dlciBvbiB0aGUgcXVlc3Rpb24uIFNldCB0aGlzIHZhbHVlIGlmIHlvdSBhcmUgZG9pbmcgYSBxdWl6LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwuY29ycmVjdEFuc3dlcnNcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5pbkNvcnJlY3RBbnN3ZXJzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvcnJlY3RBbnN3ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29ycmVjdEFuc3dlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvcnJlY3RBbnN3ZXIodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb3JyZWN0QW5zd2VyXCIsIHRoaXMuY29udmVydERlZmF1bHRWYWx1ZSh2YWwpKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERlZmF1bHRWYWx1ZSh2YWw6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbnMgY291bnQ6IDEgZm9yIHRoZSBub24tbWF0cml4IHF1ZXN0aW9ucyBhbmQgYWxsIGlubmVyIHZpc2libGUgcXVlc3Rpb25zIHRoYXQgaGFzIGlucHV0KHMpIHdpZGdldHMgZm9yIHF1ZXN0aW9uIG9mIG1hdHJpeCB0eXBlcy5cbiAgICogQHNlZSBnZXRRdWl6UXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1Zpc2libGUgJiZcbiAgICAgIHRoaXMuaGFzSW5wdXQgJiZcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXIpXG4gICAgKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVpelF1ZXN0aW9uQ291bnQoKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc0VtcHR5KCkgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY29ycmVjdEFuc3dlcikpXG4gICAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0QW5zd2VyQ291bnQoKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVpelF1ZXN0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgdGhpcy5jb3JyZWN0QW5zd2VyLCB0cnVlLCB0cnVlKVxuICAgICAgPyAxXG4gICAgICA6IDA7XG4gIH1cbiAgcHVibGljIGlzQW5zd2VyQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb3JyZWN0QW5zd2VyQ291bnQgPT0gdGhpcy5xdWl6UXVlc3Rpb25Db3VudDtcbiAgfVxuICBwdWJsaWMgdXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiAhdGhpcy5pc0VtcHR5KCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkgJiYgdGhpcy5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkpIHJldHVybjtcbiAgICBpZiAoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJiAhdGhpcy5pc1Zpc2libGUpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWUoKTtcbiAgfVxuICBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGlzRGVmYXVsdFZhbHVlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gJiYgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgdGhpcy5zZXRWYWx1ZUFuZFJ1bkV4cHJlc3Npb24oXG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24sXG4gICAgICB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlKSxcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBpc1ZhbHVlRXhwcmVzc2lvbih2YWw6IGFueSkge1xuICAgIHJldHVybiAhIXZhbCAmJiB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgJiYgdmFsLmxlbmd0aCA+IDAgJiYgdmFsWzBdID09IFwiPVwiO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUFuZFJ1bkV4cHJlc3Npb24oXG4gICAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogYW55LFxuICAgIHNldEZ1bmM6ICh2YWw6IGFueSkgPT4gdm9pZCxcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKSB7XG4gICAgdmFyIGZ1bmMgPSAodmFsOiBhbnkpID0+IHtcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHZhbCA9IHZhbC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgICAgIH1cbiAgICAgIHNldEZ1bmModmFsKTtcbiAgICB9O1xuICAgIGlmICghIWV4cHJlc3Npb24gJiYgISF0aGlzLmRhdGEpIHtcbiAgICAgIGlmICghdmFsdWVzKSB2YWx1ZXMgPSB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICAgIGlmICghcHJvcGVydGllcykgcHJvcGVydGllcyA9IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgIHZhciBydW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcihleHByZXNzaW9uKTtcbiAgICAgIGlmIChydW5uZXIuY2FuUnVuKSB7XG4gICAgICAgIHJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXMgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICBmdW5jKHJlcyk7XG4gICAgICAgIH07XG4gICAgICAgIHJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZnVuYyhkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIHF1ZXN0aW9uIGNvbW1lbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkNvbW1lbnQoKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbW1lbnQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIGlmICghIW5ld1ZhbHVlKSB7XG4gICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb21tZW50ID09IG5ld1ZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5zZXRRdWVzdGlvbkNvbW1lbnQobmV3VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbkNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkNvbW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXROZXdDb21tZW50KG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiB2YWx1ZSBpcyBlbXB0eVxuICAgKi9cbiAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBbnN3ZXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbnN3ZXJlZFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzQW5zd2VyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbnN3ZXJlZFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVJc0Fuc3dlcmVkKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQW5zd2VyZWRcIiwgdGhpcy5nZXRJc0Fuc3dlcmVkKCkpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0VtcHR5KCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHF1ZXN0aW9uIHZhbGlkYXRvcnMuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsaWRhdG9yc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsaWRhdG9yc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnM7XG4gIH1cbiAgcHVibGljIGdldFN1cHBvcnRlZFZhbGlkYXRvcnMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICB3aGlsZSAoISFjbGFzc05hbWUpIHtcbiAgICAgIHZhciBjbGFzc1ZhbGlkYXRvcnMgPSAoPGFueT5zZXR0aW5ncy5zdXBwb3J0ZWRWYWxpZGF0b3JzKVtjbGFzc05hbWVdO1xuICAgICAgaWYgKCEhY2xhc3NWYWxpZGF0b3JzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBjbGFzc1ZhbGlkYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICByZXMuc3BsaWNlKDAsIDAsIGNsYXNzVmFsaWRhdG9yc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjbGFzc0luZm8gPSBTZXJpYWxpemVyLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgICAgY2xhc3NOYW1lID0gY2xhc3NJbmZvLnBhcmVudE5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBhZGRTdXBwb3J0ZWRWYWxpZGF0b3JzKFxuICAgIHN1cHBvcnRlZFZhbGlkYXRvcnM6IEFycmF5PHN0cmluZz4sXG4gICAgY2xhc3NWYWxpZGF0b3JzOiBBcnJheTxzdHJpbmc+XG4gICkge31cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIG9iamVjdHMucHVzaCh7XG4gICAgICBuYW1lOiB0aGlzLmdldFZhbHVlTmFtZSgpLFxuICAgICAgdGV4dDogdGhpcy5wcm9jZXNzZWRUaXRsZSxcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICB2YXIganNvbiA9IG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMpO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gdGhpcy5nZXRUeXBlKCk7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHZhbGlkYXRpb24gZXJyb3IocykgaW4gdGhlIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrIHNldCBpdCB0byB0cnVlIHRvIHNob3cgYW4gZXJyb3IgaW4gVUkuXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHZhciBvbGRIYXNFcnJvcnMgPSB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xuICAgIHZhciBlcnJvcnMgPSB0aGlzLmNoZWNrRm9yRXJyb3JzKCEhcmVjICYmIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlKTtcbiAgICBpZiAoZmlyZUNhbGxiYWNrKSB7XG4gICAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5iZWZvcmVTZXR0aW5nUXVlc3Rpb25FcnJvcnModGhpcywgZXJyb3JzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gICAgaWYgKG9sZEhhc0Vycm9ycyAhPSBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCAmJiByZWMgJiYgZmlyZUNhbGxiYWNrICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbGlkYXRpb24gZXJyb3JzIGNvdW50LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50RXJyb3JDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNoYXIvc3RyaW5nIGZvciBhIHJlcXVpcmVkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnJlcXVpcmVkVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgIT0gbnVsbCAmJiB0aGlzLmlzUmVxdWlyZWRcbiAgICAgID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0XG4gICAgICA6IFwiXCI7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBlcnJvciBpbnRvIHRoZSBxdWVzdGlvbiBlcnJvciBsaXN0LlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICovXG4gIHB1YmxpYyBhZGRFcnJvcihlcnJvcjogU3VydmV5RXJyb3IgfCBzdHJpbmcpIHtcbiAgICBpZiAoIWVycm9yKSByZXR1cm47XG4gICAgbGV0IG5ld0Vycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIiB8fCBlcnJvciBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgbmV3RXJyb3IgPSBuZXcgQ3VzdG9tRXJyb3IoPHN0cmluZz5lcnJvciwgdGhpcy5zdXJ2ZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFcnJvciA9IDxTdXJ2ZXlFcnJvcj5lcnJvcjtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMucHVzaChuZXdFcnJvcik7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHBhcnRpY3VsYXIgZXJyb3IgZnJvbSB0aGUgcXVlc3Rpb24gZXJyb3IgbGlzdC5cbiAgICogQHBhcmFtIGVycm9yXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRXJyb3IoZXJyb3I6IFN1cnZleUVycm9yKSB7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMuZXJyb3JzO1xuICAgIHZhciBpbmRleCA9IGVycm9ycy5pbmRleE9mKGVycm9yKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBlcnJvcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuICBwcml2YXRlIGNoZWNrRm9yRXJyb3JzKGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW4pOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHZhciBxRXJyb3JzID0gbmV3IEFycmF5PFN1cnZleUVycm9yPigpO1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiAhdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICB0aGlzLmNvbGxlY3RFcnJvcnMocUVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgfVxuICAgIHJldHVybiBxRXJyb3JzO1xuICB9XG4gIHByaXZhdGUgY29sbGVjdEVycm9ycyhcbiAgICBxRXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICB0aGlzLm9uQ2hlY2tGb3JFcnJvcnMocUVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKHFFcnJvcnMubGVuZ3RoID4gMCB8fCAhdGhpcy5jYW5SdW5WYWxpZGF0b3JzKGlzT25WYWx1ZUNoYW5nZWQpKSByZXR1cm47XG4gICAgdmFyIGVycm9ycyA9IHRoaXMucnVuVmFsaWRhdG9ycygpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy92YWxpZGF0b3JzIG1heSBjaGFuZ2UgdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgICAgcUVycm9ycy5sZW5ndGggPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcUVycm9ycy5wdXNoKGVycm9yc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSAmJiBxRXJyb3JzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB2YXIgZXJyb3IgPSB0aGlzLmZpcmVTdXJ2ZXlWYWxpZGF0aW9uKCk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcUVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJ1blZhbGlkYXRvcnMoaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZmlyZVN1cnZleVZhbGlkYXRpb24oKTogU3VydmV5RXJyb3Ige1xuICAgIGlmICh0aGlzLnZhbGlkYXRlVmFsdWVDYWxsYmFjaykgcmV0dXJuIHRoaXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrKCk7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkudmFsaWRhdGVRdWVzdGlvbih0aGlzKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBpZiAoIWlzT25WYWx1ZUNoYW5nZWQgJiYgdGhpcy5oYXNSZXF1aXJlZEVycm9yKCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBBbnN3ZXJSZXF1aXJlZEVycm9yKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1JlcXVpcmVkRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmlzRW1wdHkoKTtcbiAgfVxuICBwcml2YXRlIHZhbGlkYXRvclJ1bm5lcjogVmFsaWRhdG9yUnVubmVyO1xuICBwcml2YXRlIGlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IGZhbHNlO1xuICBwdWJsaWMgb25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnM6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBydW5WYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgaWYgKCEhdGhpcy52YWxpZGF0b3JSdW5uZXIpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yUnVubmVyLm9uQXN5bmNDb21wbGV0ZWQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRvclJ1bm5lciA9IG5ldyBWYWxpZGF0b3JSdW5uZXIoKTtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy52YWxpZGF0b3JSdW5uZXIub25Bc3luY0NvbXBsZXRlZCA9IChlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikgPT4ge1xuICAgICAgdGhpcy5kb09uQXN5bmNDb21wbGV0ZWQoZXJyb3JzKTtcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRvclJ1bm5lci5ydW4odGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBkb09uQXN5bmNDb21wbGV0ZWQoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcnNbaV0pO1xuICAgIH1cbiAgICB0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICB9XG4gIHByb3RlY3RlZCByYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCkge1xuICAgIGlmICghIXRoaXMub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgJiYgIXRoaXMuaXNSdW5uaW5nVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyh0aGlzLmdldEFsbEVycm9ycygpLmxlbmd0aCA+IDApO1xuICAgICAgdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHZhciBvbGRBbnN3ZXJlZCA9IHRoaXMuaXNBbnN3ZXJlZDtcbiAgICB0aGlzLnNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkICYmIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5pc0Fuc3dlcmVkICE9IG9sZEFuc3dlcmVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBpc1N1cnZleUlucHV0VGV4dFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzVXBkYXRlVmFsdWVUZXh0T25UeXBpbmcgOiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGdldERhdGFMb2NOb3RpZmljYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc0lucHV0VGV4dFVwZGF0ZSA/IFwidGV4dFwiIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBpc0lucHV0VGV4dFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSAmJiB0aGlzLmlzVGV4dFZhbHVlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVUb0RhdGEobmV3VmFsdWUpO1xuICAgIGlmICghdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5KSB7XG4gICAgICB0aGlzLnNldFZhbHVlQ29yZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUpO1xuICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCAmJiB0aGlzLmNhblNldFZhbHVlVG9TdXJ2ZXkoKSkge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRm9yU3VydmV5O1xuICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmdldFZhbHVlTmFtZSgpLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgdGhpcy5nZXREYXRhTG9jTm90aWZpY2F0aW9uKCksXG4gICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5TZXRWYWx1ZVRvU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCB2YWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgc2V0TmV3Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5xdWVzdGlvbkNvbW1lbnQgPSBuZXdWYWx1ZTtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KFxuICAgICAgICB0aGlzLmdldFZhbHVlTmFtZSgpLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgdGhpcy5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSA/IFwidGV4dFwiIDogZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWxpZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBuYW1lO1xuICAgIHJldHVybiBuYW1lLnRyaW0oKS5yZXBsYWNlKC9bXFx7XFx9XSsvZywgXCJcIik7XG4gIH1cbiAgLy9JUXVlc3Rpb25cbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgIGlmICghIXRoaXMudmFsdWVGcm9tRGF0YUNhbGxiYWNrKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGcm9tRGF0YUNhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5zZXRRdWVzdGlvblZhbHVlKHRoaXMudmFsdWVGcm9tRGF0YShuZXdWYWx1ZSkpO1xuICB9XG4gIHVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHRoaXMucXVlc3Rpb25Db21tZW50ID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLnF1ZXN0aW9uVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkICYmXG4gICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKTtcbiAgICBpZiAodXBkYXRlSXNBbnN3ZXJlZCkgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge31cbiAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNWaXNpYmxlIHx8XG4gICAgICAoIXRoaXMuaGFzVGl0bGUgJiYgIXNldHRpbmdzLnNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGUpIHx8XG4gICAgICAodGhpcy5oaWRlTnVtYmVyICYmICFzZXR0aW5ncy5zZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcilcbiAgICApIHtcbiAgICAgIHZhbCA9IC0xO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmFsKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJub1wiLCB0aGlzLmNhbGNObygpKTtcbiAgICByZXR1cm4gdmFsIDwgMCA/IDAgOiAxO1xuICB9XG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQgcXVlc3Rpb24sIHRoYXQgZW5kLXVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBlbnRlci5cbiAgICogRm9yIGV4YW1wbGUgdGhlIHZhbHVlIHRoYXQgZG9lc24ndCBleGlzdHMgaW4gYSByYWRpZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKi9cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge31cbiAgcHVibGljIGNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpIHt9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgYWxsIGVycm9ycyBpbiB0aGUgcXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICB9XG4gIHB1YmxpYyBjbGVhclVudXNlZFZhbHVlcygpIHt9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge31cbiAgY2hlY2tCaW5kaW5ncyh2YWx1ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmJpbmRpbmdzLmlzRW1wdHkoKSB8fCAhdGhpcy5kYXRhKSByZXR1cm47XG4gICAgdmFyIHByb3BzID0gdGhpcy5iaW5kaW5ncy5nZXRQcm9wZXJ0aWVzQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzW3Byb3BzW2ldXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICAvL0lMb2NhbGl6YWJsZU93bmVyXG4gIGxvY093bmVyOiBJTG9jYWxpemFibGVPd25lciA9IG51bGw7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1cnZleSBsb2NhbGVcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5sb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlcbiAgICAgID8gKDxJTG9jYWxpemFibGVPd25lcj4oPGFueT50aGlzLnN1cnZleSkpLmdldExvY2FsZSgpXG4gICAgICA6IHRoaXMubG9jT3duZXJcbiAgICAgID8gdGhpcy5sb2NPd25lci5nZXRMb2NhbGUoKVxuICAgICAgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgPyB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlNYXJrZG93bkh0bWwodGhpcywgdGV4dCwgbmFtZSlcbiAgICAgIDogdGhpcy5sb2NPd25lclxuICAgICAgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAmJiB0eXBlb2YgdGhpcy5zdXJ2ZXkuZ2V0UmVuZGVyZXJGb3JTdHJpbmcgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckZvclN0cmluZyh0aGlzLCBuYW1lKVxuICAgICAgOiB0aGlzLmxvY093bmVyICYmIHR5cGVvZiB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiB0ZXh0O1xuICAgIGlmICh0aGlzLnRleHRQcm9jZXNzb3IpXG4gICAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yLnByb2Nlc3NUZXh0KHRleHQsIHRoaXMudXNlRGlzcGxheVZhbHVlc0luVGl0bGUpO1xuICAgIGlmICh0aGlzLmxvY093bmVyKSByZXR1cm4gdGhpcy5sb2NPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHB1YmxpYyBnZXRDb21wb25lbnROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5nZXRSZW5kZXJlckJ5UXVlc3Rpb24odGhpcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGl0bGVBY3Rpb25zKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciB0aXRsZUFjdGlvbnMgPSBzdXBlci5nZXRUaXRsZUFjdGlvbnMoKTtcbiAgICB0aGlzLnRpdGxlQWN0aW9ucyA9IHRoaXMuc3VydmV5LmdldFVwZGF0ZWRRdWVzdGlvblRpdGxlQWN0aW9ucyhcbiAgICAgIHRoaXMsXG4gICAgICB0aXRsZUFjdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnRpdGxlQWN0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBpc0RlZmF1bHRSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5jdXN0b21XaWRnZXQgfHxcbiAgICAgIHRoaXMucmVuZGVyQXMgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICB0aGlzLmdldENvbXBvbmVudE5hbWUoKSA9PT0gXCJkZWZhdWx0XCJcbiAgICApO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImRlZmF1bHRcIiB9KVxuICByZW5kZXJBczogc3RyaW5nO1xuXG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkgcmV0dXJuIHRoaXMuc3VydmV5LmdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0LCBlcnJvcik7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgLy9JVmFsaWRhdG9yT3duZXJcbiAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgdmFsaWRhdGVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBzZXQgdmFsaWRhdGVkVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJxdWVzdGlvblwiLCBbXG4gIFwiIW5hbWVcIixcbiAge1xuICAgIG5hbWU6IFwic3RhdGVcIixcbiAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJ2aXNpYmxlOnN3aXRjaFwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgeyBuYW1lOiBcIndpZHRoXCIgfSxcbiAgeyBuYW1lOiBcIm1pbldpZHRoXCIsIGRlZmF1bHQ6IHNldHRpbmdzLm1pbldpZHRoIH0sXG4gIHsgbmFtZTogXCJtYXhXaWR0aFwiLCBkZWZhdWx0OiBzZXR0aW5ncy5tYXhXaWR0aCB9LFxuICB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIGxheW91dDogXCJyb3dcIiB9LFxuICB7IG5hbWU6IFwiaW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM10sIGxheW91dDogXCJyb3dcIiB9LFxuICB7XG4gICAgbmFtZTogXCJwYWdlXCIsXG4gICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xuICAgIH0sXG4gICAgY2hvaWNlczogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiBzdXJ2ZXlcbiAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdO1xuICAgIH0sXG4gIH0sXG4gIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAge1xuICAgIG5hbWU6IFwidGl0bGVMb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwiaGlkZGVuXCJdLFxuICAgIGxheW91dDogXCJyb3dcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiLFxuICAgIGxheW91dDogXCJyb3dcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ1bmRlcklucHV0XCIsIFwidW5kZXJUaXRsZVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiaGlkZU51bWJlcjpib29sZWFuXCIsXG4gICAgZGVwZW5kc09uOiBcInRpdGxlTG9jYXRpb25cIixcbiAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgoPFF1ZXN0aW9uPm9iaikudGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGFyZW50OiBQYW5lbE1vZGVsID0gb2JqID8gb2JqLnBhcmVudCA6IG51bGw7XG4gICAgICB2YXIgbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50ID1cbiAgICAgICAgIXBhcmVudCB8fCBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPT0gXCJvZmZcIjtcbiAgICAgIGlmICghbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhc3VydmV5IHx8XG4gICAgICAgIHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiIHx8XG4gICAgICAgICghIXBhcmVudCAmJiBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PT0gXCJvbnBhbmVsXCIpXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIFwidmFsdWVOYW1lXCIsXG4gIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gIFwiZGVmYXVsdFZhbHVlOnZhbHVlXCIsXG4gIHtcbiAgICBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIGNhdGVnb3J5OiBcImxvZ2ljXCIsXG4gIH0sXG4gIFwiY29ycmVjdEFuc3dlcjp2YWx1ZVwiLFxuICBcImlzUmVxdWlyZWQ6c3dpdGNoXCIsXG4gIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAge1xuICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICB9LFxuICBcInJlYWRPbmx5OnN3aXRjaFwiLFxuICB7XG4gICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImJpbmRpbmdzOmJpbmRpbmdzXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImJpbmRpbmdzXCIsXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgcmV0dXJuIG9iai5iaW5kaW5ncy5nZXROYW1lcygpLmxlbmd0aCA+IDA7XG4gICAgfSxcbiAgfSxcbiAgeyBuYW1lOiBcInJlbmRlckFzXCIsIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuXSk7XG5TZXJpYWxpemVyLmFkZEFsdGVyTmF0aXZlQ2xhc3NOYW1lKFwicXVlc3Rpb25cIiwgXCJxdWVzdGlvbmJhc2VcIik7XG4iLCJpbXBvcnQgeyBCYXNlLCBJUXVlc3Rpb24sIEV2ZW50IH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICBwdWJsaWMgaHRtbFRlbXBsYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBpc0ZpcnN0UmVuZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgd2lkZ2V0SnNvbjogYW55KSB7XG4gICAgdGhpcy5odG1sVGVtcGxhdGUgPSB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA/IHdpZGdldEpzb24uaHRtbFRlbXBsYXRlIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xuICAgIGlmICh0aGlzLmlzRmlyc3RSZW5kZXIpIHtcbiAgICAgIHRoaXMuaXNGaXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgcXVlc3Rpb24uc3VydmV5Lm9uTG9jYWxlQ2hhbmdlZEV2ZW50LmFkZCgoKSA9PiB7XG4gICAgICAgIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuICAgICAgICB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIpIHRoaXMud2lkZ2V0SnNvbi5hZnRlclJlbmRlcihxdWVzdGlvbiwgZWwpO1xuICB9XG4gIHB1YmxpYyB3aWxsVW5tb3VudChxdWVzdGlvbjogSVF1ZXN0aW9uLCBlbDogYW55KSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudCkgdGhpcy53aWRnZXRKc29uLndpbGxVbm1vdW50KHF1ZXN0aW9uLCBlbCk7XG4gIH1cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShxdWVzdGlvbjogSVF1ZXN0aW9uLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53aWRnZXRKc29uLmdldERpc3BsYXlWYWx1ZSlcbiAgICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uZ2V0RGlzcGxheVZhbHVlKHF1ZXN0aW9uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGlzRml0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xpYnJhcnlMb2FkZWQoKSAmJiB0aGlzLndpZGdldEpzb24uaXNGaXQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRml0KHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TaG93SW5Ub29sYm94KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmdldEFjdGl2YXRlZEJ5KHRoaXMubmFtZSkgIT0gXCJjdXN0b210eXBlXCJcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQgfHwgdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93SW5Ub29sYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCAhPT0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SW5Ub29sYm94KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMud2lkZ2V0SnNvbi5zaG93SW5Ub29sYm94ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpbml0KCkge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uaW5pdCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmluaXQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNMaWJyYXJ5TG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCkgPT0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcjtcbiAgfVxuICBwdWJsaWMgZ2V0IHBkZlF1ZXN0aW9uVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUXVlc3Rpb25UeXBlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGRmUmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUmVuZGVyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XG4gIHByaXZhdGUgd2lkZ2V0c1ZhbHVlczogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+ID0gW107XG4gIHByaXZhdGUgd2lkZ2V0c0FjdGl2YXRlZEJ5ID0ge307XG5cbiAgcHVibGljIG9uQ3VzdG9tV2lkZ2V0QWRkZWQ6IEV2ZW50PFxuICAgIChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQpID0+IGFueSwgYW55PigpO1xuXG4gIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZCh3aWRnZXRKc29uOiBhbnksIGFjdGl2YXRlZEJ5OiBzdHJpbmcgPSBcInByb3BlcnR5XCIpIHtcbiAgICB0aGlzLmFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uLCBhY3RpdmF0ZWRCeSk7XG4gIH1cbiAgcHVibGljIGFkZEN1c3RvbVdpZGdldChcbiAgICB3aWRnZXRKc29uOiBhbnksXG4gICAgYWN0aXZhdGVkQnk6IHN0cmluZyA9IFwicHJvcGVydHlcIlxuICApOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgdmFyIG5hbWUgPSB3aWRnZXRKc29uLm5hbWU7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBuYW1lID0gXCJ3aWRnZXRfXCIgKyB0aGlzLndpZGdldHMubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgdmFyIGN1c3RvbVdpZGdldCA9IG5ldyBRdWVzdGlvbkN1c3RvbVdpZGdldChuYW1lLCB3aWRnZXRKc29uKTtcbiAgICB0aGlzLndpZGdldHNWYWx1ZXMucHVzaChjdXN0b21XaWRnZXQpO1xuICAgIGN1c3RvbVdpZGdldC5pbml0KCk7XG4gICAgKDxhbnk+dGhpcykud2lkZ2V0c0FjdGl2YXRlZEJ5W25hbWVdID0gYWN0aXZhdGVkQnk7XG4gICAgY3VzdG9tV2lkZ2V0LmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgdGhpcy5vbkN1c3RvbVdpZGdldEFkZGVkLmZpcmUoY3VzdG9tV2lkZ2V0LCBudWxsKTtcbiAgICByZXR1cm4gY3VzdG9tV2lkZ2V0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3YXkgdGhlIGN1c3RvbSB3aWdldCBpcyBhY3RpdmF0ZWQuIEl0IGNhbiBiZSBhY3RpdmF0ZWQgYnkgYSBwcm9wZXJ0eSAoXCJwcm9wZXJ0eVwiKSwgcXVlc3Rpb24gdHlwZSAoXCJ0eXBlXCIpIG9yIGJ5IG5ldy9jdXN0b20gcXVlc3Rpb24gdHlwZSAoXCJjdXN0b210eXBlXCIpLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZSB0aGUgY3VzdG9tIHdpZGdldCBuYW1lXG4gICAqIEBzZWUgc2V0QWN0aXZhdGVkQnlcbiAgICovXG4gIHB1YmxpYyBnZXRBY3RpdmF0ZWRCeSh3aWRnZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV07XG4gICAgcmV0dXJuIHJlcyA/IHJlcyA6IFwicHJvcGVydHlcIjtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgd2F5IHRoZSBjdXN0b20gd2lnZXQgaXMgYWN0aXZhdGVkLiBUaGUgYWN0aXZhdGlvbiB0eXBlcyBhcmU6IHByb3BlcnR5IChcInByb3BlcnR5XCIpLCBxdWVzdGlvbiB0eXBlIChcInR5cGVcIikgb3IgbmV3L2N1c3RvbSBxdWVzdGlvbiB0eXBlIChcImN1c3RvbXR5cGVcIikuIEEgY3VzdG9tIHdpZ2V0IG1heSBzdXBwb3J0IGFsbCBvciBvbmx5IHNvbWUgb2YgdGhpcyBhY3RpdmF0aW9uIHR5cGVzLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZVxuICAgKiBAcGFyYW0gYWN0aXZhdGVkQnkgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhcmlhbnRzOiBcInByb3BlcnR5XCIsIFwidHlwZVwiIGFuZCBcImN1c3RvbXR5cGVcIlxuICAgKi9cbiAgcHVibGljIHNldEFjdGl2YXRlZEJ5KHdpZGdldE5hbWU6IHN0cmluZywgYWN0aXZhdGVkQnk6IHN0cmluZykge1xuICAgIGlmICghd2lkZ2V0TmFtZSB8fCAhYWN0aXZhdGVkQnkpIHJldHVybjtcbiAgICB2YXIgd2lkZ2V0ID0gdGhpcy5nZXRDdXN0b21XaWRnZXRCeU5hbWUod2lkZ2V0TmFtZSk7XG4gICAgaWYgKCF3aWRnZXQpIHJldHVybjtcbiAgICAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV0gPSBhY3RpdmF0ZWRCeTtcbiAgICB3aWRnZXQuYWN0aXZhdGVkQnlDaGFuZ2VkKGFjdGl2YXRlZEJ5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy53aWRnZXRzVmFsdWVzID0gW107XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVdpZGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy53aWRnZXRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tV2lkZ2V0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHNWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNWYWx1ZXNbaV0uaXNGaXQocXVlc3Rpb24pKSByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yLCBJU3VydmV5SW1wbCwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IE90aGVyRW1wdHlFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBDaG9pY2VzUmVzdGZ1bCB9IGZyb20gXCIuL2Nob2ljZXNSZXN0ZnVsXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5cbi8qKlxuICogSXQgaXMgYSBiYXNlIGNsYXNzIGZvciBjaGVja2JveCwgZHJvcGRvd24gYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25TZWxlY3RCYXNlIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwdWJsaWMgdmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgZmlsdGVyZWRDaG9pY2VzVmFsdWU6IEFycmF5PEl0ZW1WYWx1ZT47XG4gIHByaXZhdGUgY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGNvbW1lbnRWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIHByZXZDb21tZW50VmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBvdGhlckl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm90aGVyXCIpO1xuICBwcml2YXRlIGNob2ljZXNGcm9tVXJsOiBBcnJheTxJdGVtVmFsdWU+O1xuICBwcml2YXRlIGNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHM6IGFueTtcbiAgcHJpdmF0ZSBpc0Nob2ljZXNMb2FkZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgZW5hYmxlT25Mb2FkaW5nQ2hvaWNlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBkZXBlbmRlZFF1ZXN0aW9uczogQXJyYXk8UXVlc3Rpb25TZWxlY3RCYXNlPiA9IFtdO1xuICBwcml2YXRlIG5vbmVJdGVtVmFsdWU6IEl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJub25lXCIpO1xuICBwcml2YXRlIG5ld0l0ZW1WYWx1ZTogSXRlbVZhbHVlO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgbm9uZUl0ZW1UZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm5vbmVUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIG5vbmVJdGVtVGV4dC5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiAhIXRleHQgPyB0ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm5vbmVJdGVtVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMubm9uZUl0ZW1WYWx1ZS5sb2NPd25lciA9IHRoaXM7XG4gICAgdGhpcy5ub25lSXRlbVZhbHVlLnNldExvY1RleHQobm9uZUl0ZW1UZXh0KTtcblxuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNob2ljZXNcIiwgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZpbHRlckl0ZW1zKCkpIHtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImNob2ljZXNGcm9tUXVlc3Rpb25cIiwgXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiLCBcImhhc05vbmVcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJoaWRlSWZDaG9pY2VzRW1wdHlcIiwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKTtcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidmlzaWJsZUNob2ljZXNcIik7XG4gICAgdGhpcy5zZXROZXdSZXN0ZnVsUHJvcGVydHkoKTtcbiAgICB2YXIgbG9jT3RoZXJUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJFcnJvclRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5vdGhlckl0ZW1WYWx1ZS5sb2NPd25lciA9IHRoaXM7XG4gICAgdGhpcy5vdGhlckl0ZW1WYWx1ZS5zZXRMb2NUZXh0KGxvY090aGVyVGV4dCk7XG4gICAgbG9jT3RoZXJUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmJlZm9yZVNlbmRSZXF1ZXN0Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLm9uQmVmb3JlU2VuZFJlcXVlc3QoKTtcbiAgICB9O1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmdldFJlc3VsdENhbGxiYWNrID0gKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KTogdm9pZCA9PiB7XG4gICAgICB0aGlzLm9uTG9hZENob2ljZXNGcm9tVXJsKGl0ZW1zKTtcbiAgICB9O1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLnVwZGF0ZVJlc3VsdENhbGxiYWNrID0gKFxuICAgICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgICBzZXJ2ZXJSZXN1bHQ6IGFueVxuICAgICk6IEFycmF5PEl0ZW1WYWx1ZT4gPT4ge1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cnZleS51cGRhdGVDaG9pY2VzRnJvbVNlcnZlcih0aGlzLCBpdGVtcywgc2VydmVyUmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclBsYWNlSG9sZGVyXCIsIHRoaXMpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2VsZWN0YmFzZVwiO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVwZW5kZWRRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZGVwZW5kZWRRdWVzdGlvbnNbaV0uY2hvaWNlc0Zyb21RdWVzdGlvbiA9IFwiXCI7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlRnJvbURlcGVuZGVkUXVlc3Rpb24odGhpcy5nZXRRdWVzdGlvbldpdGhDaG9pY2VzKCkpO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUVycm9yKCkge1xuICAgIHJldHVybiAhdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgISF0aGlzLmNvbW1lbnQ7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY2FsZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5jaG9pY2VzT3JkZXIgIT09IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIGlmICghIXRoaXMuY2hvaWNlc0Zyb21VcmwpIHtcbiAgICAgIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZCh0aGlzLmNob2ljZXNGcm9tVXJsKTtcbiAgICAgIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZCh0aGlzLnZpc2libGVDaG9pY2VzKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG90aGVyIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNPdGhlclxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGEgdXNlciBzZWxlY3QgdGhlICdvdGhlcicgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNPdGhlclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc090aGVyICYmIHRoaXMuZ2V0SGFzT3RoZXIodGhpcy5yZW5kZXJlZFZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gc2hvdyB0aGUgXCJOb25lXCIgaXRlbSBvbiB0aGUgYm90dG9tLiBJZiBlbmQtdXNlciBjaGVja3MgdGhpcyBpdGVtLCBhbGwgb3RoZXIgaXRlbXMgd291bGQgYmUgdW5jaGVja2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNOb25lXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc05vbmUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzTm9uZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBub25lIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNOb25lXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vbmVJdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMubm9uZUl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3Igbm9uZSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBub25lVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwibm9uZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJub25lSXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgbm9uZVRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5vbmVUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY05vbmVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm5vbmVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCBjaG9pY2VzIGl0ZW0gYW5kIGlmIGZvciB0aGlzIGl0ZW0gaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSBpdGVtIGlzIHZpc2libGUgb3RoZXJ3aXNlIHRoZSBpdGVtIGJlY29tZXMgaW52aXNpYmxlLiBQbGVhc2UgdXNlIHtpdGVtfSB0byBnZXQgdGhlIGN1cnJlbnQgaXRlbSB2YWx1ZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHNlZSB2aXNpYmxlSWZcbiAgICogQHNlZSBjaG9pY2VzRW5hYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc1Zpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzVmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc1Zpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNWaXNpYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIGNob2ljZXMgaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgZW5hYmxlZCBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBkaXNhYmxlZC4gUGxlYXNlIHVzZSB7aXRlbX0gdG8gZ2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgaW4gdGhlIGV4cHJlc3Npb24uXG4gICAqIEBzZWUgY2hvaWNlc1Zpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzRW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0VuYWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc0VuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0VuYWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5ydW5JdGVtc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy9mb3IgY29tbWVudHMgYW5kIG90aGVyc1xuICB9XG4gIHByaXZhdGUgaXNTZXR0aW5nRGVmYXVsdFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgdGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUgPVxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgdGhpcy5oYXNVbmtub3duVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKTtcbiAgICB0aGlzLmlzU2V0dGluZ0RlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc011bHRpcGxlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbDtcbiAgICBpZiAodGhpcy5nZXRJc011bHRpcGxlVmFsdWUoKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBbdmFsXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID4gMCkgcmV0dXJuIHZhbFswXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgIXRoaXMuZGF0YSB8fFxuICAgICAgdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmdcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgcmV0dXJuIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuSXRlbXNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApOiBib29sZWFuIHtcbiAgICB0aGlzLnNldENvbmRpdGlvbmFsQ2hvaWNlc1J1bm5lcigpO1xuICAgIHZhciBoYXNDaGFuZ2VzID0gdGhpcy5ydW5Db25kaXRpb25zRm9ySXRlbXModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgJiZcbiAgICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUubGVuZ3RoID09PSB0aGlzLmFjdGl2ZUNob2ljZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlcztcbiAgfVxuICBwcm90ZWN0ZWQgcnVuSXRlbXNFbmFibGVDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApOiBhbnkge1xuICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxFbmFibGVDaG9pY2VzUnVubmVyKCk7XG4gICAgdmFyIGhhc0NoYW5nZWQgPSBJdGVtVmFsdWUucnVuRW5hYmxlZENvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuYWN0aXZlQ2hvaWNlcyxcbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FbmFibGVJdGVtQ2FsbEJhY2soaXRlbSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5jbGVhckRpc2FibGVkVmFsdWVzKCk7XG4gICAgfVxuICAgIHRoaXMub25BZnRlclJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQWZ0ZXJSdW5JdGVtc0VuYWJsZUNvbmRpdGlvbigpIHt9XG4gIHByb3RlY3RlZCBvbkVuYWJsZUl0ZW1DYWxsQmFjayhpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHNldENvbmRpdGlvbmFsQ2hvaWNlc1J1bm5lcigpIHtcbiAgICBpZiAodGhpcy5jaG9pY2VzVmlzaWJsZUlmKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKFxuICAgICAgICAgIHRoaXMuY2hvaWNlc1Zpc2libGVJZlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmNob2ljZXNWaXNpYmxlSWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lciA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxFbmFibGVDaG9pY2VzUnVubmVyKCkge1xuICAgIGlmICh0aGlzLmNob2ljZXNFbmFibGVJZikge1xuICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lcikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIoXG4gICAgICAgICAgdGhpcy5jaG9pY2VzRW5hYmxlSWZcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmNob2ljZXNFbmFibGVJZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgPSBbXTtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuYWN0aXZlQ2hvaWNlcyxcbiAgICAgIHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCksXG4gICAgICB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmdcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgPT09IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIGdldCB2YWxpZGF0ZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc3RmdWwoKTogQ2hvaWNlc1Jlc3RmdWwge1xuICAgIHJldHVybiBuZXcgQ2hvaWNlc1Jlc3RmdWwoKTtcbiAgfVxuICBwcml2YXRlIHNldE5ld1Jlc3RmdWxQcm9wZXJ0eSgpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzQnlVcmxcIiwgdGhpcy5jcmVhdGVSZXN0ZnVsKCkpO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLm93bmVyID0gdGhpcztcbiAgICB0aGlzLmNob2ljZXNCeVVybC5sb2FkaW5nT3duZXIgPSB0aGlzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbkNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLmNvbW1lbnRWYWx1ZSkgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xuICAgIGlmICh0aGlzLmhhc0NvbW1lbnQgfHwgdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICAgIHJldHVybiB0aGlzLmNvbW1lbnRWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzU2V0dGluZ0NvbW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpXG4gICAgICBzdXBlci5zZXRRdWVzdGlvbkNvbW1lbnQobmV3VmFsdWUpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmlzU2V0dGluZ0NvbW1lbnQgJiYgbmV3VmFsdWUgIT0gdGhpcy5jb21tZW50VmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc1NldHRpbmdDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb21tZW50VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNPdGhlclNlbGVjdGVkICYmICF0aGlzLmlzUmVuZGVyZWRWYWx1ZVNldHRpbmcpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGEodGhpcy5yZW5kZXJlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZSgpO1xuICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRWYWx1ZVwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlbmRlcmVkVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFZhbHVlXCIsIHZhbCk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUoXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSxcbiAgICB1cGRhdGVDb21tZW50OiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVmFsdWVcIiwgdGhpcy5yZW5kcmVkVmFsdWVGcm9tRGF0YShuZXdWYWx1ZSkpO1xuICAgIGlmICh0aGlzLmhhc0NvbW1lbnQgfHwgIXVwZGF0ZUNvbW1lbnQpIHJldHVybjtcbiAgICB2YXIgaXNPdGhlclNlbCA9IHRoaXMuaXNPdGhlclNlbGVjdGVkO1xuICAgIGlmIChpc090aGVyU2VsICYmICEhdGhpcy5wcmV2Q29tbWVudFZhbHVlKSB7XG4gICAgICB2YXIgb2xkQ29tbWVudCA9IHRoaXMucHJldkNvbW1lbnRWYWx1ZTtcbiAgICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY29tbWVudCA9IG9sZENvbW1lbnQ7XG4gICAgfVxuICAgIGlmICghaXNPdGhlclNlbCAmJiAhIXRoaXMuY29tbWVudCkge1xuICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkge1xuICAgICAgICB0aGlzLnByZXZDb21tZW50VmFsdWUgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1lbnQgPSBcIlwiO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKTtcbiAgICBpZiAoXG4gICAgICAoIXRoaXMuY2hvaWNlc0J5VXJsLmlzUnVubmluZyAmJlxuICAgICAgICAhdGhpcy5jaG9pY2VzQnlVcmwuaXNXYWl0aW5nRm9yUGFyYW1ldGVycykgfHxcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGxldCBjaG9pY2VpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMuYWN0aXZlQ2hvaWNlcywgdmFsKTtcbiAgICBpZiAoISFjaG9pY2VpdGVtKSB7XG4gICAgICByZXR1cm4gY2hvaWNlaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlZFZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRWYWx1ZUZyb21EYXRhQ29yZSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCwgdHJ1ZSwgZmFsc2UpKSByZXR1cm4gdGhpcy52YWx1ZUZyb21EYXRhKHZhbCk7XG4gICAgdGhpcy5jb21tZW50ID0gdmFsO1xuICAgIHJldHVybiB0aGlzLm90aGVySXRlbS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSAmJiB0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpKSB7XG4gICAgICB2YWwgPSB0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBoYXNVbmtub3duVmFsdWUoXG4gICAgdmFsOiBhbnksXG4gICAgaW5jbHVkZU90aGVyOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNGaWx0ZXJlZENob2ljZXM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluY2x1ZGVPdGhlciAmJiB2YWwgPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5oYXNOb25lICYmIHZhbCA9PSB0aGlzLm5vbmVJdGVtLnZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGNob2ljZXMgPSBpc0ZpbHRlcmVkQ2hvaWNlc1xuICAgICAgPyB0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpXG4gICAgICA6IHRoaXMuYWN0aXZlQ2hvaWNlcztcbiAgICByZXR1cm4gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGNob2ljZXMsIHZhbCkgPT0gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgaXNWYWx1ZURpc2FibGVkKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIGl0ZW1WYWx1ZSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpLCB2YWwpO1xuICAgIHJldHVybiAhIWl0ZW1WYWx1ZSAmJiAhaXRlbVZhbHVlLmlzRW5hYmxlZDtcbiAgfVxuICAvKipcbiAgICogSWYgdGhlIGNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2sgaXMgc2V0LCBpdCBpcyB1c2VkIHRvIGNsZWFyIGluY29ycmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBkZWZhdWx0IGJlaGF2aW91ci5cbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gZmlsbCB0aGUgY2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBzZXJ2aWNlLlxuICAgKiBAc2VlIGNob2ljZXNcbiAgICogQHNlZSBDaG9pY2VzUmVzdGZ1bFxuICAgKiBAc2VlIFtFeGFtcGxlOiBSRVNUZnVsIERyb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnkvP2lkPXF1ZXN0aW9udHlwZS1kcm9wZG93bnJlc3RmdWxsKVxuICAgKiBAc2VlIFtEb2NzOiBGaWxsIENob2ljZXMgZnJvbSBhIFJFU1RmdWwgU2VydmljZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnkvP2lkPUxpYnJhcnlPdmVydmlldyNmaWxsLXRoZS1jaG9pY2VzLWZyb20tYS1yZXN0ZnVsLXNlcnZpY2UpXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXNCeVVybCgpOiBDaG9pY2VzUmVzdGZ1bCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNCeVVybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNCeVVybCh2YWw6IENob2ljZXNSZXN0ZnVsKSB7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldE5ld1Jlc3RmdWxQcm9wZXJ0eSgpO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmZyb21KU09OKHZhbC50b0pTT04oKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGl0ZW1zLiBFdmVyeSBpdGVtIGhhcyB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdGhlIHZhbHVlIGlzIHJlbmRlcmVkLiBUaGUgaXRlbSB0ZXh0IHN1cHBvcnRzIG1hcmtkb3duLlxuICAgKiBAc2VlIGNob2ljZXNCeVVybFxuICAgKiBAc2VlIGNob2ljZXNGcm9tUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzXCIsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZ2V0IGNob2ljZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXN0aW9uIGluc3RlYWQgb2YgZGVmaW5pbmcgdGhlbSBpbiB0aGUgY3VycmVudCBxdWVzdGlvbi4gVGhpcyBhdm9pZHMgZHVwbGljYXRpb24gb2YgY2hvaWNlcyBkZWNsYXJhdGlvbiBpbiB5b3VyIHN1cnZleSBkZWZpbml0aW9uLlxuICAgKiBCeSBzZXR0aW5nIHRoaXMgcHJvcGVydHksIHRoZSBcImNob2ljZXNcIiwgXCJjaG9pY2VzVmlzaWJsZUlmXCIsIFwiY2hvaWNlc0VuYWJsZUlmXCIgYW5kIFwiY2hvaWNlc09yZGVyXCIgcHJvcGVydGllcyBiZWNvbWUgaW52aXNpYmxlLCBiZWNhdXNlIHRoZXNlIHF1ZXN0aW9uIGNoYXJhY3RlcmlzdGljcyBkZXBlbmQgb24gYWN0aW9ucyBpbiBhbm90aGVyIChzcGVjaWZpZWQpIHF1ZXN0aW9uLlxuICAgKiBVc2UgdGhlIGBjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZWAgcHJvcGVydHkgdG8gZmlsdGVyIGNob2ljZXMgb2J0YWluZWQgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGNob2ljZXNcbiAgICogQHNlZSBjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzRnJvbVF1ZXN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNGcm9tUXVlc3Rpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzRnJvbVF1ZXN0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbldpdGhDaG9pY2VzKCk7XG4gICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgIHF1ZXN0aW9uLnJlbW92ZUZyb21EZXBlbmRlZFF1ZXN0aW9uKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRJbnRvRGVwZW5kZWRRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlKSB7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5kZXBlbmRlZFF1ZXN0aW9ucy5pbmRleE9mKHRoaXMpID4gLTEpIHJldHVybjtcbiAgICBxdWVzdGlvbi5kZXBlbmRlZFF1ZXN0aW9ucy5wdXNoKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlRnJvbURlcGVuZGVkUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSkge1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSBxdWVzdGlvbi5kZXBlbmRlZFF1ZXN0aW9ucy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBxdWVzdGlvbi5kZXBlbmRlZFF1ZXN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBiZWNvbWVzIHZpc2libGUgd2hlbiB0aGUgYGNob2ljZXNGcm9tUXVlc3Rpb25gIHByb3BlcnR5IGlzIHNlbGVjdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcImFsbFwiIChhbGwgdmlzaWJsZSBjaG9pY2VzIGZyb20gYW5vdGhlciBxdWVzdGlvbiBhcmUgZGlzcGxheWVkIGFzIHRoZXkgYXJlKS5cbiAgICogWW91IGNhbiBzZXQgdGhpcyBwcm9wZXJ0eSB0byBcInNlbGVjdGVkXCIgb3IgXCJ1bnNlbGVjdGVkXCIgdG8gZGlzcGxheSBvbmx5IHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQgY2hvaWNlcyBmcm9tIHRoZSBzcGVjaWZpZWQgcXVlc3Rpb24uXG4gICAqIEBzZWUgY2hvaWNlc0Zyb21RdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBoaWRlIHRoZSBxdWVzdGlvbiBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIGNob2ljZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVJZkNob2ljZXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmQ2hvaWNlc0VtcHR5XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhpZGVJZkNob2ljZXNFbXB0eSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZDaG9pY2VzRW1wdHlcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGtlZXBJbmNvcnJlY3RWYWx1ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImtlZXBJbmNvcnJlY3RWYWx1ZXNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQga2VlcEluY29ycmVjdFZhbHVlcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogUGxlYXNlIHVzZSBzdXJ2ZXkuc3RvcmVPdGhlcnNBc0NvbW1lbnQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvbiB0aGUgc3VydmV5IGxldmVsLiBUaGlzIHByb3BlcnR5IGlzIGRlcHJpY2F0ZWQgYW5kIGludmlzaWJsZSBpbiBTdXJ2ZXkgQ3JlYXRvci5cbiAgICogQnkgZGVmYXVsdCB0aGUgZW50ZXJlZCB0ZXh0IGluIHRoZSBvdGhlcnMgaW5wdXQgaW4gdGhlIGNoZWNrYm94L3JhZGlvZ3JvdXAvZHJvcGRvd24gYXJlIHN0b3JlZCBhcyBcInF1ZXN0aW9uIG5hbWUgXCIgKyBcIi1Db21tZW50XCIuIFRoZSB2YWx1ZSBpdHNlbGYgaXMgXCJxdWVzdGlvbiBuYW1lXCI6IFwib3RoZXJzXCIuIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBzdG9yZSB0aGUgZW50ZXJlZCB0ZXh0IGRpcmVjdGx5IGluIHRoZSBcInF1ZXN0aW9uIG5hbWVcIiBrZXkuXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6IFwiZGVmYXVsdFwiLCB0cnVlLCBmYWxzZVxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0b3JlT3RoZXJzQXNDb21tZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIFwiZGVmYXVsdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0b3JlT3RoZXJzQXNDb21tZW50KHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkge1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVuZGVyIGl0ZW1zIGluIGEgc3BlY2lmaWMgb3JkZXI6IFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiLiBEZWZhdWx0IHZhbHVlIGlzIFwibm9uZVwiLlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzT3JkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc09yZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbCA9PSB0aGlzLmNob2ljZXNPcmRlcikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNPcmRlclwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3Igb3RoZXIgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3RoZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvdGhlclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG90aGVyVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJUZXh0XCIsIHZhbCk7XG4gICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICB9XG4gIGdldCBsb2NPdGhlclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBwbGFjZSBob2xkZXIgdGV4dCBmb3Igb3RoZXIgb3IgY29tbWVudCBmaWVsZCAgLlxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlclBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJQbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG90aGVyUGxhY2VIb2xkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyUGxhY2VIb2xkZXJcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGF0IHNob3dzIHdoZW4gdGhlIG90aGVyIGl0ZW0gaXMgY2hvb3NlZCBieSB0aGUgb3RoZXIgaW5wdXQgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvdGhlckVycm9yVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVyUmVxdWlyZWRFcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlckVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJFcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJFcnJvclRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGl0ZW1zIGFzIHRoZXkgd2lsbCBiZSByZW5kZXJlZC4gSWYgbmVlZGVkIGl0ZW1zIGFyZSBzb3J0ZWQgYW5kIHRoZSBvdGhlciBpdGVtIGlzIGFkZGVkLlxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqIEBzZWUgY2hvaWNlc09yZGVyXG4gICAqIEBzZWUgZW5hYmxlZENob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVDaG9pY2VzXCIsIFtdKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZW5hYmxlZCBpdGVtcyBhcyB0aGV5IHdpbGwgYmUgcmVuZGVyZWQuIFRoZSBkaXNhYmxlZCBpdGVtcyBhcmUgbm90IGluY2x1ZGVkXG4gICAqIEBzZWUgaGFzT3RoZXJcbiAgICogQHNlZSBjaG9pY2VzT3JkZXJcbiAgICogQHNlZSB2aXNpYmxlQ2hvaWNlc1xuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVkQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGl0ZW1zID0gdGhpcy52aXNpYmxlQ2hvaWNlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0uaXNFbmFibGVkKSByZXMucHVzaChpdGVtc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVZpc2libGVDaG9pY2VzKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgICB2YXIgY2FsY1ZhbHVlID0gdGhpcy5jYWxjVmlzaWJsZUNob2ljZXMoKTtcbiAgICBpZiAoIWNhbGNWYWx1ZSkgY2FsY1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxjVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2goY2FsY1ZhbHVlW2ldKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUNob2ljZXNcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHByaXZhdGUgY2FsY1Zpc2libGVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIGlmICh0aGlzLmNhblVzZUZpbHRlcmVkQ2hvaWNlcygpKSByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKTtcbiAgICB2YXIgcmVzID0gdGhpcy5zb3J0VmlzaWJsZUNob2ljZXModGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKS5zbGljZSgpKTtcbiAgICB0aGlzLmFkZFRvVmlzaWJsZUNob2ljZXMocmVzLCB0aGlzLmlzQWRkRGVmYXVsdEl0ZW1zKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzQWRkRGVmYXVsdEl0ZW1zICYmXG4gICAgICAhdGhpcy5oYXNOb25lICYmXG4gICAgICAhdGhpcy5oYXNPdGhlciAmJlxuICAgICAgdGhpcy5jaG9pY2VzT3JkZXIgPT0gXCJub25lXCJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBhZGRUb1Zpc2libGVDaG9pY2VzKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCBpc0FkZEFsbDogYm9vbGVhbikge1xuICAgIGlmIChpc0FkZEFsbCkge1xuICAgICAgaWYgKCF0aGlzLm5ld0l0ZW1WYWx1ZSkge1xuICAgICAgICB0aGlzLm5ld0l0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJuZXdpdGVtXCIpOyAvL1RPRE9cbiAgICAgIH1cbiAgICAgIGl0ZW1zLnB1c2godGhpcy5uZXdJdGVtVmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXBwb3J0T3RoZXIoKSAmJiAoaXNBZGRBbGwgfHwgdGhpcy5oYXNPdGhlcikpIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5vdGhlckl0ZW0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXBwb3J0Tm9uZSgpICYmIChpc0FkZEFsbCB8fCB0aGlzLmhhc05vbmUpKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMubm9uZUl0ZW0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRm9yIGludGVybmFsIHVzZSBpbiBTdXJ2ZXlKUyBDcmVhdG9yIFYyLlxuICAgKi9cbiAgcHVibGljIGlzSXRlbUluTGlzdChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5vdGhlckl0ZW0pIHJldHVybiB0aGlzLmhhc090aGVyO1xuICAgIGlmIChpdGVtID09PSB0aGlzLm5vbmVJdGVtKSByZXR1cm4gdGhpcy5oYXNOb25lO1xuICAgIGlmIChpdGVtID09PSB0aGlzLm5ld0l0ZW1WYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNBZGREZWZhdWx0SXRlbXMoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnN1cHBvcnRDcmVhdG9yVjIgJiYgdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMucGFyZW50UXVlc3Rpb247XG4gIH1cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSBzdXBlci5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZSA6IFt0aGlzLnZhbHVlXTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gKHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgfHwgW10pLmNvbmNhdChcbiAgICAgICAgdmFsdWVzLm1hcCgoZGF0YVZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHZhciBjaG9pY2UgPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgZGF0YVZhbHVlKTtcbiAgICAgICAgICB2YXIgY2hvaWNlRGF0YUl0ZW0gPSA8YW55PntcbiAgICAgICAgICAgIG5hbWU6IGluZGV4LFxuICAgICAgICAgICAgdGl0bGU6IFwiQ2hvaWNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YVZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmdldENob2ljZXNEaXNwbGF5VmFsdWUoXG4gICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXMsXG4gICAgICAgICAgICAgIGRhdGFWYWx1ZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoISFjaG9pY2UpIHtcbiAgICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgY2hvaWNlRGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9XG4gICAgICAgICAgICAgICAgY2hvaWNlW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaXNPdGhlclNlbGVjdGVkICYmIHRoaXMub3RoZXJJdGVtVmFsdWUgPT09IGNob2ljZSkge1xuICAgICAgICAgICAgY2hvaWNlRGF0YUl0ZW0uaXNPdGhlciA9IHRydWU7XG4gICAgICAgICAgICBjaG9pY2VEYXRhSXRlbS5kaXNwbGF5VmFsdWUgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjaG9pY2VEYXRhSXRlbTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgY3VycmVudCB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIG51bGwgdGhlbiByZXR1cm5zIGVtcHR5IHN0cmluZy4gSWYgJ290aGVyJyBpcyBzZWxlY3RlZCB0aGVuIHJldHVybnMgdGhlIHRleHQgZm9yIG90aGVyIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENob2ljZXNEaXNwbGF5VmFsdWUoaXRlbXM6IEl0ZW1WYWx1ZVtdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm90aGVySXRlbVZhbHVlLnZhbHVlKVxuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCA/IHRoaXMuY29tbWVudCA6IHRoaXMubG9jT3RoZXJUZXh0LnRleHRPckh0bWw7XG4gICAgdmFyIHN0ciA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICByZXR1cm4gc3RyID09IFwiXCIgJiYgdmFsID8gdmFsIDogc3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlXG4gICAgICA/IHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWVcbiAgICAgIDogdGhpcy5hY3RpdmVDaG9pY2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKTtcbiAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgdGhpcy5hZGRJbnRvRGVwZW5kZWRRdWVzdGlvbihxdWVzdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzRnJvbVF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc0Zyb21VcmwgPyB0aGlzLmNob2ljZXNGcm9tVXJsIDogdGhpcy5nZXRDaG9pY2VzKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRRdWVzdGlvbldpdGhDaG9pY2VzKCk6IFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gICAgaWYgKCF0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24gfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZSh0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pO1xuICAgIHJldHVybiAhIXJlcyAmJiAhIXJlcy52aXNpYmxlQ2hvaWNlcyAmJiByZXMgIT09IHRoaXMgPyByZXMgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzRnJvbVF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHJlczogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xuICAgIHZhciBpc1NlbGVjdGVkID1cbiAgICAgIHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUgPT0gXCJzZWxlY3RlZFwiXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUgPT0gXCJ1bnNlbGVjdGVkXCJcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2hvaWNlcyA9IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHF1ZXN0aW9uKSkgY29udGludWU7XG4gICAgICBpZiAoaXNTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcy5wdXNoKGNob2ljZXNbaV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBpdGVtc1NlbGVjdGVkID0gcXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQoY2hvaWNlc1tpXSk7XG4gICAgICBpZiAoKGl0ZW1zU2VsZWN0ZWQgJiYgaXNTZWxlY3RlZCkgfHwgKCFpdGVtc1NlbGVjdGVkICYmICFpc1NlbGVjdGVkKSkge1xuICAgICAgICByZXMucHVzaChjaG9pY2VzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhc0FjdGl2ZUNob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGlmICghY2hvaWNlcyB8fCBjaG9pY2VzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICBjaG9pY2VzID0gdGhpcy52aXNpYmxlQ2hvaWNlcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNCdWlsdEluQ2hvaWNlKGNob2ljZXNbaV0sIHRoaXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBpc0J1aWx0SW5DaG9pY2UoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm5vbmVJdGVtIHx8XG4gICAgICBpdGVtID09PSBxdWVzdGlvbi5vdGhlckl0ZW0gfHxcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm5ld0l0ZW1WYWx1ZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcztcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE5vbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKCF0aGlzLmhhc090aGVyIHx8ICF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCB0aGlzLmNvbW1lbnQpIHJldHVybjtcbiAgICBlcnJvcnMucHVzaChuZXcgT3RoZXJFbXB0eUVycm9yKHRoaXMub3RoZXJFcnJvclRleHQsIHRoaXMpKTtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICB0aGlzLnJ1bkNob2ljZXNCeVVybCgpO1xuICAgIGlmICh0aGlzLmlzQWRkRGVmYXVsdEl0ZW1zKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlDb3JlKHZhbHVlOiBJU3VydmV5KSB7XG4gICAgc3VwZXIuc2V0U3VydmV5Q29yZSh2YWx1ZSk7XG4gICAgaWYgKCEhdmFsdWUgJiYgISF0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkge1xuICAgIGlmICh0aGlzLmlzU2V0dGluZ0RlZmF1bHRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnN0b3JlT3RoZXJzQXNDb21tZW50ID09PSB0cnVlIHx8XG4gICAgICAodGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCA9PSBcImRlZmF1bHRcIiAmJlxuICAgICAgICAodGhpcy5zdXJ2ZXkgIT0gbnVsbCA/IHRoaXMuc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IDogdHJ1ZSkpIHx8XG4gICAgICAoIXRoaXMuY2hvaWNlc0J5VXJsLmlzRW1wdHkgJiYgIXRoaXMuY2hvaWNlc0Zyb21VcmwpXG4gICAgKTtcbiAgfVxuICBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5ydW5DaG9pY2VzQnlVcmwoKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgaWYgKG5hbWUgIT0gdGhpcy5nZXRWYWx1ZU5hbWUoKSkge1xuICAgICAgdGhpcy5ydW5DaG9pY2VzQnlVcmwoKTtcbiAgICB9XG4gICAgaWYgKCEhbmFtZSAmJiBuYW1lID09IHRoaXMuY2hvaWNlc0Zyb21RdWVzdGlvbikge1xuICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICB1cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWU6IGFueSkge1xuICAgIHZhciBuZXdDb21tZW50ID0gXCJcIjtcbiAgICBpZiAoXG4gICAgICB0aGlzLmhhc090aGVyICYmXG4gICAgICAhdGhpcy5pc1J1bm5pbmdDaG9pY2VzICYmXG4gICAgICAhdGhpcy5jaG9pY2VzQnlVcmwuaXNSdW5uaW5nICYmXG4gICAgICB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZShuZXdWYWx1ZSkgJiYgIXRoaXMuZ2V0SGFzT3RoZXIobmV3VmFsdWUpKSB7XG4gICAgICAgIG5ld0NvbW1lbnQgPSB0aGlzLmdldENvbW1lbnRGcm9tVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuc2V0T3RoZXJWYWx1ZUludG9WYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdDb21tZW50ID0gdGhpcy5kYXRhLmdldENvbW1lbnQodGhpcy5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZVZhbHVlRnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgaWYgKCEhbmV3Q29tbWVudCkge1xuICAgICAgdGhpcy5zZXROZXdDb21tZW50KG5ld0NvbW1lbnQpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29tbWVudEZyb21WYWx1ZShuZXdWYWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE90aGVyVmFsdWVJbnRvVmFsdWUobmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNSdW5uaW5nQ2hvaWNlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJ1bkNob2ljZXNCeVVybCgpIHtcbiAgICBpZiAoIXRoaXMuY2hvaWNlc0J5VXJsIHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc1J1bm5pbmdDaG9pY2VzKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciBwcm9jZXNzb3IgPSB0aGlzLnN1cnZleUltcGxcbiAgICAgID8gdGhpcy5zdXJ2ZXlJbXBsLmdldFRleHRQcm9jZXNzb3IoKVxuICAgICAgOiB0aGlzLnRleHRQcm9jZXNzb3I7XG4gICAgaWYgKCFwcm9jZXNzb3IpIHByb2Nlc3NvciA9IHRoaXMuc3VydmV5O1xuICAgIGlmICghcHJvY2Vzc29yKSByZXR1cm47XG4gICAgdGhpcy5pc1JlYWR5VmFsdWUgPSB0aGlzLmlzQ2hvaWNlc0xvYWRlZCB8fCB0aGlzLmNob2ljZXNCeVVybC5pc0VtcHR5O1xuICAgIHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyA9IHRydWU7XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwucnVuKHByb2Nlc3Nvcik7XG4gICAgdGhpcy5pc1J1bm5pbmdDaG9pY2VzID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBpc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIG9uQmVmb3JlU2VuZFJlcXVlc3QoKSB7XG4gICAgaWYgKHNldHRpbmdzLmRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYiA9PT0gdHJ1ZSAmJiAhdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICB0aGlzLmVuYWJsZU9uTG9hZGluZ0Nob2ljZXMgPSB0cnVlO1xuICAgICAgdGhpcy5yZWFkT25seSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRDaG9pY2VzRnJvbVVybChhcnJheTogQXJyYXk8SXRlbVZhbHVlPikge1xuICAgIGlmICh0aGlzLmVuYWJsZU9uTG9hZGluZ0Nob2ljZXMpIHtcbiAgICAgIHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIGlmICh0aGlzLmNob2ljZXNCeVVybCAmJiB0aGlzLmNob2ljZXNCeVVybC5lcnJvcikge1xuICAgICAgICBlcnJvcnMucHVzaCh0aGlzLmNob2ljZXNCeVVybC5lcnJvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9XG4gICAgdmFyIG5ld0Nob2ljZXMgPSBudWxsO1xuICAgIHZhciBjaGVja0NhY2hlZFZhbHVlc09uRXhpc3RpbmcgPSB0cnVlO1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNGaXJzdExvYWRDaG9pY2VzRnJvbVVybCAmJlxuICAgICAgIXRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyAmJlxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMpKSB7XG4gICAgICB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgPSB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmlzRmlyc3RMb2FkQ2hvaWNlc0Zyb21VcmwgPSBmYWxzZTtcbiAgICB2YXIgY2FjaGVkVmFsdWVzID0gdGhpcy5jcmVhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzLFxuICAgICAgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nXG4gICAgKTtcbiAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbmV3Q2hvaWNlcyA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gICAgICBJdGVtVmFsdWUuc2V0RGF0YShuZXdDaG9pY2VzLCBhcnJheSk7XG4gICAgfVxuICAgIGlmICghIW5ld0Nob2ljZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBuZXdDaG9pY2VzW2ldLmxvY093bmVyID0gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaG9pY2VzRnJvbVVybCA9IG5ld0Nob2ljZXM7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICBpZiAobmV3Q2hvaWNlcykge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy51cGRhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgICAgICBjYWNoZWRWYWx1ZXMsXG4gICAgICAgIG5ld0Nob2ljZXNcbiAgICAgICk7XG4gICAgICBpZiAoISFuZXdWYWx1ZSAmJiAhdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICAgIHZhciBoYXNDaGFuZ2VkID0gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZSh1bmRlZmluZWQsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IGhhc0NoYW5nZWQ7XG4gICAgICAgICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaG9pY2VzTG9hZGVkKCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgIHZhbDogYW55LFxuICAgIGNoZWNrT25FeGlzdGluZzogYm9vbGVhblxuICApOiBhbnkge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB2YXIgcmVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMucHVzaCh0aGlzLmNyZWF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHModmFsW2ldLCB0cnVlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICB2YXIgaXNFeGlzdHMgPSBjaGVja09uRXhpc3RpbmcgPyAhdGhpcy5oYXNVbmtub3duVmFsdWUodmFsKSA6IHRydWU7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHZhbCwgaXNFeGlzdHM6IGlzRXhpc3RzIH07XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgIHZhbDogYW55LFxuICAgIG5ld0Nob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT5cbiAgKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgICAgICB2YWxbaV0sXG4gICAgICAgICAgbmV3Q2hvaWNlc1xuICAgICAgICApO1xuICAgICAgICBpZiAodXBkYXRlZFZhbHVlICYmICF0aGlzLmlzVmFsdWVFbXB0eSh1cGRhdGVkVmFsdWUudmFsdWUpKSB7XG4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdXBkYXRlZFZhbHVlLnZhbHVlO1xuICAgICAgICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKG5ld0Nob2ljZXMsIHVwZGF0ZWRWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXMucHVzaChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHZhbHVlOiByZXMgfTtcbiAgICB9XG4gICAgdmFyIHZhbHVlID1cbiAgICAgIHZhbC5pc0V4aXN0cyAmJiB0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwudmFsdWUpID8gbnVsbCA6IHZhbC52YWx1ZTtcbiAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShuZXdDaG9pY2VzLCB2YWx1ZSk7XG4gICAgaWYgKCEhaXRlbSkge1xuICAgICAgdmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUgfTtcbiAgfVxuICBwcml2YXRlIGlzVXBkYXRpbmdDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5pc1VwZGF0aW5nQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zKSByZXR1cm47XG4gICAgdGhpcy5pc1VwZGF0aW5nQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVwZW5kZWRRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZGVwZW5kZWRRdWVzdGlvbnNbaV0ub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIHRoaXMuZGVwZW5kZWRRdWVzdGlvbnNbaV0udXBkYXRlQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zKCk7XG4gICAgfVxuICAgIHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucyA9IGZhbHNlO1xuICB9XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpO1xuICB9XG4gIHByb3RlY3RlZCBvblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNob2ljZXMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uQ2hvaWNlcygpO1xuICAgIGlmICghIXRoaXMudmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uQ2hvaWNlcygpIHtcbiAgICBpZiAodGhpcy5oaWRlSWZDaG9pY2VzRW1wdHkpIHtcbiAgICAgIHZhciBmaWx0ZXJlZENob2ljZXMgPSB0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpO1xuICAgICAgdGhpcy52aXNpYmxlID0gIWZpbHRlcmVkQ2hvaWNlcyB8fCBmaWx0ZXJlZENob2ljZXMubGVuZ3RoID4gMDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzb3J0VmlzaWJsZUNob2ljZXMoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgb3JkZXIgPSB0aGlzLmNob2ljZXNPcmRlci50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChvcmRlciA9PSBcImFzY1wiKSByZXR1cm4gdGhpcy5zb3J0QXJyYXkoYXJyYXksIDEpO1xuICAgIGlmIChvcmRlciA9PSBcImRlc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAtMSk7XG4gICAgaWYgKG9yZGVyID09IFwicmFuZG9tXCIpIHJldHVybiB0aGlzLnJhbmRvbWl6ZUFycmF5KGFycmF5KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgcHJpdmF0ZSBzb3J0QXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4sIG11bHQ6IG51bWJlcik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIGlmIChhLmNhbGN1bGF0ZWRUZXh0IDwgYi5jYWxjdWxhdGVkVGV4dCkgcmV0dXJuIC0xICogbXVsdDtcbiAgICAgIGlmIChhLmNhbGN1bGF0ZWRUZXh0ID4gYi5jYWxjdWxhdGVkVGV4dCkgcmV0dXJuIDEgKiBtdWx0O1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSByYW5kb21pemVBcnJheShhcnJheTogQXJyYXk8SXRlbVZhbHVlPik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiBIZWxwZXJzLnJhbmRvbWl6ZUFycmF5PEl0ZW1WYWx1ZT4oYXJyYXkpO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5rZWVwSW5jb3JyZWN0VmFsdWVzKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25Db3VudEJ5VmFsdWVOYW1lKHRoaXMuZ2V0VmFsdWVOYW1lKCkpID4gMVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY2hvaWNlc0J5VXJsICYmXG4gICAgICAhdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eSAmJlxuICAgICAgKCF0aGlzLmNob2ljZXNGcm9tVXJsIHx8IHRoaXMuY2hvaWNlc0Zyb21VcmwubGVuZ3RoID09IDApXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXNDYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ29yZSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgc2VsZWN0ZWRcbiAgICogQHBhcmFtIGl0ZW0gY2hlY2tib3ggb3IgcmFkaW8gaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB0aGlzLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgY2xlYXJEaXNhYmxlZFZhbHVlcygpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5jbGVhclZhbHVlT25EaXNhYmxlSXRlbXMpIHJldHVybjtcbiAgICB0aGlzLmNsZWFyRGlzYWJsZWRWYWx1ZXNDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFySW5jb3JyZWN0VmFsdWVzQ29yZSgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAodGhpcy5jYW5DbGVhclZhbHVlQW5Vbmtub3codmFsKSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5DbGVhclZhbHVlQW5Vbmtub3codmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSAmJiB0aGlzLmlzT3RoZXJTZWxlY3RlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwsIHRydWUpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckRpc2FibGVkVmFsdWVzQ29yZSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRGlzYWJsZWQodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBjbGVhclVudXNlZFZhbHVlcygpIHtcbiAgICBzdXBlci5jbGVhclVudXNlZFZhbHVlcygpO1xuICAgIGlmICghdGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgIXRoaXMuaGFzQ29tbWVudCkge1xuICAgICAgdGhpcy5jb21tZW50ID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0Q29sdW1uQ2xhc3MoKSB7XG4gICAgdmFyIGNvbHVtbkNsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmNvbHVtbjtcbiAgICBpZiAodGhpcy5oYXNDb2x1bW5zKSB7XG4gICAgICBjb2x1bW5DbGFzcyArPSBcIiBzdi1xLWNvbHVtbi1cIiArIHRoaXMuY29sQ291bnQ7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5DbGFzcztcbiAgfVxuICBnZXRJdGVtSW5kZXgoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNob2ljZXMuaW5kZXhPZihpdGVtKTtcbiAgfVxuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSB0aGlzLmlzUmVhZE9ubHkgfHwgIWl0ZW0uaXNFbmFibGVkO1xuICAgIGNvbnN0IGlzQ2hlY2tlZCA9XG4gICAgICB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pIHx8XG4gICAgICAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgdGhpcy5vdGhlckl0ZW0udmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICAgIGNvbnN0IGFsbG93SG92ZXIgPSAhaXNEaXNhYmxlZCAmJiAhaXNDaGVja2VkO1xuICAgIGNvbnN0IGlzTm9uZSA9IGl0ZW0gPT09IHRoaXMubm9uZUl0ZW07XG4gICAgaWYgKCF0aGlzLmhhc0NvbHVtbnMpIHtcbiAgICAgIGl0ZW1DbGFzcyArPVxuICAgICAgICB0aGlzLmNvbENvdW50ID09PSAwXG4gICAgICAgICAgPyBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5saW5lXG4gICAgICAgICAgOiBcIiBzdi1xLWNvbC1cIiArIHRoaXMuY29sQ291bnQ7XG4gICAgfVxuICAgIGlmIChpc0Rpc2FibGVkICYmICEhdGhpcy5jc3NDbGFzc2VzLml0ZW1EaXNhYmxlZClcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCAmJiAhIXRoaXMuY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZClcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBpZiAoYWxsb3dIb3ZlciAmJiAhIXRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXIpXG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbUhvdmVyO1xuICAgIGlmIChpc05vbmUgJiYgISF0aGlzLmNzc0NsYXNzZXMuaXRlbU5vbmUpXG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbU5vbmU7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuICBnZXRMYWJlbENsYXNzKGl0ZW06IEl0ZW1WYWx1ZSkge1xuICAgIHZhciBsYWJlbENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmxhYmVsO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKSB7XG4gICAgICBsYWJlbENsYXNzICs9IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLmxhYmVsQ2hlY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsQ2xhc3M7XG4gIH1cbiAgZ2V0Q29udHJvbExhYmVsQ2xhc3MoaXRlbTogSXRlbVZhbHVlKSB7XG4gICAgdmFyIGNvbnRyb2xMYWJlbENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbDtcbiAgICBpZiAodGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSkge1xuICAgICAgY29udHJvbExhYmVsQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsQ2hlY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2xMYWJlbENsYXNzO1xuICB9XG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHZhciBjb2x1bW5zID0gW107XG4gICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcbiAgICBpZiAodGhpcy5oYXNDb2x1bW5zICYmIHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHNldHRpbmdzLnNob3dJdGVtc0luT3JkZXIgPT0gXCJjb2x1bW5cIikge1xuICAgICAgICB2YXIgcHJldkluZGV4ID0gMDtcbiAgICAgICAgdmFyIGxlZnRFbGVtZW50c0NvdW50ID0gdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggJSBjb2xDb3VudDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvbHVtbiA9IFtdO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgaiA9IHByZXZJbmRleDtcbiAgICAgICAgICAgIGogPCBwcmV2SW5kZXggKyBNYXRoLmZsb29yKHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoIC8gY29sQ291bnQpO1xuICAgICAgICAgICAgaisrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb2x1bW4ucHVzaCh0aGlzLnZpc2libGVDaG9pY2VzW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxlZnRFbGVtZW50c0NvdW50ID4gMCkge1xuICAgICAgICAgICAgbGVmdEVsZW1lbnRzQ291bnQtLTtcbiAgICAgICAgICAgIGNvbHVtbi5wdXNoKHRoaXMudmlzaWJsZUNob2ljZXNbal0pO1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2SW5kZXggPSBqO1xuICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHtcbiAgICAgICAgICB2YXIgY29sdW1uID0gW107XG4gICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaiArPSBjb2xDb3VudCkge1xuICAgICAgICAgICAgY29sdW1uLnB1c2godGhpcy52aXNpYmxlQ2hvaWNlc1tqXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG4gIGdldCBoYXNDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbENvdW50ID4gMTtcbiAgfVxuICBwdWJsaWMgY2hvaWNlc0xvYWRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2hvaWNlc0xvYWRlZCA9IHRydWU7XG4gICAgbGV0IG9sZElzUmVhZHk6IGJvb2xlYW4gPSB0aGlzLmlzUmVhZHlWYWx1ZTtcbiAgICB0aGlzLmlzUmVhZHlWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5vblJlYWR5Q2hhbmdlZCAmJlxuICAgICAgdGhpcy5vblJlYWR5Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIGlzUmVhZHk6IHRydWUsXG4gICAgICAgIG9sZElzUmVhZHk6IG9sZElzUmVhZHksXG4gICAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoaXRlbTogSXRlbVZhbHVlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgcmV0dXJuIHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleU1vZGVsLlRlbXBsYXRlUmVuZGVyZXJDb21wb25lbnROYW1lO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtOiBJdGVtVmFsdWUpOiBhbnkge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICByZXR1cm4gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW0sIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxufVxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIHF1ZXN0aW9ucy4gSXQgaW50cm9kdWNlZCBhIGNvbENvdW50IHByb3BlcnR5LlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveEJhc2UgZXh0ZW5kcyBRdWVzdGlvblNlbGVjdEJhc2Uge1xuICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgcmFkaW9ncm91cCBhbmQgY2hlY2tib3ggcXVlc3Rpb25zLiBJdGVtcyBhcmUgcmVuZHJlZCBpbiBvbmUgbGluZSBpZiB0aGUgdmFsdWUgaXMgMC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29sQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdGhpcy5pc0Zsb3dMYXlvdXQgPyAwIDogMSk7XG4gIH1cbiAgcHVibGljIHNldCBjb2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDUgfHwgdGhpcy5pc0Zsb3dMYXlvdXQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB2YWx1ZSk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUGFyZW50Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblBhcmVudENoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5pc0Zsb3dMYXlvdXQpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25QYXJlbnRRdWVzdGlvbkNoYW5nZWQoKSB7XG4gICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlSXRlbVZhbHVlS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAga2V5cy5wdXNoKFwiY2hvaWNlc1wiKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzZWxlY3RiYXNlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNDb21tZW50O1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gICAgXCJjaG9pY2VzRnJvbVF1ZXN0aW9uOnF1ZXN0aW9uX3NlbGVjdGJhc2VcIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlW11cIixcbiAgICAgIGJhc2VWYWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpO1xuICAgICAgfSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiYWxsXCIsXG4gICAgICBjaG9pY2VzOiBbXCJhbGxcIiwgXCJzZWxlY3RlZFwiLCBcInVuc2VsZWN0ZWRcIl0sXG4gICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICEhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIl0sXG4gICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNCeVVybDpyZXN0ZnVsbFwiLFxuICAgICAgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsXCIsXG4gICAgICBvbkdldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmNob2ljZXNCeVVybC5nZXREYXRhKCk7XG4gICAgICB9LFxuICAgICAgb25TZXRWYWx1ZTogZnVuY3Rpb24ob2JqOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgb2JqLmNob2ljZXNCeVVybC5zZXREYXRhKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBcImhpZGVJZkNob2ljZXNFbXB0eTpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgICAgZGVwZW5kc09uOiBcImNob2ljZXNGcm9tUXVlc3Rpb25cIixcbiAgICAgIHZpc2libGVJZjogKG9iajogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzRW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBcImhhc090aGVyOmJvb2xlYW5cIixcbiAgICBcImhhc05vbmU6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwib3RoZXJQbGFjZUhvbGRlclwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY090aGVyUGxhY2VIb2xkZXJcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibm9uZVRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NOb25lVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc05vbmVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNOb25lO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwib3RoZXJUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzT3RoZXJcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNPdGhlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJFcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCB0cnVlLCBmYWxzZV0sXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICB9LFxuICBdLFxuICBudWxsLFxuICBcInF1ZXN0aW9uXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY2hlY2tib3hiYXNlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLFxuICAgICAgZGVmYXVsdDogMSxcbiAgICAgIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0LCA1XSxcbiAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICBdLFxuICBudWxsLFxuICBcInNlbGVjdGJhc2VcIlxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgcHJvcGVydHksIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBib29sZWFuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Cb29sZWFuTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbEZhbHNlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbFRydWVcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5sb2NMYWJlbEZhbHNlLm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0XG4gICAgICAgID8gdGV4dFxuICAgICAgICA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJib29sZWFuVW5jaGVja2VkTGFiZWxcIik7XG4gICAgfTtcbiAgICB0aGlzLmxvY0xhYmVsVHJ1ZS5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dFxuICAgICAgICA/IHRleHRcbiAgICAgICAgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYm9vbGVhbkNoZWNrZWRMYWJlbFwiKTtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9XG4gIGlzTGF5b3V0VHlwZVN1cHBvcnRlZChsYXlvdXRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBjaGVjayB3aWxsIGJlIHJlbmRlcmVkIGluIGluZGV0ZXJtaW5hdGUgbW9kZS4gdmFsdWUgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzSW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VtcHR5KCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0L3NldCBxdWVzdGlvbiB2YWx1ZSBpbiAzIG1vZGVzOiBpbmRldGVybWluYXRlICh2YWx1ZSBpcyBlbXB0eSksIHRydWUgKGNoZWNrIGlzIHNldCkgYW5kIGZhbHNlIChjaGVjayBpcyB1bnNldCkuXG4gICAqIEBzZWUgdmFsdWVUcnVlXG4gICAqIEBzZWUgdmFsdWVGYWxzZVxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja2VkVmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09IHRoaXMuZ2V0VmFsdWVUcnVlKCk7XG4gIH1cbiAgcHVibGljIHNldCBjaGVja2VkVmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRDaGVja2VkVmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWwgPT0gdHJ1ZSA/IHRoaXMuZ2V0VmFsdWVUcnVlKCkgOiB0aGlzLmdldFZhbHVlRmFsc2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiB0aGUgY2hlY2s6IFwiaW5kZXRlcm1pbmF0ZVwiIC0gZGVmYXVsdCAodmFsdWUgaXMgZW1wdHkvbnVsbCksIFwidHJ1ZVwiIC0gdmFsdWUgZXF1YWxzIHZhbHVlVHJ1ZSBvciB0cnVlLCBcImZhbHNlXCIgLSB2YWx1ZSBlcXVhbHMgdmFsdWVGYWxzZSBvciBmYWxzZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHZhbCA9IFwidHJ1ZVwiO1xuICAgIGlmICh2YWwgPT09IGZhbHNlKSB2YWwgPSBcImZhbHNlXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0VmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJ0cnVlXCJcbiAgICAgID8gdGhpcy5nZXRWYWx1ZVRydWUoKVxuICAgICAgOiB0aGlzLmdldFZhbHVlRmFsc2UoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGl0bGUgfHwgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5sb2NMYWJlbC50ZXh0KVxuICAgICAgPyB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIilcbiAgICAgIDogdGhpcy5sb2NMYWJlbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGNoZWNrYm94IGxhYmVsLiBJZiBpdCBpcyBlbXB0eSBhbmQgc2hvd1RpdGxlIGlzIGZhbHNlIHRoZW4gdGl0bGUgaXMgcmVuZGVyZWRcbiAgICogQHNlZSBzaG93VGl0bGVcbiAgICogQHNlZSB0aXRsZVxuICAgKi9cbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHRydWUgfSlcbiAgbGFiZWw6IHN0cmluZztcblxuICBnZXQgbG9jRGlzcGxheUxhYmVsKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICBpZiAodGhpcy5sb2NMYWJlbC50ZXh0KSByZXR1cm4gdGhpcy5sb2NMYWJlbDtcbiAgICByZXR1cm4gdGhpcy5zaG93VGl0bGUgPyB0aGlzLmxvY0xhYmVsIDogdGhpcy5sb2NUaXRsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRpZmZlcmVudCBsYWJlbCBmb3Igc3RhdGUgd2hlbiBjaGVjayBpcyBzZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxhYmVsVHJ1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxhYmVsVHJ1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxUcnVlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0xhYmVsVHJ1ZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbFRydWVcIik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgbGFiZWwgZm9yIHN0YXRlIHdoZW4gY2hlY2sgaXMgdW5zZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxhYmVsRmFsc2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsYWJlbEZhbHNlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbGFiZWxGYWxzZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxGYWxzZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NMYWJlbEZhbHNlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsRmFsc2VcIik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBzaG93IHRoZSBxdWVzdGlvbiB0aXRsZS4gSXQgaXMgaGlkZGVuIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBzaG93VGl0bGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gdHJ1ZSB3aGVuIGNoZWNrIGlzIHNldC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHZhbHVlVHJ1ZTogYW55O1xuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUgZnJvbSBmYWxzZSB3aGVuIGNoZWNrIGlzIHVuc2V0LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgdmFsdWVGYWxzZTogYW55O1xuXG4gIHByaXZhdGUgZ2V0VmFsdWVUcnVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVUcnVlID8gdGhpcy52YWx1ZVRydWUgOiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVGYWxzZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlRmFsc2UgPyB0aGlzLnZhbHVlRmFsc2UgOiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcInRydWVcIikgdGhpcy5zZXRDaGVja2VkVmFsdWUodHJ1ZSk7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlID09IFwiZmFsc2VcIikgdGhpcy5zZXRDaGVja2VkVmFsdWUoZmFsc2UpO1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcImluZGV0ZXJtaW5hdGVcIikgdGhpcy5zZXRDaGVja2VkVmFsdWUobnVsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IHRoaXMuZ2V0VmFsdWVUcnVlKCkpIHJldHVybiB0aGlzLmxvY0xhYmVsVHJ1ZS50ZXh0T3JIdG1sO1xuICAgIHJldHVybiB0aGlzLmxvY0xhYmVsRmFsc2UudGV4dE9ySHRtbDtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJvb2xlYW5cIixcbiAgW1xuICAgIHsgbmFtZTogXCJsYWJlbDp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMYWJlbFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJsYWJlbFRydWU6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xhYmVsVHJ1ZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJsYWJlbEZhbHNlOnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMYWJlbEZhbHNlXCIsXG4gICAgfSxcbiAgICBcInNob3dUaXRsZTpib29sZWFuXCIsXG4gICAgXCJ2YWx1ZVRydWVcIixcbiAgICBcInZhbHVlRmFsc2VcIixcbiAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Cb29sZWFuTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uQm9vbGVhbk1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyLCBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwSXRlbVZhbHVlIGV4dGVuZHMgSXRlbVZhbHVlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdmFsdWU6IGFueSxcbiAgICB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIHByb3RlY3RlZCB0eXBlTmFtZSA9IFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIlxuICApIHtcbiAgICBzdXBlcih2YWx1ZSwgdGV4dCwgdHlwZU5hbWUpO1xuICB9XG4gIC8qXG4gICAgSXRlbSBpY29uIHByb3BlcnR5XG4gICovXG4gIEBwcm9wZXJ0eSgpXG4gIGljb25OYW1lOiBzdHJpbmc7XG4gIC8qXG4gICAgQnkgZGVmYXVsdCBpY29uIHNpemUgaXMgMjQuXG4gICAgVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIGl0ZW0gaWNvbiBzaXplLiAgXG4gICovXG4gIEBwcm9wZXJ0eSgpXG4gIGljb25TaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGl0ZW0gY2FwdGlvbiBpcyB2aXNpYmxlLlxuICAgKiBTZXQgaXQgJ2ZhbHNlJyB0byBoaWRlIGl0ZW0gY2FwdGlvbi5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHNob3dDYXB0aW9uOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJidXR0b25ncm91cGl0ZW12YWx1ZVwiO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBidXR0b24gZ3JvdXAgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYnV0dG9uZ3JvdXBcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJidXR0b25ncm91cGl0ZW12YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiYnV0dG9uZ3JvdXBcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlczpidXR0b25ncm91cGl0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hiYXNlXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIixcbiAgW1xuICAgIHsgbmFtZTogXCJzaG93Q2FwdGlvbjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiaWNvbk5hbWU6dGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcImljb25TaXplOm51bWJlclwiIH0sXG4gIF0sXG4gICh2YWx1ZTogYW55KSA9PiBuZXcgQnV0dG9uR3JvdXBJdGVtVmFsdWUodmFsdWUpLFxuICBcIml0ZW12YWx1ZVwiXG4pO1xuXG4vLyBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIG5hbWUgPT4ge1xuLy8gICB2YXIgcSA9IG5ldyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwobmFtZSk7XG4vLyAgIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbi8vICAgcmV0dXJuIHE7XG4vLyB9KTtcblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwSXRlbU1vZGVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHF1ZXN0aW9uOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gICAgcHVibGljIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlclxuICApIHt9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGljb25OYW1lKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBpY29uU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmljb25TaXplIHx8IDI0O1xuICB9XG4gIHB1YmxpYyBnZXQgY2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5sb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5zaG93Q2FwdGlvbiB8fCB0aGlzLml0ZW0uc2hvd0NhcHRpb24gPT09IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gIH1cbiAgcHVibGljIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXRlbS5pc0VuYWJsZWQgfHwgdGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5O1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyB0aGlzLnF1ZXN0aW9uLmlkO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgdGhpcy5pbmRleDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Vycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlc2NyaWJlZEJ5KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0IGxhYmVsQ2xhc3MoKSB7XG4gICAgbGV0IGNzcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVNlbGVjdGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgY3NzICs9IFwiIFwiICsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIGNzcztcbiAgfVxuICBwdWJsaWMgZ2V0IGNzcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMubGFiZWxDbGFzcyxcbiAgICAgIGljb246IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtSWNvbixcbiAgICAgIGNvbnRyb2w6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgIGNhcHRpb246IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ2FwdGlvbixcbiAgICAgIGRlY29yYXRvcjogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3IsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gdGhpcy5pdGVtLnZhbHVlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkNoZWNrYm94QmFzZSxcbiAgUXVlc3Rpb25TZWxlY3RCYXNlLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBjaGVja2JveCBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xuICBwcml2YXRlIHNlbGVjdEFsbEl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcInNlbGVjdGFsbFwiKTtcbiAgcHJpdmF0ZSBpbnZpc2libGVPbGRWYWx1ZXM6IGFueSA9IHt9O1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgc2VsZWN0QWxsSXRlbVRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgICAgXCJzZWxlY3RBbGxUZXh0XCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgc2VsZWN0QWxsSXRlbVRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJzZWxlY3RBbGxJdGVtVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0QWxsSXRlbS5sb2NPd25lciA9IHRoaXM7XG4gICAgdGhpcy5zZWxlY3RBbGxJdGVtLnNldExvY1RleHQoc2VsZWN0QWxsSXRlbVRleHQpO1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGFzU2VsZWN0QWxsXCIsIFwic2VsZWN0QWxsVGV4dFwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImdyb3VwXCI7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjaGVja2JveFwiO1xuICB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge1xuICAgIHN1cGVyLm9uQ3JlYXRpbmcoKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicmVuZGVyZWRWYWx1ZVwiKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidmFsdWVcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3QgYWxsIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNTZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0QWxsSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEFsbEl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3IgU2VsZWN0IEFsbCBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RBbGxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJzZWxlY3RBbGxUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwic2VsZWN0QWxsSXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0QWxsVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic2VsZWN0QWxsVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NTZWxlY3RBbGxUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInNlbGVjdEFsbFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIHNob3cgdGhlIFwiU2VsZWN0IEFsbFwiIGl0ZW0gb24gdGhlIHRvcC4gSWYgZW5kLXVzZXIgY2hlY2tzIHRoaXMgaXRlbSwgdGhlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzU2VsZWN0QWxsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc1NlbGVjdEFsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNTZWxlY3RBbGxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICogQHNlZSB0b2dnbGVTZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNJdGVtU2VsZWN0ZWQodGhpcy5ub25lSXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgYWxsSXRlbUNvdW50ID0gdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIGFsbEl0ZW1Db3VudC0tO1xuICAgIGlmICh0aGlzLmhhc05vbmUpIGFsbEl0ZW1Db3VudC0tO1xuICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkgYWxsSXRlbUNvdW50LS07XG4gICAgdmFyIHNlbGVjdGVkQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKHRoaXMub3RoZXJJdGVtKSkgc2VsZWN0ZWRDb3VudC0tO1xuICAgIHJldHVybiBzZWxlY3RlZENvdW50ID09PSBhbGxJdGVtQ291bnQ7XG4gIH1cbiAgcHVibGljIHNldCBpc0FsbFNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSXQgd2lsbCBzZWxlY3QgYWxsIGl0ZW1zLCBleGNlcHQgb3RoZXIgYW5kIG5vbmUuIElmIGFsbCBpdGVtcyBoYXZlIGJlZW4gYWxyZWFkeSBzZWxlY3RlZCB0aGVuIGl0IHdpbGwgY2xlYXIgdGhlIHZhbHVlXG4gICAqIEBzZWUgaXNBbGxTZWxlY3RlZFxuICAgKiBAc2VlIHNlbGVjdEFsbFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSAhdGhpcy5pc0FsbFNlbGVjdGVkO1xuICB9XG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIGl0ZW1zLCBleGNlcHQgb3RoZXIgYW5kIG5vbmUuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgIHZhciB2YWwgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5ub25lSXRlbSB8fFxuICAgICAgICBpdGVtID09PSB0aGlzLm90aGVySXRlbSB8fFxuICAgICAgICBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW1cbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YWwucHVzaChpdGVtLnZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgY2hlY2tlZFxuICAgKiBAcGFyYW0gaXRlbSBjaGVja2JveCBpdGVtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgaXNJdGVtU2VsZWN0ZWQoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0gPT09IHRoaXMuc2VsZWN0QWxsSXRlbSkgcmV0dXJuIHRoaXMuaXNBbGxTZWxlY3RlZDtcbiAgICB2YXIgdmFsID0gdGhpcy5yZW5kZXJlZFZhbHVlO1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgdG8gMCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGNob2ljZXMgaW4gdGhlIGNoZWNrYm94LlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhTZWxlY3RlZENob2ljZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2VsZWN0ZWRDaG9pY2VzXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4U2VsZWN0ZWRDaG9pY2VzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHZhbCA9IDA7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2VsZWN0ZWRDaG9pY2VzXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRW5hYmxlSXRlbUNhbGxCYWNrKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG91bGRDaGVja01heFNlbGVjdGVkQ2hvaWNlcygpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZnRlclJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKCkge1xuICAgIGlmICh0aGlzLm1heFNlbGVjdGVkQ2hvaWNlcyA8IDEpIHJldHVybjtcbiAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsSXRlbS5zZXRJc0VuYWJsZWQoXG4gICAgICAgIHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzID49IHRoaXMuYWN0aXZlQ2hvaWNlcy5sZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc090aGVyKSB7XG4gICAgICB0aGlzLm90aGVySXRlbS5zZXRJc0VuYWJsZWQoXG4gICAgICAgICF0aGlzLnNob3VsZENoZWNrTWF4U2VsZWN0ZWRDaG9pY2VzKCkgfHwgdGhpcy5pc090aGVyU2VsZWN0ZWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2hvdWxkQ2hlY2tNYXhTZWxlY3RlZENob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubWF4U2VsZWN0ZWRDaG9pY2VzIDwgMSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBsZW4gPSAhQXJyYXkuaXNBcnJheSh2YWwpID8gMCA6IHZhbC5sZW5ndGg7XG4gICAgcmV0dXJuIGxlbiA+PSB0aGlzLm1heFNlbGVjdGVkQ2hvaWNlcztcbiAgfVxuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWU7IC8vdHJpZ2dlciBkZXBlbmRlbmNpZXMgZnJvbSBrb1ZhbHVlIGZvciBrbm9ja291dFxuICAgIGxldCBpdGVtQ2xhc3MgPSBzdXBlci5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gICAgY29uc3QgaXNTZWxlY3RBbGwgPSBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW07XG4gICAgaWYgKGlzU2VsZWN0QWxsICYmICEhdGhpcy5jc3NDbGFzc2VzLml0ZW1TZWxlY3RBbGwpXG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbVNlbGVjdEFsbDtcbiAgICByZXR1cm4gaXRlbUNsYXNzO1xuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QpIHtcbiAgICAgIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzID0gW107XG4gICAgfVxuICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghbmV3VmFsdWUpIG5ld1ZhbHVlID0gW107XG4gICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSBbXTtcbiAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbHVlLCBuZXdWYWx1ZSkpIHJldHVybjtcbiAgICBpZiAodGhpcy5oYXNOb25lKSB7XG4gICAgICB2YXIgcHJldk5vbmVJbmRleCA9IHRoaXMubm9uZUluZGV4SW5BcnJheSh2YWx1ZSk7XG4gICAgICB2YXIgbmV3Tm9uZUluZGV4ID0gdGhpcy5ub25lSW5kZXhJbkFycmF5KG5ld1ZhbHVlKTtcbiAgICAgIGlmIChwcmV2Tm9uZUluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKG5ld05vbmVJbmRleCA+IC0xICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBuZXdWYWx1ZS5zcGxpY2UobmV3Tm9uZUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld05vbmVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgbmV3VmFsdWUuc3BsaWNlKDAsIG5ld1ZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLm5vbmVJdGVtLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5zZXROZXdWYWx1ZSh0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YShuZXdWYWx1ZSkpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc011bHRpcGxlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbW1lbnRGcm9tVmFsdWUobmV3VmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGluZCA9IHRoaXMuZ2V0Rmlyc3RVbmtub3duSW5kZXgobmV3VmFsdWUpO1xuICAgIGlmIChpbmQgPCAwKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gbmV3VmFsdWVbaW5kXTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0T3RoZXJWYWx1ZUludG9WYWx1ZShuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgaW5kID0gdGhpcy5nZXRGaXJzdFVua25vd25JbmRleChuZXdWYWx1ZSk7XG4gICAgaWYgKGluZCA8IDApIHJldHVybiBuZXdWYWx1ZTtcbiAgICBuZXdWYWx1ZS5zcGxpY2UoaW5kLCAxLCB0aGlzLm90aGVySXRlbS52YWx1ZSk7XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHByaXZhdGUgZ2V0Rmlyc3RVbmtub3duSW5kZXgobmV3VmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkgcmV0dXJuIC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZShuZXdWYWx1ZVtpXSkpIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcHJpdmF0ZSBub25lSW5kZXhJbkFycmF5KHZhbDogYW55KSB7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIC0xO1xuICAgIHZhciBub25lVmFsdWUgPSB0aGlzLm5vbmVJdGVtLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsW2ldID09IG5vbmVWYWx1ZSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlRmlsdGVyZWRDaG9pY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5oYXNTZWxlY3RBbGwgJiYgc3VwZXIuY2FuVXNlRmlsdGVyZWRDaG9pY2VzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHN1cHBvcnRTZWxlY3RBbGwoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGFkZFRvVmlzaWJsZUNob2ljZXMoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIGlzQWRkQWxsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc3VwcG9ydFNlbGVjdEFsbCgpICYmIChpc0FkZEFsbCB8fCB0aGlzLmhhc1NlbGVjdEFsbCkpIHtcbiAgICAgIGl0ZW1zLnVuc2hpZnQodGhpcy5zZWxlY3RBbGxJdGVtKTtcbiAgICB9XG4gICAgc3VwZXIuYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtcywgaXNBZGRBbGwpO1xuICB9XG4gIHByb3RlY3RlZCBpc0J1aWx0SW5DaG9pY2UoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0gPT09ICg8UXVlc3Rpb25DaGVja2JveEJhc2U+cXVlc3Rpb24pLnNlbGVjdEFsbEl0ZW0gfHxcbiAgICAgIHN1cGVyLmlzQnVpbHRJbkNob2ljZShpdGVtLCBxdWVzdGlvbilcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBGb3IgaW50ZXJuYWwgdXNlIGluIFN1cnZleUpTIENyZWF0b3IgVjIuXG4gICAqL1xuICBwdWJsaWMgaXNJdGVtSW5MaXN0KGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtID09IHRoaXMuc2VsZWN0QWxsSXRlbSkgcmV0dXJuIHRoaXMuaGFzU2VsZWN0QWxsO1xuICAgIHJldHVybiBzdXBlci5pc0l0ZW1Jbkxpc3QoaXRlbSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgIHJldHVybiBzdXBlci5nZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWxTdHIgPSB0aGlzLmdldENob2ljZXNEaXNwbGF5VmFsdWUoaXRlbXMsIHZhbHVlW2ldKTtcbiAgICAgIGlmICh2YWxTdHIpIHtcbiAgICAgICAgaWYgKHN0cikgc3RyICs9IFwiLCBcIjtcbiAgICAgICAgc3RyICs9IHZhbFN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJJbmNvcnJlY3RWYWx1ZXNDb3JlKCkge1xuICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RBbmREaXNhYmxlZFZhbHVlcyhmYWxzZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyRGlzYWJsZWRWYWx1ZXNDb3JlKCkge1xuICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RBbmREaXNhYmxlZFZhbHVlcyh0cnVlKTtcbiAgfVxuICBwcml2YXRlIGlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKGNsZWFyRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciByZXN0b3JlZFZhbHVlcyA9IHRoaXMucmVzdG9yZVZhbHVlc0Zyb21JbnZpc2libGUoKTtcbiAgICBpZiAoIXZhbCAmJiByZXN0b3JlZFZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gdHJ1ZTtcbiAgICAgIGlmICghY2xlYXJEaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNDb21tZW50KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IGZhbHNlO1xuICAgICAgaWYgKHJlc3RvcmVkVmFsdWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgICB2YWwgPSBbXTtcbiAgICB9XG4gICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc1Vua293biA9IHRoaXMuY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbFtpXSk7XG4gICAgICBpZiAoXG4gICAgICAgICghY2xlYXJEaXNhYmxlZCAmJiAhaXNVbmtvd24pIHx8XG4gICAgICAgIChjbGVhckRpc2FibGVkICYmICF0aGlzLmlzVmFsdWVEaXNhYmxlZCh2YWxbaV0pKVxuICAgICAgKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICBpZiAoaXNVbmtvd24pIHtcbiAgICAgICAgICB0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxbaV1dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3RvcmVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdWYWx1ZS5wdXNoKHJlc3RvcmVkVmFsdWVzW2ldKTtcbiAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWhhc0NoYW5nZWQpIHJldHVybjtcbiAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSB0cnVlO1xuICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSByZXN0b3JlVmFsdWVzRnJvbUludmlzaWJsZSgpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHZpc0l0ZW1zID0gdGhpcy52aXNpYmxlQ2hvaWNlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc0l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsID0gdmlzSXRlbXNbaV0udmFsdWU7XG4gICAgICBpZiAodGhpcy5pbnZpc2libGVPbGRWYWx1ZXNbdmFsXSkge1xuICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICBkZWxldGUgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXNbdmFsXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgdmFyIGpzb24gPSBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgaWYgKG9wZXJhdG9yID09IFwiY29udGFpbnNcIiB8fCBvcGVyYXRvciA9PSBcIm5vdGNvbnRhaW5zXCIpIHtcbiAgICAgIGpzb25bXCJ0eXBlXCJdID0gXCJyYWRpb2dyb3VwXCI7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHB1YmxpYyBpc0Fuc3dlckNvcnJlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNBcnJheUNvbnRhaW5zRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5jb3JyZWN0QW5zd2VyKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlV2l0aE90aGVycygpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SGFzT3RoZXIodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHZhbC5pbmRleE9mKHRoaXMub3RoZXJJdGVtLnZhbHVlKSA+PSAwO1xuICB9XG4gIHByb3RlY3RlZCB2YWx1ZUZyb21EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIHZhbDtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIFtzdXBlci52YWx1ZUZyb21EYXRhKHZhbCldO1xuICAgIGxldCB2YWx1ZSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hvaWNlaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLmFjdGl2ZUNob2ljZXMsIHZhbFtpXSk7XG4gICAgICBpZiAoISFjaG9pY2VpdGVtKSB7XG4gICAgICAgIHZhbHVlLnB1c2goY2hvaWNlaXRlbS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZS5wdXNoKHZhbFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyZWRWYWx1ZUZyb21EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgdmFsID0gW107XG4gICAgaWYgKCF0aGlzLmhhc0FjdGl2ZUNob2ljZXMpIHJldHVybiB2YWw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWxbaV0gPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHJldHVybiB2YWw7XG4gICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlLCBmYWxzZSkpIHtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gdmFsW2ldO1xuICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XG4gICAgICAgIG5ld1ZhbFtpXSA9IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICAgICAgICByZXR1cm4gbmV3VmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbCB8fCAhdmFsLmxlbmd0aCkgcmV0dXJuIHZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5nZXRRdWVzdGlvbkNvbW1lbnQoKSkge1xuICAgICAgICAgIHZhciBuZXdWYWwgPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgICBuZXdWYWxbaV0gPSB0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaGVja2JveFwiLFxuICBbXG4gICAgXCJoYXNTZWxlY3RBbGw6Ym9vbGVhblwiLFxuICAgIHsgbmFtZTogXCJtYXhTZWxlY3RlZENob2ljZXM6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7IG5hbWU6IFwic2VsZWN0QWxsVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jU2VsZWN0QWxsVGV4dFwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25DaGVja2JveE1vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94YmFzZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjaGVja2JveFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBjb21tZW50IHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbW1lbnRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBsYWNlSG9sZGVyXCIsIHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldE1heExlbmd0aCgpOiBhbnkge1xuICAgIHJldHVybiBIZWxwZXJzLmdldE1heExlbmd0aChcbiAgICAgIHRoaXMubWF4TGVuZ3RoLFxuICAgICAgdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIGlucHV0IHBsYWNlIGhvbGRlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZUhvbGRlclwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGh0bWwgcm93cyBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3ModmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBodG1sIGNvbHMgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2xzKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09PSBcIlwiO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHF1ZXN0aW9uIHVwZGF0ZXMgaXQncyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqIC0gYGRlZmF1bHRgIC0gZ2V0IHRoZSB2YWx1ZSBmcm9tIHN1cnZleS50ZXh0VXBkYXRlTW9kZVxuICAgKiAtIGBvbkJsdXJgIC0gdGhlIHZhbHVlIGlzIHVwZGF0ZWQgYWZ0ZXIgYW4gaW5wdXQgbG9zZXMgdGhlIGZvY3VzLlxuICAgKiAtIGBvblR5cGluZ2AgLSB1cGRhdGUgdGhlIHZhbHVlIG9mIHRleHQgcXVlc3Rpb25zLCBcInRleHRcIiBhbmQgXCJjb21tZW50XCIsIG9uIGV2ZXJ5IGtleSBwcmVzcy5cbiAgICpcbiAgICogTm90ZSwgdGhhdCBzZXR0aW5nIHRvIFwib25UeXBpbmdcIiBtYXkgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBpbiBjYXNlIHlvdSBoYXZlIG1hbnkgZXhwcmVzc2lvbnMgaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBzdXJ2ZXkudGV4dFVwZGF0ZU1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGV4dFVwZGF0ZU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGV4dFVwZGF0ZU1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0VXBkYXRlTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1N1cnZleUlucHV0VGV4dFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy50ZXh0VXBkYXRlTW9kZSA9PSBcImRlZmF1bHRcIilcbiAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZyA6IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnRleHRVcGRhdGVNb2RlID09IFwib25UeXBpbmdcIjtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjb21tZW50XCIsXG4gIFtcbiAgICB7IG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJjb2xzOm51bWJlclwiLCBkZWZhdWx0OiA1MCB9LFxuICAgIHsgbmFtZTogXCJyb3dzOm51bWJlclwiLCBkZWZhdWx0OiA0IH0sXG4gICAgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZXh0VXBkYXRlTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwib25CbHVyXCIsIFwib25UeXBpbmdcIl0sXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Db21tZW50TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tbWVudFwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyLCBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbiB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7XG4gIElTdXJ2ZXlJbXBsLFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleSxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIFN1cnZleUVsZW1lbnQsXG4gIElDb25kaXRpb25SdW5uZXIsXG59IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRQcm9jZXNzb3IgfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRRdWVzdGlvbkpTT04ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIGpzb246IGFueSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBTZXJpYWxpemVyLmFkZENsYXNzKFxuICAgICAgbmFtZSxcbiAgICAgIFtdLFxuICAgICAgZnVuY3Rpb24oanNvbjogYW55KSB7XG4gICAgICAgIHJldHVybiBDb21wb25lbnRDb2xsZWN0aW9uLkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgICAgICEhanNvbiA/IGpzb24ubmFtZSA6IFwiXCIsXG4gICAgICAgICAgc2VsZlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIFwicXVlc3Rpb25cIlxuICAgICk7XG4gICAgdGhpcy5vbkluaXQoKTtcbiAgfVxuICBwdWJsaWMgb25Jbml0KCkge1xuICAgIGlmICghdGhpcy5qc29uLm9uSW5pdCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkluaXQoKTtcbiAgfVxuICBwdWJsaWMgb25DcmVhdGVkKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIGlmICghdGhpcy5qc29uLm9uQ3JlYXRlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkNyZWF0ZWQocXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBvbkxvYWRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkxvYWRlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkxvYWRlZChxdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXIocXVlc3Rpb246IFF1ZXN0aW9uLCBodG1sRWxlbWVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25BZnRlclJlbmRlcikgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkFmdGVyUmVuZGVyKHF1ZXN0aW9uLCBodG1sRWxlbWVudCk7XG4gIH1cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgZWxlbWVudDogUXVlc3Rpb24sXG4gICAgaHRtbEVsZW1lbnQ6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KHF1ZXN0aW9uLCBlbGVtZW50LCBodG1sRWxlbWVudCk7XG4gIH1cbiAgcHVibGljIG9uUHJvcGVydHlDaGFuZ2VkKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIGlmICghdGhpcy5qc29uLm9uUHJvcGVydHlDaGFuZ2VkKSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uUHJvcGVydHlDaGFuZ2VkKHF1ZXN0aW9uLCBwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQocXVlc3Rpb246IFF1ZXN0aW9uLCBuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vblZhbHVlQ2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vblZhbHVlQ2hhbmdlZChxdWVzdGlvbiwgbmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBvbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIGlmICghdGhpcy5qc29uLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKHF1ZXN0aW9uLCB7XG4gICAgICBvYmo6IGl0ZW0sXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLmpzb24uZWxlbWVudHNKU09OIHx8ICEhdGhpcy5qc29uLmNyZWF0ZUVsZW1lbnRzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRDb2xsZWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ29tcG9uZW50Q29sbGVjdGlvbiA9IG5ldyBDb21wb25lbnRDb2xsZWN0aW9uKCk7XG4gIHByaXZhdGUgY3VzdG9tUXVlc3Rpb25WYWx1ZXM6IEFycmF5PENvbXBvbmVudFF1ZXN0aW9uSlNPTj4gPSBbXTtcbiAgcHVibGljIG9uQ3JlYXRlQ29tcG9zaXRlOiAoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uSlNPTjogQ29tcG9uZW50UXVlc3Rpb25KU09OXG4gICkgPT4gUXVlc3Rpb25Db21wb3NpdGVNb2RlbDtcbiAgcHVibGljIG9uQ3JlYXRlQ3VzdG9tOiAoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uSlNPTjogQ29tcG9uZW50UXVlc3Rpb25KU09OXG4gICkgPT4gUXVlc3Rpb25DdXN0b21Nb2RlbDtcbiAgcHVibGljIG9uQWRkaW5nSnNvbjogKG5hbWU6IHN0cmluZywgaXNDb21wb3NpdGU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHB1YmxpYyBhZGQoanNvbjogYW55KSB7XG4gICAgaWYgKCFqc29uKSByZXR1cm47XG4gICAgbGV0IG5hbWUgPSBqc29uLm5hbWU7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBcIkF0dHJpYnV0ZSBuYW1lIGlzIG1pc3NlZFwiO1xuICAgIH1cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghIXRoaXMuZ2V0Q3VzdG9tUXVlc3Rpb25CeU5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IFwiVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGN1c3RvbSBxdWVzdGlvbiB3aXRoIG5hbWUgJ1wiICtcbiAgICAgICAgbmFtZSArXG4gICAgICAgIFwiJ1wiO1xuICAgIH1cbiAgICBpZiAoISFTZXJpYWxpemVyLmZpbmRDbGFzcyhuYW1lKSkge1xuICAgICAgdGhyb3cgXCJUaGVyZSBpcyBhbHJlYWR5IGNsYXNzIHdpdGggbmFtZSAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgfVxuICAgIHZhciBjdXN0b21RdWVzdGlvbiA9IG5ldyBDb21wb25lbnRRdWVzdGlvbkpTT04obmFtZSwganNvbik7XG4gICAgaWYgKCEhdGhpcy5vbkFkZGluZ0pzb24pXG4gICAgICB0aGlzLm9uQWRkaW5nSnNvbihuYW1lLCBjdXN0b21RdWVzdGlvbi5pc0NvbXBvc2l0ZSk7XG4gICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcy5wdXNoKGN1c3RvbVF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PENvbXBvbmVudFF1ZXN0aW9uSlNPTj4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzO1xuICB9XG4gIHB1YmxpYyBnZXRDdXN0b21RdWVzdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBDb21wb25lbnRRdWVzdGlvbkpTT04ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgU2VyaWFsaXplci5yZW1vdmVDbGFzcyh0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzW2ldLm5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzID0gW107XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkpTT046IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApOiBRdWVzdGlvbiB7XG4gICAgaWYgKCEhcXVlc3Rpb25KU09OLmlzQ29tcG9zaXRlKVxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ29tcG9zaXRlTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDdXN0b21Nb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDb21wb3NpdGVNb2RlbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB7XG4gICAgaWYgKCEhdGhpcy5vbkNyZWF0ZUNvbXBvc2l0ZSlcbiAgICAgIHJldHVybiB0aGlzLm9uQ3JlYXRlQ29tcG9zaXRlKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUN1c3RvbU1vZGVsKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkpTT046IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApOiBRdWVzdGlvbkN1c3RvbU1vZGVsIHtcbiAgICBpZiAoISF0aGlzLm9uQ3JlYXRlQ3VzdG9tKSByZXR1cm4gdGhpcy5vbkNyZWF0ZUN1c3RvbShuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25DdXN0b21Nb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdWVzdGlvbkN1c3RvbU1vZGVsQmFzZSBleHRlbmRzIFF1ZXN0aW9uXG4gIGltcGxlbWVudHMgSVN1cnZleUltcGwsIElTdXJ2ZXlEYXRhLCBJUGFuZWwge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHB1YmxpYyBjdXN0b21RdWVzdGlvbjogQ29tcG9uZW50UXVlc3Rpb25KU09OKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllcyh0aGlzKTtcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHMgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRlV3JhcHBlcigpO1xuICAgIFN1cnZleUVsZW1lbnQuQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50cyA9IGZhbHNlO1xuICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25DcmVhdGVkKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuY3VzdG9tUXVlc3Rpb24gPyB0aGlzLmN1c3RvbVF1ZXN0aW9uLm5hbWUgOiBcImN1c3RvbVwiO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIGlmICghIXRoaXMuZ2V0RWxlbWVudCgpKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnQoKS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlV3JhcHBlcigpIHt9XG4gIHByb3RlY3RlZCBvblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkKHRoaXMsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBzdXBlci5pdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoaXRlbSwgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgICAgICB0aGlzLFxuICAgICAgICBpdGVtLFxuICAgICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG9uRmlyc3RSZW5kZXJpbmcoKSB7XG4gICAgdmFyIGVsID0gdGhpcy5nZXRFbGVtZW50KCk7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgc3VwZXIub25GaXJzdFJlbmRlcmluZygpO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRFbGVtZW50KCk6IFN1cnZleUVsZW1lbnQ7XG4gIHByb3RlY3RlZCBpbml0RWxlbWVudChlbDogU3VydmV5RWxlbWVudCkge1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgIGVsLmRpc2FibGVEZXNpZ25BY3Rpb25zID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICB0aGlzLmluaXRFbGVtZW50KHRoaXMuZ2V0RWxlbWVudCgpKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIGlmICghIXRoaXMuZ2V0RWxlbWVudCgpKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnQoKS5vblN1cnZleUxvYWQoKTtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25Mb2FkZWQodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICAvL0RvIG5vdGhpbmdcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoZWw6IGFueSkge1xuICAgIHN1cGVyLmFmdGVyUmVuZGVyKGVsKTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXIodGhpcywgZWwpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICB9XG4gIC8vSVN1cnZleUltcGxcbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAvLyAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgLy8gfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yO1xuICB9XG4gIC8vSVN1cnZleURhdGFcbiAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBzZXRWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBsb2NOb3RpZmljYXRpb246IGFueSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZD86IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHZhciBuZXdOYW1lID0gdGhpcy5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gICAgdGhpcy5kYXRhLnNldFZhbHVlKFxuICAgICAgbmV3TmFtZSxcbiAgICAgIHRoaXMuY29udmVydERhdGFWYWx1ZShuYW1lLCBuZXdWYWx1ZSksXG4gICAgICBsb2NOb3RpZmljYXRpb24sXG4gICAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vblZhbHVlQ2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZU5hbWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfVxuICBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRWYXJpYWJsZShuYW1lKSA6IG51bGw7XG4gIH1cbiAgc2V0VmFyaWFibGUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUobmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpKSA6IFwiXCI7XG4gIH1cbiAgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcsIGxvY05vdGlmaWNhdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCksIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24pO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IHt9O1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCkgOiB7fTtcbiAgfVxuICBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCkgOiB7fTtcbiAgfVxuICAvL0lQYW5lbFxuICBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7fVxuICByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFydEluZGV4KCk7XG4gIH1cbiAgZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgZWxlbWVudFdpZHRoQ2hhbmdlZChlbDogSUVsZW1lbnQpIHt9XG4gIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpbmRleE9mKGVsOiBJRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGVuc3VyZVJvd3NWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DdXN0b21Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlIHtcbiAgcHJpdmF0ZSBxdWVzdGlvbldyYXBwZXI6IFF1ZXN0aW9uO1xuICBwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlV3JhcHBlcigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uV3JhcHBlciA9IHRoaXMuY3JlYXRlUXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gdGhpcy5jb250ZW50UXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb250ZW50UXVlc3Rpb24uZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHRoaXMuY29udGVudFF1ZXN0aW9uLmVycm9yc1tpXSk7XG4gICAgfVxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXMgPSBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24uZm9jdXMob25FcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9uRXJyb3IpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25XcmFwcGVyO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGpzb24gPSB0aGlzLmN1c3RvbVF1ZXN0aW9uLmpzb247XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhanNvbi5xdWVzdGlvbkpTT04pIHtcbiAgICAgIHZhciBxVHlwZSA9IGpzb24ucXVlc3Rpb25KU09OLnR5cGU7XG4gICAgICBpZiAoIXFUeXBlIHx8ICFTZXJpYWxpemVyLmZpbmRDbGFzcyhxVHlwZSkpXG4gICAgICAgIHRocm93IFwidHlwZSBhdHRyaWJ1dGUgaW4gcXVlc3Rpb25KU09OIGlzIGVtcHR5IG9yIGluY29ycmVjdFwiO1xuICAgICAgcmVzID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MocVR5cGUpO1xuICAgICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgICAgcmVzLmZyb21KU09OKGpzb24ucXVlc3Rpb25KU09OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEhanNvbi5jcmVhdGVRdWVzdGlvbikge1xuICAgICAgICByZXMgPSBqc29uLmNyZWF0ZVF1ZXN0aW9uKCk7XG4gICAgICAgIHRoaXMuaW5pdEVsZW1lbnQocmVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhcmVzICYmICFyZXMubmFtZSkge1xuICAgICAgcmVzLm5hbWUgPSBcInF1ZXN0aW9uXCI7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpICYmICF0aGlzLmNvbnRlbnRRdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gICAgdmFyIG5ld05hbWUgPSBuYW1lLnJlcGxhY2UoXG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSxcbiAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKClcbiAgICApO1xuICAgIHJldHVybiBuZXdOYW1lLmluZGV4T2YodGhpcy5nZXRWYWx1ZU5hbWUoKSkgPT0gMFxuICAgICAgPyBuZXdOYW1lXG4gICAgICA6IHN1cGVyLmNvbnZlcnREYXRhTmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnREYXRhTmFtZShuYW1lKSA9PSBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSlcbiAgICAgID8gdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWVcbiAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY29udGVudFF1ZXN0aW9uICYmXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlLCBuZXdWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikgcmV0dXJuIHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlO1xuICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZUNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaW5pdEVsZW1lbnQoZWw6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBzdXBlci5pbml0RWxlbWVudChlbCk7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgICg8UXVlc3Rpb24+ZWwpLnBhcmVudCA9IHRoaXM7XG4gICAgICAoPFF1ZXN0aW9uPmVsKS5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICAgICAgZWxlbWVudDogYW55XG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgY3NzQ2xhc3NlcyA9IHRoaXMuY29udGVudFF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3NDb3JlKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb250ZW50UXVlc3Rpb25cbiAgICAgID8gdGhpcy5jb250ZW50UXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dCwgdmFsdWUpXG4gICAgICA6IHN1cGVyLmdldERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0LCB2YWx1ZSk7XG4gIH1cbn1cblxuY2xhc3MgUXVlc3Rpb25Db21wb3NpdGVUZXh0UHJvY2Vzc29yIGV4dGVuZHMgUXVlc3Rpb25UZXh0UHJvY2Vzc29yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbXBvc2l0ZTogUXVlc3Rpb25Db21wb3NpdGVNb2RlbCxcbiAgICBwcm90ZWN0ZWQgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NpdGUuc3VydmV5O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9zaXRlLmNvbnRlbnRQYW5lbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBJdGVtVmFyaWFibGVOYW1lID0gXCJjb21wb3NpdGVcIjtcbiAgcHJpdmF0ZSBwYW5lbFdyYXBwZXI6IFBhbmVsTW9kZWw7XG4gIHByaXZhdGUgdGV4dFByb2Nlc3Npbmc6IFF1ZXN0aW9uQ29tcG9zaXRlVGV4dFByb2Nlc3NvcjtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwdWJsaWMgY3VzdG9tUXVlc3Rpb246IENvbXBvbmVudFF1ZXN0aW9uSlNPTikge1xuICAgIHN1cGVyKG5hbWUsIGN1c3RvbVF1ZXN0aW9uKTtcbiAgICB0aGlzLnRleHRQcm9jZXNzaW5nID0gbmV3IFF1ZXN0aW9uQ29tcG9zaXRlVGV4dFByb2Nlc3NvcihcbiAgICAgIHRoaXMsXG4gICAgICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVXcmFwcGVyKCkge1xuICAgIHRoaXMucGFuZWxXcmFwcGVyID0gdGhpcy5jcmVhdGVQYW5lbCgpO1xuICB9XG4gIHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbXBvc2l0ZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3NUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tcG9zaXRlXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFBhbmVsO1xuICB9XG4gIHB1YmxpYyBnZXQgY29udGVudFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsV3JhcHBlcjtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgIGlmICghdGhpcy5jb250ZW50UGFuZWwpIHJldHVybiByZXM7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFBhbmVsLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZhbHNlLCByZWMpIHx8IHJlcztcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICBzdXBlci51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICBpZiAodGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIH1cbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc2luZztcbiAgfVxuICBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIH1cbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlci5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcmVzID0gPFBhbmVsTW9kZWw+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICAgIHJlcy5zaG93UXVlc3Rpb25OdW1iZXJzID0gXCJvZmZcIjtcbiAgICByZXMucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICB2YXIganNvbiA9IHRoaXMuY3VzdG9tUXVlc3Rpb24uanNvbjtcbiAgICBpZiAoISFqc29uLmVsZW1lbnRzSlNPTikge1xuICAgICAgcmVzLmZyb21KU09OKHsgZWxlbWVudHM6IGpzb24uZWxlbWVudHNKU09OIH0pO1xuICAgIH1cbiAgICBpZiAoISFqc29uLmNyZWF0ZUVsZW1lbnRzKSB7XG4gICAgICBqc29uLmNyZWF0ZUVsZW1lbnRzKHJlcywgdGhpcyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdEVsZW1lbnQocmVzKTtcbiAgICByZXMucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgdGhpcy5zZXRBZnRlclJlbmRlckNhbGxiYWNrcyhyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICB0aGlzLmNvbnRlbnRQYW5lbC5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB9XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIGlmICghIXRoaXMuY29udGVudFBhbmVsKSB7XG4gICAgICB0aGlzLmNvbnRlbnRQYW5lbC5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICAgIHRoaXMuc2V0SXNDb250ZW50RWxlbWVudCh0aGlzLmNvbnRlbnRQYW5lbCk7XG4gICAgfVxuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICB9XG4gIHByaXZhdGUgc2V0SXNDb250ZW50RWxlbWVudChwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIHBhbmVsLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgIHZhciBlbGVtZW50cyA9IHBhbmVsLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgdGhpcy5zZXRJc0NvbnRlbnRFbGVtZW50KDxQYW5lbE1vZGVsPmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICg8UXVlc3Rpb24+ZWwpLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuc2V0VmlzaWJsZUluZGV4KHZhbCk7XG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmICEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHJlcyArPSB0aGlzLmNvbnRlbnRQYW5lbC5zZXRWaXNpYmxlSW5kZXgodmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHZhciBvbGRDb21wb3NpdGUgPSB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXTtcbiAgICAgIHZhbHVlc1tcbiAgICAgICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXG4gICAgICBdID0gdGhpcy5jb250ZW50UGFuZWwuZ2V0VmFsdWUoKTtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgZGVsZXRlIHZhbHVlc1tRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLkl0ZW1WYXJpYWJsZU5hbWVdO1xuICAgICAgaWYgKCEhb2xkQ29tcG9zaXRlKSB7XG4gICAgICAgIHZhbHVlc1tRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLkl0ZW1WYXJpYWJsZU5hbWVdID0gb2xkQ29tcG9zaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiAhIXZhbCA/IHZhbFtuYW1lXSA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBzZXR0aW5nTmV3VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnksXG4gICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQ/OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ05ld1ZhbHVlKSByZXR1cm47XG4gICAgc3VwZXIuc2V0VmFsdWUobmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghdGhpcy5jb250ZW50UGFuZWwpIHJldHVybjtcbiAgICB2YXIgcSA9IHRoaXMuY29udGVudFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmICghIXEgJiYgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgcS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0dGluZ05ld1ZhbHVlID0gdHJ1ZTtcbiAgICAgIHEudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuc2V0dGluZ05ld1ZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcHJlZml4VGV4dCA9IHRoaXMudGl0bGU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHByZWZpeE5hbWUgKyBcIi5cIiArIHF1ZXN0aW9uc1tpXS5uYW1lLFxuICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgXCIuXCIgKyBxdWVzdGlvbnNbaV0udGl0bGUsXG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbnNbaV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSAmJiAhdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KHZhbCkpIHtcbiAgICAgIGRlbGV0ZSB2YWxbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbFtuYW1lXSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5zZXR0aW5nTmV3VmFsdWUgPSB0cnVlO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBxdWVzdGlvbnNbaV0udmFsdWUgPSAhIW5ld1ZhbHVlID8gbmV3VmFsdWVba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5zZXR0aW5nTmV3VmFsdWUgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuY29udGVudFBhbmVsXG4gICAgICA/IHRoaXMuY29udGVudFBhbmVsLmdldERpc3BsYXlWYWx1ZShrZXlBc1RleHQpXG4gICAgICA6IHN1cGVyLmdldERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0LCB2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRBZnRlclJlbmRlckNhbGxiYWNrcyhwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIGlmICghcGFuZWwgfHwgIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrID0gKFxuICAgICAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgICAgIGVsZW1lbnQ6IGFueVxuICAgICAgKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgZWxlbWVudFxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgZHJvcGRvd24gcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiLCB0aGlzKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiY2hvaWNlc01pblwiLCBcImNob2ljZXNNYXhcIiwgXCJjaG9pY2VzU3RlcFwiXSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZmxhZyBjb250cm9scyB3aGV0aGVyIHRvIHNob3cgb3B0aW9ucyBjYXB0aW9uIGl0ZW0gKCdDaG9vc2UuLi4nKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd09wdGlvbnNDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93T3B0aW9uc0NhcHRpb25cIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93T3B0aW9uc0NhcHRpb24odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd09wdGlvbnNDYXB0aW9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgb3B0aW9ucyBjYXB0aW9uIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0YWtlbiBmcm9tIGxvY2FsaXphdGlvbiBzdHJpbmdzLlxuICAgKi9cbiAgcHVibGljIGdldCBvcHRpb25zQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm9wdGlvbnNDYXB0aW9uXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY09wdGlvbnNDYXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZHJvcGRvd25cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB0aGlzLnZhbHVlKTtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIG1pbk1heENob2ljZXMgPSA8QXJyYXk8SXRlbVZhbHVlPj5bXTtcbiAgcHJvdGVjdGVkIGdldENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIGl0ZW1zID0gc3VwZXIuZ2V0Q2hvaWNlcygpO1xuICAgIGlmICh0aGlzLmNob2ljZXNNYXggPD0gdGhpcy5jaG9pY2VzTWluKSByZXR1cm4gaXRlbXM7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKGl0ZW1zW2ldKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5taW5NYXhDaG9pY2VzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgdGhpcy5taW5NYXhDaG9pY2VzLmxlbmd0aCAhPT1cbiAgICAgICAgKHRoaXMuY2hvaWNlc01heCAtIHRoaXMuY2hvaWNlc01pbikgLyB0aGlzLmNob2ljZXNTdGVwICsgMVxuICAgICkge1xuICAgICAgdGhpcy5taW5NYXhDaG9pY2VzID0gW107XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IHRoaXMuY2hvaWNlc01pbjtcbiAgICAgICAgaSA8PSB0aGlzLmNob2ljZXNNYXg7XG4gICAgICAgIGkgKz0gdGhpcy5jaG9pY2VzU3RlcFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5wdXNoKG5ldyBJdGVtVmFsdWUoaSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KHRoaXMubWluTWF4Q2hvaWNlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgYW5kIGNob2ljZXNNYXggcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGQgY2hvaWNlcy4gRm9yIGV4YW1wbGUgY2hvaWNlc01pbiA9IDEgYW5kIGNob2ljZXNNYXggPSAxMCB3aWxsIGdlbmVyYXRlIHRlbiBhZGRpdGlvbmFsIGNob2ljZXMgZnJvbSAxIHRvIDEwLlxuICAgKiBAc2VlIGNob2ljZXNNYXhcbiAgICogQHNlZSBjaG9pY2VzU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzTWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNaW5cIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzTWluKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01pblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBhbmQgY2hvaWNlc01heCBwcm9wZXJ0eSB0byBhdXRvbWF0aWNhbGx5IGFkZCBjaG9pY2VzLiBGb3IgZXhhbXBsZSBjaG9pY2VzTWluID0gMSBhbmQgY2hvaWNlc01heCA9IDEwIHdpbGwgZ2VuZXJhdGUgdGVuIGFkZGl0aW9uYWwgY2hvaWNlcyBmcm9tIDEgdG8gMTAuXG4gICAqIEBzZWUgY2hvaWNlc01pblxuICAgKiBAc2VlIGNob2ljZXNTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXNNYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01heFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNNYXgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzTWF4XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuIEl0IHRlbGxzIHRoZSB2YWx1ZSBvZiB0aGUgaXRlcmF0b3IgYmV0d2VlbiBjaG9pY2VzTWluIGFuZCBjaG9pY2VzTWF4IHByb3BlcnRpZXMuXG4gICAqIElmIGNob2ljZXNNaW4gPSAxMCwgY2hvaWNlc01heCA9IDMwIGFuZCBjaG9pY2VzU3RlcCA9IDEwIHRoZW4geW91IHdpbGwgaGF2ZSBvbmx5IHRocmVlIGFkZGl0aW9uYWwgY2hvaWNlczogWzEwLCAyMCwgMzBdLlxuICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXNTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNTdGVwXCIsIDEpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc1N0ZXAodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMSkgdmFsID0gMTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzU3RlcFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBEcm9wZG93biBhdXRvIGNvbXBsZXRlXG4gICAqL1xuICAgcHVibGljIGdldCBhdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXV0b0NvbXBsZXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZHJvcGRvd25cIixcbiAgW1xuICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxuICAgIHsgbmFtZTogXCJzaG93T3B0aW9uc0NhcHRpb246Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNNaW46bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7IG5hbWU6IFwiY2hvaWNlc01heDpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzU3RlcDpudW1iZXJcIiwgZGVmYXVsdDogMSwgbWluVmFsdWU6IDEgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImF1dG9Db21wbGV0ZVwiLFxuICAgICAgZGF0YUxpc3Q6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiaG9ub3JpZmljLXByZWZpeFwiLFxuICAgICAgICBcImdpdmVuLW5hbWVcIixcbiAgICAgICAgXCJhZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgICAgXCJmYW1pbHktbmFtZVwiLFxuICAgICAgICBcImhvbm9yaWZpYy1zdWZmaXhcIixcbiAgICAgICAgXCJuaWNrbmFtZVwiLFxuICAgICAgICBcIm9yZ2FuaXphdGlvbi10aXRsZVwiLFxuICAgICAgICBcInVzZXJuYW1lXCIsXG4gICAgICAgIFwibmV3LXBhc3N3b3JkXCIsXG4gICAgICAgIFwiY3VycmVudC1wYXNzd29yZFwiLFxuICAgICAgICBcIm9yZ2FuaXphdGlvblwiLFxuICAgICAgICBcInN0cmVldC1hZGRyZXNzXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lMVwiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTJcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUzXCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDRcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsM1wiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwyXCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDFcIixcbiAgICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICAgIFwiY291bnRyeS1uYW1lXCIsXG4gICAgICAgIFwicG9zdGFsLWNvZGVcIixcbiAgICAgICAgXCJjYy1uYW1lXCIsXG4gICAgICAgIFwiY2MtZ2l2ZW4tbmFtZVwiLFxuICAgICAgICBcImNjLWFkZGl0aW9uYWwtbmFtZVwiLFxuICAgICAgICBcImNjLWZhbWlseS1uYW1lXCIsXG4gICAgICAgIFwiY2MtbnVtYmVyXCIsXG4gICAgICAgIFwiY2MtZXhwXCIsXG4gICAgICAgIFwiY2MtZXhwLW1vbnRoXCIsXG4gICAgICAgIFwiY2MtZXhwLXllYXJcIixcbiAgICAgICAgXCJjYy1jc2NcIixcbiAgICAgICAgXCJjYy10eXBlXCIsXG4gICAgICAgIFwidHJhbnNhY3Rpb24tY3VycmVuY3lcIixcbiAgICAgICAgXCJ0cmFuc2FjdGlvbi1hbW91bnRcIixcbiAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICBcImJkYXlcIixcbiAgICAgICAgXCJiZGF5LWRheVwiLFxuICAgICAgICBcImJkYXktbW9udGhcIixcbiAgICAgICAgXCJiZGF5LXllYXJcIixcbiAgICAgICAgXCJzZXhcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJwaG90b1wiLFxuICAgICAgICBcInRlbFwiLFxuICAgICAgICBcInRlbC1jb3VudHJ5LWNvZGVcIixcbiAgICAgICAgXCJ0ZWwtbmF0aW9uYWxcIixcbiAgICAgICAgXCJ0ZWwtYXJlYS1jb2RlXCIsXG4gICAgICAgIFwidGVsLWxvY2FsXCIsXG4gICAgICAgIFwidGVsLWxvY2FsLXByZWZpeFwiLFxuICAgICAgICBcInRlbC1sb2NhbC1zdWZmaXhcIixcbiAgICAgICAgXCJ0ZWwtZXh0ZW5zaW9uXCIsXG4gICAgICAgIFwiZW1haWxcIixcbiAgICAgICAgXCJpbXBwXCIsXG4gICAgICBdLFxuICAgIH0sICAgIFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwic2VsZWN0YmFzZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYW4gcXVlc3Rpb24gdGhhdCByZW5kZXJzIGVtcHR5IFwiZGl2XCIgdGFnLiBJdCB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3Igc29tZSBjdXN0b20gd2lkZ2V0c1xuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25FbXB0eU1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImVtcHR5XCI7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJlbXB0eVwiLFxuICBbXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25FbXB0eU1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgZXhwcmVzc2lvbiBxdWVzdGlvbi4gSXQgaXMgYSByZWFkLW9ubHkgcXVlc3Rpb24uIEl0IGNhbGN1bGF0ZXMgdmFsdWUgYmFzZWQgb24gZXB4cmVzc2lvbiBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwcml2YXRlIGV4cHJlc3Npb25Jc1J1bm5pbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgZXhwcmVzc2lvblJ1bm5lcjogRXhwcmVzc2lvblJ1bm5lcjtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImZvcm1hdFwiLCB0aGlzKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImV4cHJlc3Npb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5leHByZXNzaW9uUnVubmVyKSB7XG4gICAgICAgIHNlbGYuZXhwcmVzc2lvblJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKHNlbGYuZXhwcmVzc2lvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJleHByZXNzaW9uXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGRpc3BsYXkgdGhlIHZhbHVlIGluIHlvdXIgb3duIGZvcm1hdC4gTWFrZSBzdXJlIHlvdSBoYXZlIFwiezB9XCIgc3Vic3RyaW5nIGluIHlvdXIgc3RyaW5nLCB0byBkaXNwbGF5IHRoZSBhY3R1YWwgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImZvcm1hdFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGZvcm1hdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZm9ybWF0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0Zvcm1hdCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJmb3JtYXRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBFeHByZXNzaW9uIHRoYXQgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHF1ZXN0aW9uIHZhbHVlLiBZb3UgbWF5IHVzZSBzdGFuZGFyZCBvcGVyYXRvcnMgbGlrZSArLCAtLCAqIGFuZCAvLCBzcXVhcmVzICgpLiBIZXJlIGlzIHRoZSBleGFtcGxlIG9mIGFjY2Vzc2luZyB0aGUgcXVlc3Rpb24gdmFsdWUge3F1ZXN0aW9ubmFtZX0uXG4gICAqIDxici8+RXhhbXBsZTogXCIoe3F1YW50aXR5fSAqIHtwcmljZX0pICogKDEwMCAtIHtkaXNjb3VudH0pIC8gMTAwXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgbG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdW5sb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuZXhwcmVzc2lvbiB8fFxuICAgICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nIHx8XG4gICAgICAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5sb2NDYWxjdWxhdGlvbigpO1xuICAgIGlmICghdGhpcy5leHByZXNzaW9uUnVubmVyKSB7XG4gICAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLmV4cHJlc3Npb24pO1xuICAgIH1cbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IG5ld1ZhbHVlID0+IHtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCB0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnVubG9jQ2FsY3VsYXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRvIHVzZSBpZiBkaXNwbGF5U3R5bGUgaXMgbm90IFwibm9uZVwiLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGZyb20gMCB0byAyMC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgLTEgYW5kIGl0IG1lYW5zIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4aW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhpbXVtRnJhY3Rpb25EaWdpdHModmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gMjApIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byB1c2UgaWYgZGlzcGxheVN0eWxlIGlzIG5vdCBcIm5vbmVcIi4gUG9zc2libGUgdmFsdWVzIGFyZSBmcm9tIDAgdG8gMjAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIC0xIGFuZCBpdCBtZWFucyB0aGF0IHRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbmltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIiwgLTEpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluaW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDIwKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHZhbCA9IHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBcIlwiO1xuICAgIHZhciBzdHIgPSB0aGlzLmdldFZhbHVlQXNTdHIodmFsKTtcbiAgICBpZiAoIXRoaXMuZm9ybWF0KSByZXR1cm4gc3RyO1xuICAgIHJldHVybiAoPGFueT50aGlzLmZvcm1hdClbXCJmb3JtYXRcIl0oc3RyKTtcbiAgfVxuICAvKipcbiAgICogWW91IG1heSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIiBvciBcImRhdGVcIi4gSWYgeW91IHNldCBpdCB0byBcImN1cnJlbmN5XCIsIHlvdSBtYXkgdXNlIHRoZSBjdXJyZW5jeSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRoZSB2YWx1ZSBpbiBjdXJyZW5jeSBkaWZmZXJlbnQgZnJvbSBVU0QuXG4gICAqIEBzZWUgY3VycmVuY3lcbiAgICovXG4gIHB1YmxpYyBnZXQgZGlzcGxheVN0eWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlTdHlsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRpc3BsYXlTdHlsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlTdHlsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gZGlzcGxheSB0aGUgdmFsdWUgaW4gdGhlIGN1cnJlbmN5IGRpZmZlcmVuIGZyb20gVVNELiBUaGUgZGlzcGxheVN0eXBlIHNob3VsZCBiZSBzZXQgdG8gXCJjdXJyZW5jeVwiLlxuICAgKiBAc2VlIGRpc3BsYXlTdHlsZVxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW5jeVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGN1cnJlbmN5KHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKGdldEN1cnJlY3lDb2RlcygpLmluZGV4T2YodmFsKSA8IDApIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW5jeVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBcdERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IGdyb3VwaW5nIHNlcGFyYXRvcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZUdyb3VwaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ1c2VHcm91cGluZ1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZUdyb3VwaW5nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInVzZUdyb3VwaW5nXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQXNTdHIodmFsOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRpc3BsYXlTdHlsZSA9PSBcImRhdGVcIikge1xuICAgICAgdmFyIGQgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgaWYgKCEhZCAmJiAhIWQudG9Mb2NhbGVEYXRlU3RyaW5nKSByZXR1cm4gZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzcGxheVN0eWxlICE9IFwibm9uZVwiICYmIEhlbHBlcnMuaXNOdW1iZXIodmFsKSkge1xuICAgICAgdmFyIGxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKCk7XG4gICAgICBpZiAoIWxvY2FsZSkgbG9jYWxlID0gXCJlblwiO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0eWxlOiB0aGlzLmRpc3BsYXlTdHlsZSxcbiAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3ksXG4gICAgICAgIHVzZUdyb3VwaW5nOiB0aGlzLnVzZUdyb3VwaW5nLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm1heGltdW1GcmFjdGlvbkRpZ2l0cyA+IC0xKSB7XG4gICAgICAgICg8YW55Pm9wdGlvbnMpW1wibWF4aW11bUZyYWN0aW9uRGlnaXRzXCJdID0gdGhpcy5tYXhpbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5taW5pbXVtRnJhY3Rpb25EaWdpdHMgPiAtMSkge1xuICAgICAgICAoPGFueT5vcHRpb25zKVtcIm1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiXSA9IHRoaXMubWluaW11bUZyYWN0aW9uRGlnaXRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbC50b0xvY2FsZVN0cmluZyhsb2NhbGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlY3lDb2RlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgcmV0dXJuIFtcbiAgICBcIkFFRFwiLFxuICAgIFwiQUZOXCIsXG4gICAgXCJBTExcIixcbiAgICBcIkFNRFwiLFxuICAgIFwiQU5HXCIsXG4gICAgXCJBT0FcIixcbiAgICBcIkFSU1wiLFxuICAgIFwiQVVEXCIsXG4gICAgXCJBV0dcIixcbiAgICBcIkFaTlwiLFxuICAgIFwiQkFNXCIsXG4gICAgXCJCQkRcIixcbiAgICBcIkJEVFwiLFxuICAgIFwiQkdOXCIsXG4gICAgXCJCSERcIixcbiAgICBcIkJJRlwiLFxuICAgIFwiQk1EXCIsXG4gICAgXCJCTkRcIixcbiAgICBcIkJPQlwiLFxuICAgIFwiQk9WXCIsXG4gICAgXCJCUkxcIixcbiAgICBcIkJTRFwiLFxuICAgIFwiQlROXCIsXG4gICAgXCJCV1BcIixcbiAgICBcIkJZTlwiLFxuICAgIFwiQlpEXCIsXG4gICAgXCJDQURcIixcbiAgICBcIkNERlwiLFxuICAgIFwiQ0hFXCIsXG4gICAgXCJDSEZcIixcbiAgICBcIkNIV1wiLFxuICAgIFwiQ0xGXCIsXG4gICAgXCJDTFBcIixcbiAgICBcIkNOWVwiLFxuICAgIFwiQ09QXCIsXG4gICAgXCJDT1VcIixcbiAgICBcIkNSQ1wiLFxuICAgIFwiQ1VDXCIsXG4gICAgXCJDVVBcIixcbiAgICBcIkNWRVwiLFxuICAgIFwiQ1pLXCIsXG4gICAgXCJESkZcIixcbiAgICBcIkRLS1wiLFxuICAgIFwiRE9QXCIsXG4gICAgXCJEWkRcIixcbiAgICBcIkVHUFwiLFxuICAgIFwiRVJOXCIsXG4gICAgXCJFVEJcIixcbiAgICBcIkVVUlwiLFxuICAgIFwiRkpEXCIsXG4gICAgXCJGS1BcIixcbiAgICBcIkdCUFwiLFxuICAgIFwiR0VMXCIsXG4gICAgXCJHSFNcIixcbiAgICBcIkdJUFwiLFxuICAgIFwiR01EXCIsXG4gICAgXCJHTkZcIixcbiAgICBcIkdUUVwiLFxuICAgIFwiR1lEXCIsXG4gICAgXCJIS0RcIixcbiAgICBcIkhOTFwiLFxuICAgIFwiSFJLXCIsXG4gICAgXCJIVEdcIixcbiAgICBcIkhVRlwiLFxuICAgIFwiSURSXCIsXG4gICAgXCJJTFNcIixcbiAgICBcIklOUlwiLFxuICAgIFwiSVFEXCIsXG4gICAgXCJJUlJcIixcbiAgICBcIklTS1wiLFxuICAgIFwiSk1EXCIsXG4gICAgXCJKT0RcIixcbiAgICBcIkpQWVwiLFxuICAgIFwiS0VTXCIsXG4gICAgXCJLR1NcIixcbiAgICBcIktIUlwiLFxuICAgIFwiS01GXCIsXG4gICAgXCJLUFdcIixcbiAgICBcIktSV1wiLFxuICAgIFwiS1dEXCIsXG4gICAgXCJLWURcIixcbiAgICBcIktaVFwiLFxuICAgIFwiTEFLXCIsXG4gICAgXCJMQlBcIixcbiAgICBcIkxLUlwiLFxuICAgIFwiTFJEXCIsXG4gICAgXCJMU0xcIixcbiAgICBcIkxZRFwiLFxuICAgIFwiTUFEXCIsXG4gICAgXCJNRExcIixcbiAgICBcIk1HQVwiLFxuICAgIFwiTUtEXCIsXG4gICAgXCJNTUtcIixcbiAgICBcIk1OVFwiLFxuICAgIFwiTU9QXCIsXG4gICAgXCJNUk9cIixcbiAgICBcIk1VUlwiLFxuICAgIFwiTVZSXCIsXG4gICAgXCJNV0tcIixcbiAgICBcIk1YTlwiLFxuICAgIFwiTVhWXCIsXG4gICAgXCJNWVJcIixcbiAgICBcIk1aTlwiLFxuICAgIFwiTkFEXCIsXG4gICAgXCJOR05cIixcbiAgICBcIk5JT1wiLFxuICAgIFwiTk9LXCIsXG4gICAgXCJOUFJcIixcbiAgICBcIk5aRFwiLFxuICAgIFwiT01SXCIsXG4gICAgXCJQQUJcIixcbiAgICBcIlBFTlwiLFxuICAgIFwiUEdLXCIsXG4gICAgXCJQSFBcIixcbiAgICBcIlBLUlwiLFxuICAgIFwiUExOXCIsXG4gICAgXCJQWUdcIixcbiAgICBcIlFBUlwiLFxuICAgIFwiUk9OXCIsXG4gICAgXCJSU0RcIixcbiAgICBcIlJVQlwiLFxuICAgIFwiUldGXCIsXG4gICAgXCJTQVJcIixcbiAgICBcIlNCRFwiLFxuICAgIFwiU0NSXCIsXG4gICAgXCJTREdcIixcbiAgICBcIlNFS1wiLFxuICAgIFwiU0dEXCIsXG4gICAgXCJTSFBcIixcbiAgICBcIlNMTFwiLFxuICAgIFwiU09TXCIsXG4gICAgXCJTUkRcIixcbiAgICBcIlNTUFwiLFxuICAgIFwiU1REXCIsXG4gICAgXCJTVkNcIixcbiAgICBcIlNZUFwiLFxuICAgIFwiU1pMXCIsXG4gICAgXCJUSEJcIixcbiAgICBcIlRKU1wiLFxuICAgIFwiVE1UXCIsXG4gICAgXCJUTkRcIixcbiAgICBcIlRPUFwiLFxuICAgIFwiVFJZXCIsXG4gICAgXCJUVERcIixcbiAgICBcIlRXRFwiLFxuICAgIFwiVFpTXCIsXG4gICAgXCJVQUhcIixcbiAgICBcIlVHWFwiLFxuICAgIFwiVVNEXCIsXG4gICAgXCJVU05cIixcbiAgICBcIlVZSVwiLFxuICAgIFwiVVlVXCIsXG4gICAgXCJVWlNcIixcbiAgICBcIlZFRlwiLFxuICAgIFwiVk5EXCIsXG4gICAgXCJWVVZcIixcbiAgICBcIldTVFwiLFxuICAgIFwiWEFGXCIsXG4gICAgXCJYQUdcIixcbiAgICBcIlhBVVwiLFxuICAgIFwiWEJBXCIsXG4gICAgXCJYQkJcIixcbiAgICBcIlhCQ1wiLFxuICAgIFwiWEJEXCIsXG4gICAgXCJYQ0RcIixcbiAgICBcIlhEUlwiLFxuICAgIFwiWE9GXCIsXG4gICAgXCJYUERcIixcbiAgICBcIlhQRlwiLFxuICAgIFwiWFBUXCIsXG4gICAgXCJYU1VcIixcbiAgICBcIlhUU1wiLFxuICAgIFwiWFVBXCIsXG4gICAgXCJYWFhcIixcbiAgICBcIllFUlwiLFxuICAgIFwiWkFSXCIsXG4gICAgXCJaTVdcIixcbiAgICBcIlpXTFwiLFxuICBdO1xufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImV4cHJlc3Npb25cIixcbiAgW1xuICAgIFwiZXhwcmVzc2lvbjpleHByZXNzaW9uXCIsXG4gICAgeyBuYW1lOiBcImZvcm1hdFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRm9ybWF0XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImRpc3BsYXlTdHlsZVwiLFxuICAgICAgZGVmYXVsdDogXCJub25lXCIsXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiZGVjaW1hbFwiLCBcImN1cnJlbmN5XCIsIFwicGVyY2VudFwiLCBcImRhdGVcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImN1cnJlbmN5XCIsXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZWN5Q29kZXMoKTtcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiBcIlVTRFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1heGltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwibWluaW11bUZyYWN0aW9uRGlnaXRzOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJ1c2VHcm91cGluZzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaXNSZXF1aXJlZFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZWFkT25seVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWxpZGF0b3JzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImRlZmF1bHRWYWx1ZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb3JyZWN0QW5zd2VyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJleHByZXNzaW9uXCIsIG5hbWUgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciwgRXZlbnRCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgVXBsb2FkaW5nRmlsZUVycm9yLCBFeGNlZWRTaXplRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgZmlsZSBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GaWxlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByaXZhdGUgaXNVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBxdWVzdGlvbiBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHF1ZXN0aW9uIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnN0YXRlIG5ldyBxdWVzdGlvbiBzdGF0ZSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvblN0YXRlQ2hhbmdlZDogRXZlbnRCYXNlPFF1ZXN0aW9uRmlsZU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgUXVlc3Rpb25GaWxlTW9kZWxcbiAgPigpO1xuICBwdWJsaWMgcHJldmlld1ZhbHVlOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgY3VycmVudFN0YXRlID0gXCJlbXB0eVwiO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZpbGVcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIHRoaXMuc3VydmV5LmNsZWFyRmlsZXModGhpcywgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCBudWxsLCAoKSA9PiB7fSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlLCB0byBzaG93IHRoZSBwcmV2aWV3IGZvciB0aGUgaW1hZ2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQcmV2aWV3KCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQcmV2aWV3KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2aWV3XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlLCB0byBhbGxvdyBzZWxlY3QgbXVsdGlwbGUgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93TXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93TXVsdGlwbGVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dNdWx0aXBsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd011bHRpcGxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBoZWlnaHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VIZWlnaHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZUhlaWdodFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2Ugd2lkdGguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFjY2VwdGVkIGZpbGUgdHlwZXMuIFBhc3NlZCB0byB0aGUgJ2FjY2VwdCcgYXR0cmlidXRlIG9mIHRoZSBmaWxlIGlucHV0IHRhZy4gU2VlIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vdGFncy9hdHRfaW5wdXRfYWNjZXB0LmFzcCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgcHVibGljIGdldCBhY2NlcHRlZFR5cGVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdGVkVHlwZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBhY2NlcHRlZFR5cGVzKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWNjZXB0ZWRUeXBlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvIG5vdCB3YW50IHRvIHNlcmlhbGl6ZSBmaWxlIGNvbnRlbnQgYXMgdGV4dCBpbiB0aGUgc3VydmV5LmRhdGEuXG4gICAqIEluIHRoaXMgY2FzZSwgeW91IGhhdmUgdG8gd3JpdGUgdGhlIGNvZGUgb25VcGxvYWRGaWxlcyBldmVudCB0byBzdG9yZSB0aGUgZmlsZSBjb250ZW50LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm9uVXBsb2FkRmlsZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RvcmVEYXRhQXNUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZURhdGFBc1RleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZURhdGFBc1RleHQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVEYXRhQXNUZXh0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHdhaXQgdW50aWwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB0byB5b3VyIHNlcnZlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2FpdEZvclVwbG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2FpdEZvclVwbG9hZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCB3YWl0Rm9yVXBsb2FkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndhaXRGb3JVcGxvYWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgaW1hZ2VzIHByZXZpZXcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93SW1hZ2VzUHJldmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dJbWFnZXNQcmV2aWV3XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dJbWFnZXNQcmV2aWV3KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93SW1hZ2VzUHJldmlld1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXR1cCB0aGUgbWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4U2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhTaXplXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4U2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFNpemVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0dXAgY29uZmlybWF0aW9uIHRvIHJlbW92ZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIGdldCBuZWVkQ29uZmlybVJlbW92ZUZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5lZWRDb25maXJtUmVtb3ZlRmlsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5lZWRDb25maXJtUmVtb3ZlRmlsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuZWVkQ29uZmlybVJlbW92ZUZpbGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlbW92ZSBmaWxlIGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgcHVibGljIGdldENvbmZpcm1SZW1vdmVNZXNzYWdlKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJjb25maXJtUmVtb3ZlRmlsZVwiKVxuICAgICAgW1wiZm9ybWF0XCJdKGZpbGVOYW1lKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlbW92ZSBhbGwgZmlsZXMgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBnZXQgY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNvbmZpcm1SZW1vdmVBbGxGaWxlc1wiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG5vIGZpbGUgY2hvc2VuIGNhcHRpb24gZm9yIG1vZGVybiB0aGVtZS5cbiAgICovXG4gIGdldCBub0ZpbGVDaG9zZW5DYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJub0ZpbGVDaG9zZW5cIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjaG9vc2UgZmlsZXMgYnV0dG9uIGNhcHRpb24gZm9yIG1vZGVybiB0aGVtZS5cbiAgICovXG4gIGdldCBjaG9vc2VCdXR0b25DYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9vc2VGaWxlQ2FwdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNsZWFuIGZpbGVzIGJ1dHRvbiBjYXB0aW9uLlxuICAgKi9cbiAgZ2V0IGNsZWFuQnV0dG9uQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2xlYW5DYXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcmVtb3ZlIGZpbGUgYnV0dG9uIGNhcHRpb24uXG4gICAqL1xuICBnZXQgcmVtb3ZlRmlsZUNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZUZpbGVDYXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdGl0bGUgdmFsdWUuXG4gICAqL1xuICBnZXQgaW5wdXRUaXRsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImxvYWRpbmdGaWxlXCIpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9vc2VGaWxlXCIpO1xuICAgIHJldHVybiBcIiBcIjtcbiAgfVxuICAvKipcbiAgICogQ2xlYXIgdmFsdWUgcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihkb25lQ2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyhcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlLFxuICAgICAgbnVsbCxcbiAgICAgIChzdGF0dXMsIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgICAgISFkb25lQ2FsbGJhY2sgJiYgZG9uZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgZmlsZSBpdGVtIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRmlsZShjb250ZW50OiB7IG5hbWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyhcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlLFxuICAgICAgY29udGVudC5uYW1lLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2xkVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gb2xkVmFsdWUuZmlsdGVyKGYgPT4gZi5uYW1lICE9PSBjb250ZW50Lm5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWQgbXVsdGlwbGUgZmlsZXMgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogQHBhcmFtIGZpbGVzXG4gICAqL1xuICBwdWJsaWMgbG9hZEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgaWYgKCF0aGlzLmFsbEZpbGVzT2soZmlsZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkaW5nXCIpO1xuXG4gICAgdmFyIGxvYWRGaWxlc1Byb2MgPSAoKSA9PiB7XG4gICAgICB2YXIgY29udGVudCA9IDxBcnJheTxhbnk+PltdO1xuICAgICAgaWYgKHRoaXMuc3RvcmVEYXRhQXNUZXh0KSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgICAgbGV0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZSA9PiB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5jb25jYXQoW1xuICAgICAgICAgICAgICB7IG5hbWU6IGZpbGUubmFtZSwgdHlwZTogZmlsZS50eXBlLCBjb250ZW50OiBmaWxlUmVhZGVyLnJlc3VsdCB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPT09IGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gKHRoaXMudmFsdWUgfHwgW10pLmNvbmNhdChjb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleS51cGxvYWRGaWxlcyh0aGlzLCB0aGlzLm5hbWUsIGZpbGVzLCAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImVycm9yXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICh0aGlzLnZhbHVlIHx8IFtdKS5jb25jYXQoXG4gICAgICAgICAgICAgIGRhdGEubWFwKChyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogci5maWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICB0eXBlOiByLmZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHIuY29udGVudCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZSkge1xuICAgICAgbG9hZEZpbGVzUHJvYygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyKGxvYWRGaWxlc1Byb2MpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2FuUHJldmlld0ltYWdlKGZpbGVJdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0ltYWdlc1ByZXZpZXcgJiYgISFmaWxlSXRlbSAmJiB0aGlzLmlzRmlsZUltYWdlKGZpbGVJdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpO1xuICAgIHRoaXMucHJldmlld1ZhbHVlID0gW107XG4gICAgdmFyIHN0YXRlID1cbiAgICAgICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgISFuZXdWYWx1ZSkgfHxcbiAgICAgIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICA/IHRoaXMuc2hvd1ByZXZpZXdcbiAgICAgICAgICA/IFwibG9hZGluZ1wiXG4gICAgICAgICAgOiBcImxvYWRlZFwiXG4gICAgICAgIDogXCJlbXB0eVwiO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VkKHN0YXRlKTtcbiAgICBpZiAoIXRoaXMuc2hvd1ByZXZpZXcgfHwgIW5ld1ZhbHVlKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkobmV3VmFsdWUpXG4gICAgICA/IG5ld1ZhbHVlXG4gICAgICA6ICEhbmV3VmFsdWVcbiAgICAgID8gW25ld1ZhbHVlXVxuICAgICAgOiBbXTtcblxuICAgIGlmICh0aGlzLnN0b3JlRGF0YUFzVGV4dCkge1xuICAgICAgbmV3VmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICB2YXIgY29udGVudCA9IHZhbHVlLmNvbnRlbnQgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMucHJldmlld1ZhbHVlID0gdGhpcy5wcmV2aWV3VmFsdWUuY29uY2F0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHRoaXMuc3RhdGVDaGFuZ2VkKFwibG9hZGVkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIHZhciBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZTtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuZG93bmxvYWRGaWxlKHRoaXMubmFtZSwgdmFsdWUsIChzdGF0dXMsIGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3VmFsdWUgPSB0aGlzLnByZXZpZXdWYWx1ZS5jb25jYXQoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGVudDogZGF0YSxcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdWYWx1ZS5sZW5ndGggPT09IG5ld1ZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkKFwiZXJyb3JcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAodGhpcy5pc1VwbG9hZGluZyAmJiB0aGlzLndhaXRGb3JVcGxvYWQpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBuZXcgVXBsb2FkaW5nRmlsZUVycm9yKFxuICAgICAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cGxvYWRpbmdGaWxlXCIpLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHN0YXRlQ2hhbmdlZChzdGF0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChzdGF0ZSA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMub25TdGF0ZUNoYW5nZWQuZmlyZSh0aGlzLCB7IHN0YXRlOiBzdGF0ZSB9KTtcbiAgfVxuICBwcml2YXRlIGFsbEZpbGVzT2soZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgIHZhciBlcnJvckxlbmd0aCA9IHRoaXMuZXJyb3JzID8gdGhpcy5lcnJvcnMubGVuZ3RoIDogMDtcbiAgICAoZmlsZXMgfHwgW10pLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBpZiAodGhpcy5tYXhTaXplID4gMCAmJiBmaWxlLnNpemUgPiB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgRXhjZWVkU2l6ZUVycm9yKHRoaXMubWF4U2l6ZSwgdGhpcykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvckxlbmd0aCA9PT0gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICB9XG4gIHByaXZhdGUgaXNGaWxlSW1hZ2UoZmlsZToge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gIH0pOiBib29sZWFuIHtcbiAgICBpZiAoIWZpbGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpbWFnZVByZWZpeCA9IFwiZGF0YTppbWFnZVwiO1xuICAgIHZhciBzdWJTdHIgPSBmaWxlLmNvbnRlbnQgJiYgZmlsZS5jb250ZW50LnN1YnN0cigwLCBpbWFnZVByZWZpeC5sZW5ndGgpO1xuICAgIHN1YlN0ciA9IHN1YlN0ciAmJiBzdWJTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzdWx0ID1cbiAgICAgIHN1YlN0ciA9PT0gaW1hZ2VQcmVmaXggfHxcbiAgICAgICghIWZpbGUudHlwZSAmJiBmaWxlLnR5cGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiaW1hZ2UvXCIpID09PSAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhICYmICF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gZmFsc2U7XG4gICAgICB2YXIgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV07XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gdmFsdWVzLm1hcCgoZGF0YVZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGluZGV4LFxuICAgICAgICAgIHRpdGxlOiBcIkZpbGVcIixcbiAgICAgICAgICB2YWx1ZTogKGRhdGFWYWx1ZS5jb250ZW50ICYmIGRhdGFWYWx1ZS5jb250ZW50KSB8fCBkYXRhVmFsdWUsXG4gICAgICAgICAgZGlzcGxheVZhbHVlOiAoZGF0YVZhbHVlLm5hbWUgJiYgZGF0YVZhbHVlLm5hbWUpIHx8IGRhdGFWYWx1ZSxcbiAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJmaWxlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNDb21tZW50O1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInNob3dQcmV2aWV3OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwiYWxsb3dNdWx0aXBsZTpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcImFsbG93SW1hZ2VzUHJldmlldzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcImltYWdlSGVpZ2h0XCIsXG4gICAgXCJpbWFnZVdpZHRoXCIsXG4gICAgXCJhY2NlcHRlZFR5cGVzXCIsXG4gICAgeyBuYW1lOiBcInN0b3JlRGF0YUFzVGV4dDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwid2FpdEZvclVwbG9hZDpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgXCJtYXhTaXplOm51bWJlclwiLFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWxpZGF0b3JzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5lZWRDb25maXJtUmVtb3ZlRmlsZTpib29sZWFuXCIsIHZpc2libGU6IHRydWUsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCBuYW1lID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBodG1sIHF1ZXN0aW9uLiBVbmxpa2Ugb3RoZXIgcXVlc3Rpb25zIGl0IGRvZXNuJ3QgaGF2ZSB2YWx1ZSBhbmQgdGl0bGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBwdWJsaWMgaWdub3JlSHRtbFByb2dyZXNzaW5nOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgbG9jSHRtbCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIGxvY0h0bWwub25HZXRUZXh0Q2FsbGJhY2sgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuaWdub3JlSHRtbFByb2dyZXNzaW5nXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwoc3RyKVxuICAgICAgICA6IHN0cjtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaHRtbFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlnbm9yZUh0bWxQcm9ncmVzc2luZykgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIHN1cGVyLmdldFByb2Nlc3NlZFRleHQodGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBodG1sIHRvIGRpc3BsYXkgaXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZEh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucHJvY2Vzc0h0bWwodGhpcy5odG1sKSA6IHRoaXMuaHRtbDtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJodG1sXCIsXG4gIFt7IG5hbWU6IFwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25IdG1sTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibm9udmFsdWVcIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaHRtbFwiLCBuYW1lID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBpbWFnZSBxdWVzdGlvbi4gVGhpcyBxdWVzdGlvbiBoYXNuJ3QgYW55IGZ1bmN0aW9uYWxpdHkgYW5kIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHN1cnZleS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIsIHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidGV4dFwiLCB0aGlzLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJpbWFnZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlTGluaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGluayh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaW1hZ2VMaW5rXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0ltYWdlTGluaygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBhbHQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0ZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaW1hZ2VcIixcbiAgW1xuICAgIHsgbmFtZTogXCJpbWFnZUxpbmtcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0ltYWdlTGlua1wiIH0sXG4gICAgeyBuYW1lOiBcInRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RleHRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29udGVudE1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW1hZ2VcIixcbiAgICAgIGNob2ljZXM6IFtcImltYWdlXCIsIFwidmlkZW9cIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltYWdlRml0XCIsXG4gICAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJjb250YWluXCIsIFwiY292ZXJcIiwgXCJmaWxsXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImltYWdlSGVpZ2h0Om51bWJlclwiLCBkZWZhdWx0OiAxNTAsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcImltYWdlV2lkdGg6bnVtYmVyXCIsIGRlZmF1bHQ6IDIwMCwgbWluVmFsdWU6IDAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZU1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm5vbnZhbHVlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlTW9kZWwobmFtZSk7XG59KTtcbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuZXhwb3J0IGNsYXNzIEltYWdlSXRlbVZhbHVlIGV4dGVuZHMgSXRlbVZhbHVlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogYW55LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIHR5cGVOYW1lID0gXCJpbWFnZWl0ZW12YWx1ZVwiXG4gICkge1xuICAgIHN1cGVyKHZhbHVlLCB0ZXh0LCB0eXBlTmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImltYWdlTGlua1wiLCB0aGlzLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnR5cGVOYW1lID8gdGhpcy50eXBlTmFtZSA6IFwiaXRlbXZhbHVlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBvciB2aWRlbyBsaW5rIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUxpbmsoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUxpbmsodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NJbWFnZUxpbmsoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIpO1xuICB9XG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IHRleHQ7XG4gIH1cbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBzZWxlY3QgaW1hZ2UgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY29sQ291bnQgPSAwO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLmNyZWF0ZUl0ZW1WYWx1ZSA9ICh2YWx1ZTogYW55KSA9PlxuICAgICAgbmV3IEltYWdlSXRlbVZhbHVlKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImltYWdlcGlja2VyXCI7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1WYWx1ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaW1hZ2VpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnROb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogTXVsdGkgc2VsZWN0IG9wdGlvbi4gSWYgc2V0IHRvIHRydWUsIHRoZW4gYWxsb3dzIHRvIHNlbGVjdCBtdWx0aXBsZSBpbWFnZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG11bHRpU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtdWx0aVNlbGVjdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBtdWx0aVNlbGVjdChuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm11bHRpU2VsZWN0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgY2hlY2tlZFxuICAgKiBAcGFyYW0gaXRlbSBpbWFnZSBwaWNrZXIgaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbCwgaXRlbS52YWx1ZSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlKSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB2YWwubGVuZ3RoKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbGFiZWwgdW5kZXIgdGhlIGltYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TGFiZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dMYWJlbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TGFiZWwobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TGFiZWxcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyZW5kZXJlZFZhbHVlXCIpO1xuICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHZhciB2YWx1ZSA9IHN1cGVyLmdldFZhbHVlQ29yZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gdmFsO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gW3ZhbF07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsVG9BcnJheUZvck11bHRTZWxlY3QodmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZWl0ZW12YWx1ZVwiLFxuICBbXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJbWFnZUl0ZW1WYWx1ZSh2YWx1ZSksXG4gIFwiaXRlbXZhbHVlXCJcbik7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VpdGVtdmFsdWVcIiwge1xuICBuYW1lOiBcImltYWdlTGlua1wiLFxuICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSW1hZ2VMaW5rXCIsXG59KTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZXBpY2tlclwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJoYXNOb25lXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb250ZW50TW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJpbWFnZVwiLFxuICAgICAgY2hvaWNlczogW1wiaW1hZ2VcIiwgXCJ2aWRlb1wiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VGaXRcIixcbiAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDE1MCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgZGVmYXVsdDogMjAwLCBtaW5WYWx1ZTogMCB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwic2hvd0xhYmVsOmJvb2xlYW5cIixcbiAgZGVmYXVsdDogZmFsc2UsXG59KTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gIGRlZmF1bHQ6IDAsXG4gIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0LCA1XSxcbn0pO1xuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgbmFtZTogXCJtdWx0aVNlbGVjdDpib29sZWFuXCIsXG4gIGRlZmF1bHQ6IGZhbHNlLFxufSk7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VwaWNrZXJcIiwge1xuICBuYW1lOiBcImNob2ljZXM6aW1hZ2VpdGVtdmFsdWVbXVwiLFxufSk7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsKG5hbWUpO1xuICAvL3EuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsIH0gZnJvbSBcIi4vbWFydGl4QmFzZVwiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yLCBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgUmVxdWlyZWRJbkFsbFJvd3NFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nLCBJTG9jYWxpemFibGVPd25lciB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl9kcm9wZG93blwiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERhdGEge1xuICBvbk1hdHJpeFJvd0NoYW5nZWQocm93OiBNYXRyaXhSb3dNb2RlbCk6IHZvaWQ7XG4gIGdldENvcnJlY3RlZFJvd1ZhbHVlKHZhbHVlOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3dNb2RlbCBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIGRhdGE6IElNYXRyaXhEYXRhO1xuICBwcml2YXRlIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgcHVibGljIGNlbGxDbGljazogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwdWJsaWMgZnVsbE5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBJTWF0cml4RGF0YSxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNlbGxDbGljayA9IChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSA9IGNvbHVtbi52YWx1ZTtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ2YWx1ZVwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhKSB0aGlzLmRhdGEub25NYXRyaXhSb3dDaGFuZ2VkKHRoaXMpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS50ZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5sb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy5kYXRhLmdldENvcnJlY3RlZFJvd1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSAoPGFueT50aGlzLmRhdGEpLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd0NsYXNzID0gISFjc3NDbGFzc2VzLnJvdyA/IGNzc0NsYXNzZXMucm93IDogXCJcIjtcbiAgICB2YXIgcm93RXJyb3JDbGFzcyA9ICEhY3NzQ2xhc3Nlcy5yb3dFcnJvciA/IGNzc0NsYXNzZXMucm93RXJyb3IgOiBcIlwiO1xuICAgIHZhciBoYXNFcnJvciA9ICEhKDxhbnk+dGhpcy5kYXRhKS5nZXRFcnJvckJ5VHlwZShcInJlcXVpcmVkaW5hbGxyb3dzZXJyb3JcIik7XG5cbiAgICB2YXIgY2xhc3NlcyA9IHJvd0NsYXNzO1xuICAgIGlmICghIXJvd0Vycm9yQ2xhc3MgJiYgaGFzRXJyb3IgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSkpIHtcbiAgICAgIGlmICghIWNsYXNzZXMpIGNsYXNzZXMgKz0gXCIgXCI7XG4gICAgICBjbGFzc2VzICs9IHJvd0Vycm9yQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeENlbGxzT3duZXIgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciB7XG4gIGdldFJvd3MoKTogQXJyYXk8YW55PjtcbiAgZ2V0Q29sdW1ucygpOiBBcnJheTxhbnk+O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbHMge1xuICBwcml2YXRlIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgY2VsbHNPd25lcjogSU1hdHJpeENlbGxzT3duZXIpIHt9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBzZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKSB7XG4gICAgcm93ID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUocm93LCB0aGlzLnJvd3MpO1xuICAgIGNvbHVtbiA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKGNvbHVtbiwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoIXJvdyB8fCAhY29sdW1uKSByZXR1cm47XG4gICAgaWYgKHZhbCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddKSB0aGlzLnZhbHVlc1tyb3ddID0ge307XG4gICAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSlcbiAgICAgICAgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dID0gdGhpcy5jcmVhdGVTdHJpbmcoKTtcbiAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXS50ZXh0ID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy52YWx1ZXNbcm93XSAmJiB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0pIHtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgbG9jLnRleHQgPSBcIlwiO1xuICAgICAgICBpZiAobG9jLmlzRW1wdHkpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnZhbHVlc1tyb3ddKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3Jvd107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRDZWxsVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsTG9jVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcm93ID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUocm93LCB0aGlzLnJvd3MpO1xuICAgIGNvbHVtbiA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKGNvbHVtbiwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoIXJvdyB8fCAhY29sdW1uKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd10pIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0Q2VsbExvY1RleHQoY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENlbGxMb2NUZXh0KHNldHRpbmdzLm1hdHJpeERlZmF1bHRSb3dOYW1lLCBjb2x1bW4pO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsRGlzcGxheUxvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBjZWxsVGV4dCA9IHRoaXMuZ2V0Q2VsbExvY1RleHQocm93LCBjb2x1bW4pO1xuICAgIGlmIChjZWxsVGV4dCAmJiAhY2VsbFRleHQuaXNFbXB0eSkgcmV0dXJuIGNlbGxUZXh0O1xuICAgIGNlbGxUZXh0ID0gdGhpcy5nZXRDZWxsTG9jVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICBpZiAoY2VsbFRleHQgJiYgIWNlbGxUZXh0LmlzRW1wdHkpIHJldHVybiBjZWxsVGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSBcIm51bWJlclwiKSB7XG4gICAgICBjb2x1bW4gPVxuICAgICAgICBjb2x1bW4gPj0gMCAmJiBjb2x1bW4gPCB0aGlzLmNvbHVtbnMubGVuZ3RoXG4gICAgICAgICAgPyB0aGlzLmNvbHVtbnNbY29sdW1uXVxuICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ubG9jVGV4dCkgcmV0dXJuIGNvbHVtbi5sb2NUZXh0O1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxMb2NUZXh0KHJvdywgY29sdW1uKTtcbiAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRDZWxsTG9jVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdywgY29sdW1uKTtcbiAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNPd25lciA/IHRoaXMuY2VsbHNPd25lci5nZXRSb3dzKCkgOiBbXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNPd25lciA/IHRoaXMuY2VsbHNPd25lci5nZXRDb2x1bW5zKCkgOiBbXTtcbiAgfVxuICBwcml2YXRlIGdldENlbGxSb3dDb2x1bW5WYWx1ZSh2YWw6IGFueSwgdmFsdWVzOiBBcnJheTxhbnk+KTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAodmFsIDwgMCB8fCB2YWwgPj0gdmFsdWVzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICB2YWwgPSB2YWx1ZXNbdmFsXS52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbC52YWx1ZSkgcmV0dXJuIHZhbC52YWx1ZTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgcm93IGluIHRoaXMudmFsdWVzKSB7XG4gICAgICB2YXIgcmVzUm93OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgIHZhciByb3dWYWx1ZXMgPSB0aGlzLnZhbHVlc1tyb3ddO1xuICAgICAgZm9yICh2YXIgY29sIGluIHJvd1ZhbHVlcykge1xuICAgICAgICByZXNSb3dbY29sXSA9IHJvd1ZhbHVlc1tjb2xdLmdldEpzb24oKTtcbiAgICAgIH1cbiAgICAgIHJlc1tyb3ddID0gcmVzUm93O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBmb3IgKHZhciByb3cgaW4gdmFsdWUpIHtcbiAgICAgIGlmIChyb3cgPT0gXCJwb3NcIikgY29udGludWU7XG4gICAgICB2YXIgcm93VmFsdWVzID0gdmFsdWVbcm93XTtcbiAgICAgIHRoaXMudmFsdWVzW3Jvd10gPSB7fTtcbiAgICAgIGZvciAodmFyIGNvbCBpbiByb3dWYWx1ZXMpIHtcbiAgICAgICAgaWYgKGNvbCA9PSBcInBvc1wiKSBjb250aW51ZTtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3JlYXRlU3RyaW5nKCk7XG4gICAgICAgIGxvYy5zZXRKc29uKHJvd1ZhbHVlc1tjb2xdKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbcm93XVtjb2xdID0gbG9jO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3RyaW5nKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMuY2VsbHNPd25lciwgdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHNpbXBsZSBtYXRyaXggcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeE1vZGVsXG4gIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWw8TWF0cml4Um93TW9kZWwsIEl0ZW1WYWx1ZT5cbiAgaW1wbGVtZW50cyBJTWF0cml4RGF0YSwgSU1hdHJpeENlbGxzT3duZXIge1xuICBwcml2YXRlIGlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjZWxsc1ZhbHVlOiBNYXRyaXhDZWxscztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNlbGxzVmFsdWUgPSBuZXcgTWF0cml4Q2VsbHModGhpcyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjb2x1bW5zXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInJvd3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXNlbGYuZmlsdGVySXRlbXMoKSkge1xuICAgICAgICBzZWxmLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaGlkZUlmUm93c0VtcHR5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCBpZiB5b3Ugd2FudCBhIHVzZXIgdG8gYW5zd2VyIGFsbCByb3dzLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0FsbFJvd1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0FsbFJvd1JlcXVpcmVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzQWxsUm93UmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbGxSb3dSZXF1aXJlZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1Jvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGggPiAwO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZW5kZXIgaXRlbXMgaW4gYSBzcGVjaWZpYyBvcmRlcjogXCJyYW5kb21cIiBvciBcImluaXRpYWxcIi4gRGVmYXVsdCBpcyBcImluaXRpYWxcIi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm93c09yZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3NPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWwgPT0gdGhpcy5yb3dzT3JkZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzT3JkZXJcIiwgdmFsKTtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBoaWRlIHRoZSBxdWVzdGlvbiBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIHJvd3MgaW4gdGhlIG1hdHJpeC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZUlmUm93c0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZSb3dzRW1wdHlcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGlkZUlmUm93c0VtcHR5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZlJvd3NFbXB0eVwiLCB2YWwpO1xuICB9XG4gIGdldFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm93cztcbiAgfVxuICBnZXRDb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtQ2xhc3Mocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IHJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgdmFyIGFsbG93SG92ZXIgPSAhaXNDaGVja2VkICYmICFpc0Rpc2FibGVkO1xuICAgIHZhciBjZWxsRGlzYWJsZWRDbGFzcyA9IHRoaXMuaGFzQ2VsbFRleHRcbiAgICAgID8gdGhpcy5jc3NDbGFzc2VzLmNlbGxUZXh0RGlzYWJsZWRcbiAgICAgIDogdGhpcy5jc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcblxuICAgIHZhciBjZWxsU2VsZWN0ZWRDbGFzcyA9IHRoaXMuaGFzQ2VsbFRleHRcbiAgICAgID8gdGhpcy5jc3NDbGFzc2VzLmNlbGxUZXh0U2VsZWN0ZWRcbiAgICAgIDogdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuXG4gICAgdmFyIGl0ZW1Ib3ZlckNsYXNzID0gIXRoaXMuaGFzQ2VsbFRleHQgPyB0aGlzLmNzc0NsYXNzZXMuaXRlbUhvdmVyIDogXCJcIjtcblxuICAgIHZhciBjZWxsQ2xhc3MgPSB0aGlzLmhhc0NlbGxUZXh0XG4gICAgICA/IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsVGV4dFxuICAgICAgOiB0aGlzLmNzc0NsYXNzZXMubGFiZWw7XG5cbiAgICBsZXQgaXRlbUNsYXNzID1cbiAgICAgIHRoaXMuaGFzQ2VsbFRleHQgJiYgISF0aGlzLmNzc0NsYXNzZXMuY2VsbFxuICAgICAgICA/IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsICsgXCIgXCJcbiAgICAgICAgOiBcIlwiO1xuICAgIGl0ZW1DbGFzcyArPVxuICAgICAgY2VsbENsYXNzICtcbiAgICAgIChpc0NoZWNrZWQgPyBcIiBcIiArIGNlbGxTZWxlY3RlZENsYXNzIDogXCJcIikgK1xuICAgICAgKGlzRGlzYWJsZWQgPyBcIiBcIiArIGNlbGxEaXNhYmxlZENsYXNzIDogXCJcIikgK1xuICAgICAgKGFsbG93SG92ZXIgPyBcIiBcIiArIGl0ZW1Ib3ZlckNsYXNzIDogXCJcIik7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRRdWl6UXVlc3Rpb25Db3VudCgpIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXJbdGhpcy5yb3dzW2ldLnZhbHVlXSkpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0QW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldLnZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWVbcm93XSkgJiZcbiAgICAgICAgSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMuY29ycmVjdEFuc3dlcltyb3ddLCB2YWx1ZVtyb3ddKVxuICAgICAgKVxuICAgICAgICByZXMrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRWaXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhSb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4Um93TW9kZWw+KCk7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93LnZhbHVlKSkgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdGVNYXRyaXhSb3coXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHRoaXMuaWQgKyBcIl9cIiArIHJvdy52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xccy9nLCBcIl9cIiksXG4gICAgICAgICAgdmFsW3Jvdy52YWx1ZV1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCAmJiAhdGhpcy5maWx0ZXJlZFJvd3MpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZU1hdHJpeFJvdyhcbiAgICAgICAgICBuZXcgSXRlbVZhbHVlKG51bGwpLFxuICAgICAgICAgIHRoaXMubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJfXCIpLFxuICAgICAgICAgIHZhbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNvcnRWaXNpYmxlUm93cyhcbiAgICBhcnJheTogQXJyYXk8TWF0cml4Um93TW9kZWw+XG4gICk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5yb3dzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT09IFwicmFuZG9tXCIpXG4gICAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemVBcnJheTxNYXRyaXhSb3dNb2RlbD4oYXJyYXkpO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5zb3J0VmlzaWJsZVJvd3ModGhpcy5yb3dzKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uUm93cygpO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzUm93c09uU2V0KG5ld1Jvd3M6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0VmlzaWJsZVJvd3MobmV3Um93cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2aXNpYmxlIHJvd3MgYXMgbW9kZWwgb2JqZWN0cy5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNlbGxzKCk6IE1hdHJpeENlbGxzIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsc1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY2VsbHModmFsdWU6IE1hdHJpeENlbGxzKSB7XG4gICAgdGhpcy5jZWxscy5zZXRKc29uKHZhbHVlICYmIHZhbHVlLmdldEpzb24gPyB2YWx1ZS5nZXRKc29uKCkgOiBudWxsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0NlbGxUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jZWxscy5pc0VtcHR5O1xuICB9XG4gIHB1YmxpYyBzZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jZWxscy5zZXRDZWxsVGV4dChyb3csIGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFRleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxscy5nZXRDZWxsVGV4dChyb3csIGNvbHVtbik7XG4gIH1cbiAgcHVibGljIHNldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNlbGxzLnNldERlZmF1bHRDZWxsVGV4dChjb2x1bW4sIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbik7XG4gIH1cbiAgcHVibGljIGdldENlbGxEaXNwbGF5VGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGxzLmdldENlbGxEaXNwbGF5VGV4dChyb3csIGNvbHVtbik7XG4gIH1cbiAgcHJpdmF0ZSBlbXB0eUxvY2FsaXphYmxlU3RyaW5nID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5jZWxscy5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93LCBjb2x1bW4pO1xuICAgIHJldHVybiBsb2MgPyBsb2MgOiB0aGlzLmVtcHR5TG9jYWxpemFibGVTdHJpbmc7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKFxuICAgICAgKCFpc09uVmFsdWVDaGFuZ2VkIHx8IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApICYmXG4gICAgICB0aGlzLmhhc0Vycm9ySW5Sb3dzKClcbiAgICApIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBSZXF1aXJlZEluQWxsUm93c0Vycm9yKG51bGwsIHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvckluUm93cygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNBbGxSb3dSZXF1aXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcml2YXRlIGhhc1ZhbHVlc0luQWxsUm93cygpOiBib29sZWFuIHtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHJvd3NbaV0udmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiYgdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU1hdHJpeFJvdyhcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgZnVsbE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG4gICk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICB2YXIgcm93ID0gbmV3IE1hdHJpeFJvd01vZGVsKGl0ZW0sIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XG4gICAgdGhpcy5vbk1hdHJpeFJvd0NyZWF0ZWQocm93KTtcbiAgICByZXR1cm4gcm93O1xuICB9XG4gIHByb3RlY3RlZCBvbk1hdHJpeFJvd0NyZWF0ZWQocm93OiBNYXRyaXhSb3dNb2RlbCkge31cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB0aGlzLmlzUm93Q2hhbmdpbmcgfHwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1swXS52YWx1ZSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICB2YXIgcm93VmFsID0gdmFsW3Jvdy5uYW1lXTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHJvd1ZhbCkpIHJvd1ZhbCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udmFsdWUgPSByb3dWYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgdmFyIG5ld0tleSA9IGtleXNBc1RleHRcbiAgICAgICAgPyBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy5yb3dzLCBrZXkpXG4gICAgICAgIDoga2V5O1xuICAgICAgaWYgKCFuZXdLZXkpIG5ld0tleSA9IGtleTtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLmNvbHVtbnMsIHZhbHVlW2tleV0pO1xuICAgICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgcmVzW25ld0tleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKHJvd05hbWUgPT4ge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5yb3dzLmZpbHRlcihcbiAgICAgICAgICAocjogTWF0cml4Um93TW9kZWwpID0+IHIudmFsdWUgPT09IHJvd05hbWVcbiAgICAgICAgKVswXTtcbiAgICAgICAgdmFyIHJvd0RhdGFJdGVtID0gPGFueT57XG4gICAgICAgICAgbmFtZTogcm93TmFtZSxcbiAgICAgICAgICB0aXRsZTogISFyb3cgPyByb3cudGV4dCA6IFwicm93XCIsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlc1tyb3dOYW1lXSxcbiAgICAgICAgICBkaXNwbGF5VmFsdWU6IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZShcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMsXG4gICAgICAgICAgICB2YWx1ZXNbcm93TmFtZV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUoXG4gICAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyxcbiAgICAgICAgICB2YWx1ZXNbcm93TmFtZV1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaChjYWxjdWxhdGlvbiA9PiB7XG4gICAgICAgICAgICByb3dEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgaXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dEYXRhSXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgaWYgKCEhcm93LnZhbHVlKSB7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgcm93LnZhbHVlLFxuICAgICAgICAgIHRleHQ6IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIi5cIiArIHJvdy5jYWxjdWxhdGVkVGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgdmFyIHF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChwYXRoKTtcbiAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5jb2x1bW5zO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocXVlc3Rpb24pO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgaWYgKHRoaXMuaGFzUm93cykge1xuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChyb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfXCIgKyByb3dzWzBdLm5hbWUgKyBcIl9cIiArIDA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmUm93c0VtcHR5KSB7XG4gICAgICB0aGlzLnZpc2libGUgPVxuICAgICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgICAoIXRoaXMuZmlsdGVyZWRSb3dzIHx8IHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA+IDApO1xuICAgIH1cbiAgfVxuICAvL0lNYXRyaXhEYXRhXG4gIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7XG4gICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmhhc1Jvd3MpIHtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUocm93LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB7fTtcbiAgICAgIH1cbiAgICAgIG5ld1ZhbHVlW3Jvdy5uYW1lXSA9IHJvdy52YWx1ZTtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBnZXRDb3JyZWN0ZWRSb3dWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmNvbHVtbnNbaV0udmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuY29sdW1uc1tpXS52YWx1ZSkpXG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbaV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgIGtleXMucHVzaChcImNvbHVtbnNcIik7XG4gICAga2V5cy5wdXNoKFwicm93c1wiKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5zOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9jb2x1bW5cIik7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9yb3dcIik7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNlbGxzOmNlbGxzXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJjZWxsc1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzT3JkZXJcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW5pdGlhbFwiLFxuICAgICAgY2hvaWNlczogW1wiaW5pdGlhbFwiLCBcInJhbmRvbVwiXSxcbiAgICB9LFxuICAgIFwiaXNBbGxSb3dSZXF1aXJlZDpib29sZWFuXCIsXG4gICAgXCJoaWRlSWZSb3dzRW1wdHk6Ym9vbGVhblwiLFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4YmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCBuYW1lID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhNb2RlbChuYW1lKTtcbiAgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRSb3dzO1xuICBxLmNvbHVtbnMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENvbHVtcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBJTWF0cml4RHJvcGRvd25EYXRhLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICBwcml2YXRlIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIHN1cGVyKGRhdGEsIHZhbHVlKTtcbiAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQ7XG4gIH1cbn1cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHJvcGRvd24gcXVlc3Rpb24uIFlvdSBtYXkgdXNlIGEgZHJvcGRvd24sIGNoZWNrYm94LCByYWRpb2dyb3VwLCB0ZXh0IGFuZCBjb21tZW50IHF1ZXN0aW9ucyBhcyBhIGNlbGwgZWRpdG9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInJvd3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgc2VsZi5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIHNlbGYuZmlsdGVySXRlbXMoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duXCI7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHNob3cgaXQgb24gdGhlIGZpcnN0IGNvbHVtbiBmb3IgdGhlIHRvdGFsIHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdG90YWxUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsVGV4dFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxUZXh0XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUb3RhbFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidG90YWxUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBnZXRGb290ZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUb3RhbFRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4gd2lkdGggZm9yIHRoZSBmaXJzdCBjb2x1bW4sIHJvdyB0aXRsZSBjb2x1bW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93VGl0bGVXaWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd1RpdGxlV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dUaXRsZVdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3dUaXRsZVdpZHRoO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5yb3dzW2ldLnZhbHVlO1xuICAgICAgdmFyIHZhbCA9IHZhbHVlW3Jvd1ZhbHVlXTtcbiAgICAgIGlmICghdmFsKSBjb250aW51ZTtcbiAgICAgIGlmIChrZXlzQXNUZXh0KSB7XG4gICAgICAgIHZhciBkaXNwbGF5Um93VmFsdWUgPSBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoXG4gICAgICAgICAgdGhpcy5yb3dzLFxuICAgICAgICAgIHJvd1ZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIWRpc3BsYXlSb3dWYWx1ZSkge1xuICAgICAgICAgIHJvd1ZhbHVlID0gZGlzcGxheVJvd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAoPGFueT5yZXMpW3Jvd1ZhbHVlXSA9IHRoaXMuZ2V0Um93RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHJvd3NbaV0sIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0ID8gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29udGV4dCkgPiAtMSA6IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgaWYgKCFyb3cudmFsdWUpIGNvbnRpbnVlO1xuICAgICAgdmFyIHByZWZpeE5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZSgpICsgXCIuXCIgKyByb3cudmFsdWUgKyBcIi5cIjtcbiAgICAgIHZhciBwcmVmaXhUaXRsZSA9IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIi5cIiArIHJvdy5jYWxjdWxhdGVkVGV4dCArIFwiLlwiO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgY29sdW1uLm5hbWUsXG4gICAgICAgICAgdGV4dDogcHJlZml4VGl0bGUgKyBjb2x1bW4uZnVsbFRpdGxlLFxuICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICAgIGlmIChjb2x1bW4gPT0gY29udGV4dCkgY29udGludWU7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJyb3cuXCIgKyBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB0ZXh0OiBcInJvdy5cIiArIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsID0gbnVsbDtcbiAgICB2YXIgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShyb3dzLCBrZXkpKSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT0gbnVsbCkgbmV3VmFsID0ge307XG4gICAgICAgICg8YW55Pm5ld1ZhbClba2V5XSA9IHZhbFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+KCk7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzdWx0O1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSB2YWwgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcm93c1tpXS52YWx1ZSkgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhyb3dzW2ldLCB2YWxbcm93c1tpXS52YWx1ZV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICB2YWx1ZTogYW55XG4gICk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Sb3dNb2RlbChpdGVtLnZhbHVlLCBpdGVtLCB0aGlzLCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBrZXlzLnB1c2goXCJyb3dzXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4ZHJvcGRvd25cIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwicm93czppdGVtdmFsdWVbXVwiLFxuICAgIH0sXG4gICAgXCJyb3dzVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicm93VGl0bGVXaWR0aFwiLFxuICAgIHsgbmFtZTogXCJ0b3RhbFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RvdGFsVGV4dFwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdO1xuICBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQge1xuICBKc29uT2JqZWN0LFxuICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbixcbiAgSnNvbk9iamVjdFByb3BlcnR5LFxuICBTZXJpYWxpemVyLFxufSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCB9IGZyb20gXCIuL21hcnRpeEJhc2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5LFxuICBJU3VydmV5SW1wbCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIFN1cnZleUVycm9yLFxuICBJUHJvZ3Jlc3NJbmZvLFxuICBTdXJ2ZXlFbGVtZW50LFxuICBJUGFuZWwsXG4gIElXcmFwcGVyT2JqZWN0LFxufSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge1xuICBUZXh0UHJlUHJvY2Vzc29yVmFsdWUsXG4gIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IGdldEN1cnJlY3lDb2RlcyB9IGZyb20gXCIuL3F1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBBY3Rpb25CYXJJdGVtLCBJQWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERyb3Bkb3duRGF0YSB7XG4gIHZhbHVlOiBhbnk7XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApOiB2b2lkO1xuICBvblJvd0NoYW5naW5nKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55O1xuICBpc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nOiBib29sZWFuO1xuICBnZXRSb3dJbmRleChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogbnVtYmVyO1xuICBnZXRSb3dWYWx1ZShyb3dJbmRleDogbnVtYmVyKTogYW55O1xuICBjaGVja0lmVmFsdWVJblJvd0R1cGxpY2F0ZWQoXG4gICAgY2hlY2tlZFJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBib29sZWFuO1xuICBoYXNEZXRhaWxQYW5lbChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbjtcbiAgZ2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW47XG4gIHNldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHZhbDogYm9vbGVhbik6IHZvaWQ7XG4gIGNyZWF0ZVJvd0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBQYW5lbE1vZGVsO1xuICB2YWxpZGF0ZUNlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBTdXJ2ZXlFcnJvcjtcbiAgY29sdW1uczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+O1xuICBjcmVhdGVRdWVzdGlvbihcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb247XG4gIGdldExvY2FsZSgpOiBzdHJpbmc7XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb247XG4gIG9uVG90YWxWYWx1ZUNoYW5nZWQoKTogYW55O1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4Q29sdW1uT3duZXIgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciB7XG4gIGdldFJlcXVpcmVkVGV4dCgpOiBzdHJpbmc7XG4gIG9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogdm9pZDtcbiAgb25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiB2b2lkO1xuICBnZXRDZWxsVHlwZSgpOiBzdHJpbmc7XG4gIG9uQ29sdW1uQ2VsbFR5cGVDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiB2b2lkO1xufVxuXG5mdW5jdGlvbiBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oXG4gIGNlbGxRdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLFxuICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbiAgZGF0YTogYW55XG4pIHtcbiAgY2VsbFF1ZXN0aW9uLnN0b3JlT3RoZXJzQXNDb21tZW50ID0gISFxdWVzdGlvblxuICAgID8gcXVlc3Rpb24uc3RvcmVPdGhlcnNBc0NvbW1lbnRcbiAgICA6IGZhbHNlO1xuICBpZiAoXG4gICAgKCFjZWxsUXVlc3Rpb24uY2hvaWNlcyB8fCBjZWxsUXVlc3Rpb24uY2hvaWNlcy5sZW5ndGggPT0gMCkgJiZcbiAgICBjZWxsUXVlc3Rpb24uY2hvaWNlc0J5VXJsLmlzRW1wdHlcbiAgKSB7XG4gICAgY2VsbFF1ZXN0aW9uLmNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzO1xuICB9XG4gIGlmICghY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XG4gICAgY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oZGF0YS5nZXRUZXh0UHJvY2Vzc29yKCkpO1xuICB9XG59XG5leHBvcnQgdmFyIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMgPSB7XG4gIGRyb3Bkb3duOiB7XG4gICAgcHJvcGVydGllczogW1xuICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICBcImNob2ljZXNPcmRlclwiLFxuICAgICAgXCJjaG9pY2VzQnlVcmxcIixcbiAgICAgIFwib3B0aW9uc0NhcHRpb25cIixcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBcImNob2ljZXNWaXNpYmxlSWZcIixcbiAgICBdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge1xuICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XG4gICAgICBpZiAoXG4gICAgICAgICEhY2VsbFF1ZXN0aW9uLmxvY09wdGlvbnNDYXB0aW9uICYmXG4gICAgICAgIGNlbGxRdWVzdGlvbi5sb2NPcHRpb25zQ2FwdGlvbi5pc0VtcHR5ICYmXG4gICAgICAgICFxdWVzdGlvbi5sb2NPcHRpb25zQ2FwdGlvbi5pc0VtcHR5XG4gICAgICApIHtcbiAgICAgICAgY2VsbFF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uID0gcXVlc3Rpb24ub3B0aW9uc0NhcHRpb247XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICBcImNob2ljZXNcIixcbiAgICAgIFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICBcImNob2ljZXNCeVVybFwiLFxuICAgICAgXCJvdGhlclRleHRcIixcbiAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgICAgXCJoYXNTZWxlY3RBbGxcIixcbiAgICAgIFwiaGFzTm9uZVwiLFxuICAgIF0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7XG4gICAgICBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKTtcbiAgICAgIGNlbGxRdWVzdGlvbi5jb2xDb3VudCA9XG4gICAgICAgIGNvbHVtbi5jb2xDb3VudCA+IC0xID8gY29sdW1uLmNvbENvdW50IDogcXVlc3Rpb24uY29sdW1uQ29sQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgcmFkaW9ncm91cDoge1xuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIFwiY2hvaWNlc1wiLFxuICAgICAgXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgIFwiY2hvaWNlc0J5VXJsXCIsXG4gICAgICBcIm90aGVyVGV4dFwiLFxuICAgICAgXCJjaG9pY2VzVmlzaWJsZUlmXCIsXG4gICAgXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHtcbiAgICAgIG9uVXBkYXRlU2VsZWN0QmFzZUNlbGxRdWVzdGlvbihjZWxsUXVlc3Rpb24sIGNvbHVtbiwgcXVlc3Rpb24sIGRhdGEpO1xuICAgICAgY2VsbFF1ZXN0aW9uLmNvbENvdW50ID1cbiAgICAgICAgY29sdW1uLmNvbENvdW50ID4gLTEgPyBjb2x1bW4uY29sQ291bnQgOiBxdWVzdGlvbi5jb2x1bW5Db2xDb3VudDtcbiAgICB9LFxuICB9LFxuICB0ZXh0OiB7XG4gICAgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIiwgXCJpbnB1dFR5cGVcIiwgXCJtYXhMZW5ndGhcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJzdGVwXCJdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge30sXG4gIH0sXG4gIGNvbW1lbnQ6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJwbGFjZUhvbGRlclwiLCBcInJvd3NcIiwgXCJtYXhMZW5ndGhcIl0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7fSxcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIHByb3BlcnRpZXM6IFtcInJlbmRlckFzXCIsIFwiZGVmYXVsdFZhbHVlXCJdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge1xuICAgICAgY2VsbFF1ZXN0aW9uLnNob3dUaXRsZSA9IHRydWU7XG4gICAgICBjZWxsUXVlc3Rpb24ucmVuZGVyQXMgPSBjb2x1bW4ucmVuZGVyQXM7XG4gICAgfSxcbiAgfSxcbiAgZXhwcmVzc2lvbjoge1xuICAgIHByb3BlcnRpZXM6IFtcImV4cHJlc3Npb25cIiwgXCJkaXNwbGF5U3R5bGVcIiwgXCJjdXJyZW5jeVwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHt9LFxuICB9LFxuICByYXRpbmc6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJyYXRlVmFsdWVzXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ29sdW1uIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZU93bmVyLCBJV3JhcHBlck9iamVjdCB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29sdW1uVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzKSB7XG4gICAgICByZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgdGVtcGxhdGVRdWVzdGlvblZhbHVlOiBRdWVzdGlvbjtcbiAgcHJpdmF0ZSBjb2xPd25lclZhbHVlOiBJTWF0cml4Q29sdW1uT3duZXIgPSBudWxsO1xuICBwcml2YXRlIGluZGV4VmFsdWUgPSAtMTtcbiAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfaGFzVmlzaWJsZUNlbGwgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwidG90YWxGb3JtYXRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5kb1Nob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMudXBkYXRlVGVtcGxhdGVRdWVzdGlvbigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgaWYgKHRpdGxlKSB0aGlzLnRpdGxlID0gdGl0bGU7XG4gIH1cbiAgcHVibGljIGdldE9yaWdpbmFsT2JqKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb247XG4gIH1cbiAgZ2V0Q2xhc3NOYW1lUHJvcGVydHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjZWxsVHlwZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb2xPd25lciA/ICg8YW55PnRoaXMuY29sT3duZXIpLnN1cnZleSA6IG51bGw7XG4gIH1cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ub25HZXRTdXJ2ZXkgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICB9O1xuICB9XG4gIGdldER5bmFtaWNQcm9wZXJ0eU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjZWxsVHlwZVwiO1xuICB9XG4gIGdldER5bmFtaWNUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FsY0NlbGxRdWVzdGlvblR5cGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbE93bmVyKCk6IElNYXRyaXhDb2x1bW5Pd25lciB7XG4gICAgcmV0dXJuIHRoaXMuY29sT3duZXJWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbE93bmVyKHZhbHVlOiBJTWF0cml4Q29sdW1uT3duZXIpIHtcbiAgICB0aGlzLmNvbE93bmVyVmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMubG9jVGl0bGUuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBhZGRVc2VkTG9jYWxlcyhsb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgc3VwZXIuYWRkVXNlZExvY2FsZXMobG9jYWxlcyk7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXhWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0SW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLmluZGV4VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNlbGxUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2VsbFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlVGVtcGxhdGVRdWVzdGlvbigpO1xuICAgIGlmICghIXRoaXMuY29sT3duZXIpIHtcbiAgICAgIHRoaXMuY29sT3duZXIub25Db2x1bW5DZWxsVHlwZUNoYW5nZWQodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVRdWVzdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZTtcbiAgfVxuICBwdWJsaWMgc2V0SXNWaXNpYmxlKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzVmlzaWJsZSA9IG5ld1ZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1Zpc2libGVDZWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNWaXNpYmxlQ2VsbDtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc1Zpc2libGVDZWxsKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1Zpc2libGVDZWxsID0gbmV3VmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm5hbWU7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm5hbWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi50aXRsZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jVGl0bGU7XG4gIH1cbiAgcHVibGljIGdldCBmdWxsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS50ZXh0T3JIdG1sO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQ7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5pc1JlcXVpcmVkID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZFRleHQ7XG4gIH1cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZEVycm9yVGV4dCA9IHZhbDtcbiAgfVxuICBnZXQgbG9jUmVxdWlyZWRFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlYWRPbmx5O1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlYWRPbmx5ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5oYXNPdGhlcjtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5oYXNPdGhlciA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUlmO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZpc2libGVJZiA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGVuYWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5lbmFibGVJZjtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuYWJsZUlmID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRJZjtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRJZiA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVW5pcXVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1VuaXF1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzVW5pcXVlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVW5pcXVlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93SW5NdWx0aXBsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dJbk11bHRpcGxlQ29sdW1uc1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SW5NdWx0aXBsZUNvbHVtbnModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFtcImNoZWNrYm94XCIsIFwicmFkaW9ncm91cFwiXS5pbmRleE9mKHRoaXMuY2VsbFR5cGUpID4gLTE7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dJbk11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93SW5NdWx0aXBsZUNvbHVtbnMgJiYgdGhpcy5pc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnM7XG4gIH1cbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZhbGlkYXRvcnMgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxUeXBlXCIsIFwibm9uZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsVHlwZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgdG90YWxFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsRXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsRXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG90YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxUeXBlICE9IFwibm9uZVwiIHx8ICEhdGhpcy50b3RhbEV4cHJlc3Npb247XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsRm9ybWF0XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxGb3JtYXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsRm9ybWF0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RvdGFsRm9ybWF0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsRm9ybWF0XCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyQXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyQXNcIik7XG4gIH1cbiAgcHVibGljIHNldCByZW5kZXJBcyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlckFzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbERpc3BsYXlTdHlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbERpc3BsYXlTdHlsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsRGlzcGxheVN0eWxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxEaXNwbGF5U3R5bGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsQ3VycmVuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxDdXJyZW5jeVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsQ3VycmVuY3kodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoZ2V0Q3VycmVjeUNvZGVzKCkuaW5kZXhPZih2YWwpIDwgMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsQ3VycmVuY3lcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCBjb2xDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiA0KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUNlbGxRdWVzdGlvbihkYXRhOiBhbnkpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHFUeXBlID0gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZSgpO1xuICAgIHZhciBjZWxsUXVlc3Rpb24gPSA8UXVlc3Rpb24+dGhpcy5jcmVhdGVOZXdRdWVzdGlvbihxVHlwZSk7XG4gICAgdGhpcy5jYWxsT25DZWxsUXVlc3Rpb25VcGRhdGUoY2VsbFF1ZXN0aW9uLCBkYXRhKTtcbiAgICByZXR1cm4gY2VsbFF1ZXN0aW9uO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb24oXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBkYXRhOiBhbnksXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIHRoaXMuc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKGNlbGxRdWVzdGlvbiwgb25VcGRhdGVKc29uKTtcbiAgICB0aGlzLmNhbGxPbkNlbGxRdWVzdGlvblVwZGF0ZShjZWxsUXVlc3Rpb24sIGRhdGEpO1xuICB9XG4gIHByaXZhdGUgY2FsbE9uQ2VsbFF1ZXN0aW9uVXBkYXRlKGNlbGxRdWVzdGlvbjogUXVlc3Rpb24sIGRhdGE6IGFueSkge1xuICAgIHZhciBxVHlwZSA9IGNlbGxRdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgdmFyIHFEZWZpbml0aW9uID0gKDxhbnk+bWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcylbcVR5cGVdO1xuICAgIGlmIChxRGVmaW5pdGlvbiAmJiBxRGVmaW5pdGlvbltcIm9uQ2VsbFF1ZXN0aW9uVXBkYXRlXCJdKSB7XG4gICAgICBxRGVmaW5pdGlvbltcIm9uQ2VsbFF1ZXN0aW9uVXBkYXRlXCJdKFxuICAgICAgICBjZWxsUXVlc3Rpb24sXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuY29sT3duZXIsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGRlZmF1bHRDZWxsVHlwZUNoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGNDZWxsUXVlc3Rpb25UeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2VsbFR5cGUgIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy5jZWxsVHlwZTtcbiAgICBpZiAodGhpcy5jb2xPd25lcikgcmV0dXJuIHRoaXMuY29sT3duZXIuZ2V0Q2VsbFR5cGUoKTtcbiAgICByZXR1cm4gc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCkge1xuICAgIHZhciBwcmV2Q2VsbFR5cGUgPSB0aGlzLnRlbXBsYXRlUXVlc3Rpb25cbiAgICAgID8gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmdldFR5cGUoKVxuICAgICAgOiBcIlwiO1xuICAgIHZhciBjdXJDZWxsVHlwZSA9IHRoaXMuY2FsY0NlbGxRdWVzdGlvblR5cGUoKTtcbiAgICBpZiAoY3VyQ2VsbFR5cGUgPT09IHByZXZDZWxsVHlwZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnRlbXBsYXRlUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucmVtb3ZlUHJvcGVydGllcyhwcmV2Q2VsbFR5cGUpO1xuICAgIH1cbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlTmV3UXVlc3Rpb24oY3VyQ2VsbFR5cGUpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NPd25lciA9IHRoaXM7XG4gICAgdGhpcy5hZGRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChmdW5jdGlvbihzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICAgIG9wdGlvbnMubmFtZSxcbiAgICAgICAgb3B0aW9ucy5vbGRWYWx1ZSxcbiAgICAgICAgb3B0aW9ucy5uZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uaXNDb250ZW50RWxlbWVudCA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ub25HZXRTdXJ2ZXkgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1F1ZXN0aW9uKGNlbGxUeXBlOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoY2VsbFR5cGUpO1xuICAgIGlmICghcXVlc3Rpb24pIHtcbiAgICAgIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBxdWVzdGlvbi5sb2FkaW5nT3duZXIgPSB0aGlzO1xuICAgIHRoaXMuc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uUHJvcGVydGllcyhcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlUXVlc3Rpb24pIHtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLCB0cnVlKTtcbiAgICAgIGlmIChvblVwZGF0ZUpzb24pIHtcbiAgICAgICAgb25VcGRhdGVKc29uKGpzb24pO1xuICAgICAgfVxuICAgICAganNvbi50eXBlID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCBxdWVzdGlvbik7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIGlmICghU2VyaWFsaXplci5oYXNPcmlnaW5hbFByb3BlcnR5KHRoaXMsIG5hbWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtblByb3BlcnR5Q2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZG9TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmNvbE93bmVyICE9IG51bGwgJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuY29sT3duZXIub25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnRpZXMoY3VyQ2VsbFR5cGU6IHN0cmluZyk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBTZXJpYWxpemVyLmdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmoodGhpcywgY3VyQ2VsbFR5cGUpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUHJvcGVydGllcyhjdXJDZWxsVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoY3VyQ2VsbFR5cGUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgZGVsZXRlICg8YW55PnRoaXMpW3Byb3AubmFtZV07XG4gICAgICBpZiAocHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgZGVsZXRlICg8YW55PnRoaXMpW3Byb3Auc2VyaWFsaXphdGlvblByb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlOiBzdHJpbmcpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoY3VyQ2VsbFR5cGUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgdGhpcy5hZGRQcm9wZXJ0eShxdWVzdGlvbiwgcHJvcC5uYW1lLCBmYWxzZSk7XG4gICAgICBpZiAocHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShxdWVzdGlvbiwgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHksIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZFByb3BlcnR5KFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBwcm9wTmFtZTogc3RyaW5nLFxuICAgIGlzUmVhZE9ubHk6IGJvb2xlYW5cbiAgKSB7XG4gICAgdmFyIGRlc2MgPSB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKDxhbnk+cXVlc3Rpb24pW3Byb3BOYW1lXTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICg8YW55PmRlc2MpW1wic2V0XCJdID0gZnVuY3Rpb24odjogYW55KSB7XG4gICAgICAgICg8YW55PnF1ZXN0aW9uKVtwcm9wTmFtZV0gPSB2O1xuICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BOYW1lLCBkZXNjKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgcHJpdmF0ZSBxdWVzdGlvblZhbHVlOiBRdWVzdGlvbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgcHVibGljIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcHVibGljIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGFcbiAgKSB7XG4gICAgdGhpcy5xdWVzdGlvblZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvbihjb2x1bW4sIHJvdywgZGF0YSk7XG4gICAgdGhpcy5xdWVzdGlvblZhbHVlLnVwZGF0ZUN1c3RvbVdpZGdldCgpO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gZGF0YS5jcmVhdGVRdWVzdGlvbih0aGlzLnJvdywgdGhpcy5jb2x1bW4pO1xuICAgIHJlcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBkYXRhLnZhbGlkYXRlQ2VsbChyb3csIGNvbHVtbi5uYW1lLCByb3cudmFsdWUpO1xuICAgIH07XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uZ2V0UHJvcGVydGllcyhjb2x1bW4uZ2V0VHlwZSgpKS5mb3JFYWNoKFxuICAgICAgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuICAgICAgICBpZiAoKDxhbnk+Y29sdW1uKVtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXNbcHJvcGVydHlOYW1lXSA9ICg8YW55PmNvbHVtbilbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMucXVlc3Rpb24ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duVG90YWxDZWxsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgcHVibGljIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcHVibGljIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGFcbiAgKSB7XG4gICAgc3VwZXIoY29sdW1uLCByb3csIGRhdGEpO1xuICAgIHRoaXMudXBkYXRlQ2VsbFF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJleHByZXNzaW9uXCIpO1xuICAgIHJlcy5zZXRTdXJ2ZXlJbXBsKHJvdyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVDZWxsUXVlc3Rpb24oKTtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb24oKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NDYWxjdWxhdGlvbigpO1xuICAgIHRoaXMuY29sdW1uLnVwZGF0ZUNlbGxRdWVzdGlvbih0aGlzLnF1ZXN0aW9uLCBudWxsLCBmdW5jdGlvbihqc29uKSB7XG4gICAgICBkZWxldGUganNvbltcImRlZmF1bHRWYWx1ZVwiXTtcbiAgICB9KTtcbiAgICB0aGlzLnF1ZXN0aW9uLmV4cHJlc3Npb24gPSB0aGlzLmdldFRvdGFsRXhwcmVzc2lvbigpO1xuICAgIHRoaXMucXVlc3Rpb24uZm9ybWF0ID0gdGhpcy5jb2x1bW4udG90YWxGb3JtYXQ7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW5jeSA9IHRoaXMuY29sdW1uLnRvdGFsQ3VycmVuY3k7XG4gICAgdGhpcy5xdWVzdGlvbi5kaXNwbGF5U3R5bGUgPSB0aGlzLmNvbHVtbi50b3RhbERpc3BsYXlTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9uLm1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29sdW1uLnRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICAgIHRoaXMucXVlc3Rpb24ubWluaW11bUZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2x1bW4udG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgdGhpcy5xdWVzdGlvbi51bmxvY0NhbGN1bGF0aW9uKCk7XG4gIH1cbiAgcHVibGljIGdldFRvdGFsRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbikgcmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbjtcbiAgICBpZiAodGhpcy5jb2x1bW4udG90YWxUeXBlID09IFwibm9uZVwiKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgZnVuTmFtZSA9IHRoaXMuY29sdW1uLnRvdGFsVHlwZSArIFwiSW5BcnJheVwiO1xuICAgIGlmICghRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmhhc0Z1bmN0aW9uKGZ1bk5hbWUpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gZnVuTmFtZSArIFwiKHtzZWxmfSwgJ1wiICsgdGhpcy5jb2x1bW4ubmFtZSArIFwiJylcIjtcbiAgfVxufVxuXG5jbGFzcyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IgZXh0ZW5kcyBRdWVzdGlvblRleHRQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBwcm90ZWN0ZWQgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5yb3cuZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJvdy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnJvdy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DdXN0b21Qcm9jZXNzVGV4dCh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5JbmRleFZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd0luZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYWx1ZVZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMucm93LnJvd05hbWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCwgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgc3RhdGljIFJvd1ZhcmlhYmxlTmFtZSA9IFwicm93XCI7XG4gIHB1YmxpYyBzdGF0aWMgT3duZXJWYXJpYWJsZU5hbWUgPSBcInNlbGZcIjtcbiAgcHVibGljIHN0YXRpYyBJbmRleFZhcmlhYmxlTmFtZSA9IFwicm93SW5kZXhcIjtcbiAgcHVibGljIHN0YXRpYyBSb3dWYWx1ZVZhcmlhYmxlTmFtZSA9IFwicm93VmFsdWVcIjtcblxuICBwcml2YXRlIHN0YXRpYyBpZENvdW50ZXI6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhO1xuICBwcm90ZWN0ZWQgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yO1xuICBwcml2YXRlIGRldGFpbFBhbmVsVmFsdWU6IFBhbmVsTW9kZWwgPSBudWxsO1xuXG4gIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xuICBwdWJsaWMgc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXModmFsdWUpO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IoXG4gICAgICB0aGlzLFxuICAgICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuUm93VmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICB0aGlzLnNob3dIaWRlRGV0YWlsUGFuZWxDbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0hpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH07XG4gICAgdGhpcy5pZFZhbHVlID0gTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuZ2V0SWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDogYW55ID0ge307XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAoIXF1ZXN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgICByZXN1bHRbcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCldID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICEhcXVlc3Rpb24uY29tbWVudCAmJlxuICAgICAgICAhIXRoaXMuZ2V0U3VydmV5KCkgJiZcbiAgICAgICAgdGhpcy5nZXRTdXJ2ZXkoKS5zdG9yZU90aGVyc0FzQ29tbWVudFxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdFtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXhdID1cbiAgICAgICAgICBxdWVzdGlvbi5jb21tZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBoYXNQYW5lbCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRhdGEuaGFzRGV0YWlsUGFuZWwodGhpcyk7XG4gIH1cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGV0YWlsUGFuZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZGV0YWlsUGFuZWwgPyB0aGlzLmRldGFpbFBhbmVsLmlkIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGV0YWlsUGFuZWxTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyh0aGlzKSA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLmRhdGEuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodGhpcywgdmFsKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzaG93SGlkZURldGFpbFBhbmVsKCkge1xuICAgIGlmICh0aGlzLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICB0aGlzLmhpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dEZXRhaWxQYW5lbCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd0RldGFpbFBhbmVsKCkge1xuICAgIHRoaXMuZW5zdXJlRGV0YWlsUGFuZWwoKTtcbiAgICBpZiAoIXRoaXMuZGV0YWlsUGFuZWxWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodHJ1ZSk7XG4gIH1cbiAgcHVibGljIGhpZGVEZXRhaWxQYW5lbChkZXN0cm95UGFuZWw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcoZmFsc2UpO1xuICAgIGlmIChkZXN0cm95UGFuZWwpIHtcbiAgICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZW5zdXJlRGV0YWlsUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuaXNDcmVhdGluZ0RldGFpbFBhbmVsKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbFZhbHVlIHx8ICF0aGlzLmhhc1BhbmVsIHx8ICF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IHRydWU7XG4gICAgdGhpcy5kZXRhaWxQYW5lbFZhbHVlID0gdGhpcy5kYXRhLmNyZWF0ZVJvd0RldGFpbFBhbmVsKHRoaXMpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmRldGFpbFBhbmVsVmFsdWUucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRSb3dWYWx1ZSh0aGlzLmRhdGEuZ2V0Um93SW5kZXgodGhpcykpO1xuICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gcXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpO1xuICAgICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRldGFpbFBhbmVsVmFsdWUuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICB0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCA9IGZhbHNlO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIGFsbFZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgcm93OiBhbGxWYWx1ZXMgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gYWxsVmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IGFsbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSwgcm93OiB0aGlzIH07XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLk93bmVyVmFyaWFibGVOYW1lXSA9IHRoaXMuZGF0YS52YWx1ZTtcbiAgICB9XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLkluZGV4VmFyaWFibGVOYW1lXSA9IHRoaXMucm93SW5kZXg7XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhbHVlVmFyaWFibGVOYW1lXSA9IHRoaXMucm93TmFtZTtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhcmlhYmxlTmFtZV0gPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy5jZWxsc1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgdGhpcy5kZXRhaWxQYW5lbC5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWUoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZSk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpcy5nZXRDZWxsVmFsdWUodmFsdWUsIHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICAgIHZhciBjb21tZW50ID0gISF2YWx1ZVxuICAgICAgICA/IHZhbHVlW3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF1cbiAgICAgICAgOiBcIlwiO1xuICAgICAgaWYgKGNvbW1lbnQgPT0gdW5kZWZpbmVkKSBjb21tZW50ID0gXCJcIjtcbiAgICAgIHF1ZXN0aW9uLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh2YWwpO1xuICAgICAgaWYgKCEhY29tbWVudCB8fCBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMob2xkQ29tbWVudCwgcXVlc3Rpb24uY29tbWVudCkpIHtcbiAgICAgICAgcXVlc3Rpb24udXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoY29tbWVudCk7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZCh2YWwpO1xuICAgIH1cbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICByZXR1cm4gKDxhbnk+c3VydmV5KS5nZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2gsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZXNIYXNoW2tleV07XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgcmV0dXJuICEhcXVlc3Rpb24gPyBxdWVzdGlvbi52YWx1ZSA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3Q29sdW1uVmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld0NvbHVtblZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge31cbiAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIHJldHVybiAhIXF1ZXN0aW9uID8gcXVlc3Rpb24uY29tbWVudCA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nLCBsb2NOb3RpZmljYXRpb246IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld1ZhbHVlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQ29yZShuYW1lOiBzdHJpbmcsIG5ld0NvbHVtblZhbHVlOiBhbnksIGlzQ29tbWVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZE5hbWUgPSBpc0NvbW1lbnQgPyBuYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeCA6IG5hbWU7XG4gICAgdmFyIGNoYW5nZWRWYWx1ZSA9IGlzQ29tbWVudCA/IHRoaXMuZ2V0Q29tbWVudChuYW1lKSA6IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgdmFyIGNoYW5nZWRRdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgdmFyIGNoYW5naW5nVmFsdWUgPSB0aGlzLmRhdGEub25Sb3dDaGFuZ2luZyh0aGlzLCBjaGFuZ2VkTmFtZSwgbmV3VmFsdWUpO1xuICAgIGlmIChcbiAgICAgICEhY2hhbmdlZFF1ZXN0aW9uICYmXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKGNoYW5naW5nVmFsdWUsIGNoYW5nZWRWYWx1ZSlcbiAgICApIHtcbiAgICAgIGlmIChpc0NvbW1lbnQpIHtcbiAgICAgICAgY2hhbmdlZFF1ZXN0aW9uLmNvbW1lbnQgPSBjaGFuZ2luZ1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlZFF1ZXN0aW9uLnZhbHVlID0gY2hhbmdpbmdWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRhdGEuaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZyAmJlxuICAgICAgICB0aGlzLmhhc1F1ZXN0b25FcnJvcihjaGFuZ2VkUXVlc3Rpb24pXG4gICAgICApXG4gICAgICAgIHJldHVybjtcbiAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGNoYW5nZWROYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgbmV3Q29sdW1uVmFsdWUgPT0gbnVsbCAmJiAhY2hhbmdlZFF1ZXN0aW9uXG4gICAgICApO1xuICAgICAgdGhpcy5vbkFueVZhbHVlQ2hhbmdlZChNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc1F1ZXN0b25FcnJvcihxdWVzdGlvbjogUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgcXVlc3Rpb24uaGFzRXJyb3JzKHRydWUsIHtcbiAgICAgICAgaXNPblZhbHVlQ2hhbmdlZDogIXRoaXMuZGF0YS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nLFxuICAgICAgfSlcbiAgICApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocXVlc3Rpb24uaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWUocXVlc3Rpb24ubmFtZSk7XG4gICAgaWYgKCFjZWxsIHx8ICFjZWxsLmNvbHVtbiB8fCAhY2VsbC5jb2x1bW4uaXNVbmlxdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNoZWNrSWZWYWx1ZUluUm93RHVwbGljYXRlZCh0aGlzLCBxdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIGdldCBpc0VtcHR5KCkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsKSB7XG4gICAgICBpZiAodmFsW2tleV0gIT09IHVuZGVmaW5lZCAmJiB2YWxba2V5XSAhPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeUNvbHVtbihjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogUXVlc3Rpb24ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2VsbHNbaV0uY29sdW1uID09IGNvbHVtbikgcmV0dXJuIHRoaXMuY2VsbHNbaV0ucXVlc3Rpb247XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2VsbEJ5Q29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBNYXRyaXhEcm9wZG93bkNlbGwge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUgPT0gY29sdW1uTmFtZSkgcmV0dXJuIHRoaXMuY2VsbHNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWUoY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuICEhY2VsbCA/IGNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlczogQXJyYXk8UXVlc3Rpb24+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaCh0aGlzLmNlbGxzW2ldLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgdmFyIGRldGFpbFF1ZXN0aW9ucyA9ICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwucXVlc3Rpb25zIDogW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXRhaWxRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKGRldGFpbFF1ZXN0aW9uc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShuYW1lKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgcmV0dXJuICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbnNCeU5hbWUobmFtZTogc3RyaW5nKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgbGV0IHEgPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgIGlmICghIXEpIHJlcy5wdXNoKHEpO1xuICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWwpIHtcbiAgICAgIHEgPSB0aGlzLmRldGFpbFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgaWYgKCEhcSkgcmVzLnB1c2gocSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICAgID8gdGhpcy5kYXRhLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGNvbHVtbk5hbWUsIHRoaXMpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKHZhbDogYW55KSB7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShrZXkpO1xuICAgICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICAgIHZhciBxVmFsID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgIHF1ZXN0aW9uLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHFWYWwsIHF1ZXN0aW9uLnZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBxdWVzdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShrZXkpICYmXG4gICAgICAgICAga2V5LmluZGV4T2Yoc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgpIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGtleSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jZWxsc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLmRldGFpbFBhbmVsKSB7XG4gICAgICB0aGlzLmRldGFpbFBhbmVsLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkNoYW5nZWQoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNlbGxzW2ldLmNvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2VsbE9uQ29sdW1uQ2hhbmdlZCh0aGlzLmNlbGxzW2ldLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIG9uUXVlc3Rpb25SZWFkT25seUNoYW5nZWQocGFyZW50SXNSZWFkT25seTogYm9vbGVhbikge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnJlYWRPbmx5ID0gcGFyZW50SXNSZWFkT25seTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICBmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sXG4gICAgcmVjOiBhbnksXG4gICAgcmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9yczogKCkgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgdmFyIGNlbGxzID0gdGhpcy5jZWxscztcbiAgICBpZiAoIWNlbGxzKSByZXR1cm4gcmVzO1xuICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCBjZWxscy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgIGlmICghY2VsbHNbY29sSW5kZXhdKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgIGlmICghcXVlc3Rpb24gfHwgIXF1ZXN0aW9uLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgcXVlc3Rpb24ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgIH07XG4gICAgICBpZiAoISFyZWMgJiYgcmVjLmlzT25WYWx1ZUNoYW5nZWQgPT09IHRydWUgJiYgcXVlc3Rpb24uaXNFbXB0eSgpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJlcyA9IHF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNQYW5lbCkge1xuICAgICAgdGhpcy5lbnN1cmVEZXRhaWxQYW5lbCgpO1xuICAgICAgdmFyIHBhbmVsSGFzRXJyb3IgPSB0aGlzLmRldGFpbFBhbmVsLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZhbHNlLCByZWMpO1xuICAgICAgaWYgKCFyZWMuaGlkZUVycm9yZWRQYW5lbCAmJiBwYW5lbEhhc0Vycm9yICYmIGZpcmVDYWxsYmFjaykge1xuICAgICAgICBpZiAocmVjLmlzU2luZ2xlRGV0YWlsUGFuZWwpIHtcbiAgICAgICAgICByZWMuaGlkZUVycm9yZWRQYW5lbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RGV0YWlsUGFuZWwoKTtcbiAgICAgIH1cbiAgICAgIHJlcyA9IHBhbmVsSGFzRXJyb3IgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIGNlbGwucXVlc3Rpb25bbmFtZV0gPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGRDZWxscyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmRhdGEuY29sdW1ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2x1bW4gPSBjb2x1bW5zW2ldO1xuICAgICAgaWYgKCFjb2x1bW4uaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHZhciBjZWxsID0gdGhpcy5jcmVhdGVDZWxsKGNvbHVtbik7XG4gICAgICB0aGlzLmNlbGxzLnB1c2goY2VsbCk7XG4gICAgICB2YXIgY2VsbFZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUodmFsdWUsIGNvbHVtbi5uYW1lKTtcbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkoY2VsbFZhbHVlKSkge1xuICAgICAgICBjZWxsLnF1ZXN0aW9uLnZhbHVlID0gY2VsbFZhbHVlO1xuICAgICAgICB2YXIgY29tbWVudEtleSA9IGNvbHVtbi5uYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeDtcbiAgICAgICAgaWYgKCEhdmFsdWUgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlW2NvbW1lbnRLZXldKSkge1xuICAgICAgICAgIGNlbGwucXVlc3Rpb24uY29tbWVudCA9IHZhbHVlW2NvbW1lbnRLZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGdldENlbGxWYWx1ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iailcbiAgICAgIHJldHVybiBTZXJpYWxpemVyLmdldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBuYW1lKTtcbiAgICByZXR1cm4gISF2YWx1ZSA/IHZhbHVlW25hbWVdIDogdW5kZWZpbmVkO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDZWxsKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBNYXRyaXhEcm9wZG93bkNlbGwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25DZWxsKGNvbHVtbiwgdGhpcywgdGhpcy5kYXRhKTtcbiAgfVxuICBnZXRTdXJ2ZXlEYXRhKCk6IElTdXJ2ZXlEYXRhIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBnZXRTdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRTdXJ2ZXkoKSA6IG51bGw7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3NvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFJvd0luZGV4KHRoaXMpICsgMSA6IC0xO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdGluZ09iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nT2JqVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBvbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQ6IChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBlZGl0aW5nT2JqVmFsdWU6IEJhc2U7XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikge1xuICAgICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZShcbiAgICAgICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWRcbiAgICAgICk7XG4gICAgICB0aGlzLmVkaXRpbmdPYmpWYWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc3Vic2NyaWJlVG9DaGFuZ2VzKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5nZXRUeXBlIHx8ICF2YWx1ZS5vblByb3BlcnR5Q2hhbmdlZCkgcmV0dXJuO1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5lZGl0aW5nT2JqKSByZXR1cm47XG4gICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSA8QmFzZT52YWx1ZTtcbiAgICB0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZCA9IChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVPblNldFZhbHVlKG9wdGlvbnMubmFtZSwgb3B0aW9ucy5uZXdWYWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZU9uU2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgbGV0IHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lKG5hbWUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG59XG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Ub3RhbFJvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICBjb25zdHJ1Y3RvcihkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhKSB7XG4gICAgc3VwZXIoZGF0YSwgbnVsbCk7XG4gICAgdGhpcy5idWlsZENlbGxzKG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDZWxsKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBNYXRyaXhEcm9wZG93bkNlbGwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Ub3RhbENlbGwoY29sdW1uLCB0aGlzLCB0aGlzLmRhdGEpO1xuICB9XG4gIHB1YmxpYyBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLmRhdGEgJiYgIXRoaXMuaXNTZXR0aW5nVmFsdWUpIHtcbiAgICAgIHRoaXMuZGF0YS5vblRvdGFsVmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIHByZXZWYWx1ZTtcbiAgICBkbyB7XG4gICAgICBwcmV2VmFsdWUgPSBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSB3aGlsZSAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhwcmV2VmFsdWUsIHRoaXMudmFsdWUpICYmIGNvdW50ZXIgPCAzKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQ2VsbE9uQ29sdW1uQ2hhbmdlZChcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgKDxNYXRyaXhEcm9wZG93blRvdGFsQ2VsbD5jZWxsKS51cGRhdGVDZWxsUXVlc3Rpb24oKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gIHByaXZhdGUgc3RhdGljIGNvdW50ZXIgPSAxO1xuICBwcml2YXRlIGlkVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBpdGVtVmFsdWU6IEl0ZW1WYWx1ZTtcbiAgcHVibGljIG1pbldpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgd2lkdGg6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBsb2NUaXRsZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHB1YmxpYyBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGw7XG4gIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uO1xuICBwdWJsaWMgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZTtcbiAgcHVibGljIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgcHVibGljIGlzUmVtb3ZlUm93OiBib29sZWFuO1xuICBwdWJsaWMgY2hvaWNlSW5kZXg6IG51bWJlcjtcbiAgcHVibGljIG1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgcHVibGljIHJlcXVpcmVkVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgaXNFbXB0eTogYm9vbGVhbjtcbiAgcHVibGljIGNvbFNwYW5zOiBudW1iZXIgPSAxO1xuICBwdWJsaWMgcGFuZWw6IFBhbmVsTW9kZWw7XG4gIHB1YmxpYyBpc1Nob3dIaWRlRGV0YWlsOiBib29sZWFuO1xuICBwdWJsaWMgaXNBY3Rpb25zQ2VsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbC5jb3VudGVyKys7XG4gIH1cbiAgcHVibGljIGdldCBoYXNRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NUaXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucGFuZWw7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBzaG93RXJyb3JPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RXJyb3JPbkNvcmUoXCJ0b3BcIik7XG4gIH1cbiAgcHVibGljIGdldCBzaG93RXJyb3JPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RXJyb3JPbkNvcmUoXCJib3R0b21cIik7XG4gIH1cbiAgcHJpdmF0ZSBzaG93RXJyb3JPbkNvcmUobG9jYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmdldFNob3dFcnJvckxvY2F0aW9uKCkgPT0gbG9jYXRpb24gJiZcbiAgICAgICghdGhpcy5pc0Nob2ljZSB8fCB0aGlzLmlzRmlyc3RDaG9pY2UpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFNob3dFcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUXVlc3Rpb24gPyB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLml0ZW1WYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW0odmFsOiBJdGVtVmFsdWUpIHtcbiAgICB0aGlzLml0ZW1WYWx1ZSA9IHZhbDtcbiAgICBpZiAoISF2YWwpIHtcbiAgICAgIHZhbC5oaWRlQ2FwdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNDaG9pY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY2hvaWNlVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc0Nob2ljZSA/IHRoaXMuaXRlbS52YWx1ZSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc0NoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQ2hvaWNlICYmIHRoaXMucXVlc3Rpb24uZ2V0VHlwZSgpID09IFwiY2hlY2tib3hcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRmlyc3RDaG9pY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlSW5kZXggPT09IDA7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jbGFzc05hbWUgK1xuICAgICAgKHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBcIiBcIiArIHRoaXMucXVlc3Rpb24uY3NzRXJyb3IgOiBcIlwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBoZWFkZXJzKCk6IHN0cmluZyB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jZWxsICYmXG4gICAgICB0aGlzLmNlbGwuY29sdW1uICYmXG4gICAgICB0aGlzLmNlbGwuY29sdW1uLmlzU2hvd0luTXVsdGlwbGVDb2x1bW5zXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUaXRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sIHx8IFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZUZpbmFsQ2xhc3NOYW1lKG1hdHJpeENzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcXVlc3Rpb25Dc3MgPSB0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICBpZiAoISFxdWVzdGlvbkNzcykge1xuICAgICAgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgIGlmICghIXF1ZXN0aW9uQ3NzLml0ZW1WYWx1ZSkge1xuICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBxdWVzdGlvbkNzcy5pdGVtVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbkNzcy5hc0NlbGwpIHtcbiAgICAgICAgaWYgKCEhY2xhc3NOYW1lKSBjbGFzc05hbWUgKz0gXCJcIjtcbiAgICAgICAgY2xhc3NOYW1lICs9IHF1ZXN0aW9uQ3NzLmFzQ2VsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjbGFzc05hbWUgJiYgISFtYXRyaXhDc3NDbGFzc2VzKSB7XG4gICAgICBjbGFzc05hbWUgPSBtYXRyaXhDc3NDbGFzc2VzLmNlbGw7XG4gICAgfVxuICAgIGNsYXNzTmFtZSArPVxuICAgICAgdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCA/IFwiIFwiICsgcXVlc3Rpb25Dc3MuaGFzRXJyb3IgOiBcIlwiO1xuXG4gICAgaWYgKHRoaXMuaXNDaG9pY2UpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIG1hdHJpeENzc0NsYXNzZXMuY2hvaWNlQ2VsbDtcbiAgICB9XG4gICAgLy8ndGV4dC1hbGlnbic6ICRkYXRhLmlzQ2hvaWNlID8gJ2NlbnRlcic6ICcnXG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgcHVibGljIGlzRGV0YWlsUm93OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlO1xuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBjZWxsczogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbD4gPSBbXTtcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdy5jb3VudGVyKys7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIGV4dGVuZHMgQmFzZSB7XG4gIHByaXZhdGUgaGVhZGVyUm93VmFsdWU6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcHJpdmF0ZSBmb290ZXJSb3dWYWx1ZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xuICBwcml2YXRlIGhhc1JlbW92ZVJvd3NWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByb3dzQWN0aW9uczogQXJyYXk8QXJyYXk8SUFjdGlvbkJhckl0ZW0+PjtcbiAgcHJpdmF0ZSBjc3NDbGFzc2VzOiBhbnk7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgbWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93VGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dUYWJsZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIik7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPblRvcFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPbkJvdHRvbVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5oYXNGb290ZXIgJiYgdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZm9vdGVyUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWU7XG4gIH1cbiAgcHVibGljIGlzUmVxdWlyZVJlc2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc1JlbW92ZVJvd3MgIT0gdGhpcy5tYXRyaXguY2FuUmVtb3ZlUm93cyB8fFxuICAgICAgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBoZWFkZXJSb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJSb3dWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZvb3RlclJvdygpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLmZvb3RlclJvd1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGQoKSB7XG4gICAgdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWUgPSB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3dzO1xuICAgIC8vYnVpbGQgcm93cyBub3dcbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIHRoaXMuY3NzQ2xhc3NlcyA9IHRoaXMubWF0cml4LmNzc0NsYXNzZXM7XG4gICAgdGhpcy5idWlsZFJvd3NBY3Rpb25zKCk7XG4gICAgdGhpcy5idWlsZEhlYWRlcigpO1xuICAgIHRoaXMuYnVpbGRSb3dzKCk7XG4gICAgdGhpcy5idWlsZEZvb3RlcigpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpIHtcbiAgICB2YXIgc2hvd1RhYmxlID1cbiAgICAgIHRoaXMucm93cy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLm1hdHJpeC5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgICF0aGlzLm1hdHJpeC5nZXRTaG93Q29sdW1uc0lmRW1wdHkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGFibGVcIiwgc2hvd1RhYmxlKTtcbiAgICB2YXIgc2hvd0FkZFJvdyA9IHRoaXMubWF0cml4LmNhbkFkZFJvdyAmJiBzaG93VGFibGU7XG4gICAgdmFyIHNob3dBZGRSb3dPblRvcCA9IHNob3dBZGRSb3c7XG4gICAgdmFyIHNob3dBZGRSb3dPbkJvdHRvbSA9IHNob3dBZGRSb3c7XG4gICAgaWYgKHNob3dBZGRSb3dPblRvcCkge1xuICAgICAgaWYgKHRoaXMubWF0cml4LmdldEFkZFJvd0xvY2F0aW9uKCkgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHNob3dBZGRSb3dPblRvcCA9IHRoaXMubWF0cml4LmNvbHVtbkxheW91dCA9PT0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd0FkZFJvd09uVG9wID0gdGhpcy5tYXRyaXguZ2V0QWRkUm93TG9jYXRpb24oKSAhPT0gXCJib3R0b21cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3dBZGRSb3dPbkJvdHRvbSAmJiB0aGlzLm1hdHJpeC5nZXRBZGRSb3dMb2NhdGlvbigpICE9PSBcInRvcEJvdHRvbVwiKSB7XG4gICAgICBzaG93QWRkUm93T25Cb3R0b20gPSAhc2hvd0FkZFJvd09uVG9wO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Ub3BcIiwgc2hvd0FkZFJvd09uVG9wKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Cb3R0b21cIiwgc2hvd0FkZFJvd09uQm90dG9tKTtcbiAgfVxuICBwdWJsaWMgb25BZGRlZFJvdygpIHtcbiAgICBpZiAodGhpcy5nZXRSZW5kZXJlZERhdGFSb3dDb3VudCgpID49IHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcm93ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3NbdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5yb3dzQWN0aW9ucy5wdXNoKHRoaXMuYnVpbGRSb3dBY3Rpb25zKHJvdykpO1xuICAgIHRoaXMuYWRkSG9yaXpvbnRhbFJvdyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHJvdyxcbiAgICAgIHRoaXMubWF0cml4LnZpc2libGVSb3dzLmxlbmd0aCA9PSAxICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVuZGVyZWREYXRhUm93Q291bnQoKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLnJvd3NbaV0uaXNEZXRhaWxSb3cpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBvblJlbW92ZWRSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSkge1xuICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLnJvd3NBY3Rpb25zLnNwbGljZShyb3dJbmRleCwgMSk7XG4gICAgdmFyIHJlbW92ZUNvdW50ID0gMTtcbiAgICBpZiAoXG4gICAgICByb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmXG4gICAgICB0aGlzLnJvd3Nbcm93SW5kZXggKyAxXS5pc0RldGFpbFJvd1xuICAgICkge1xuICAgICAgcmVtb3ZlQ291bnQrKztcbiAgICB9XG4gICAgdGhpcy5yb3dzLnNwbGljZShyb3dJbmRleCwgcmVtb3ZlQ291bnQpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gIH1cbiAgcHVibGljIG9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgaXNTaG93aW5nOiBib29sZWFuXG4gICkge1xuICAgIHZhciByb3dJbmRleCA9IHRoaXMuZ2V0UmVuZGVyZWRSb3dJbmRleChyb3cpO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcbiAgICB2YXIgcGFuZWxSb3dJbmRleCA9XG4gICAgICByb3dJbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxICYmIHRoaXMucm93c1tyb3dJbmRleCArIDFdLmlzRGV0YWlsUm93XG4gICAgICAgID8gcm93SW5kZXggKyAxXG4gICAgICAgIDogLTE7XG4gICAgaWYgKChpc1Nob3dpbmcgJiYgcGFuZWxSb3dJbmRleCA+IC0xKSB8fCAoIWlzU2hvd2luZyAmJiBwYW5lbFJvd0luZGV4IDwgMCkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGlzU2hvd2luZykge1xuICAgICAgdmFyIGRldGFpbFJvdyA9IHRoaXMuY3JlYXRlRGV0YWlsUGFuZWxSb3cocm93LCB0aGlzLnJvd3Nbcm93SW5kZXhdKTtcbiAgICAgIHRoaXMucm93cy5zcGxpY2Uocm93SW5kZXggKyAxLCAwLCBkZXRhaWxSb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKHBhbmVsUm93SW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFJlbmRlcmVkUm93SW5kZXgocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IG51bWJlciB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnJvd3NbaV0ucm93ID09IHJvdykgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGRSb3dzQWN0aW9ucygpIHtcbiAgICB0aGlzLnJvd3NBY3Rpb25zID0gW107XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucm93c0FjdGlvbnMucHVzaCh0aGlzLmJ1aWxkUm93QWN0aW9ucyhyb3dzW2ldKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZEhlYWRlcigpIHtcbiAgICB2YXIgY29sSGVhZGVycyA9XG4gICAgICB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwgJiYgdGhpcy5tYXRyaXguc2hvd0hlYWRlcjtcbiAgICB2YXIgaXNTaG93biA9XG4gICAgICBjb2xIZWFkZXJzIHx8XG4gICAgICAodGhpcy5tYXRyaXguaGFzUm93VGV4dCAmJiAhdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIGlzU2hvd24pO1xuICAgIGlmICghaXNTaG93bikgcmV0dXJuO1xuICAgIHRoaXMuaGVhZGVyUm93VmFsdWUgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcInN0YXJ0XCIpKSB7XG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0ICYmIHRoaXMubWF0cml4LnNob3dIZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1hdHJpeC52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICAgIGlmICghY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVDb2x1bW5zSGVhZGVyKGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwoY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlVGV4dENlbGwocm93c1tpXS5sb2NUZXh0KSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tYXRyaXguaGFzRm9vdGVyKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXh0Q2VsbCh0aGlzLm1hdHJpeC5nZXRGb290ZXJUZXh0KCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkRm9vdGVyKCkge1xuICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSByZXR1cm47XG4gICAgdGhpcy5mb290ZXJSb3dWYWx1ZSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwic3RhcnRcIikpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGNlbGxzID0gdGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3Rlcih0aGlzLmZvb3RlclJvdywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XG4gICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZFJvd3MoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWxcbiAgICAgID8gdGhpcy5idWlsZEhvcml6b250YWxSb3dzKClcbiAgICAgIDogdGhpcy5idWlsZFZlcnRpY2FsUm93cygpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgcm93cyk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzKGxvY2F0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICAgIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZ2V0Um93QWN0aW9ucyhpLCBsb2NhdGlvbikpKSB7XG4gICAgICAgICAgdGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzW2xvY2F0aW9uXSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl07XG4gIH1cbiAgcHJpdmF0ZSBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3cocm93KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkSG9yaXpvbnRhbFJvd3MoKTogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PiB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICB2YXIgcmVuZGVyZWRSb3dzOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZEhvcml6b250YWxSb3coXG4gICAgICAgIHJlbmRlcmVkUm93cyxcbiAgICAgICAgcm93c1tpXSxcbiAgICAgICAgaSA9PSAwICYmICF0aGlzLm1hdHJpeC5zaG93SGVhZGVyXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRSb3dzO1xuICB9XG4gIHByaXZhdGUgYWRkSG9yaXpvbnRhbFJvdyhcbiAgICByZW5kZXJlZFJvd3M6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdz4sXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICB1c2VBc0hlYWRlcjogYm9vbGVhblxuICApIHtcbiAgICB2YXIgcmVuZGVyZWRSb3cgPSB0aGlzLmNyZWF0ZUhvcml6b250YWxSb3cocm93LCB1c2VBc0hlYWRlcik7XG4gICAgcmVuZGVyZWRSb3cucm93ID0gcm93O1xuICAgIHJlbmRlcmVkUm93cy5wdXNoKHJlbmRlcmVkUm93KTtcbiAgICBpZiAocm93LmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICByZW5kZXJlZFJvd3MucHVzaCh0aGlzLmNyZWF0ZURldGFpbFBhbmVsUm93KHJvdywgcmVuZGVyZWRSb3cpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRSb3dBY3Rpb25zQ2VsbChyb3dJbmRleDogbnVtYmVyLCBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIikge1xuICAgIGNvbnN0IHJvd0FjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnMocm93SW5kZXgsIGxvY2F0aW9uKTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHJvd0FjdGlvbnMpKSB7XG4gICAgICB2YXIgY2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgICB2YXIgaXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShyb3dBY3Rpb25zKTtcbiAgICAgIGNlbGwuaXRlbSA9IGl0ZW1WYWx1ZTtcbiAgICAgIGNlbGwuaXNBY3Rpb25zQ2VsbCA9IHRydWU7XG4gICAgICBjZWxsLmNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5hY3Rpb25zQ2VsbDtcbiAgICAgIGNlbGwucm93ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3Nbcm93SW5kZXhdO1xuICAgICAgcmV0dXJuIGNlbGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0Um93QWN0aW9ucyhyb3dJbmRleDogbnVtYmVyLCBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIikge1xuICAgIHZhciBhY3Rpb25zID0gdGhpcy5yb3dzQWN0aW9uc1tyb3dJbmRleF07XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGlvbnMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IHtcbiAgICAgIGlmICghYWN0aW9uLmxvY2F0aW9uKSB7XG4gICAgICAgIGFjdGlvbi5sb2NhdGlvbiA9IFwic3RhcnRcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3Rpb24ubG9jYXRpb24gPT09IGxvY2F0aW9uO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgYnVpbGRSb3dBY3Rpb25zKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogQXJyYXk8SUFjdGlvbkJhckl0ZW0+IHtcbiAgICB2YXIgYWN0aW9uczogQXJyYXk8SUFjdGlvbkJhckl0ZW0+ID0gW107XG4gICAgdGhpcy5zZXREZWZhdWx0Um93QWN0aW9ucyhyb3csIGFjdGlvbnMpO1xuICAgIGlmICghIXRoaXMubWF0cml4LnN1cnZleSkge1xuICAgICAgYWN0aW9ucyA9IHRoaXMubWF0cml4LnN1cnZleS5nZXRVcGRhdGVkTWF0cml4Um93QWN0aW9ucyhcbiAgICAgICAgdGhpcy5tYXRyaXgsXG4gICAgICAgIHJvdyxcbiAgICAgICAgYWN0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSBzZXREZWZhdWx0Um93QWN0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb25CYXJJdGVtPlxuICApIHtcbiAgICBpZiAodGhpcy5oYXNSZW1vdmVSb3dzICYmIHRoaXMuY2FuUmVtb3ZlUm93KHJvdykpIHtcbiAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgbmV3IEFjdGlvbkJhckl0ZW0oe1xuICAgICAgICAgIGlkOiBcInJlbW92ZS1yb3dcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCJlbmRcIixcbiAgICAgICAgICBlbmFibGVkOiAhdGhpcy5tYXRyaXguaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgIGNvbXBvbmVudDogXCJzdi1tYXRyaXgtcmVtb3ZlLWJ1dHRvblwiLFxuICAgICAgICAgIGRhdGE6IHsgcm93OiByb3csIHF1ZXN0aW9uOiB0aGlzLm1hdHJpeCB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJvdy5oYXNQYW5lbCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgQWN0aW9uQmFySXRlbSh7XG4gICAgICAgICAgaWQ6IFwic2hvdy1kZXRhaWxcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCJzdGFydFwiLFxuICAgICAgICAgIGNvbXBvbmVudDogXCJzdi1tYXRyaXgtZGV0YWlsLWJ1dHRvblwiLFxuICAgICAgICAgIGRhdGE6IHsgcm93OiByb3csIHF1ZXN0aW9uOiB0aGlzLm1hdHJpeCB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVIb3Jpem9udGFsUm93KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgdXNlQXNIZWFkZXI6IGJvb2xlYW5cbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdygpO1xuICAgIHRoaXMuYWRkUm93QWN0aW9uc0NlbGwocm93LCByZXMsIFwic3RhcnRcIik7XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQpIHtcbiAgICAgIHZhciByZW5kZXJlZENlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKHJvdy5sb2NUZXh0KTtcbiAgICAgIHJlbmRlcmVkQ2VsbC5yb3cgPSByb3c7XG4gICAgICByZXMuY2VsbHMucHVzaChyZW5kZXJlZENlbGwpO1xuICAgICAgaWYgKHVzZUFzSGVhZGVyKSB7XG4gICAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbFdpZHRoKG51bGwsIHJlbmRlcmVkQ2VsbCk7XG4gICAgICB9XG4gICAgICBpZiAocm93Lmhhc1BhbmVsICYmICEhdGhpcy5jc3NDbGFzc2VzLmRldGFpbFJvd1RleHQpIHtcbiAgICAgICAgaWYgKCEhcmVuZGVyZWRDZWxsLmNsYXNzTmFtZSkgcmVuZGVyZWRDZWxsLmNsYXNzTmFtZSArPSBcIiBcIjtcbiAgICAgICAgcmVuZGVyZWRDZWxsLmNsYXNzTmFtZSArPSB0aGlzLmNzc0NsYXNzZXMuZGV0YWlsUm93VGV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjZWxsID0gcm93LmNlbGxzW2ldO1xuICAgICAgaWYgKCFjZWxsLmNvbHVtbi5oYXNWaXNpYmxlQ2VsbCkgY29udGludWU7XG4gICAgICBpZiAoY2VsbC5jb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhyZXMsIGNlbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlcmVkQ2VsbCA9IHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCk7XG4gICAgICAgIHJlcy5jZWxscy5wdXNoKHJlbmRlcmVkQ2VsbCk7XG4gICAgICAgIGlmICh1c2VBc0hlYWRlcikge1xuICAgICAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbFdpZHRoKGNlbGwuY29sdW1uLCByZW5kZXJlZENlbGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkUm93QWN0aW9uc0NlbGwocm93LCByZXMsIFwiZW5kXCIpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBhZGRSb3dBY3Rpb25zQ2VsbChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHJlbmRlcmVkUm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgbG9jYXRpb246IFwic3RhcnRcIiB8IFwiZW5kXCJcbiAgKSB7XG4gICAgdmFyIHJvd0luZGV4ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnNDZWxsKHJvd0luZGV4LCBsb2NhdGlvbik7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhsb2NhdGlvbikpIHtcbiAgICAgIGlmICghIWFjdGlvbnMpIHJlbmRlcmVkUm93LmNlbGxzLnB1c2goYWN0aW9ucyk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgICAgICBjZWxsLmlzRW1wdHkgPSB0cnVlO1xuICAgICAgICByZW5kZXJlZFJvdy5jZWxscy5wdXNoKGNlbGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZURldGFpbFBhbmVsUm93KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcmVuZGVyZWRSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1xuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgcmVzLnJvdyA9IHJvdztcbiAgICByZXMuY2xhc3NOYW1lICs9IHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxSb3c7XG4gICAgcmVzLmlzRGV0YWlsUm93ID0gdHJ1ZTtcbiAgICB2YXIgYnV0dG9uQ2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQpIHtcbiAgICAgIGJ1dHRvbkNlbGwuY29sU3BhbnMgPSAyO1xuICAgIH1cbiAgICBidXR0b25DZWxsLmlzRW1wdHkgPSB0cnVlO1xuICAgIHJlcy5jZWxscy5wdXNoKGJ1dHRvbkNlbGwpO1xuICAgIHZhciBhY3Rpb25zQ2VsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcImVuZFwiKSkge1xuICAgICAgYWN0aW9uc0NlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgICAgYWN0aW9uc0NlbGwuaXNFbXB0eSA9IHRydWU7XG4gICAgfVxuICAgIHZhciBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICBjZWxsLnBhbmVsID0gcm93LmRldGFpbFBhbmVsO1xuICAgIGNlbGwuY29sU3BhbnMgPVxuICAgICAgcmVuZGVyZWRSb3cuY2VsbHMubGVuZ3RoIC1cbiAgICAgIGJ1dHRvbkNlbGwuY29sU3BhbnMgLVxuICAgICAgKCEhYWN0aW9uc0NlbGwgPyBhY3Rpb25zQ2VsbC5jb2xTcGFucyA6IDApO1xuICAgIGNlbGwuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbFBhbmVsQ2VsbDtcbiAgICByZXMuY2VsbHMucHVzaChjZWxsKTtcbiAgICBpZiAoISFhY3Rpb25zQ2VsbCkge1xuICAgICAgcmVzLmNlbGxzLnB1c2goYWN0aW9uc0NlbGwpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5tYXRyaXgub25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgdGhpcy5tYXRyaXgub25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2socmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRWZXJ0aWNhbFJvd3MoKTogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PiB7XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLm1hdHJpeC5jb2x1bW5zO1xuICAgIHZhciByZW5kZXJlZFJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2wgPSBjb2x1bW5zW2ldO1xuICAgICAgaWYgKGNvbC5pc1Zpc2libGUgJiYgY29sLmhhc1Zpc2libGVDZWxsKSB7XG4gICAgICAgIGlmIChjb2wuaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlVmVydGljYWxSb3dzKHJlbmRlcmVkUm93cywgY29sLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW5kZXJlZFJvd3MucHVzaCh0aGlzLmNyZWF0ZVZlcnRpY2FsUm93KGNvbCwgaSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlRW5kVmVydGljYWxBY3Rpb25Sb3coKSk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZFJvd3M7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNdXRsaXBsZVZlcnRpY2FsUm93cyhcbiAgICByZW5kZXJlZFJvd3M6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdz4sXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBpbmRleDogbnVtYmVyXG4gICkge1xuICAgIHZhciBjaG9pY2VzID0gdGhpcy5nZXRNdWx0aXBsZUNvbHVtbkNob2ljZXMoY29sdW1uKTtcbiAgICBpZiAoIWNob2ljZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSb3coY29sdW1uLCBpbmRleCwgY2hvaWNlc1tpXSwgaSkpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZVZlcnRpY2FsUm93KFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjaG9pY2U6IEl0ZW1WYWx1ZSA9IG51bGwsXG4gICAgY2hvaWNlSW5kZXg6IG51bWJlciA9IC0xXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xuICAgICAgdmFyIGxUaXRsZSA9ICEhY2hvaWNlID8gY2hvaWNlLmxvY1RleHQgOiBjb2x1bW4ubG9jVGl0bGU7XG4gICAgICB2YXIgaENlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGxUaXRsZSk7XG4gICAgICBoQ2VsbC5jb2x1bW4gPSBjb2x1bW47XG4gICAgICBpZiAoIWNob2ljZSkge1xuICAgICAgICB0aGlzLnNldFJlcXVyaWVkVG9IZWFkZXJDZWxsKGNvbHVtbiwgaENlbGwpO1xuICAgICAgfVxuICAgICAgcmVzLmNlbGxzLnB1c2goaENlbGwpO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJDaG9pY2UgPSBjaG9pY2U7XG4gICAgICB2YXIgckNob2ljZUluZGV4ID0gY2hvaWNlSW5kZXggPj0gMCA/IGNob2ljZUluZGV4IDogaTtcbiAgICAgIHZhciBjZWxsID0gcm93c1tpXS5jZWxsc1tpbmRleF07XG4gICAgICB2YXIgdmlzQ2hvaWNlcyA9ICEhY2hvaWNlID8gY2VsbC5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICghIXZpc0Nob2ljZXMgJiYgckNob2ljZUluZGV4IDwgdmlzQ2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgckNob2ljZSA9IHZpc0Nob2ljZXNbckNob2ljZUluZGV4XTtcbiAgICAgIH1cbiAgICAgIHZhciByQ2VsbCA9IHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCwgckNob2ljZSk7XG4gICAgICByQ2VsbC5pdGVtID0gckNob2ljZTtcbiAgICAgIHJDZWxsLmNob2ljZUluZGV4ID0gckNob2ljZUluZGV4O1xuICAgICAgcmVzLmNlbGxzLnB1c2gockNlbGwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXRyaXguaGFzVG90YWwpIHtcbiAgICAgIHJlcy5jZWxscy5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZUVkaXRDZWxsKHRoaXMubWF0cml4LnZpc2libGVUb3RhbFJvdy5jZWxsc1tpbmRleF0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVFbmRWZXJ0aWNhbEFjdGlvblJvdygpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgaWYgKHRoaXMubWF0cml4LnNob3dIZWFkZXIpIHtcbiAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlVGV4dENlbGwobnVsbCkpO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5nZXRSb3dBY3Rpb25zQ2VsbChpLCBcImVuZFwiKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNUb3RhbCkge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVUZXh0Q2VsbChudWxsKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhcbiAgICByUm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIGlzRm9vdGVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIGNob2ljZXMgPSBpc0Zvb3RlclxuICAgICAgPyB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjZWxsLmNvbHVtbilcbiAgICAgIDogY2VsbC5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByQ2VsbCA9IHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCwgIWlzRm9vdGVyID8gY2hvaWNlc1tpXSA6IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoIWlzRm9vdGVyKSB7XG4gICAgICAgIC8vckNlbGwuaXRlbSA9IGNob2ljZXNbaV07XG4gICAgICAgIHJDZWxsLmNob2ljZUluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIHJSb3cuY2VsbHMucHVzaChyQ2VsbCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlRWRpdENlbGwoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIGNob2ljZUl0ZW06IGFueSA9IHVuZGVmaW5lZFxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICByZXMuY2VsbCA9IGNlbGw7XG4gICAgcmVzLnJvdyA9IGNlbGwucm93O1xuICAgIHJlcy5xdWVzdGlvbiA9IGNlbGwucXVlc3Rpb247XG4gICAgcmVzLm1hdHJpeCA9IHRoaXMubWF0cml4O1xuICAgIHJlcy5pdGVtID0gY2hvaWNlSXRlbTtcblxuICAgIHJlcy5jbGFzc05hbWUgPSByZXMuY2FsY3VsYXRlRmluYWxDbGFzc05hbWUodGhpcy5jc3NDbGFzc2VzKTtcbiAgICAvL3Jlcy5jc3MgPSByZXMuY2FsY0Nzcyh0aGlzLmNzc0NsYXNzZXMuY2VsbCk7XG5cbiAgICAvLyB2YXIgcXVlc3Rpb25Dc3MgPSBjZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgLy8gdmFyIGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgLy8gaWYgKCEhcXVlc3Rpb25Dc3MpIHtcbiAgICAvLyAgIGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgLy8gICBpZiAoISFxdWVzdGlvbkNzcy5pdGVtVmFsdWUpIHtcbiAgICAvLyAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgcXVlc3Rpb25Dc3MuaXRlbVZhbHVlO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKCEhcXVlc3Rpb25Dc3MuYXNDZWxsKSB7XG4gICAgLy8gICAgIGlmICghIWNsYXNzTmFtZSkgY2xhc3NOYW1lICs9IFwiXCI7XG4gICAgLy8gICAgIGNsYXNzTmFtZSArPSBxdWVzdGlvbkNzcy5hc0NlbGw7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIGlmICghY2xhc3NOYW1lICYmICEhdGhpcy5jc3NDbGFzc2VzLmNlbGwpIHtcbiAgICAvLyAgIGNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsO1xuICAgIC8vIH1cbiAgICAvL3Jlcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3RlcihcbiAgICByUm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsXG4gICkge1xuICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVFZGl0Q2VsbHMoclJvdywgY2VsbCwgdHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNdXRsaXBsZUNvbHVtbnNIZWFkZXIoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbikge1xuICAgIHZhciBjaG9pY2VzID0gdGhpcy5nZXRNdWx0aXBsZUNvbHVtbkNob2ljZXMoY29sdW1uKTtcbiAgICBpZiAoIWNob2ljZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gdGhpcy5jcmVhdGVUZXh0Q2VsbChjaG9pY2VzW2ldLmxvY1RleHQpO1xuICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsKGNvbHVtbiwgY2VsbCk7XG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKGNlbGwpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogYW55IHtcbiAgICB2YXIgY2hvaWNlcyA9IGNvbHVtbi50ZW1wbGF0ZVF1ZXN0aW9uLmNob2ljZXM7XG4gICAgaWYgKCEhY2hvaWNlcyAmJiBBcnJheS5pc0FycmF5KGNob2ljZXMpICYmIGNob2ljZXMubGVuZ3RoID09IDApXG4gICAgICByZXR1cm4gdGhpcy5tYXRyaXguY2hvaWNlcztcbiAgICBjaG9pY2VzID0gY29sdW1uLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUNob2ljZXM7XG4gICAgaWYgKCFjaG9pY2VzIHx8ICFBcnJheS5pc0FycmF5KGNob2ljZXMpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY2hvaWNlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUhlYWRlckNlbGwoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwoISFjb2x1bW4gPyBjb2x1bW4ubG9jVGl0bGUgOiBudWxsKTtcbiAgICBjZWxsLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLnNldEhlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgICBpZiAodGhpcy5jc3NDbGFzc2VzLmhlYWRlckNlbGwpIHtcbiAgICAgIGNlbGwuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmhlYWRlckNlbGw7XG4gICAgfVxuICAgIHJldHVybiBjZWxsO1xuICB9XG4gIHByaXZhdGUgc2V0SGVhZGVyQ2VsbChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcbiAgKSB7XG4gICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgoY29sdW1uLCBjZWxsKTtcbiAgICB0aGlzLnNldFJlcXVyaWVkVG9IZWFkZXJDZWxsKGNvbHVtbiwgY2VsbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIZWFkZXJDZWxsV2lkdGgoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXG4gICkge1xuICAgIGNlbGwubWluV2lkdGggPSBjb2x1bW4gIT0gbnVsbCA/IHRoaXMubWF0cml4LmdldENvbHVtbldpZHRoKGNvbHVtbikgOiBcIlwiO1xuICAgIGNlbGwud2lkdGggPSBjb2x1bW4gIT0gbnVsbCA/IGNvbHVtbi53aWR0aCA6IHRoaXMubWF0cml4LmdldFJvd1RpdGxlV2lkdGgoKTtcbiAgfVxuICBwcml2YXRlIHNldFJlcXVyaWVkVG9IZWFkZXJDZWxsKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbFxuICApIHtcbiAgICBpZiAoISFjb2x1bW4gJiYgY29sdW1uLmlzUmVxdWlyZWQgJiYgdGhpcy5tYXRyaXguc3VydmV5KSB7XG4gICAgICBjZWxsLnJlcXVpcmVkVGV4dCA9IHRoaXMubWF0cml4LnN1cnZleS5yZXF1aXJlZFRleHQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlUmVtb3ZlUm93Q2VsbChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xuICAgIHJlcy5yb3cgPSByb3c7XG4gICAgcmVzLmlzUmVtb3ZlUm93ID0gdGhpcy5jYW5SZW1vdmVSb3cocm93KTtcbiAgICBpZiAoISF0aGlzLmNzc0NsYXNzZXMuY2VsbCkge1xuICAgICAgcmVzLmNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlVGV4dENlbGwoXG4gICAgbG9jVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHZhciBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICBjZWxsLmxvY1RpdGxlID0gISFsb2NUaXRsZVxuICAgICAgPyBsb2NUaXRsZVxuICAgICAgOiBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcy5tYXRyaXgsIGZhbHNlKTtcbiAgICBpZiAoISF0aGlzLmNzc0NsYXNzZXMuY2VsbCkge1xuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuY2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIG1hdHJpeCBkcm9wZG93biBhbmQgbWF0cml4IGR5bmFtaWMgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPFxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gID5cbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdENlbGxUeXBlKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgZGVmYXVsdENlbGxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgYWRkRGVmYXVsdENvbHVtbnMobWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgdmFyIGNvbE5hbWVzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkrKykgbWF0cml4LmFkZENvbHVtbihjb2xOYW1lc1tpXSk7XG4gIH1cbiAgcHJpdmF0ZSBkZXRhaWxQYW5lbFZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcm90ZWN0ZWQgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICBjb2x1bW5zQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2s6IChcbiAgICB0YWJsZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcbiAgKSA9PiB2b2lkO1xuICBvbkNlbGxDcmVhdGVkQ2FsbGJhY2s6IChvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIG9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrOiAob3B0aW9uczogYW55KSA9PiB2b2lkO1xuICBvbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2s6IChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSA9PiBib29sZWFuO1xuICBvbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2s6IChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsXG4gICkgPT4gdm9pZDtcbiAgb25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2s6IChcbiAgICByZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XG4gICkgPT4gdm9pZDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJjb2x1bW5zXCIsXG4gICAgICAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0uY29sT3duZXIgPSB0aGlzO1xuICAgICAgfSxcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgaXRlbS5jb2xPd25lciA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHRoaXMpO1xuICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3RGV0YWlsUGFuZWwoKTtcbiAgICB0aGlzLmRldGFpbFBhbmVsLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcbiAgICB0aGlzLmRldGFpbFBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwiY29sdW1uc1wiLFxuICAgICAgKG5ld0NvbHVtbnM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNJbmRleGVzKG5ld0NvbHVtbnMpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjZWxsVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNDZWxsVHlwZSgpO1xuICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJvcHRpb25zQ2FwdGlvblwiLCBcImNvbHVtbkNvbENvdW50XCIsIFwicm93VGl0bGVXaWR0aFwiLCBcImNob2ljZXNcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXG4gICAgICAgIFwiY29sdW1uTGF5b3V0XCIsXG4gICAgICAgIFwiYWRkUm93TG9jYXRpb25cIixcbiAgICAgICAgXCJoaWRlQ29sdW1uc0lmRW1wdHlcIixcbiAgICAgICAgXCJzaG93SGVhZGVyXCIsXG4gICAgICAgIFwibWluUm93Q291bnRcIixcbiAgICAgICAgXCJpc1JlYWRPbmx5XCIsXG4gICAgICAgIFwicm93Q291bnRcIixcbiAgICAgICAgXCJoYXNGb290ZXJcIixcbiAgICAgICAgXCJkZXRhaWxQYW5lbE1vZGVcIixcbiAgICAgIF0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSb3dzRHluYW1pYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBzdXBlci5pdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoaXRlbSwgbmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAoaXRlbS5vd25lclByb3BlcnR5TmFtZSA9PT0gXCJjaG9pY2VzXCIpIHtcbiAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgY29sdW1uTGF5b3V0IHRvICd2ZXJ0aWNhbCcgdG8gcGxhY2UgY29sdW1ucyB2ZXJ0aWNhbGx5IGFuZCByb3dzIGhvcml6b250YWxseS4gSXQgbWFrZXMgc2Vuc2Ugd2hlbiB3ZSBoYXZlIG1hbnkgY29sdW1ucyBhbmQgZmV3IHJvd3MuXG4gICAqIEBzZWUgY29sdW1uc1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbkxheW91dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5MYXlvdXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgY29sdW1uc0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0O1xuICB9XG4gIHNldCBjb2x1bW5zTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbHVtbkxheW91dCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGNvbHVtbnMgYXJlIGxvY2F0ZWQgaG9yaXpvbnRhbGx5XG4gICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5MYXlvdXQgIT0gXCJ2ZXJ0aWNhbFwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIHRvIFwidW5kZXJSb3dcIiB0byBzaG93IHRoZSBkZXRhaWxQYW5lbCB1bmRlciB0aGUgcm93LlxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsUGFuZWxNb2RlXCIsIFwibm9uZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRldGFpbFBhbmVsTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGV0YWlsIHRlbXBsYXRlIFBhbmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGluZyBkZXRhaWwgcGFuZWwgZm9yIGEgcm93LlxuICAgKiBAc2VlICBkZXRhaWxFbGVtZW50c1xuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZWxlbWVudHMsIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICAgKiBAc2VlICBkZXRhaWxQYW5lbFxuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsLmVsZW1lbnRzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdEZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9vdGVyVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBjYW5BZGRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGNhblJlbW92ZVJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBsb2NrUmVzZXRSZW5kZXJlZFRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25FbmRSb3dBZGRpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnJlbmRlcmVkVGFibGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZS5vbkFkZGVkUm93KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkVuZFJvd1JlbW92aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIXJvdykge1xuICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25SZW1vdmVkUm93KHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IHJlbmRlcmVkVGFibGVWYWx1ZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVGFibGVcIiwgbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcmVuZGVyZWRUYWJsZVZhbHVlKHZhbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFRhYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKSB7XG4gICAgdGhpcy5jbGVhckdlbmVyYXRlZFJvd3MoKTtcbiAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sdW1uc0NoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlc2V0UmVuZGVyZWRUYWJsZSgpIHtcbiAgICBpZiAodGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlIHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSA9IG51bGw7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5vblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJHZW5lcmF0ZWRSb3dzKCkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHN1cGVyLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICB9XG5cbiAgcHVibGljIGdldCByZW5kZXJlZFRhYmxlKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIHtcbiAgICBpZiAoIXRoaXMucmVuZGVyZWRUYWJsZVZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRUYWJsZSgpO1xuICAgICAgaWYgKCEhdGhpcy5vblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2sodGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTWF0cml4Um93Q3JlYXRlZChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcm93VmFsdWU6IHJvdy52YWx1ZSxcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sdW1uOiA8YW55Pm51bGwsXG4gICAgICBjb2x1bW5OYW1lOiA8YW55Pm51bGwsXG4gICAgICBjZWxsOiA8YW55Pm51bGwsXG4gICAgICBjZWxsUXVlc3Rpb246IDxhbnk+bnVsbCxcbiAgICAgIHZhbHVlOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbnMuY29sdW1uID0gdGhpcy52aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgIG9wdGlvbnMuY29sdW1uTmFtZSA9IG9wdGlvbnMuY29sdW1uLm5hbWU7XG4gICAgICB2YXIgY2VsbCA9IHJvdy5jZWxsc1tpXTtcbiAgICAgIG9wdGlvbnMuY2VsbCA9IGNlbGw7XG4gICAgICBvcHRpb25zLmNlbGxRdWVzdGlvbiA9IGNlbGwucXVlc3Rpb247XG4gICAgICBvcHRpb25zLnZhbHVlID0gY2VsbC52YWx1ZTtcbiAgICAgIGlmICghIXRoaXMub25DZWxsQ3JlYXRlZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25DZWxsQ3JlYXRlZENhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbENyZWF0ZWQodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY2VsbCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBjZWxsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGUpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2VsbFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uc0NlbGxUeXBlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNvbHVtbnNbaV0uZGVmYXVsdENlbGxUeXBlQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnNJbmRleGVzKGNvbHM6IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgY29sc1tpXS5zZXRJbmRleChpKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNvbHVtbiBjb3VudCBmb3IgcmFkaW9ncm91cCBhbmQgY2hlY2tib3ggIGNlbGwgdHlwZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbkNvbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbkNvbENvdW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uQ29sQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA0KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uQ29sQ291bnRcIiwgdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIG1pbmltdW0gY29sdW1uIHdpZHRoLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2x1bW5NaW5XaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5NaW5XaWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbHVtbk1pbldpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uTWluV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBzaG93IHRoZSBob3Jpem9udGFsIHNjcm9sbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaG9yaXpvbnRhbFNjcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaG9yaXpvbnRhbFNjcm9sbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBob3Jpem9udGFsU2Nyb2xsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhvcml6b250YWxTY3JvbGxcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjtcbiAgfVxuICBvbkNvbHVtblByb3BlcnR5Q2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHRoaXMudXBkYXRlSGFzRm9vdGVyKCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdy51cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkNoYW5nZWQoXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgIGlmIChuYW1lID09IFwiaXNSZXF1aXJlZFwiKSB7XG4gICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmlzU2hvd0luTXVsdGlwbGVDb2x1bW5zKSB7XG4gICAgICB0aGlzLm9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW4pO1xuICAgIH1cbiAgfVxuICBvblNob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbikge1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgfVxuICBvbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdGhpcy5jbGVhckdlbmVyYXRlZFJvd3MoKTtcbiAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICB9XG4gIHB1YmxpYyBnZXRSb3dUaXRsZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNGb290ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc0Zvb3RlclwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldEFkZFJvd0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICB9XG4gIHB1YmxpYyBnZXRTaG93Q29sdW1uc0lmRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKSB7XG4gICAgaWYgKCEhdGhpcy5yZW5kZXJlZFRhYmxlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGFibGUudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVIYXNGb290ZXIoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzRm9vdGVyXCIsIHRoaXMuaGFzVG90YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG90YWwoKTogYm9vbGVhbiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbaV0uaGFzVG90YWwpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0Q2VsbFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsVHlwZTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gc3VwZXIuZ2V0Q29uZGl0aW9uSnNvbigpO1xuICAgIHZhciBjb2x1bW5OYW1lID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHBhdGhbaV0gPT0gXCIuXCIpIGJyZWFrO1xuICAgICAgY29sdW1uTmFtZSA9IHBhdGhbaV0gKyBjb2x1bW5OYW1lO1xuICAgIH1cbiAgICB2YXIgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybiBudWxsO1xuICAgIHZhciBxdWVzdGlvbiA9IGNvbHVtbi5jcmVhdGVDZWxsUXVlc3Rpb24obnVsbCk7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IpO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKHRoaXMuZ2V0Um93VmFsdWUoaSkpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgc3VwZXIuY2xlYXJFcnJvcnMoKTtcbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcm93LmNlbGxzW2pdLnF1ZXN0aW9uLmNsZWFyRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmV2VG90YWxWYWx1ZTtcbiAgICBkbyB7XG4gICAgICBwcmV2VG90YWxWYWx1ZSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy50b3RhbFZhbHVlKTtcbiAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSB3aGlsZSAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHByZXZUb3RhbFZhbHVlLCB0aGlzLnRvdGFsVmFsdWUpICYmXG4gICAgICBjb3VudGVyIDwgM1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNob3VsZFJ1bkNvbHVtbkV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBydW5DZWxsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZXMgPSB0aGlzLmdldFJvd0NvbmRpdGlvblZhbHVlcyh2YWx1ZXMpO1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3NbaV0ucnVuQ29uZGl0aW9uKG5ld1ZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpIHtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLnZpc2libGVDb2x1bW5zW2ldLnZpc2libGVJZikgY29udGludWU7XG4gICAgICBoYXNDaGFuZ2VkID1cbiAgICAgICAgdGhpcy5pc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMudmlzaWJsZUNvbHVtbnNbaV0pIHx8IGhhc0NoYW5nZWQ7XG4gICAgfVxuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHZhciBjdXJWaXMgPSBjb2x1bW4uaGFzVmlzaWJsZUNlbGw7XG4gICAgdmFyIGhhc1Zpc0NlbGwgPSBmYWxzZTtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbCA9IHJvd3NbaV0uY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgIGlmICghIWNlbGwgJiYgISFjZWxsLnF1ZXN0aW9uICYmIGNlbGwucXVlc3Rpb24uaXNWaXNpYmxlKSB7XG4gICAgICAgIGhhc1Zpc0NlbGwgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1clZpcyAhPSBoYXNWaXNDZWxsKSB7XG4gICAgICBjb2x1bW4uaGFzVmlzaWJsZUNlbGwgPSBoYXNWaXNDZWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VyVmlzICE9IGhhc1Zpc0NlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1blRvdGFsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykgcmV0dXJuO1xuICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cucnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXRSb3dDb25kaXRpb25WYWx1ZXModmFsdWVzKSxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Um93Q29uZGl0aW9uVmFsdWVzKHZhbHVlczogSGFzaFRhYmxlPGFueT4pOiBIYXNoVGFibGU8YW55PiB7XG4gICAgdmFyIG5ld1ZhbHVlcyA9IHZhbHVlcztcbiAgICBpZiAoIW5ld1ZhbHVlcykgbmV3VmFsdWVzID0ge307XG4gICAgLypcbiAgICB2YXIgbmV3VmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAodmFsdWVzICYmIHZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgbmV3VmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMpKTtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgdG90YWxSb3cgPSB7fTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudG90YWxWYWx1ZSkpIHtcbiAgICAgIHRvdGFsUm93ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnRvdGFsVmFsdWUpKTtcbiAgICB9XG4gICAgbmV3VmFsdWVzW1wicm93XCJdID0ge307XG4gICAgbmV3VmFsdWVzW1widG90YWxSb3dcIl0gPSB0b3RhbFJvdztcbiAgICByZXR1cm4gbmV3VmFsdWVzO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29sdW1uc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMuZ2VuZXJhdGVkVG90YWxSb3cpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiBieSBpdCdzIG5hbWUuIFJldHVybnMgbnVsbCBpZiBhIGNvbHVtbiB3aXRoIHRoaXMgbmFtZSBkb2Vzbid0IGV4aXN0LlxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5uYW1lID09IGNvbHVtbk5hbWUpIHJldHVybiB0aGlzLmNvbHVtbnNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldENvbHVtbk5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29sdW1uIHdpZHRoLlxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbHVtbi5taW5XaWR0aCA/IGNvbHVtbi5taW5XaWR0aCA6IHRoaXMuY29sdW1uTWluV2lkdGg7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNob2ljZXMgZm9yIGRyb3Bkb3duLCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBjZWxsIHR5cGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlcyh2YWw6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG9wdGlvbnMgY2FwdGlvbiBmb3IgZHJvcGRvd24gY2VsbCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBvcHRpb25zQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm9wdGlvbnNDYXB0aW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZHVwbGljYXRpb24gdmFsdWUgZXJyb3IgdGV4dC4gU2V0IGl0IHRvIHNob3cgdGhlIHRleHQgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQuXG4gICAqIEBzZWUgTWF0cml4RHJvcGRvd25Db2x1bW4uaXNVbmlxdWVcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5RHVwbGljYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleUR1cGxpY2F0aW9uRXJyb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jS2V5RHVwbGljYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIik7XG4gIH1cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xuICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChyb3cpKTtcbiAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgdGhpcy5ydW5DZWxsc0NvbmRpdGlvbihcbiAgICAgICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWVPblJvd3NHZW5lcmF0aW9uKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpO1xuICAgICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmFsdWVPblJvd3NHZW5lcmF0aW9uKHJvd3M6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPikge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodHJ1ZSk7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAoISFyb3cuZWRpdGluZ09iaikgY29udGludWU7XG4gICAgICB2YXIgcm93VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlKGkpO1xuICAgICAgdmFyIHJWYWx1ZSA9IHJvdy52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMocm93VmFsdWUsIHJWYWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldE5ld1ZhbHVlT25Sb3dDaGFuZ2VkKHJvdywgXCJcIiwgclZhbHVlLCBmYWxzZSwgbmV3VmFsdWUpXG4gICAgICAgIC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSByZXR1cm47XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsVmFsdWUoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuaGFzVG90YWwgfHwgIXRoaXMudmlzaWJsZVRvdGFsUm93KSByZXR1cm4ge307XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVRvdGFsUm93LnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWaXNpYmxlVG90YWxSb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5oYXNUb3RhbCkge1xuICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cgPSB0aGlzLmdlbmVyYXRlVG90YWxSb3coKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBzdXJ2ZXk6IHRoaXMuc3VydmV5IH07XG4gICAgICAgICAgdGhpcy5ydW5Ub3RhbHNDb25kaXRpb24odGhpcy5kYXRhLmdldEFsbFZhbHVlcygpLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3c7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlVG90YWxSb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2libGVUb3RhbFJvdygpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zSW5kZXhlcyh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVIYXNGb290ZXIoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcm93IHZhbHVlLiBJZiB0aGUgcm93IHZhbHVlIGlzIGVtcHR5LCB0aGUgb2JqZWN0IGlzIGVtcHR5OiB7fS5cbiAgICogQHBhcmFtIHJvd0luZGV4IHJvdyBpbmRleCBmcm9tIDAgdG8gdmlzaWJsZSByb3cgY291bnQgLSAxLlxuICAgKi9cbiAgcHVibGljIGdldFJvd1ZhbHVlKHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBpZiAocm93SW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmlzUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKHJvd0luZGV4ID49IHZpc1Jvd3MubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um93VmFsdWVDb3JlKHZpc1Jvd3Nbcm93SW5kZXhdLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGNoZWNrSWZWYWx1ZUluUm93RHVwbGljYXRlZChcbiAgICBjaGVja2VkUm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgaWYgKGNoZWNrZWRSb3cgPT09IHJvdykgY29udGludWU7XG4gICAgICBpZiAocm93LmdldFZhbHVlKGNlbGxRdWVzdGlvbi5uYW1lKSA9PSBjZWxsUXVlc3Rpb24udmFsdWUpIHtcbiAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMuYWRkRHVwbGljYXRpb25FcnJvcihjZWxsUXVlc3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjZWxsUXVlc3Rpb24uY2xlYXJFcnJvcnMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSByb3cgdmFsdWUuXG4gICAqIEBwYXJhbSByb3dJbmRleCByb3cgaW5kZXggZnJvbSAwIHRvIHZpc2libGUgcm93IGNvdW50IC0gMS5cbiAgICogQHBhcmFtIHJvd1ZhbHVlIGFuIG9iamVjdCB7XCJjb2x1bW4gbmFtZVwiOiBjb2x1bW5WYWx1ZSwuLi4gfVxuICAgKi9cbiAgcHVibGljIHNldFJvd1ZhbHVlKHJvd0luZGV4OiBudW1iZXIsIHJvd1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgIHZhciB2aXNSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAocm93SW5kZXggPj0gdmlzUm93cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZpc1Jvd3Nbcm93SW5kZXhdLnZhbHVlID0gcm93VmFsdWU7XG4gICAgdGhpcy5vblJvd0NoYW5nZWQodmlzUm93c1tyb3dJbmRleF0sIFwiXCIsIHJvd1ZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUobnVsbE9uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG4gICAgdmFyIHJlcyA9ICF0aGlzLnZhbHVlID8ge30gOiB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgIGlmIChudWxsT25FbXB0eSAmJiB0aGlzLmlzTWF0cml4VmFsdWVFbXB0eShyZXMpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dWYWx1ZUNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBxdWVzdGlvblZhbHVlOiBhbnksXG4gICAgY3JlYXRlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID1cbiAgICAgICEhcXVlc3Rpb25WYWx1ZSAmJiAhIXF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdXG4gICAgICAgID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV1cbiAgICAgICAgOiBudWxsO1xuICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xuICAgICAgcmVzdWx0ID0ge307XG4gICAgICBpZiAoISFxdWVzdGlvblZhbHVlKSB7XG4gICAgICAgIHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dPYmoocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdGhpcy52YWx1ZSk7XG4gICAgcmV0dXJuICEhb2JqICYmICEhb2JqLmdldFR5cGUgPyBvYmogOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dEaXNwbGF5VmFsdWUoXG4gICAga2V5c0FzVGV4dDogYm9vbGVhbixcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICBpZiAoIXJvd1ZhbHVlKSByZXR1cm4gcm93VmFsdWU7XG4gICAgaWYgKCEhcm93LmVkaXRpbmdPYmopIHJldHVybiByb3dWYWx1ZTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJvd1ZhbHVlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcm93LmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgIHF1ZXN0aW9uID0gdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShrZXksIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICB2YXIgZGlzcGxheXZhbHVlID0gcXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHJvd1ZhbHVlW2tleV0pO1xuICAgICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIXF1ZXN0aW9uLnRpdGxlICYmIHF1ZXN0aW9uLnRpdGxlICE9PSBrZXkpIHtcbiAgICAgICAgICByb3dWYWx1ZVtxdWVzdGlvbi50aXRsZV0gPSBkaXNwbGF5dmFsdWU7XG4gICAgICAgICAgZGVsZXRlIHJvd1ZhbHVlW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93VmFsdWVba2V5XSA9IGRpc3BsYXl2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSBzdXBlci5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEpIHtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gdGhpcy52aXNpYmxlUm93cy5tYXAoXG4gICAgICAgIChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSA9PiB7XG4gICAgICAgICAgdmFyIHJvd0RhdGFJdGVtID0gPGFueT57XG4gICAgICAgICAgICBuYW1lOiByb3cucm93TmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiByb3cucm93TmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZ2V0Um93RGlzcGxheVZhbHVlKGZhbHNlLCByb3csIHJvdy52YWx1ZSksXG4gICAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgICBpc05vZGU6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiByb3cuY2VsbHNcbiAgICAgICAgICAgICAgLm1hcCgoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSA9PlxuICAgICAgICAgICAgICAgIGNlbGwucXVlc3Rpb24uZ2V0UGxhaW5EYXRhKG9wdGlvbnMpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcigoZDogYW55KSA9PiAhIWQpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgcm93RGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9ICg8YW55PnJvdylbXG4gICAgICAgICAgICAgIGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcm93RGF0YUl0ZW07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgICB0aGlzLmdldENlbGxRdWVzdGlvbnMoKSxcbiAgICAgIHRoaXMuaXNSZXF1aXJlZFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsUXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm4gW107XG4gICAgY29uc3QgcXVlc3Rpb25zID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cuY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcXVlc3Rpb25zLnB1c2gocm93LmNlbGxzW2pdLnF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZm9yZVZhbHVlQ2hhbmdlZCh2YWw6IGFueSkge31cbiAgcHJpdmF0ZSBvblNldFF1ZXN0aW9uVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZykgcmV0dXJuO1xuICAgIHRoaXMub25CZWZvcmVWYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICB2YXIgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZUNvcmUocm93LCB2YWwpO1xuICAgIH1cbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgZmFsc2UpO1xuICAgIHRoaXMub25TZXRRdWVzdGlvblZhbHVlKCk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XG4gICAgICBpZiAoIWNlbGxzKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCBjZWxscy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcXVlc3Rpb24gJiZcbiAgICAgICAgICAoIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkgfHwgIXF1ZXN0aW9uLnZhbHVlKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmdldENvbnRhaW5zRXJyb3JzKCkgfHxcbiAgICAgIHRoaXMuY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgICAgIChxdWVzdGlvbjogUXVlc3Rpb24pID0+IHF1ZXN0aW9uLmNvbnRhaW5zRXJyb3JzLFxuICAgICAgICBmYWxzZVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmdldElzQW5zd2VyZWQoKSAmJlxuICAgICAgdGhpcy5jaGVja0ZvckFuc3dlcnNPckVycm9ycyhcbiAgICAgICAgKHF1ZXN0aW9uOiBRdWVzdGlvbikgPT4gcXVlc3Rpb24uaXNBbnN3ZXJlZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0ZvckFuc3dlcnNPckVycm9ycyhcbiAgICBwcmVkaWNhdGU6IChxdWVzdGlvbjogUXVlc3Rpb24pID0+IGJvb2xlYW4sXG4gICAgZXZlcnk6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghY2VsbHNbY29sSW5kZXhdKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICBpZiAocXVlc3Rpb24gJiYgcXVlc3Rpb24uaXNWaXNpYmxlKVxuICAgICAgICAgIGlmIChwcmVkaWNhdGUocXVlc3Rpb24pKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZXJ5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV2ZXJ5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlcnkgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICB2YXIgZXJyb3NJblJvd3MgPSB0aGlzLmhhc0Vycm9ySW5Sb3dzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB2YXIgaXNEdXBsaWNhdGVkID0gdGhpcy5pc1ZhbHVlRHVwbGljYXRlZCgpO1xuICAgIHJldHVybiBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IGVycm9zSW5Sb3dzIHx8IGlzRHVwbGljYXRlZDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICBpZiAoc3VwZXIuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XG4gICAgICBpZiAoIWNlbGxzKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCBjZWxscy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgICAgaWYgKCFjZWxsc1tjb2xJbmRleF0pIGNvbnRpbnVlO1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICAgIGlmICghIXF1ZXN0aW9uICYmIHF1ZXN0aW9uLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHZhciByZXN1bHQgPSBzdXBlci5nZXRBbGxFcnJvcnMoKTtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG5cbiAgICBpZiAocm93cyA9PT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvdy5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZXJyb3JzID0gcm93LmNlbGxzW2pdLnF1ZXN0aW9uLmdldEFsbEVycm9ycygpO1xuICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChlcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvckluUm93cyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIGlmICghcmVjKSByZWMgPSB7fTtcbiAgICByZWMuaXNTaW5nbGVEZXRhaWxQYW5lbCA9IHRoaXMuZGV0YWlsUGFuZWxNb2RlID09PSBcInVuZGVyUm93U2luZ2xlXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPVxuICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgICB9KSB8fCByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuZ2V0VW5pcXVlQ29sdW1ucygpO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9IHRoaXMuaXNWYWx1ZUluQ29sdW1uRHVwbGljYXRlZChjb2x1bW5zW2ldKSB8fCByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlSW5Db2x1bW5EdXBsaWNhdGVkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBib29sZWFuIHtcbiAgICB2YXIga2V5VmFsdWVzID0gPEFycmF5PGFueT4+W107XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzID1cbiAgICAgICAgdGhpcy5pc1ZhbHVlRHVwbGljYXRlZEluUm93KFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0sXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGtleVZhbHVlc1xuICAgICAgICApIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VW5pcXVlQ29sdW1ucygpOiBBcnJheTxNYXRyaXhEcm9wZG93bkNvbHVtbj4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbaV0uaXNVbmlxdWUpIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5jb2x1bW5zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVEdXBsaWNhdGVkSW5Sb3coXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIGtleVZhbHVlczogQXJyYXk8YW55PlxuICApOiBib29sZWFuIHtcbiAgICB2YXIgcXVlc3Rpb24gPSByb3cuZ2V0UXVlc3Rpb25CeUNvbHVtbihjb2x1bW4pO1xuICAgIGlmICghcXVlc3Rpb24gfHwgcXVlc3Rpb24uaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlID0gcXVlc3Rpb24udmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBrZXlWYWx1ZXNbaV0pIHtcbiAgICAgICAgdGhpcy5hZGREdXBsaWNhdGlvbkVycm9yKHF1ZXN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBhZGREdXBsaWNhdGlvbkVycm9yKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHF1ZXN0aW9uLmFkZEVycm9yKG5ldyBLZXlEdXBsaWNhdGlvbkVycm9yKHRoaXMua2V5RHVwbGljYXRpb25FcnJvciwgdGhpcykpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbih0cnVlKTtcbiAgICByZXR1cm4gcXVlc3Rpb24gPyBxdWVzdGlvbi5pbnB1dElkIDogc3VwZXIuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0Q2VsbFF1ZXN0aW9uKG9uRXJyb3I6IGJvb2xlYW4pOiBRdWVzdGlvbiB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghb25FcnJvcikgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbi5jdXJyZW50RXJyb3JDb3VudCA+IDApXG4gICAgICAgICAgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlUm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy52aXNpYmxlUm93c1tpXS5vblF1ZXN0aW9uUmVhZE9ubHlDaGFuZ2VkKHRoaXMuaXNSZWFkT25seSk7XG4gICAgfVxuICB9XG5cbiAgLy9JTWF0cml4RHJvcGRvd25EYXRhXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXN0aW9uQ29yZShyb3csIGNvbHVtbik7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uQ29yZShcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbiA9IGNvbHVtbi5jcmVhdGVDZWxsUXVlc3Rpb24ocm93KTtcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seSA9IHRydWU7XG4gICAgfVxuICAgIHF1ZXN0aW9uLnNldFN1cnZleUltcGwocm93KTtcbiAgICBxdWVzdGlvbi5zZXRQYXJlbnRRdWVzdGlvbih0aGlzKTtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGRlbGV0ZVJvd1ZhbHVlKFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICApOiBhbnkge1xuICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcbiAgICBkZWxldGUgbmV3VmFsdWVbcm93LnJvd05hbWVdO1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0KG5ld1ZhbHVlKSAmJiBPYmplY3Qua2V5cyhuZXdWYWx1ZSkubGVuZ3RoID09IDBcbiAgICAgID8gbnVsbFxuICAgICAgOiBuZXdWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzRG9pbmdvbkFueVZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICB0aGlzLmlzRG9pbmdvbkFueVZhbHVlQ2hhbmdlZCB8fFxuICAgICAgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3NbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICAgIHZhciB0b3RhbFJvdyA9IHRoaXMudmlzaWJsZVRvdGFsUm93O1xuICAgIGlmICghIXRvdGFsUm93KSB7XG4gICAgICB0b3RhbFJvdy5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNPYmplY3QodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgZ2V0UXVlc3Rpb24gPSAoY29sTmFtZTogYW55KSA9PiB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29sID0gcm93LmNlbGxzW2ldLmNvbHVtbjtcbiAgICAgICAgaWYgKCEhY29sICYmIGNvbC5uYW1lID09PSBjb2xOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHJvdy5jZWxsc1tpXS5xdWVzdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcm93OiByb3csXG4gICAgICBjb2x1bW5OYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgcm93VmFsdWU6IHJvd1ZhbHVlLFxuICAgICAgdmFsdWU6ICEhcm93VmFsdWUgPyByb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGwsXG4gICAgICBnZXRDZWxsUXVlc3Rpb246IGdldFF1ZXN0aW9uLFxuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2VsbFZhbHVlQ2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0T25DZWxsVmFsdWVDaGFuZ2VkT3B0aW9ucyhyb3csIGNvbHVtbk5hbWUsIHJvd1ZhbHVlKTtcbiAgICBpZiAoISF0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrKG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleS5tYXRyaXhDZWxsVmFsdWVDaGFuZ2VkKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIHZhbGlkYXRlQ2VsbChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IFN1cnZleUVycm9yIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWxpZGF0ZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBnZXQgaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcgOiBmYWxzZTtcbiAgfVxuICBvblJvd0NoYW5naW5nKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gISFyb3dWYWx1ZSA/IHJvd1ZhbHVlW2NvbHVtbk5hbWVdIDogbnVsbDtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0T25DZWxsVmFsdWVDaGFuZ2VkT3B0aW9ucyhyb3csIGNvbHVtbk5hbWUsIHJvd1ZhbHVlKTtcbiAgICB2YXIgb2xkUm93VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIHRoaXMuY3JlYXRlTmV3VmFsdWUoKSwgdHJ1ZSk7XG4gICAgb3B0aW9ucy5vbGRWYWx1ZSA9ICEhb2xkUm93VmFsdWUgPyBvbGRSb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGw7XG4gICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmcodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudmFsdWU7XG4gIH1cbiAgb25Sb3dDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIG5ld1Jvd1ZhbHVlOiBhbnksXG4gICAgaXNEZWxldGluZ1ZhbHVlOiBib29sZWFuXG4gICkge1xuICAgIHZhciByb3dPYmogPSAhIWNvbHVtbk5hbWUgPyB0aGlzLmdldFJvd09iaihyb3cpIDogbnVsbDtcbiAgICBpZiAoISFyb3dPYmopIHtcbiAgICAgIHZhciBjb2x1bW5WYWx1ZSA9IG51bGw7XG4gICAgICBpZiAoISFuZXdSb3dWYWx1ZSAmJiAhaXNEZWxldGluZ1ZhbHVlKSB7XG4gICAgICAgIGNvbHVtblZhbHVlID0gbmV3Um93VmFsdWVbY29sdW1uTmFtZV07XG4gICAgICB9XG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgICAgcm93T2JqW2NvbHVtbk5hbWVdID0gY29sdW1uVmFsdWU7XG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMub25DZWxsVmFsdWVDaGFuZ2VkKHJvdywgY29sdW1uTmFtZSwgcm93T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSh0cnVlKTtcbiAgICAgIHZhciBjb21iaW5lID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChcbiAgICAgICAgcm93LFxuICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICBuZXdSb3dWYWx1ZSxcbiAgICAgICAgaXNEZWxldGluZ1ZhbHVlLFxuICAgICAgICB0aGlzLmNyZWF0ZU5ld1ZhbHVlKClcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCBjb21iaW5lLnZhbHVlKSkgcmV0dXJuO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUoY29tYmluZS52YWx1ZSk7XG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChjb2x1bW5OYW1lKSB7XG4gICAgICAgIHRoaXMub25DZWxsVmFsdWVDaGFuZ2VkKHJvdywgY29sdW1uTmFtZSwgY29tYmluZS5yb3dWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0TmV3VmFsdWVPblJvd0NoYW5nZWQoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgbmV3Um93VmFsdWU6IGFueSxcbiAgICBpc0RlbGV0aW5nVmFsdWU6IGJvb2xlYW4sXG4gICAgbmV3VmFsdWU6IGFueVxuICApOiBhbnkge1xuICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgbmV3VmFsdWUsIHRydWUpO1xuICAgIGlmIChpc0RlbGV0aW5nVmFsdWUpIHtcbiAgICAgIGRlbGV0ZSByb3dWYWx1ZVtjb2x1bW5OYW1lXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSByb3cuY2VsbHNbaV0ucXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBkZWxldGUgcm93VmFsdWVba2V5XTtcbiAgICB9XG4gICAgaWYgKG5ld1Jvd1ZhbHVlKSB7XG4gICAgICBuZXdSb3dWYWx1ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobmV3Um93VmFsdWUpKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBuZXdSb3dWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KG5ld1Jvd1ZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgcm93VmFsdWVba2V5XSA9IG5ld1Jvd1ZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaXNPYmplY3Qocm93VmFsdWUpICYmIE9iamVjdC5rZXlzKHJvd1ZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5kZWxldGVSb3dWYWx1ZShuZXdWYWx1ZSwgcm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IG5ld1ZhbHVlLCByb3dWYWx1ZTogcm93VmFsdWUgfTtcbiAgfVxuICBnZXRSb3dJbmRleChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiAtMTtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICBpZiAodGhpcy5kZXRhaWxQYW5lbE1vZGUgPT0gXCJub25lXCIpXG4gICAgICByZXR1cm4gc3VwZXIuZ2V0RWxlbWVudHNJbkRlc2lnbihpbmNsdWRlSGlkZGVuKTtcbiAgICByZXR1cm4gaW5jbHVkZUhpZGRlbiA/IFt0aGlzLmRldGFpbFBhbmVsXSA6IHRoaXMuZGV0YWlsRWxlbWVudHM7XG4gIH1cbiAgaGFzRGV0YWlsUGFuZWwocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRldGFpbFBhbmVsTW9kZSA9PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCEhdGhpcy5vbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2spXG4gICAgICByZXR1cm4gdGhpcy5vbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2socm93KTtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxFbGVtZW50cy5sZW5ndGggPiAwO1xuICB9XG4gIGdldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kZXRhaWxQYW5lbE1vZGUgPT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLnZpc2libGVSb3dzLmluZGV4T2Yocm93KSA9PSAwO1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoIXJvdy5kZXRhaWxQYW5lbCkge1xuICAgICAgICAgIHJvdy5zaG93RGV0YWlsUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzUm93U2hvd2luZ1wiICsgcm93LmlkLCBmYWxzZSk7XG4gIH1cbiAgc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgdmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHZhbCA9PSB0aGlzLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdykpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Jvd1Nob3dpbmdcIiArIHJvdy5pZCwgdmFsKTtcbiAgICB0aGlzLnVwZGF0ZURldGFpbFBhbmVsQnV0dG9uQ3NzKHJvdyk7XG4gICAgaWYgKCEhdGhpcy5yZW5kZXJlZFRhYmxlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25EZXRhaWxQYW5lbENoYW5nZVZpc2liaWxpdHkocm93LCB2YWwpO1xuICAgIH1cbiAgICBpZiAodmFsICYmIHRoaXMuZGV0YWlsUGFuZWxNb2RlID09PSBcInVuZGVyUm93U2luZ2xlXCIpIHtcbiAgICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocm93c1tpXS5pZCAhPT0gcm93LmlkICYmIHJvd3NbaV0uaXNEZXRhaWxQYW5lbFNob3dpbmcpIHtcbiAgICAgICAgICByb3dzW2ldLmhpZGVEZXRhaWxQYW5lbCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsQnV0dG9uQ3NzXCIgKyByb3cuaWQpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgcmVzID0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbEJ1dHRvbjtcbiAgICByZXR1cm4gISFyZXMgPyByZXMgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXREZXRhaWxQYW5lbEljb25Dc3Mocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRldGFpbEljb25Dc3NcIiArIHJvdy5pZCk7XG4gICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciByZXMgPSB0aGlzLmNzc0NsYXNzZXMuZGV0YWlsSWNvbjtcbiAgICByZXR1cm4gISFyZXMgPyByZXMgOiBcIlwiO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlRGV0YWlsUGFuZWxCdXR0b25Dc3Mocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSkge1xuICAgIHZhciBjbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHZhciBpY29uID0gY2xhc3Nlcy5kZXRhaWxJY29uO1xuICAgIGlmICghaWNvbikgaWNvbiA9IFwiXCI7XG4gICAgdmFyIGJ1dHRvbiA9IGNsYXNzZXMuZGV0YWlsQnV0dG9uO1xuICAgIGlmICghYnV0dG9uKSBidXR0b24gPSBcIlwiO1xuICAgIGlmICh0aGlzLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdykpIHtcbiAgICAgIGlmICghIWNsYXNzZXMuZGV0YWlsSWNvbkV4cGFuZGVkKVxuICAgICAgICBpY29uICs9IFwiIFwiICsgY2xhc3Nlcy5kZXRhaWxJY29uRXhwYW5kZWQ7XG4gICAgICBpZiAoISFjbGFzc2VzLmRldGFpbEJ1dHRvbkV4cGFuZGVkKVxuICAgICAgICBidXR0b24gKz0gXCIgXCIgKyBjbGFzc2VzLmRldGFpbEJ1dHRvbkV4cGFuZGVkO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxJY29uQ3NzXCIgKyByb3cuaWQsIGljb24pO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbEJ1dHRvbkNzc1wiICsgcm93LmlkLCBidXR0b24pO1xuICB9XG4gIGNyZWF0ZVJvd0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBQYW5lbE1vZGVsIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0aGlzLmRldGFpbFBhbmVsO1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3RGV0YWlsUGFuZWwoKTtcbiAgICB2YXIganNvbiA9IHRoaXMuZGV0YWlsUGFuZWwudG9KU09OKCk7XG4gICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCBwYW5lbCk7XG4gICAgcGFuZWwucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICBwYW5lbC51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgaWYgKCEhdGhpcy5vbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMub25DcmVhdGVEZXRhaWxQYW5lbENhbGxiYWNrKHJvdywgcGFuZWwpO1xuICAgIH1cbiAgICByZXR1cm4gcGFuZWw7XG4gIH1cbiAgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb24ge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIXRoaXMudmFsdWVOYW1lKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldFJvd0luZGV4KHJvdyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxRdWVzdGlvbj4oXG4gICAgICB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lRnJvbUFycmF5KFxuICAgICAgICB0aGlzLnZhbHVlTmFtZSxcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgaW5kZXhcbiAgICAgIClcbiAgICApO1xuICB9XG4gIG9uVG90YWxWYWx1ZUNoYW5nZWQoKTogYW55IHtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuZGF0YSAmJlxuICAgICAgISF0aGlzLnZpc2libGVUb3RhbFJvdyAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiZcbiAgICAgICF0aGlzLmlzU2V0dFxuICAgICkge1xuICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgsXG4gICAgICAgIHRoaXMudG90YWxWYWx1ZSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3NbaW5kZXhdLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICB9XG4gIHByaXZhdGUgaXNNYXRyaXhWYWx1ZUVtcHR5KHZhbDogYW55KSB7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5pc09iamVjdCh2YWxbaV0pICYmIE9iamVjdC5rZXlzKHZhbFtpXSkubGVuZ3RoID4gMClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09IDA7XG4gIH1cblxuICBwcml2YXRlIGdldCBTdXJ2ZXlNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gIH1cbiAgcHVibGljIGdldENlbGxUZW1wbGF0ZURhdGEoY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCkge1xuICAgIC8vIHJldHVybiBjZWxsLmNlbGwuY29sdW1uLnRlbXBsYXRlUXVlc3Rpb247XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0TWF0cml4Q2VsbFRlbXBsYXRlRGF0YShjZWxsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsLCBcImNlbGxcIik7XG4gIH1cbiAgcHVibGljIGdldENlbGxXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgXCJjZWxsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRDb2x1bW5IZWFkZXJXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgXCJjb2x1bW4taGVhZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRDb2x1bW5IZWFkZXJXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgXCJjb2x1bW4taGVhZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRSb3dIZWFkZXJXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgXCJyb3ctaGVhZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRSb3dIZWFkZXJXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGwpIHtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgXCJyb3ctaGVhZGVyXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIixcbiAgW1xuICAgIHsgbmFtZTogXCIhbmFtZVwiLCBpc1VuaXF1ZTogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogKCkgPT4ge1xuICAgICAgICB2YXIgcmVzID0gTWF0cml4RHJvcGRvd25Db2x1bW4uZ2V0Q29sdW1uVHlwZXMoKTtcbiAgICAgICAgcmVzLnNwbGljZSgwLCAwLCBcImRlZmF1bHRcIik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNvbENvdW50XCIsIGRlZmF1bHQ6IC0xLCBjaG9pY2VzOiBbLTEsIDAsIDEsIDIsIDMsIDRdIH0sXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICBcImlzVW5pcXVlOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAgXCJyZWFkT25seTpib29sZWFuXCIsXG4gICAgXCJtaW5XaWR0aFwiLFxuICAgIFwid2lkdGhcIixcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInNob3dJbk11bHRpcGxlQ29sdW1uczpib29sZWFuXCIsXG4gICAgICBkZXBlbmRzT246IFwiY2VsbFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgaWYgKCFvYmopIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9iai5pc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnM7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgICBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0b3RhbFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcInN1bVwiLCBcImNvdW50XCIsIFwibWluXCIsIFwibWF4XCIsIFwiYXZnXCJdLFxuICAgIH0sXG4gICAgXCJ0b3RhbEV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIHsgbmFtZTogXCJ0b3RhbEZvcm1hdFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVG90YWxGb3JtYXRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidG90YWxEaXNwbGF5U3R5bGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRvdGFsQ3VycmVuY3lcIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlY3lDb2RlcygpO1xuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IFwiVVNEXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJyZW5kZXJBc1wiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTtcbiAgfVxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIixcbiAgICAgIGNsYXNzTmFtZTogXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5MYXlvdXRcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJjb2x1bW5zTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgY2hvaWNlczogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkZXRhaWxFbGVtZW50c1wiLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGV0YWlsUGFuZWxNb2RlXCIsXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidW5kZXJSb3dcIiwgXCJ1bmRlclJvd1NpbmdsZVwiXSxcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIH0sXG4gICAgXCJob3Jpem9udGFsU2Nyb2xsOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlW11cIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0tleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZHJvcGRvd25cIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdHJpeERyb3Bkb3duQ29sdW1uLmdldENvbHVtblR5cGVzKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNvbHVtbkNvbENvdW50XCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0XSB9LFxuICAgIFwiY29sdW1uTWluV2lkdGhcIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKFwiXCIpO1xuICB9LFxuICBcIm1hdHJpeGJhc2VcIlxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBJTWF0cml4RHJvcGRvd25EYXRhLFxuICBNYXRyaXhEcm9wZG93bkNvbHVtbixcbn0gZnJvbSBcIi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IE1pblJvd0NvdW50RXJyb3IsIEtleUR1cGxpY2F0aW9uRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29uZmlybUFjdGlvbiB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEeW5hbWljUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLCB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHltYW5pYyBxdWVzdGlvbi4gWW91IG1heSB1c2UgYSBkcm9wZG93biwgY2hlY2tib3gsIHJhZGlvZ3JvdXAsIHRleHQgYW5kIGNvbW1lbnQgcXVlc3Rpb25zIGFzIGEgY2VsbCBlZGl0b3JzLlxuICogQW4gZW5kLXVzZXIgbWF5IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgcm93cywgdW5saWtlIGluIG1hdHJpeCBkcm9wZG93biBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xuICBwdWJsaWMgb25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrOiAoXG4gICAgc2VuZGVyOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICApID0+IGFueTtcbiAgcHJpdmF0ZSByb3dDb3VudGVyID0gMDtcbiAgcHJpdmF0ZSBpbml0aWFsUm93Q291bnQ6IG51bWJlciA9IDI7XG4gIHByaXZhdGUgc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdm9pZCAoPExvY2FsaXphYmxlU3RyaW5nPihcbiAgICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB0aGlzKVxuICAgICkpO1xuICAgIHZhciBsb2NBZGRSb3dUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImFkZFJvd1RleHRcIiwgdGhpcyk7XG4gICAgbG9jQWRkUm93VGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiB0aGlzLmRlZmF1bHRBZGRSb3dUZXh0O1xuICAgIH07XG4gICAgdmFyIGxvY1JlbW92ZVJvd1RleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVtb3ZlUm93VGV4dFwiLCB0aGlzKTtcbiAgICBsb2NSZW1vdmVSb3dUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIik7XG4gICAgfTtcbiAgICB2YXIgbG9jRW1wdHlSb3dzVGV4dCA9IDxMb2NhbGl6YWJsZVN0cmluZz4oXG4gICAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiLCB0aGlzKVxuICAgICk7XG4gICAgbG9jRW1wdHlSb3dzVGV4dC5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZW1wdHlSb3dzVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImhpZGVDb2x1bW5zSWZFbXB0eVwiLCBcImFsbG93QWRkUm93c1wiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHluYW1pY1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSb3dzRHluYW1pYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIHNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nIG9uIHJlbW92aW5nIGEgcm93XG4gICAqIEBzZWUgQ29uZmlybURlbGV0ZVRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgY29uZmlybURlbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBjb25maXJtRGVsZXRlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbmZpcm1EZWxldGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGEgY29sdW1uIG5hbWUgYW5kIHRoZSBsaWJyYXJ5IHNob3dzIGR1cGxpY2F0aW9uIGVycm9yLCBpZiB0aGVyZSBhcmUgc2FtZSB2YWx1ZXMgaW4gZGlmZmVyZW50IHJvd3MgaW4gdGhlIGNvbHVtbi5cbiAgICogQHNlZSBrZXlEdXBsaWNhdGlvbkVycm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIElmIGl0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGlzIHZhbHVlIGlzIHNldCB0byBldmVyeSBuZXcgcm93LCBpbmNsdWRpbmcgcm93cyBjcmVhdGVkIGluaXRpYWxseSwgdW5sZXNzIHRoZSBkZWZhdWx0VmFsdWUgaXMgbm90IGVtcHR5XG4gICAqIEBzZWUgZGVmYXVsdFZhbHVlXG4gICAqIEBzZWUgZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3dcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFJvd1ZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRSb3dWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRSb3dWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRSb3dWYWx1ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBjb3B5IHRoZSB2YWx1ZSBpbnRvIG5ldyBhZGRlZCByb3cgZnJvbSB0aGUgbGFzdCByb3cuIElmIGRlZmF1bHRSb3dWYWx1ZSBpcyBzZXQgYW5kIHRoaXMgcHJvcGVydHkgZXF1YWxzIHRvIHRydWUsXG4gICAqIHRoZW4gdGhlIHZhbHVlIGZvciBuZXcgYWRkZWQgcm93IGlzIG1lcmdpbmcuXG4gICAqIEBzZWUgZGVmYXVsdFZhbHVlXG4gICAqIEBzZWUgZGVmYXVsdFJvd1ZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFJvd1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWVGcm9tTGFzdFJvdyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFJvd1wiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBpc0RlZmF1bHRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0Um93VmFsdWUpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMubWluUm93Q291bnQgPCAxKSByZXR1cm4gc3VwZXIudmFsdWVGcm9tRGF0YSh2YWwpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB2YWwgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gdmFsLmxlbmd0aDsgaSA8IHRoaXMubWluUm93Q291bnQ7IGkrKykgdmFsLnB1c2goe30pO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRSb3dWYWx1ZSkgfHxcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMucm93Q291bnQgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dDb3VudDsgaSsrKSB7XG4gICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMuZGVmYXVsdFJvd1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBpc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gc3VwZXIuaXNFZGl0aW5nU3VydmV5RWxlbWVudCh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LlxuICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAqIEBzZWUgbWF4Um93Q291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcm93Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDb3VudFZhbHVlO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvd0NvdW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93Q291bnRcIiwgMik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcm93Q291bnRWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd0NvdW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhID0gZmFsc2U7XG4gICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiB2YWwpIHtcbiAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gcVZhbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuaW5pdGlhbFJvd0NvdW50ID0gdmFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCBwcmV2VmFsdWUgPT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKHZhbCk7XG4gICAgICBmb3IgKHZhciBpID0gcHJldlZhbHVlOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgICAgdmFyIG5ld1JvdyA9IHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0VmFsdWVGb3JOZXdSb3coKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRm9yTmV3Um93KCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5vbkdldFZhbHVlRm9yTmV3Um93Q2FsbEJhY2spIHtcbiAgICAgIHJlcyA9IHRoaXMub25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSByb3cgY291bnQuIEEgdXNlciBjb3VsZCBub3QgZGVsZXRlIGEgcm93IGlmIHRoZSByb3dDb3VudCBlcXVhbHMgdG8gbWluUm93Q291bnRcbiAgICogQHNlZSByb3dDb3VudFxuICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblJvd0NvdW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluUm93Q291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgdmFsID0gMDtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5Sb3dDb3VudFwiLCB2YWwpO1xuICAgIGlmICh2YWwgPiB0aGlzLm1heFJvd0NvdW50KSB0aGlzLm1heFJvd0NvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnJvd0NvdW50IDwgdmFsKSB0aGlzLnJvd0NvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSByb3cgY291bnQuIEEgdXNlciBjb3VsZCBub3QgYWRkIGEgcm93IGlmIHRoZSByb3dDb3VudCBlcXVhbHMgdG8gbWF4Um93Q291bnRcbiAgICogQHNlZSByb3dDb3VudFxuICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFJvd0NvdW50XCIsIHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhSb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPD0gMCkgcmV0dXJuO1xuICAgIGlmICh2YWwgPiBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQpXG4gICAgICB2YWwgPSBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQ7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm1heFJvd0NvdW50KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4Um93Q291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsIDwgdGhpcy5taW5Sb3dDb3VudCkgdGhpcy5taW5Sb3dDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA+IHZhbCkgdGhpcy5yb3dDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSBhYmlsaXR5IHRvIGFkZCBuZXcgcm93cy4gXCJBZGQgbmV3IFJvd1wiIGJ1dHRvbiBiZWNvbWVzIGludnNpYmxlIGluIFVJXG4gICAqIEBzZWUgY2FuQWRkUm93XG4gICAqIEBzZWUgYWxsb3dSZW1vdmVSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93QWRkUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRSb3dzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dBZGRSb3dzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRkUm93c1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBkaXNhYmxlIGFiaWxpdHkgdG8gcmVtb3ZlIHJvd3MuIFwiUmVtb3ZlXCIgcm93IGJ1dHRvbnMgYmVjb21lIGludnNpYmxlIGluIFVJXG4gICAqIEBzZWUgY2FuUmVtb3ZlUm93c1xuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd1JlbW92ZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUm93c1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93UmVtb3ZlUm93cyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd1JlbW92ZVJvd3NcIiwgdmFsKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbmV3IHJvdyBjYW4gYmUgYWRkZWQuXG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqIEBzZWUgbWF4Um93Q291bnRcbiAgICogQHNlZSBjYW5SZW1vdmVSb3dzXG4gICAqIEBzZWUgcm93Q291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuQWRkUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93QWRkUm93cyAmJiAhdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMucm93Q291bnQgPCB0aGlzLm1heFJvd0NvdW50XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiByb3cgY2FuIGJlIHJlbW92ZWQuXG4gICAqIEBzZWUgbWluUm93Q291bnRcbiAgICogQHNlZSBjYW5BZGRSb3dcbiAgICogQHNlZSByb3dDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBjYW5SZW1vdmVSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93UmVtb3ZlUm93cyAmJlxuICAgICAgIXRoaXMuaXNSZWFkT25seSAmJlxuICAgICAgdGhpcy5yb3dDb3VudCA+IHRoaXMubWluUm93Q291bnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhBbGxvd1JlbW92ZVJvdyhcbiAgICAgIHRoaXMsXG4gICAgICAoPE1hdHJpeER5bmFtaWNSb3dNb2RlbD5yb3cpLmluZGV4LFxuICAgICAgcm93XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBhZGQgYSBuZXcgcm93LlxuICAgKi9cbiAgcHVibGljIGFkZFJvdygpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgcXVlc3Rpb246IHRoaXMsIGNhbkFkZFJvdzogdGhpcy5jYW5BZGRSb3cgfTtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4QmVmb3JlUm93QWRkZWQob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5jYW5BZGRSb3cpIHJldHVybjtcbiAgICB0aGlzLm9uU3RhcnRSb3dBZGRpbmdSZW1vdmluZygpO1xuICAgIHRoaXMuYWRkUm93Q29yZSgpO1xuICAgIHRoaXMub25FbmRSb3dBZGRpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUm93c0FzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyB1bmJpbmRWYWx1ZSgpIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMuY2xlYXJQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIik7XG4gICAgdGhpcy5yb3dDb3VudFZhbHVlID0gMDtcbiAgICBzdXBlci51bmJpbmRWYWx1ZSgpO1xuICB9XG4gIHByaXZhdGUgYWRkUm93Q29yZSgpIHtcbiAgICB2YXIgcHJldlJvd0NvdW50ID0gdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd0NvdW50ID0gdGhpcy5yb3dDb3VudCArIDE7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKHRydWUpO1xuICAgIHZhciBuZXdWYWx1ZSA9IG51bGw7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gdGhpcy5yb3dDb3VudCkge1xuICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLnJ1bkNlbGxzQ29uZGl0aW9uKFxuICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICAgKTtcbiAgICAgIHZhciByb3cgPSB0aGlzLnZpc2libGVSb3dzW3RoaXMucm93Q291bnQgLSAxXTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkocm93LnZhbHVlKSkge1xuICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmlzRWRpdGluZ1N1cnZleUVsZW1lbnQobmV3VmFsdWUpICYmXG4gICAgICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSwgcm93LnZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSA9IHJvdy52YWx1ZTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICBpZiAocHJldlJvd0NvdW50ICsgMSA9PSB0aGlzLnJvd0NvdW50KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeFJvd0FkZGVkKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy52aXNpYmxlUm93c1t0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDFdXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldERlZmF1bHRSb3dWYWx1ZShpc1Jvd0FkZGVkOiBib29sZWFuKTogYW55IHtcbiAgICB2YXIgcmVzID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSB0aGlzLmNvbHVtbnNbaV0udGVtcGxhdGVRdWVzdGlvbjtcbiAgICAgIGlmICghIXEgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KHEuZ2V0RGVmYXVsdFZhbHVlKCkpKSB7XG4gICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgKDxhbnk+cmVzKVt0aGlzLmNvbHVtbnNbaV0ubmFtZV0gPSBxLmdldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSB7XG4gICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgKDxhbnk+cmVzKVtrZXldID0gdGhpcy5kZWZhdWx0Um93VmFsdWVba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzUm93QWRkZWQgJiYgdGhpcy5kZWZhdWx0VmFsdWVGcm9tTGFzdFJvdykge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoISF2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPj0gdGhpcy5yb3dDb3VudCAtIDEpIHtcbiAgICAgICAgdmFyIHJvd1ZhbHVlID0gdmFsW3RoaXMucm93Q291bnQgLSAyXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSB7XG4gICAgICAgICAgcmVzID0gcmVzIHx8IHt9O1xuICAgICAgICAgICg8YW55PnJlcylba2V5XSA9IHJvd1ZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJvdyBieSBpdCdzIGluZGV4LiBJZiBjb25maXJtRGVsZXRlIGlzIHRydWUsIHNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAqIEBwYXJhbSBpbmRleCBhIHJvdyBpbmRleCwgZnJvbSAwIHRvIHJvd0NvdW50IC0gMVxuICAgKiBAc2VlIHJlbW92ZVJvd1xuICAgKiBAc2VlIGNvbmZpcm1EZWxldGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVSb3dVSSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdmFsdWUgJiYgISF2YWx1ZS5yb3dOYW1lKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnZpc2libGVSb3dzLmluZGV4T2YodmFsdWUpO1xuICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgICAgdmFsdWUgPSBpbmRleDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNSZXF1aXJlQ29uZmlybU9uUm93RGVsZXRlKHZhbHVlKSB8fFxuICAgICAgY29uZmlybUFjdGlvbih0aGlzLmNvbmZpcm1EZWxldGVUZXh0KVxuICAgICkge1xuICAgICAgdGhpcy5yZW1vdmVSb3codmFsdWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaXNSZXF1aXJlQ29uZmlybU9uUm93RGVsZXRlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybURlbGV0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dDb3VudCkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA+PSB2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlW2luZGV4XSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByb3cgYnkgaXQncyBpbmRleC5cbiAgICogQHBhcmFtIGluZGV4IGEgcm93IGluZGV4LCBmcm9tIDAgdG8gcm93Q291bnQgLSAxXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVtb3ZlUm93cykgcmV0dXJuO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dDb3VudCkgcmV0dXJuO1xuICAgIHZhciByb3cgPVxuICAgICAgISF0aGlzLnZpc2libGVSb3dzICYmIGluZGV4IDwgdGhpcy52aXNpYmxlUm93cy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLnZpc2libGVSb3dzW2luZGV4XVxuICAgICAgICA6IG51bGw7XG4gICAgaWYgKFxuICAgICAgISFyb3cgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICF0aGlzLnN1cnZleS5tYXRyaXhSb3dSZW1vdmluZyh0aGlzLCBpbmRleCwgcm93KVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm9uU3RhcnRSb3dBZGRpbmdSZW1vdmluZygpO1xuICAgIHRoaXMucmVtb3ZlUm93Q29yZShpbmRleCk7XG4gICAgdGhpcy5vbkVuZFJvd1JlbW92aW5nKHJvdyk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVSb3dDb3JlKGluZGV4OiBudW1iZXIpIHtcbiAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1xuICAgICAgPyB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2luZGV4XVxuICAgICAgOiBudWxsO1xuICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzICYmIGluZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5yb3dDb3VudFZhbHVlLS07XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHZhciB2YWwgPSBbXTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIGluZGV4IDwgdGhpcy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFsID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdmFsID0gdGhpcy5kZWxldGVSb3dWYWx1ZSh2YWwsIG51bGwpO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhSb3dSZW1vdmVkKHRoaXMsIGluZGV4LCByb3cpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRleHQgc2hvd2luZyBpbiB0aGUgY29uZmlybWF0aW9uIGRlbGV0ZSBkaWFsb2cgb24gcmVtb3ZpbmcgYSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtRGVsZXRlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NDb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYWRkIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJhZGRSb3dUZXh0XCIsIHRoaXMuZGVmYXVsdEFkZFJvd1RleHQpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWRkUm93VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiYWRkUm93VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NBZGRSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiYWRkUm93VGV4dFwiKTtcbiAgfVxuICBwcml2YXRlIGdldCBkZWZhdWx0QWRkUm93VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFxuICAgICAgdGhpcy5pc0NvbHVtbkxheW91dEhvcml6b250YWwgPyBcImFkZFJvd1wiIDogXCJhZGRDb2x1bW5cIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlICdBZGQgUm93JyBidXR0b24gaXMgc2hvd24gb24gYm90dG9tIGlmIGNvbHVtbkxheW91dCBpcyBob3Jpem9udGFsIGFuZCBvbiB0b3AgaWYgY29sdW1uTGF5b3V0IGlzIHZlcnRpY2FsLiA8YnIvPlxuICAgKiBZb3UgbWF5IHNldCBpdCB0byBcInRvcFwiLCBcImJvdHRvbVwiIG9yIFwidG9wQm90dG9tXCIgKHRvIHNob3cgb24gdG9wIGFuZCBib3R0b20pLlxuICAgKiBAc2VlIGNvbHVtbkxheW91dFxuICAgKi9cbiAgcHVibGljIGdldCBhZGRSb3dMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhZGRSb3dMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFkZFJvd0xvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWRkUm93TG9jYXRpb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0QWRkUm93TG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGRSb3dMb2NhdGlvbjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBoaWRlIG1hdHJpeCBjb2x1bW5zIHdoZW4gdGhlcmUgaXMgbm8gYW55IHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZUNvbHVtbnNJZkVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoaWRlQ29sdW1uc0lmRW1wdHlcIik7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlQ29sdW1uc0lmRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUNvbHVtbnNJZkVtcHR5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFNob3dDb2x1bW5zSWZFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oaWRlQ29sdW1uc0lmRW1wdHk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiByZW1vdmUgcm93IGJ1dHRvbiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZW1vdmVSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicmVtb3ZlUm93VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZVJvd1wiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCByZW1vdmVSb3dUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZW1vdmVSb3dUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1JlbW92ZVJvd1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZW1vdmVSb3dUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW1wdHlSb3dzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImVtcHR5Um93c1RleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlbXB0eVJvd3NUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVtcHR5Um93c1RleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImVtcHR5Um93c1RleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jRW1wdHlSb3dzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImVtcHR5Um93c1RleHRcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbCA9IHZhbHVlc1tpXTtcbiAgICAgIGlmICghdmFsKSBjb250aW51ZTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMuZ2V0Um93RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHJvd3NbaV0sIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0ID8gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29udGV4dCkgPiAtMSA6IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgdGhpcy5hZGRDb2x1bW5JbnRvYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzLCAwLCBjb2x1bW4pO1xuICAgICAgaWYgKGhhc0NvbnRleHQgJiYgY29sdW1uICE9IGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5JbnRvYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzLCAtMSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBqID0gMTtcbiAgICAgICAgaiA8IE1hdGgubWluKHNldHRpbmdzLm1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb24sIHRoaXMucm93Q291bnQpO1xuICAgICAgICBqKytcbiAgICAgICkge1xuICAgICAgICB0aGlzLmFkZENvbHVtbkludG9hZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KG9iamVjdHMsIGosIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkQ29sdW1uSW50b2FkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICkge1xuICAgIHZhciByb3dOYW1lID0gcm93SW5kZXggPiAtMSA/IFwiW1wiICsgcm93SW5kZXgudG9TdHJpbmcoKSArIFwiXS5cIiA6IFwicm93LlwiO1xuICAgIG9iamVjdHMucHVzaCh7XG4gICAgICBuYW1lOlxuICAgICAgICAocm93SW5kZXggPiAtMSA/IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyByb3dOYW1lIDogcm93TmFtZSkgKyBjb2x1bW4ubmFtZSxcbiAgICAgIHRleHQ6XG4gICAgICAgIChyb3dJbmRleCA+IC0xID8gdGhpcy5wcm9jZXNzZWRUaXRsZSArIHJvd05hbWUgOiByb3dOYW1lKSArXG4gICAgICAgIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKCFpc09uVmFsdWVDaGFuZ2VkICYmIHRoaXMuaGFzRXJyb3JJbk1pblJvd3MoKSkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IE1pblJvd0NvdW50RXJyb3IodGhpcy5taW5Sb3dDb3VudCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5NaW5Sb3dzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDw9IDAgfHwgIXRoaXMuaXNSZXF1aXJlZCB8fCAhdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc2V0Um93Q291bnQgPSAwO1xuICAgIGZvciAoXG4gICAgICB2YXIgcm93SW5kZXggPSAwO1xuICAgICAgcm93SW5kZXggPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDtcbiAgICAgIHJvd0luZGV4KytcbiAgICApIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW3Jvd0luZGV4XTtcbiAgICAgIGlmICghcm93LmlzRW1wdHkpIHNldFJvd0NvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBzZXRSb3dDb3VudCA8IHRoaXMubWluUm93Q291bnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVuaXF1ZUNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0VW5pcXVlQ29sdW1ucygpO1xuICAgIGlmICghIXRoaXMua2V5TmFtZSkge1xuICAgICAgbGV0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKHRoaXMua2V5TmFtZSk7XG4gICAgICBpZiAoISFjb2x1bW4gJiYgcmVzLmluZGV4T2YoY29sdW1uKSA8IDApIHtcbiAgICAgICAgcmVzLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4RHluYW1pY1Jvd01vZGVsPigpO1xuICAgIGlmICh0aGlzLnJvd0NvdW50ID09PSAwKSByZXR1cm4gcmVzdWx0O1xuICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KHZhbCwgaSkpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmdldERlZmF1bHRSb3dWYWx1ZShmYWxzZSkpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3codmFsdWU6IGFueSk6IE1hdHJpeER5bmFtaWNSb3dNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEeW5hbWljUm93TW9kZWwodGhpcy5yb3dDb3VudGVyKyssIHRoaXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm47XG4gICAgdmFyIG5ld1Jvd0NvdW50ID0gdmFsLmxlbmd0aDtcbiAgICBpZiAobmV3Um93Q291bnQgPT0gdGhpcy5yb3dDb3VudCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5zZXRSb3dDb3VudFZhbHVlRnJvbURhdGEgJiYgbmV3Um93Q291bnQgPCB0aGlzLmluaXRpYWxSb3dDb3VudClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnNldFJvd0NvdW50VmFsdWVGcm9tRGF0YSA9IHRydWU7XG4gICAgdGhpcy5yb3dDb3VudFZhbHVlID0gbmV3Um93Q291bnQ7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcbiAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAoIXJlc3VsdCB8fCAhQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXN1bHQgPSBbXTtcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IHRoaXMucm93Q291bnQpIHJlc3VsdC5zcGxpY2UodGhpcy5yb3dDb3VudCk7XG4gICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXREZWZhdWx0Um93VmFsdWUoZmFsc2UpO1xuICAgIHJvd1ZhbHVlID0gcm93VmFsdWUgfHwge307XG4gICAgZm9yICh2YXIgaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2V0VW5iaW5kVmFsdWUocm93VmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUoXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IGFueSB7XG4gICAgdmFyIGlzRW1wdHkgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG5ld1ZhbHVlW2ldKSAmJiBPYmplY3Qua2V5cyhuZXdWYWx1ZVtpXSkubGVuZ3RoID4gMCkge1xuICAgICAgICBpc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNFbXB0eSA/IG51bGwgOiBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocXVlc3Rpb25WYWx1ZSkgJiZcbiAgICAgIGluZGV4ID49IDAgJiZcbiAgICAgIGluZGV4IDwgcXVlc3Rpb25WYWx1ZS5sZW5ndGhcbiAgICAgID8gcXVlc3Rpb25WYWx1ZVtpbmRleF1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWVDb3JlKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcXVlc3Rpb25WYWx1ZTogYW55LFxuICAgIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4ge307XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KFxuICAgICAgcXVlc3Rpb25WYWx1ZSxcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpXG4gICAgKTtcbiAgICBpZiAoIXJlcyAmJiBjcmVhdGUpIHJlcyA9IHt9O1xuICAgIHJldHVybiByZXM7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkeW5hbWljXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dBZGRSb3dzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVJvd3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcInJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAyLCBtaW5WYWx1ZTogMCwgaXNCaW5kYWJsZTogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJtaW5Sb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFJvd0NvdW50Om51bWJlclwiLFxuICAgICAgZGVmYXVsdDogc2V0dGluZ3MubWF0cml4TWF4aW11bVJvd0NvdW50LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImtleU5hbWVcIiB9LFxuICAgIFwiZGVmYXVsdFJvd1ZhbHVlOnJvd3ZhbHVlXCIsXG4gICAgXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFJvdzpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcImNvbmZpcm1EZWxldGU6Ym9vbGVhblwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb25maXJtRGVsZXRlVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImNvbmZpcm1EZWxldGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmNvbmZpcm1EZWxldGU7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFkZFJvd0xvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJ0b3BCb3R0b21cIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiYWRkUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQWRkUm93VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInJlbW92ZVJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlbW92ZVJvd1RleHRcIiB9LFxuICAgIFwiaGlkZUNvbHVtbnNJZkVtcHR5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImVtcHR5Um93c1RleHQ6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0VtcHR5Um93c1RleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoaWRlQ29sdW1uc0lmRW1wdHlcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmhpZGVDb2x1bW5zSWZFbXB0eTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQge1xuICBCYXNlLFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleUltcGwsXG4gIElTdXJ2ZXksXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIFN1cnZleUVsZW1lbnQsXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUHJvZ3Jlc3NJbmZvLFxufSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciB9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl90ZXh0XCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IEFuc3dlclJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciwgSVBhbmVsIHtcbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXk7XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3I7XG4gIGdldEFsbFZhbHVlcygpOiBhbnk7XG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciwgSVN1cnZleURhdGEsIElTdXJ2ZXlJbXBsIHtcbiAgcHJpdmF0ZSBlZGl0b3JWYWx1ZTogUXVlc3Rpb25UZXh0TW9kZWw7XG4gIHByaXZhdGUgZGF0YTogSU11bHRpcGxlVGV4dERhdGE7XG5cbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChuZXdWYWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVkaXRvclZhbHVlID0gdGhpcy5jcmVhdGVFZGl0b3IobmFtZSk7XG4gICAgdGhpcy5lZGl0b3IucXVlc3Rpb25UaXRsZVRlbXBsYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IudGl0bGVMb2NhdGlvbiA9IFwibGVmdFwiO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlkO1xuICB9XG4gIHB1YmxpYyBnZXRPcmlnaW5hbE9iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5uYW1lID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiA8UXVlc3Rpb24+KDxhbnk+dGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvcihuYW1lOiBzdHJpbmcpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHRoaXMuZWRpdG9yLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMuZWRpdG9yLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYgKCEhZGF0YSkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVmYXVsdFZhbHVlID0gZGF0YS5nZXRJdGVtRGVmYXVsdFZhbHVlKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmVkaXRvci5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgdGhpcy5lZGl0b3IucGFyZW50ID0gZGF0YTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIG1ha2UgdGhlIGl0ZW0gYSByZXF1aXJlZC4gSWYgYSB1c2VyIGRvZXNuJ3QgZmlsbCB0aGUgaXRlbSB0aGVuIGEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5lZGl0b3IuaXNSZXF1aXJlZCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5pbnB1dFR5cGU7XG4gIH1cbiAgcHVibGljIHNldCBpbnB1dFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5pbnB1dFR5cGUgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIEl0ZW0gdGl0bGUuIElmIGl0IGlzIGVtcHR5LCB0aGUgaXRlbSBuYW1lIGlzIHJlbmRlcmVkIGFzIHRpdGxlLiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIG1hcmtkb3duLlxuICAgKiBAc2VlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnRpdGxlID0gdmFsO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgb3IgaHRtbCBmb3IgcmVuZGVyaW5nIHRoZSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmZ1bGxUaXRsZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubWF4TGVuZ3RoO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3IubWF4TGVuZ3RoID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRNYXhMZW5ndGgoKTogYW55IHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gSGVscGVycy5nZXRNYXhMZW5ndGgoXG4gICAgICB0aGlzLm1heExlbmd0aCxcbiAgICAgIHN1cnZleSA/IHN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5wbGFjZUhvbGRlcjtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucGxhY2VIb2xkZXIgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUGxhY2VIb2xkZXI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGV4dCB0aGF0IHdpbGwgYmUgc2hvd24gb24gcmVxdWlyZWQgZXJyb3IuIFVzZSB0aGlzIHByb3BlcnR5LCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5yZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucmVxdWlyZWRFcnJvclRleHQgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1JlcXVpcmVkRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnNpemU7XG4gIH1cbiAgcHVibGljIHNldCBzaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2l6ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XG4gICAgdGhpcy5lZGl0b3IudmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaXRlbSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlzRW1wdHkoKTtcbiAgfVxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgfVxuICAvL0lTdXJ2ZXlJbXBsXG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFRleHRQcm9jZXNzb3IoKSA6IG51bGw7XG4gIH1cbiAgLy9JU3VydmV5RGF0YVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWUpO1xuICB9XG4gIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykge31cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGF0YSkgcmV0dXJuIHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFZhbHVlcygpO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIC8vSVZhbGlkYXRvck93bmVyXG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHZhbGlkYXRlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICB9XG4gIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgbXVsdGlwbGUgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhLCBJUGFuZWwge1xuICBwdWJsaWMgc3RhdGljIGFkZERlZmF1bHRJdGVtcyhxdWVzdGlvbjogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCkge1xuICAgIHZhciBuYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0TXV0bGlwbGVUZXh0SXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgcXVlc3Rpb24uYWRkSXRlbShuYW1lc1tpXSk7XG4gIH1cblxuICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIsIChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGl0ZW0uc2V0RGF0YSh0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaXRlbXNcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNvbENvdW50XCIsICgpID0+IHtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpdGVtU2l6ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1zU2l6ZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0XCI7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLnNldERhdGEodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMuZWRpdG9yc09uU3VydmV5TG9hZCgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkoaXRlbS52YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci5vblN1cnZleVZhbHVlQ2hhbmdlZChpdGVtLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUl0ZW1zU2l6ZSgpIHtcbiAgICB0aGlzLnBlcmZvcm1Gb3JFdmVyeUVkaXRvcigoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsKTogdm9pZCA9PiB7XG4gICAgICBpdGVtLmVkaXRvci51cGRhdGVJbnB1dFNpemUoKTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGVkaXRvcnNPblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yRXZlcnlFZGl0b3IoKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgaXRlbS5lZGl0b3Iub25TdXJ2ZXlMb2FkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBwZXJmb3JtRm9yRXZlcnlFZGl0b3IoZnVuYzogKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCkgPT4gdm9pZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0uZWRpdG9yKSB7XG4gICAgICAgIGZ1bmMoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpbnB1dCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXRlbXModmFsOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IHRleHQgaXRlbS5cbiAgICogQHBhcmFtIG5hbWUgYSBpdGVtIG5hbWVcbiAgICogQHBhcmFtIHRpdGxlIGEgaXRlbSB0aXRsZSAob3B0aW9uYWwpXG4gICAqL1xuICBwdWJsaWMgYWRkSXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlVGV4dEl0ZW0obmFtZSwgdGl0bGUpO1xuICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5pdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgaXRlbS5uYW1lLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCIuXCIgKyBpdGVtLmZ1bGxUaXRsZSxcbiAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5TmFtZShwYXRoKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QoaXRlbSk7XG4gICAganNvbltcInR5cGVcIl0gPSBcInRleHRcIjtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucy4gSXRlbXMgYXJlIHJlbmRyZWQgaW4gb25lIGxpbmUgaWYgdGhlIHZhbHVlIGlzIDAuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMSB8fCB2YWwgPiA1KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdGV4dCBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBpdGVtU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtU2l6ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1TaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiByZW5kZXJlZCByb3dzLlxuICAgKi9cbiAgcHVibGljIGdldFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICByb3dzLnB1c2goW10pO1xuICAgICAgfVxuICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdLnB1c2goaXRlbXNbaV0pO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBjb2xDb3VudCkge1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG4gIHByaXZhdGUgaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25JdGVtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVRleHRJdGVtKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwobmFtZSwgdGl0bGUpO1xuICB9XG4gIHByb3RlY3RlZCBvbkl0ZW1WYWx1ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbVZhbHVlID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMuaXRlbXNbaV0ubmFtZSBpbiB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGl0ZW1WYWx1ZSA9IHRoaXMudmFsdWVbdGhpcy5pdGVtc1tpXS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXRlbXNbaV0ub25WYWx1ZUNoYW5nZWQoaXRlbVZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS5lZGl0b3IuaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gKFxuICAgICAgICBoYXNFcnJvcnM6IGJvb2xlYW5cbiAgICAgICkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgIH07XG4gICAgICBpZiAoXG4gICAgICAgICEhcmVjICYmXG4gICAgICAgIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlICYmXG4gICAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLmlzRW1wdHkoKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJlcyA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXJyb3JzID0gdGhpcy5pdGVtc1tpXS5lZGl0b3IuZ2V0QWxsRXJyb3JzKCk7XG4gICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgc3VwZXIuY2xlYXJFcnJvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uZWRpdG9yLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb250YWluc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0Q29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmVkaXRvci5jb250YWluc0Vycm9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNBbnN3ZXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLmdldElzQW5zd2VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVkaXRvciA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yO1xuICAgICAgaWYgKGVkaXRvci5pc1Zpc2libGUgJiYgIWVkaXRvci5pc0Fuc3dlcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKHRoaXMuaXRlbXNbaV0uZWRpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnQuZ2V0UHJvZ3Jlc3NJbmZvQnlFbGVtZW50cyhlbGVtZW50cywgdGhpcy5pc1JlcXVpcmVkKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgdmFyIHZhbCA9IHZhbHVlW2l0ZW0ubmFtZV07XG4gICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgY29udGludWU7XG4gICAgICB2YXIgaXRlbU5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIWl0ZW0udGl0bGUpIHtcbiAgICAgICAgaXRlbU5hbWUgPSBpdGVtLnRpdGxlO1xuICAgICAgfVxuICAgICAgKDxhbnk+cmVzKVtpdGVtTmFtZV0gPSBpdGVtLmVkaXRvci5nZXREaXNwbGF5VmFsdWUoa2V5c0FzVGV4dCwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvL0lNdWx0aXBsZVRleHREYXRhXG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVbbmFtZV07XG4gIH1cbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIG5ld1ZhbHVlID0ge307XG4gICAgfVxuICAgIG5ld1ZhbHVlW25hbWVdID0gdmFsdWU7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5pc011bHRpcGxlSXRlbVZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kZWZhdWx0VmFsdWUgPyB0aGlzLmRlZmF1bHRWYWx1ZVtuYW1lXSA6IG51bGw7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xuICB9XG4gIC8vSVBhbmVsXG4gIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHt9XG4gIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibGVmdFwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCkge31cbiAgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGluZGV4T2YoZWw6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgZW5zdXJlUm93c1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibXVsdGlwbGV0ZXh0aXRlbVwiLFxuICBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImlucHV0VHlwZVwiLFxuICAgICAgZGVmYXVsdDogXCJ0ZXh0XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIFwiY29sb3JcIixcbiAgICAgICAgXCJkYXRlXCIsXG4gICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwibW9udGhcIixcbiAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgICBcInJhbmdlXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGV4dFwiLFxuICAgICAgICBcInRpbWVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcIm1heExlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwic2l6ZTpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgICBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKFwiXCIpO1xuICB9XG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm11bHRpcGxldGV4dFwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFpdGVtczp0ZXh0aXRlbXNcIiwgY2xhc3NOYW1lOiBcIm11bHRpcGxldGV4dGl0ZW1cIiB9LFxuICAgIHsgbmFtZTogXCJpdGVtU2l6ZTpudW1iZXJcIiwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIGNob2ljZXM6IFsxLCAyLCAzLCA0LCA1XSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChuYW1lKTtcbiAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbC5hZGREZWZhdWx0SXRlbXMocSk7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBCYXNlLFxuICBJUGFuZWwsXG4gIFN1cnZleUVycm9yLFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleSxcbiAgSVN1cnZleUltcGwsXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUHJvZ3Jlc3NJbmZvLFxuICBTdXJ2ZXlFbGVtZW50LFxufSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBUZXh0UHJlUHJvY2Vzc29yVmFsdWUsXG4gIFF1ZXN0aW9uVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gXCIuL2tub2Nrb3V0L2tvcGFnZVwiO1xuaW1wb3J0IHsgY29uZmlybUFjdGlvbiB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSB7XG4gIGdldEl0ZW1JbmRleChpdGVtOiBJU3VydmV5RGF0YSk6IG51bWJlcjtcbiAgZ2V0UGFuZWxJdGVtRGF0YShpdGVtOiBJU3VydmV5RGF0YSk6IGFueTtcbiAgc2V0UGFuZWxJdGVtRGF0YShpdGVtOiBJU3VydmV5RGF0YSwgbmFtZTogc3RyaW5nLCB2YWw6IGFueSk6IGFueTtcbiAgZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkobmFtZTogc3RyaW5nLCBwYW5lbEluZGV4OiBudW1iZXIpOiBRdWVzdGlvbjtcbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXk7XG4gIGdldFJvb3REYXRhKCk6IElTdXJ2ZXlEYXRhO1xufVxuXG5jbGFzcyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yIGV4dGVuZHMgUXVlc3Rpb25UZXh0UHJvY2Vzc29yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhOiBJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhLFxuICAgIHByb3RlY3RlZCBwYW5lbEl0ZW06IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSxcbiAgICBwcm90ZWN0ZWQgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEl0ZW0uZ2V0U3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEl0ZW0ucGFuZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGFuZWxJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRJdGVtSW5kZXgodGhpcy5wYW5lbEl0ZW0pIDogLTE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnBhbmVsSXRlbS5nZXRBbGxWYWx1ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5wYW5lbEluZGV4O1xuICAgIHJldHVybiBpbmRleCA+IC0xXG4gICAgICA/IHRoaXMuZGF0YS5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShuYW1lLCBpbmRleClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25DdXN0b21Qcm9jZXNzVGV4dCh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0ZXh0VmFsdWUubmFtZSA9PSBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSW5kZXhWYXJpYWJsZU5hbWUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMucGFuZWxJbmRleDtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IGluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRleHRWYWx1ZS5uYW1lLmluZGV4T2YoXG4gICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lICsgXCIuXCJcbiAgICAgICkgPT0gMFxuICAgICkge1xuICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+KDxhbnk+dGhpcy5kYXRhKTtcbiAgICAgIGlmICghIXEgJiYgISFxLnBhcmVudFF1ZXN0aW9uICYmICEhcS5wYXJlbnQpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAoPGFueT5xLnBhcmVudCkuZGF0YTtcbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yKFxuICAgICAgICAgIDxJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhPig8YW55PnEucGFyZW50UXVlc3Rpb24pLFxuICAgICAgICAgIDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+ZGF0YSxcbiAgICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgICApO1xuICAgICAgICB2YXIgdGV4dCA9IHRleHRWYWx1ZS5uYW1lLnJlcGxhY2UoXG4gICAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLlBhcmVudEl0ZW1WYXJpYWJsZU5hbWUsXG4gICAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHJlcyA9IHByb2Nlc3Nvci5wcm9jZXNzVmFsdWUodGV4dCwgdGV4dFZhbHVlLnJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHJlcy5pc0V4aXN0cztcbiAgICAgICAgdGV4dFZhbHVlLnZhbHVlID0gcmVzLnZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtIGltcGxlbWVudHMgSVN1cnZleURhdGEsIElTdXJ2ZXlJbXBsIHtcbiAgcHVibGljIHN0YXRpYyBJdGVtVmFyaWFibGVOYW1lID0gXCJwYW5lbFwiO1xuICBwdWJsaWMgc3RhdGljIFBhcmVudEl0ZW1WYXJpYWJsZU5hbWUgPSBcInBhcmVudFBhbmVsXCI7XG4gIHB1YmxpYyBzdGF0aWMgSW5kZXhWYXJpYWJsZU5hbWUgPSBcInBhbmVsSW5kZXhcIjtcbiAgcHJpdmF0ZSBwYW5lbFZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGE7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcjtcbiAgY29uc3RydWN0b3IoZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSwgcGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucGFuZWxWYWx1ZSA9IHBhbmVsO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yKFxuICAgICAgZGF0YSxcbiAgICAgIHRoaXMsXG4gICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgdGhpcy5zZXRTdXJ2ZXlJbXBsKCk7XG4gIH1cbiAgcHVibGljIGdldCBwYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKCkge1xuICAgIHRoaXMucGFuZWwuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdmFsdWVzW25hbWVdO1xuICB9XG4gIHB1YmxpYyBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmRhdGEuc2V0UGFuZWxJdGVtRGF0YSh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge31cbiAgcHVibGljIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5nZXRWYWx1ZShuYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeCk7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHNldENvbW1lbnQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nLCBsb2NOb3RpZmljYXRpb246IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWUobmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldFBhbmVsSXRlbURhdGEodGhpcyk7XG4gIH1cbiAgZ2V0RmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgdmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdmFyIHN1cnZleVZhbHVlcyA9XG4gICAgICAhIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YS5nZXRSb290RGF0YSgpXG4gICAgICAgID8gdGhpcy5kYXRhLmdldFJvb3REYXRhKCkuZ2V0RmlsdGVyZWRWYWx1ZXMoKVxuICAgICAgICA6IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBzdXJ2ZXlWYWx1ZXMpIHtcbiAgICAgIHZhbHVlc1trZXldID0gc3VydmV5VmFsdWVzW2tleV07XG4gICAgfVxuICAgIHZhbHVlc1tRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZV0gPSB0aGlzLmdldEFsbFZhbHVlcygpO1xuICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgdmFsdWVzW1xuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSW5kZXhWYXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgXSA9IHRoaXMuZGF0YS5nZXRJdGVtSW5kZXgodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhLmdldFJvb3REYXRhKCkpXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmdldFJvb3REYXRhKCkuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgcmV0dXJuIHsgc3VydmV5OiB0aGlzLmdldFN1cnZleSgpIH07XG4gIH1cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0U3VydmV5KCkgOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3I7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsIGltcGxlbWVudHMgSVN1cnZleUltcGwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSkge31cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0U3VydmV5KCk7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHBhbmVsIGR5bWFuaWMgcXVlc3Rpb24uIFlvdSBzZXR1cCB0aGUgdGVtcGxhdGUgcGFuZWwsIGJ1dCBhZGRpbmcgZWxlbWVudHMgKGFueSBxdWVzdGlvbiBvciBhIHBhbmVsKSBhbmQgYXNzaWduIGEgdGV4dCB0byBpdCdzIHRpdGxlLCBhbmQgdGhpcyBwYW5lbCB3aWxsIGJlIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGluZyBkeW5hbWljIHBhbmVscy4gVGhlIG51bWJlciBvZiBwYW5lbHMgaXMgZGVmaW5lZCBieSBwYW5lbENvdW50IHByb3BlcnR5LlxuICogQW4gZW5kLXVzZXIgbWF5IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgcGFuZWxzLCB1bmxlc3MgeW91IGZvcmJpZGRlbiB0aGlzLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCBleHRlbmRzIFF1ZXN0aW9uXG4gIGltcGxlbWVudHMgSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSB7XG4gIHByaXZhdGUgdGVtcGxhdGVWYWx1ZTogUGFuZWxNb2RlbDtcbiAgcHJpdmF0ZSBsb2FkaW5nUGFuZWxDb3VudDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBpc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5OiBib29sZWFuO1xuICBwcml2YXRlIGNoYW5naW5nVmFsdWVRdWVzdGlvbjogUXVlc3Rpb247XG4gIHByaXZhdGUgY3VycmVudEluZGV4VmFsdWU6IG51bWJlciA9IC0xO1xuXG4gIHJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicGFuZWxzXCIpO1xuICAgIHRoaXMudGVtcGxhdGVWYWx1ZSA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHRoaXMudGVtcGxhdGUucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLnRlbXBsYXRlLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLmFkZEVsZW1lbnRDYWxsYmFjayA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHNlbGYuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50KTtcbiAgICAgIHNlbGYucmVidWlsZFBhbmVscygpO1xuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVFbGVtZW50Q2FsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBzZWxmLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbEFkZFRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUmVtb3ZlVGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxQcmV2VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxOZXh0VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicGFuZWxzU3RhdGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5zZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpO1xuICAgIHRoaXMuc2V0UGFuZWxzU3VydmV5SW1wbCgpO1xuICB9XG4gIHByaXZhdGUgYXNzaWduT25Qcm9wZXJ0eUNoYW5nZWRUb1RlbXBsYXRlKCkge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMudGVtcGxhdGUuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICg8QmFzZT4oPGFueT5lbGVtZW50KSkub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgIHNlbGYub25UZW1wbGF0ZUVsZW1lbnRQcm9wZXJ0eUNoYW5nZWQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfSk7XG4gICAgaWYgKGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgKDxQYW5lbE1vZGVsPig8YW55PmVsZW1lbnQpKS5hZGRFbGVtZW50Q2FsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHNlbGYuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayhlbGVtZW50KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25UZW1wbGF0ZUVsZW1lbnRQcm9wZXJ0eUNoYW5nZWQoZWxlbWVudDogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnBhbmVscy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcHJvcGVydHkgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShlbGVtZW50LmdldFR5cGUoKSwgb3B0aW9ucy5uYW1lKTtcbiAgICBpZiAoIXByb3BlcnR5KSByZXR1cm47XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYW5lbHNbaV0uZ2V0UXVlc3Rpb25CeU5hbWUoZWxlbWVudC5uYW1lKTtcbiAgICAgIGlmICghIXF1ZXN0aW9uICYmICg8YW55PnF1ZXN0aW9uKVtvcHRpb25zLm5hbWVdICE9PSBvcHRpb25zLm5ld1ZhbHVlKSB7XG4gICAgICAgICg8YW55PnF1ZXN0aW9uKVtvcHRpb25zLm5hbWVdID0gb3B0aW9ucy5uZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYW5lbGR5bmFtaWNcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCkgPT4ge1xuICAgICAgcGFuZWwuY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBpc0FsbG93VGl0bGVMZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnJlbW92ZUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGlnbiBkeW5hbWljIHBhbmVsc1xuICAgKiBAc2VlICB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWwoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsIGVsZW1lbnRzLCBxdWVzdGlvbnMgYW5kIHBhbmVscy5cbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZUVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuZWxlbWVudHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbCB0aXRsZSBwcm9wZXJ0eS5cbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0ZW1wbGF0ZVRpdGxlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlLnRpdGxlID0gbmV3VmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RlbXBsYXRlVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmxvY1RpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZGVzY3JpcHRpb24gcHJvcGVydHkuXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSB0ZW1wbGF0ZVRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5kZXNjcmlwdGlvbjtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlRGVzY3JpcHRpb24obmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGUuZGVzY3JpcHRpb24gPSBuZXdWYWx1ZTtcbiAgfVxuICBnZXQgbG9jVGVtcGxhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUubG9jRGVzY3JpcHRpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1zKCk6IEFycmF5PElTdXJ2ZXlEYXRhPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucGFuZWxzW2ldLmRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYXJyYXkgb2YgZHluYW1pYyBwYW5lbHMgY3JlYXRlZCBiYXNlZCBvbiBwYW5lbCB0ZW1wbGF0ZVxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbHMoKTogQXJyYXk8UGFuZWxNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbHNcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiBjdXJyZW50IGFjdGl2ZSBkeW5hbWljYWwgcGFuZWwgd2hlbiB0aGUgcmVuZGVyTW9kZSBpcyBub3QgXCJsaXN0XCIuIElmIHRoZXJlIGlzIG5vIGR5bWFtaWMgcGFuZWwgKHBhbmVsQ291bnQgPSAwKSBvciByZW5kZXJNb2RlIGVxdWFscyBcImxpc3RcIiBpdCByZXR1cm5zIC0xLCBvdGhlcndpc2UgaXQgcmV0dXJucyBhIHZhbHVlIGZyb20gMCB0byBwYW5lbENvdW50IC0gMS5cbiAgICogQHNlZSBjdXJyZW50UGFuZWxcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50SW5kZXgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1JlbmRlck1vZGVMaXN0KSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gMDtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA8IDAgJiYgdGhpcy5wYW5lbENvdW50ID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA9IDA7XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleFZhbHVlID49IHRoaXMucGFuZWxDb3VudCkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudEluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4VmFsdWUgIT09IHZhbCkge1xuICAgICAgaWYgKHZhbCA+PSB0aGlzLnBhbmVsQ291bnQpIHZhbCA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleFZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgYWN0aXZlIGR5bmFtaWNhbCBwYW5lbCB3aGVuIHRoZSByZW5kZXJNb2RlIGlzIG5vdCBcImxpc3RcIi4gSWYgdGhlcmUgaXMgbm8gZHltYW1pYyBwYW5lbCAocGFuZWxDb3VudCA9IDApIG9yIHJlbmRlck1vZGUgZXF1YWxzIFwibGlzdFwiIGl0IHJldHVybnMgbnVsbC5cbiAgICogQHNlZSBjdXJyZW5JbmRleFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFuZWxzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzW2luZGV4XTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIHNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nIG9uIHJlbW92aW5nIGEgcGFuZWxcbiAgICogQHNlZSBDb25maXJtRGVsZXRlVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gYSBxdWVzdGlvbiBuYW1lIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHBhbmVsIGFuZCB0aGUgbGlicmFyeSBzaG93cyBkdXBsaWNhdGlvbiBlcnJvciwgaWYgdGhlcmUgYXJlIHNhbWUgdmFsdWVzIGluIGRpZmZlcmVudCBwYW5lbHMgb2YgdGhpcyBxdWVzdGlvbi5cbiAgICogQHNlZSBrZXlEdXBsaWNhdGlvbkVycm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0IHNob3dpbmcgaW4gdGhlIGNvbmZpcm1hdGlvbiBkZWxldGUgZGlhbG9nIG9uIHJlbW92aW5nIGEgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtRGVsZXRlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NDb25maXJtRGVsZXRlVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGR1cGxpY2F0aW9uIHZhbHVlIGVycm9yIHRleHQuIFNldCBpdCB0byBzaG93IHRoZSB0ZXh0IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LlxuICAgKiBAc2VlIGtleU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5RHVwbGljYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleUR1cGxpY2F0aW9uRXJyb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jS2V5RHVwbGljYXRpb25FcnJvcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcHJldmlvdXMgYnV0dG9uIHRleHQuIFByZXZpb3VzIGJ1dHRvbiBzaG93cyB0aGUgcHJldmlvdXMgcGFuZWwsIGNoYW5nZSB0aGUgY3VycmVudFBhbmVsLCB3aGVuIHRoZSByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuXG4gICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAqIEBzZWUgY3VycmVudEluZGV4XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbFByZXZUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbFByZXZUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGFnZVByZXZUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsUHJldlRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsUHJldlRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxQcmV2VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFByZXZUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgbmV4dCBidXR0b24gdGV4dC4gTmV4dCBidXR0b24gc2hvd3MgdGhlIG5leHQgcGFuZWwsIGNoYW5nZSB0aGUgY3VycmVudFBhbmVsLCB3aGVuIHRoZSByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuXG4gICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAqIEBzZWUgY3VycmVudEluZGV4XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbE5leHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbE5leHRUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGFnZU5leHRUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsTmV4dFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsTmV4dFRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxOZXh0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbE5leHRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYWRkIHBhbmVsIGJ1dHRvbiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbEFkZFRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbEFkZFRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJhZGRQYW5lbFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbEFkZFRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxBZGRUZXh0XCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxBZGRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsQWRkVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHJlbW92ZSBwYW5lbCBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxSZW1vdmVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxSZW1vdmVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVtb3ZlUGFuZWxcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxSZW1vdmVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFJlbW92ZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxSZW1vdmVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUmVtb3ZlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHJlbmRlck1vZGUgZXF1YWxzIHRvIFwicHJvZ3Jlc3NUb3BcIiBvciBcInByb2dyZXNzVG9wQm90dG9tXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNQcm9ncmVzc1RvcFNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucmVuZGVyTW9kZSA9PSBcInByb2dyZXNzVG9wXCIgfHwgdGhpcy5yZW5kZXJNb2RlID09IFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSByZW5kZXJNb2RlIGVxdWFscyB0byBcInByb2dyZXNzQm90dG9tXCIgb3IgXCJwcm9ncmVzc1RvcEJvdHRvbVwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbmRlck1vZGUgPT0gXCJwcm9ncmVzc0JvdHRvbVwiIHx8XG4gICAgICB0aGlzLnJlbmRlck1vZGUgPT0gXCJwcm9ncmVzc1RvcEJvdHRvbVwiXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gY3VycmVudEluZGV4IGlzIG1vcmUgdGhhbiAwLlxuICAgKiBAc2VlIGN1cnJlbkluZGV4XG4gICAqIEBzZWUgY3VycmVuUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNQcmV2QnV0dG9uU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPiAwO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBjdXJyZW50SW5kZXggaXMgbW9yZSB0aGFuIG9yIGVxdWFsIDAgYW5kIGxlc3MgdGhhbiBwYW5lbENvdW50IC0gMS5cbiAgICogQHNlZSBjdXJyZW5JbmRleFxuICAgKiBAc2VlIGN1cnJlblBhbmVsXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBpc05leHRCdXR0b25TaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwICYmIHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5wYW5lbENvdW50IC0gMTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gc2hvd1JhbmdlSW5Qcm9ncmVzcyBlcXVhbHMgdG8gdHJ1ZSwgcmVuZGVyTW9kZSBkb2Vzbid0IGVxdWFsIHRvIFwibGlzdFwiIGFuZCBwYW5lbENvdW50IGlzID49IDIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmFuZ2VTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNob3dSYW5nZUluUHJvZ3Jlc3MgJiYgdGhpcy5jdXJyZW50SW5kZXggPj0gMCAmJiB0aGlzLnBhbmVsQ291bnQgPiAxXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0RWxlbWVudHNJbkRlc2lnbihpbmNsdWRlSGlkZGVuOiBib29sZWFuID0gZmFsc2UpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiBpbmNsdWRlSGlkZGVuID8gW3RoaXMudGVtcGxhdGVdIDogdGhpcy50ZW1wbGF0ZUVsZW1lbnRzO1xuICB9XG4gIHByaXZhdGUgaXNBZGRpbmdOZXdQYW5lbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBhZGRpbmdOZXdQYW5lbHNWYWx1ZTogYW55O1xuICBwcml2YXRlIGlzTmV3UGFuZWxzVmFsdWVDaGFuZ2VkOiBib29sZWFuO1xuICBwcml2YXRlIHByZXBhcmVWYWx1ZUZvclBhbmVsQ3JlYXRpbmcoKSB7XG4gICAgdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5pc0FkZGluZ05ld1BhbmVscyA9IHRydWU7XG4gICAgdGhpcy5pc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgc2V0VmFsdWVBZnRlclBhbmVsc0NyZWF0aW5nKCkge1xuICAgIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZCkge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFkZGluZ05ld1BhbmVsc1ZhbHVlO1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHNcbiAgICAgID8gdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZVxuICAgICAgOiBzdXBlci5nZXRWYWx1ZUNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0FkZGluZ05ld1BhbmVscykge1xuICAgICAgdGhpcy5pc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICB0aGlzLmFkZGluZ05ld1BhbmVsc1ZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnNldFZhbHVlQ29yZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBnZXQvc2V0IHRoZSBudW1iZXIgb2YgZHluYW1pYyBwYW5lbHMuXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqIEBzZWUgbWF4UGFuZWxDb3VudFxuICAgKiBAc2VlIGFkZFBhbmVsXG4gICAqIEBzZWUgcmVtb3ZlUGFuZWxcbiAgICogQHNlZSByZW1vdmVQYW5lbFVJXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzRGVzaWduTW9kZVxuICAgICAgPyB0aGlzLmxvYWRpbmdQYW5lbENvdW50XG4gICAgICA6IHRoaXMucGFuZWxzLmxlbmd0aDtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdQYW5lbENvdW50ID0gdmFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsID09IHRoaXMucGFuZWxzLmxlbmd0aCB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlQmluZGluZ3MoXCJwYW5lbENvdW50XCIsIHZhbCk7XG4gICAgdGhpcy5wcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCk7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMucGFuZWxDb3VudDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsKCk7XG4gICAgICB0aGlzLnBhbmVscy5wdXNoKHBhbmVsKTtcbiAgICAgIGlmICh0aGlzLnJlbmRlck1vZGUgPT0gXCJsaXN0XCIgJiYgdGhpcy5wYW5lbHNTdGF0ZSAhPSBcImRlZmF1bHRcIikge1xuICAgICAgICBpZiAodGhpcy5wYW5lbHNTdGF0ZSA9PT0gXCJleHBhbmRcIikge1xuICAgICAgICAgIHBhbmVsLmV4cGFuZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghIXBhbmVsLnRpdGxlKSB7XG4gICAgICAgICAgICBwYW5lbC5jb2xsYXBzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsIDwgdGhpcy5wYW5lbENvdW50KSB0aGlzLnBhbmVscy5zcGxpY2UodmFsLCB0aGlzLnBhbmVsQ291bnQgLSB2YWwpO1xuICAgIHRoaXMuc2V0VmFsdWVBZnRlclBhbmVsc0NyZWF0aW5nKCk7XG4gICAgdGhpcy5zZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCk7XG4gICAgdGhpcy5yZVJ1bkNvbmRpdGlvbigpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGFsbG93IHRoZSBlbmQtdXNlciB0byBjb2xsYXBzZS9leHBhbmQgdGhlIHBhbmVscy4gSXQgd29ya3Mgb25seSBpZiB0aGUgcmVuZGVyTW9kZSBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJsaXN0XCIgYW5kIHRlbXBsYXRlVGl0bGUgcHJvcGVydHkgaXMgbm90IGVtcHR5LiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgYXZhaWxhYmxlOlxuICAgKiA8YnIvPiBkZWZhdWx0IC0gdGhlIGRlZmF1bHQgdmFsdWUuIFVzZXIgY2FuJ3QgY29sbGFwc2UvZXhwYW5kIHBhbmVsc1xuICAgKiA8YnIvPiBleHBhbmRlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMgYW5kIGFsbCBwYW5lbHMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHRcbiAgICogPGJyLz4gY29sbGFwc2VkIC0gVXNlciBjYW4gY29sbGFwc2UvZXhwYW5kIHBhbmVscyBhbmQgYWxsIHBhbmVscyBhcmUgY29sbGFwc2VkIGJ5IGRlZmF1bHRcbiAgICogPGJyLz4gZmlyc3RFeHBhbmRlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMuIFRoZSBmaXJzdCBwYW5lbCBpcyBleHBhbmRlZCBhbmQgb3RoZXJzIGFyZSBjb2xsYXBzZWRcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbHNTdGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbHNTdGF0ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsc1N0YXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIHNldFRlbXBsYXRlUGFuZWxTdXJ2ZXlJbXBsKCkge1xuICAgIHRoaXMudGVtcGxhdGUuc2V0U3VydmV5SW1wbChcbiAgICAgIHRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICAgID8gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICAgIDogbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsKHRoaXMpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHNldFBhbmVsc1N1cnZleUltcGwoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaV07XG4gICAgICBpZiAocGFuZWwgPT0gdGhpcy50ZW1wbGF0ZSkgY29udGludWU7XG4gICAgICBwYW5lbC5zZXRTdXJ2ZXlJbXBsKDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+cGFuZWwuZGF0YSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0UGFuZWxzU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMucmVuZGVyTW9kZSAhPSBcImxpc3RcIiB8fCAhdGhpcy50ZW1wbGF0ZVRpdGxlKVxuICAgICAgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdGF0ZSA9IHRoaXMucGFuZWxzU3RhdGU7XG4gICAgICBpZiAoc3RhdGUgPT09IFwiZmlyc3RFeHBhbmRlZFwiKSB7XG4gICAgICAgIHN0YXRlID0gaSA9PT0gMCA/IFwiZXhwYW5kZWRcIiA6IFwiY29sbGFwc2VkXCI7XG4gICAgICB9XG4gICAgICB0aGlzLnBhbmVsc1tpXS5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQmFzZWRPblBhbmVsQ291bnQoKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbXTtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSB2YWx1ZS5sZW5ndGg7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykgdmFsdWUucHVzaCh7fSk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMucGFuZWxDb3VudCkge1xuICAgICAgdmFsdWUuc3BsaWNlKHRoaXMucGFuZWxDb3VudCwgdmFsdWUubGVuZ3RoIC0gdGhpcy5wYW5lbENvdW50KTtcbiAgICB9XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gdHJ1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHBhbmVsIGNvdW50LiBBIHVzZXIgY291bGQgbm90IGRlbGV0ZSBhIHBhbmVsIGlmIHRoZSBwYW5lbENvdW50IGVxdWFscyB0byBtaW5QYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIG1heFBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluUGFuZWxDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5QYW5lbENvdW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluUGFuZWxDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwKSB2YWwgPSAwO1xuICAgIGlmICh2YWwgPT0gdGhpcy5taW5QYW5lbENvdW50KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluUGFuZWxDb3VudFwiLCB2YWwpO1xuICAgIGlmICh2YWwgPiB0aGlzLm1heFBhbmVsQ291bnQpIHRoaXMubWF4UGFuZWxDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5wYW5lbENvdW50IDwgdmFsKSB0aGlzLnBhbmVsQ291bnQgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHBhbmVsIGNvdW50LiBBIHVzZXIgY291bGQgbm90IGFkZCBhIHBhbmVsIGlmIHRoZSBwYW5lbENvdW50IGVxdWFscyB0byBtYXhQYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIG1pblBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4UGFuZWxDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICBcIm1heFBhbmVsQ291bnRcIixcbiAgICAgIHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UGFuZWxDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPD0gMCkgcmV0dXJuO1xuICAgIGlmICh2YWwgPiBzZXR0aW5ncy5wYW5lbE1heGltdW1QYW5lbENvdW50KVxuICAgICAgdmFsID0gc2V0dGluZ3MucGFuZWxNYXhpbXVtUGFuZWxDb3VudDtcbiAgICBpZiAodmFsID09IHRoaXMubWF4UGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsIDwgdGhpcy5taW5QYW5lbENvdW50KSB0aGlzLm1pblBhbmVsQ291bnQgPSB2YWw7XG4gICAgaWYgKHRoaXMucGFuZWxDb3VudCA+IHZhbCkgdGhpcy5wYW5lbENvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBoaWRlIHRoZSAnQWRkIE5ldycgYnV0dG9uXG4gICAqIEBzZWUgYWxsb3dSZW1vdmVQYW5lbFxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0FkZFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFBhbmVsXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dBZGRQYW5lbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGhpZGUgdGhlICdSZW1vdmUnIGJ1dHRvblxuICAgKiBAc2VlIGFsbG93QWRkUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dSZW1vdmVQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVQYW5lbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93UmVtb3ZlUGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVQYW5lbFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGUgdGVtcGxhdGUgcXVlc3Rpb25zLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblxuICAgKiBAc2VlIFBhbmVsTW9kZWxCYXNlLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVtcGxhdGVUaXRsZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIiwgdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNob3cvaGlkZSB0aGUgbnVtYmVycyBpbiB0aXRsZXMgaW4gcXVlc3Rpb25zIGluc2lkZSBhIGR5bmFtaWMgcGFuZWwuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzIFwib2ZmXCIuIFlvdSBtYXkgc2V0IGl0IHRvIFwib25QYW5lbFwiIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gaW5zaWRlIGEgZHluYW1pYyBwYW5lbCB3aWxsIHN0YXJ0IHdpdGggMSBvciBcIm9uU3VydmV5XCIgdG8gaW5jbHVkZSBuZXN0ZWQgcXVlc3Rpb25zIGluIGR5bWFtaWMgcGFuZWxzIGludG8gZ2xvYmFsIHN1cnZleSBxdWVzdGlvbiBudW1iZXJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dRdWVzdGlvbk51bWJlcnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHZhbCk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5xdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMudmlzaWJsZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIHRoZSByZW1vdmUgYnV0dG9uIHJlbGF0aXZlIHRvIHRoZSBwYW5lbC5cbiAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgaXMgXCJib3R0b21cIi4gWW91IG1heSBzZXQgaXQgdG8gXCJyaWdodFwiIGFuZCByZW1vdmUgYnV0dG9uIHdpbGwgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGUgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNob3dzIHRoZSByYW5nZSBmcm9tIDEgdG8gcGFuZWxDb3VudCB3aGVuIHJlbmRlck1vZGUgZG9lc24ndCBlcXVhbCB0byBcImxpc3RcIi4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgdGhpcyBlbGVtZW50LlxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dSYW5nZUluUHJvZ3Jlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dSYW5nZUluUHJvZ3Jlc3NcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UmFuZ2VJblByb2dyZXNzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dSYW5nZUluUHJvZ3Jlc3NcIiwgdmFsKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHByb3BlcnR5IGVxdWFscyB0byBcImxpc3RcIiBhbmQgYWxsIGR5bmFtaWMgcGFuZWxzIGFyZSByZW5kZXJlZCBvbmUgYnkgb25lIG9uIHRoZSBwYWdlLiBZb3UgbWF5IGNoYW5nZSBpdCB0bzogXCJwcm9ncmVzc1RvcFwiLCBcInByb2dyZXNzQm90dG9tXCIgb3IgXCJwcm9ncmVzc1RvcEJvdHRvbVwiIHRvIHJlbmRlciBvbmx5IG9uZSBkeW5hbWljIHBhbmVsIGF0IG9uY2UuIFRoZSBwcm9ncmVzcyBhbmQgbmF2aWdhdGlvbiBlbGVtZW50cyBjYW4gYmUgcmVuZHJlZCBvbiB0b3AsIGJvdHRvbSBvciBib3RoLlxuICAgKi9cbiAgcHVibGljIGdldCByZW5kZXJNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlck1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCByZW5kZXJNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyTW9kZVwiLCB2YWwpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHJlbmRlck1vZGUgZXF1YWxzIHRvIFwibGlzdFwiLlxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZW5kZXJNb2RlTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJNb2RlID09IFwibGlzdFwiO1xuICB9XG4gIHB1YmxpYyBzZXRWaXNpYmxlSW5kZXgodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkgcmV0dXJuIDA7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblN1cnZleVwiID8gdmFsdWUgOiAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb3VudGVyID0gdGhpcy5zZXRQYW5lbFZpc2libGVJbmRleChcbiAgICAgICAgdGhpcy5wYW5lbHNbaV0sXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9mZlwiXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uU3VydmV5XCIpIHtcbiAgICAgICAgc3RhcnRJbmRleCArPSBjb3VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5zZXRWaXNpYmxlSW5kZXgodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzICE9IFwib25TdXJ2ZXlcIiA/IHZhbHVlIDogLTEpO1xuICAgIHJldHVybiB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvblN1cnZleVwiID8gMSA6IHN0YXJ0SW5kZXggLSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIHNldFBhbmVsVmlzaWJsZUluZGV4KFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc2hvd0luZGV4OiBib29sZWFuXG4gICk6IG51bWJlciB7XG4gICAgaWYgKCFzaG93SW5kZXgpIHtcbiAgICAgIHBhbmVsLnNldFZpc2libGVJbmRleCgtMSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHBhbmVsLnNldFZpc2libGVJbmRleChpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gYW4gZW5kIHVzZXIgbWF5IGFkZCBhIG5ldyBwYW5lbC4gVGhlIHF1ZXN0aW9uIGlzIG5vdCByZWFkIG9ubHkgYW5kIHBhbmVsQ291bnQgbGVzcyB0aGFuIG1heFBhbmVsQ291bnRcbiAgICogQHNlZSBpc1JlYWRPbmx5XG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIG1heFBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuQWRkUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93QWRkUGFuZWwgJiZcbiAgICAgICF0aGlzLmlzUmVhZE9ubHkgJiZcbiAgICAgIHRoaXMucGFuZWxDb3VudCA8IHRoaXMubWF4UGFuZWxDb3VudFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGFuIGVuZCB1c2VyIG1heSByZW1vdmUgYSBwYW5lbC4gVGhlIHF1ZXN0aW9uIGlzIG5vdCByZWFkIG9ubHkgYW5kIHBhbmVsQ291bnQgaXMgbW9yZSB0aGFuIG1pblBhbmVsQ291bnRcbiAgICogQHNlZSBpc1JlYWRPbmx5XG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIG1pblBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93UmVtb3ZlUGFuZWwgJiZcbiAgICAgICF0aGlzLmlzUmVhZE9ubHkgJiZcbiAgICAgIHRoaXMucGFuZWxDb3VudCA+IHRoaXMubWluUGFuZWxDb3VudFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlYnVpbGRQYW5lbHMoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnByZXBhcmVWYWx1ZUZvclBhbmVsQ3JlYXRpbmcoKTtcbiAgICB2YXIgcGFuZWxzID0gW107XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHRoaXMudGVtcGxhdGUpO1xuICAgICAgcGFuZWxzLnB1c2godGhpcy50ZW1wbGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbENvdW50OyBpKyspIHtcbiAgICAgICAgcGFuZWxzLnB1c2godGhpcy5jcmVhdGVOZXdQYW5lbCgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYW5lbHMuc3BsaWNlKDAsIHRoaXMucGFuZWxzLmxlbmd0aCwgLi4ucGFuZWxzKTtcbiAgICB0aGlzLnNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpO1xuICAgIHRoaXMuc2V0UGFuZWxzU3RhdGUoKTtcbiAgICB0aGlzLnJlUnVuQ29uZGl0aW9uKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogSWYgaXQgaXMgbm90IGVtcHR5LCB0aGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIGV2ZXJ5IG5ldyBwYW5lbCwgaW5jbHVkaW5nIHBhbmVscyBjcmVhdGVkIGluaXRpYWxseSwgdW5sZXNzIHRoZSBkZWZhdWx0VmFsdWUgaXMgbm90IGVtcHR5XG4gICAqIEBzZWUgZGVmYXVsdFZhbHVlXG4gICAqIEBzZWUgZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3dcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFBhbmVsVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFBhbmVsVmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0UGFuZWxWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRQYW5lbFZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIGNvcHkgdGhlIHZhbHVlIGludG8gbmV3IGFkZGVkIHBhbmVsIGZyb20gdGhlIGxhc3QgcGFuZWwuIElmIGRlZmF1bHRQYW5lbFZhbHVlIGlzIHNldCBhbmQgdGhpcyBwcm9wZXJ0eSBlcXVhbHMgdG8gdHJ1ZSxcbiAgICogdGhlbiB0aGUgdmFsdWUgZm9yIG5ldyBhZGRlZCBwYW5lbCBpcyBtZXJnaW5nLlxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgKiBAc2VlIGRlZmF1bHRQYW5lbFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWxcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzRGVmYXVsdFZhbHVlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSB8fFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKVxuICAgICkge1xuICAgICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0VtcHR5KCkgfHwgdGhpcy5wYW5lbENvdW50ID09IDApIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxDb3VudDsgaSsrKSB7XG4gICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5pc1Jvd0VtcHR5KHZhbFtpXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudC5nZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKFxuICAgICAgdGhpcy5wYW5lbHMsXG4gICAgICB0aGlzLmlzUmVxdWlyZWRcbiAgICApO1xuICB9XG4gIHByaXZhdGUgaXNSb3dFbXB0eSh2YWw6IGFueSkge1xuICAgIGZvciAodmFyIHByb3AgaW4gdmFsKSB7XG4gICAgICBpZiAodmFsLmhhc093blByb3BlcnR5KHByb3ApKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBkeW5hbWljIHBhbmVsIGJhc2VkIG9uIHRoZSB0ZW1wbGF0ZSBQYW5lbC4gSXQgY2hlY2tzIGlmIGNhbkFkZFBhbmVsIHJldHVybnMgdHJ1ZSBhbmQgdGhlbiBjYWxscyBhZGRQYW5lbCBtZXRob2QuXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgY2FuQWRkUGFuZWxcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbFVJKCk6IFBhbmVsTW9kZWwge1xuICAgIGlmICghdGhpcy5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5ld1BhbmVsID0gdGhpcy5hZGRQYW5lbCgpO1xuICAgIGlmICh0aGlzLnJlbmRlck1vZGUgPT09IFwibGlzdFwiICYmIHRoaXMucGFuZWxzU3RhdGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICBuZXdQYW5lbC5leHBhbmQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZHluYW1pYyBwYW5lbCBiYXNlZCBvbiB0aGUgdGVtcGxhdGUgUGFuZWwuXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqL1xuICBwdWJsaWMgYWRkUGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdGhpcy5wYW5lbENvdW50Kys7XG4gICAgaWYgKCF0aGlzLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5wYW5lbENvdW50IC0gMTtcbiAgICB9XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgaGFzTW9kaWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhbmV3VmFsdWUgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiZcbiAgICAgICAgbmV3VmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudFxuICAgICAgKSB7XG4gICAgICAgIGhhc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb3B5VmFsdWUobmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sIHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwgJiZcbiAgICAgICEhbmV3VmFsdWUgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmXG4gICAgICBuZXdWYWx1ZS5sZW5ndGggPiAxICYmXG4gICAgICBuZXdWYWx1ZS5sZW5ndGggPT0gdGhpcy5wYW5lbENvdW50XG4gICAgKSB7XG4gICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICB0aGlzLmNvcHlWYWx1ZShcbiAgICAgICAgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sXG4gICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDJdXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaGFzTW9kaWZpZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxBZGRlZCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHNbdGhpcy5wYW5lbENvdW50IC0gMV07XG4gIH1cbiAgcHJpdmF0ZSBjb3B5VmFsdWUoc3JjOiBhbnksIGRlc3Q6IGFueSkge1xuICAgIGZvciAodmFyIGtleSBpbiBkZXN0KSB7XG4gICAgICBzcmNba2V5XSA9IGRlc3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgcmVtb3ZlUGFuZWwgZnVuY3Rpb24uIERvIG5vdGhpbmcgaXMgY2FuUmVtb3ZlUGFuZWwgcmV0dXJucyBmYWxzZS4gSWYgY29uZmlybURlbGV0ZSBzZXQgdG8gdHJ1ZSwgaXQgc2hvd3MgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgZmlyc3QuXG4gICAqIEBwYXJhbSB2YWx1ZSBhIHBhbmVsIG9yIHBhbmVsIGluZGV4XG4gICAqIEBzZWUgcmVtb3ZlUGFuZWxcbiAgICogQHNlZSBjb25maXJtRGVsZXRlXG4gICAqIEBzZWUgY29uZmlybURlbGV0ZVRleHRcbiAgICogQHNlZSBjYW5SZW1vdmVQYW5lbFxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhbmVsVUkodmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jYW5SZW1vdmVQYW5lbCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5jb25maXJtRGVsZXRlIHx8IGNvbmZpcm1BY3Rpb24odGhpcy5jb25maXJtRGVsZXRlVGV4dCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlUGFuZWwodmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR29lcyB0byB0aGUgbmV4dCBwYW5lbCBpbiB0aGUgUGFuZWxEeW5hbWljXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ29Ub05leHRQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJNb2RlICE9PSBcImxpc3RcIiAmJiB0aGlzLmN1cnJlbnRQYW5lbC5oYXNFcnJvcnMoKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIEdvZXMgdG8gdGhlIHByZXZpb3VzIHBhbmVsIGluIHRoZSBQYW5lbER5bmFtaWNcbiAgICpcbiAgICovXG4gIHB1YmxpYyBnb1RvUHJldlBhbmVsKCkge1xuICAgIHRoaXMuY3VycmVudEluZGV4LS07XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBkeW5hbWljIHBhbmVsIGZyb20gdGhlIHBhbmVscyBhcnJheS5cbiAgICogQHBhcmFtIHZhbHVlIGEgcGFuZWwgb3IgcGFuZWwgaW5kZXhcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhbmVsKHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldFBhbmVsSW5kZXgodmFsdWUpO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5wYW5lbENvdW50KSByZXR1cm47XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaW5kZXhdO1xuICAgIHRoaXMucGFuZWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy51cGRhdGVCaW5kaW5ncyhcInBhbmVsQ291bnRcIiwgdGhpcy5wYW5lbENvdW50KTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGluZGV4ID49IHZhbHVlLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmR5bmFtaWNQYW5lbFJlbW92ZWQodGhpcywgaW5kZXgsIHBhbmVsKTtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGdldFBhbmVsSW5kZXgodmFsOiBhbnkpOiBudW1iZXIge1xuICAgIGlmIChIZWxwZXJzLmlzTnVtYmVyKHZhbCkpIHJldHVybiB2YWw7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wYW5lbHNbaV0gPT09IHZhbCB8fCBpdGVtc1tpXSA9PT0gdmFsKSByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFuZWxzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzSW5QYW5lbChpKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHN1cGVyLmNsZWFyRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbHNbaV0uY2xlYXJFcnJvcnMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IElRdWVzdGlvbiB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMucGFuZWxDb3VudCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzW2luZGV4XS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcml2YXRlIGNsZWFySW5jb3JyZWN0VmFsdWVzSW5QYW5lbChpbmRleDogbnVtYmVyKSB7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaW5kZXhdO1xuICAgIHBhbmVsLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgdmFyIHZhbHVlcyA9ICEhdmFsICYmIGluZGV4IDwgdmFsLmxlbmd0aCA/IHZhbFtpbmRleF0gOiBudWxsO1xuICAgIGlmICghdmFsdWVzKSByZXR1cm47XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLmdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KGtleSwgaW5kZXgpKSBjb250aW51ZTtcbiAgICAgIHZhciBxID0gcGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUoa2V5KTtcbiAgICAgIGlmICghIXEpIGNvbnRpbnVlO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgocGFuZWwsIGtleSwgc2V0dGluZ3MuY29tbWVudFByZWZpeCkgfHxcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KFxuICAgICAgICAgIHBhbmVsLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBzZXR0aW5ncy5tYXRyaXhUb3RhbFZhbHVlUG9zdEZpeFxuICAgICAgICApXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZGVsZXRlIHZhbHVlc1trZXldO1xuICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdmFsW2luZGV4XSA9IHZhbHVlcztcbiAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBwb3N0UHJlZml4OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGtleS5pbmRleE9mKHBvc3RQcmVmaXgpICE9PSBrZXkubGVuZ3RoIC0gcG9zdFByZWZpeC5sZW5ndGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhcGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUoa2V5LnN1YnN0cigwLCBrZXkuaW5kZXhPZihwb3N0UHJlZml4KSkpO1xuICB9XG4gIHB1YmxpYyBnZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFuZWxJbmRleDogbnVtYmVyXG4gICk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSAmJiAhIXRoaXMudmFsdWVOYW1lXG4gICAgICA/IDxRdWVzdGlvbj4oXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheShcbiAgICAgICAgICAgIHRoaXMudmFsdWVOYW1lLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHBhbmVsSW5kZXhcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgdmFyIGhhc0NvbnRleHQgPSAhIWNvbnRleHRcbiAgICAgID8gdGhpcy50ZW1wbGF0ZS5xdWVzdGlvbnMuaW5kZXhPZihjb250ZXh0KSA+IC0xXG4gICAgICA6IGZhbHNlO1xuICAgIHZhciBwcmVmaXhOYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiWzBdLlwiO1xuICAgIHZhciBwcmVmaXhUZXh0ID0gdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiWzBdLlwiO1xuICAgIHZhciBwYW5lbE9ianMgPSBuZXcgQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4oKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy50ZW1wbGF0ZS5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5hZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KHBhbmVsT2JqcywgY29udGV4dCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxPYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgcGFuZWxPYmpzW2ldLm5hbWUsXG4gICAgICAgIHRleHQ6IHByZWZpeFRleHQgKyBwYW5lbE9ianNbaV0udGV4dCxcbiAgICAgICAgcXVlc3Rpb246IHBhbmVsT2Jqc1tpXS5xdWVzdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbE9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhbmVsT2Jqc1tpXS5xdWVzdGlvbiA9PSBjb250ZXh0KSBjb250aW51ZTtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcInBhbmVsLlwiICsgcGFuZWxPYmpzW2ldLm5hbWUsXG4gICAgICAgICAgdGV4dDogXCJwYW5lbC5cIiArIHBhbmVsT2Jqc1tpXS50ZXh0LFxuICAgICAgICAgIHF1ZXN0aW9uOiBwYW5lbE9ianNbaV0ucXVlc3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gc3VwZXIuZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvciwgcGF0aCk7XG4gICAgdmFyIHF1ZXN0aW9uTmFtZSA9IHBhdGg7XG4gICAgdmFyIHBvcyA9IHBhdGguaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKHBvcyA+IC0xKSB7XG4gICAgICBxdWVzdGlvbk5hbWUgPSBwYXRoLnN1YnN0cigwLCBwb3MpO1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKHBvcyArIDEpO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnRlbXBsYXRlLmdldFF1ZXN0aW9uQnlOYW1lKHF1ZXN0aW9uTmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IsIHBhdGgpO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICB2YXIgcmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgdGhpcy50ZW1wbGF0ZS5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gICAgfVxuICAgIHN1cGVyLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICB0aGlzLnRlbXBsYXRlLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHRoaXMudGVtcGxhdGUub25TdXJ2ZXlMb2FkKCk7XG4gICAgaWYgKHRoaXMubG9hZGluZ1BhbmVsQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLnBhbmVsQ291bnQgPSB0aGlzLmxvYWRpbmdQYW5lbENvdW50O1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMucmVidWlsZFBhbmVscygpO1xuICAgIH1cbiAgICB0aGlzLnNldFBhbmVsc1N1cnZleUltcGwoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgdGhpcy5hc3NpZ25PblByb3BlcnR5Q2hhbmdlZFRvVGVtcGxhdGUoKTtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICB0aGlzLnRlbXBsYXRlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHN1cGVyLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5ydW5QYW5lbHNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJlUnVuQ29uZGl0aW9uKCkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm47XG4gICAgdGhpcy5ydW5Db25kaXRpb24oXG4gICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBydW5QYW5lbHNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICB2YXIgY2FjaGVkVmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAodmFsdWVzICYmIHZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgY2FjaGVkVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMpKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhbmVsVmFsdWVzID0gdGhpcy5nZXRQYW5lbEl0ZW1EYXRhKHRoaXMucGFuZWxzW2ldLmRhdGEpO1xuICAgICAgLy9TaG91bGQgYmUgdW5pcXVlIGZvciBldmVyeSBwYW5lbCBkdWUgYXN5bmMgZXhwcmVzc2lvbiBzdXBwb3J0XG4gICAgICB2YXIgbmV3VmFsdWVzID0gSGVscGVycy5jcmVhdGVDb3B5KGNhY2hlZFZhbHVlcyk7XG4gICAgICBuZXdWYWx1ZXNbXG4gICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIF0gPSBwYW5lbFZhbHVlcztcbiAgICAgIG5ld1ZhbHVlc1tRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSW5kZXhWYXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKV0gPSBpO1xuICAgICAgdGhpcy5wYW5lbHNbaV0ucnVuQ29uZGl0aW9uKG5ld1ZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgICAgdGhpcy5wYW5lbHNbaV0ub25BbnlWYWx1ZUNoYW5nZWQoXG4gICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc0tleXNEdXBsaWNhdGVkKGZpcmVDYWxsYmFjazogYm9vbGVhbiwgcmVjOiBhbnkgPSBudWxsKSB7XG4gICAgdmFyIGtleVZhbHVlczogQXJyYXk8YW55PiA9IFtdO1xuICAgIHZhciByZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzID1cbiAgICAgICAgdGhpcy5pc1ZhbHVlRHVwbGljYXRlZCh0aGlzLnBhbmVsc1tpXSwga2V5VmFsdWVzLCByZWMsIGZpcmVDYWxsYmFjaykgfHxcbiAgICAgICAgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUGFuZWxzQ29udGFpbnNFcnJvcnMoKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb247XG4gICAgdmFyIHBhcmVudCA9IDxQYW5lbD5xdWVzdGlvbi5wYXJlbnQ7XG4gICAgd2hpbGUgKCEhcGFyZW50KSB7XG4gICAgICBwYXJlbnQudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICAgIHBhcmVudCA9IDxQYW5lbD5wYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5KSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIGlmICghIXRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uKSB7XG4gICAgICB2YXIgcmVzID0gdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICAgIHJlcyA9IHRoaXMuaGFzS2V5c0R1cGxpY2F0ZWQoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICAgIHRoaXMudXBkYXRlUGFuZWxzQ29udGFpbnNFcnJvcnMoKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlcnJvc0luUGFuZWxzID0gdGhpcy5oYXNFcnJvckluUGFuZWxzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICAgIHJldHVybiBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrKSB8fCBlcnJvc0luUGFuZWxzO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldENvbnRhaW5zRXJyb3JzKCk7XG4gICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYW5lbHNbaV0uY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5nZXRJc0Fuc3dlcmVkKCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2aXNpYmxlUXVlc3Rpb25zID0gPEFycmF5PGFueT4+W107XG4gICAgICBwYW5lbHNbaV0uYWRkUXVlc3Rpb25zVG9MaXN0KHZpc2libGVRdWVzdGlvbnMsIHRydWUpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2aXNpYmxlUXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghdmlzaWJsZVF1ZXN0aW9uc1tqXS5pc0Fuc3dlcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFuZWxzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tqXS5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFuZWxzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbnNbal0uaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHJlc3VsdCA9IHN1cGVyLmdldEFsbEVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZXJyb3JzID0gcXVlc3Rpb25zW2pdLmdldEFsbEVycm9ycygpO1xuICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChlcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICAgIGlmICghdmFsdWVzIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlcykpIHJldHVybiB2YWx1ZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbCA9IHZhbHVlc1tpXTtcbiAgICAgIGlmICghdmFsKSBjb250aW51ZTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMuZ2V0UGFuZWxEaXNwbGF5VmFsdWUoaSwgdmFsLCBrZXlzQXNUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFuZWxEaXNwbGF5VmFsdWUoXG4gICAgcGFuZWxJbmRleDogbnVtYmVyLFxuICAgIHZhbDogYW55LFxuICAgIGtleXNBc1RleHQ6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIHZhbDtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsc1twYW5lbEluZGV4XTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHBhbmVsLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoa2V5KTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHtcbiAgICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KGtleSwgcGFuZWxJbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICB2YXIgcVZhbHVlID0gcXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHZhbFtrZXldKTtcbiAgICAgICAgdmFsW2tleV0gPSBxVmFsdWU7XG4gICAgICAgIGlmIChrZXlzQXNUZXh0ICYmICEhcXVlc3Rpb24udGl0bGUgJiYgcXVlc3Rpb24udGl0bGUgIT09IGtleSkge1xuICAgICAgICAgIHZhbFtxdWVzdGlvbi50aXRsZV0gPSBxVmFsdWU7XG4gICAgICAgICAgZGVsZXRlIHZhbFtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvckluUGFuZWxzKGZpcmVDYWxsYmFjazogYm9vbGVhbiwgcmVjOiBhbnkpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIHZhciBrZXlWYWx1ZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zZXRPbkNvbXBsZXRlQXN5bmNJblBhbmVsKHBhbmVsc1tpXSk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcG5sRXJyb3IgPSBwYW5lbHNbaV0uaGFzRXJyb3JzKFxuICAgICAgICBmaXJlQ2FsbGJhY2ssXG4gICAgICAgICEhcmVjICYmIHJlYy5mb2N1c2VPbkZpcnN0RXJyb3IsXG4gICAgICAgIHJlY1xuICAgICAgKTtcbiAgICAgIHBubEVycm9yID0gdGhpcy5pc1ZhbHVlRHVwbGljYXRlZChwYW5lbHNbaV0sIGtleVZhbHVlcywgcmVjKSB8fCBwbmxFcnJvcjtcbiAgICAgIGlmICghdGhpcy5pc1JlbmRlck1vZGVMaXN0ICYmIHBubEVycm9yICYmICFyZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBpO1xuICAgICAgfVxuICAgICAgcmVzID0gcG5sRXJyb3IgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgc2V0T25Db21wbGV0ZUFzeW5jSW5QYW5lbChwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzVmFsdWVEdXBsaWNhdGVkKFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsLFxuICAgIGtleVZhbHVlczogQXJyYXk8YW55PixcbiAgICByZWM6IGFueSxcbiAgICBmaXJlQ2FsbGJhY2s/OiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5rZXlOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPnBhbmVsLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUodGhpcy5rZXlOYW1lKTtcbiAgICBpZiAoIXF1ZXN0aW9uIHx8IHF1ZXN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gJiZcbiAgICAgIHF1ZXN0aW9uICE9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uXG4gICAgKSB7XG4gICAgICBxdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleVZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlID09IGtleVZhbHVlc1tpXSkge1xuICAgICAgICBxdWVzdGlvbi5hZGRFcnJvcihcbiAgICAgICAgICBuZXcgS2V5RHVwbGljYXRpb25FcnJvcih0aGlzLmtleUR1cGxpY2F0aW9uRXJyb3IsIHRoaXMpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIXJlYyAmJiAhcmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAga2V5VmFsdWVzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVBbmRTZXR1cE5ld1BhbmVsT2JqZWN0KCk7XG4gICAgdmFyIGpzb24gPSB0aGlzLnRlbXBsYXRlLnRvSlNPTigpO1xuICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgcGFuZWwpO1xuICAgIHBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgcGFuZWwudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgIG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0odGhpcywgcGFuZWwpO1xuICAgIHBhbmVsLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uc2V0UGFyZW50UXVlc3Rpb24odGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBwYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsT2JqZWN0KCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHBhbmVsLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRUZW1wbGF0ZVF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIH07XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVRdWVzdGlvblRpdGxlTG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiXG4gICAgICA/IHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uXG4gICAgICA6IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbkNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWxPYmplY3QoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIFNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgfVxuICBwcml2YXRlIHNldFBhbmVsQ291bnRCYXNlZE9uVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBuZXdQYW5lbENvdW50ID0gdmFsICYmIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggOiAwO1xuICAgIGlmIChuZXdQYW5lbENvdW50ID09IDAgJiYgdGhpcy5sb2FkaW5nUGFuZWxDb3VudCA+IDApIHtcbiAgICAgIG5ld1BhbmVsQ291bnQgPSB0aGlzLmxvYWRpbmdQYW5lbENvdW50O1xuICAgIH1cbiAgICB0aGlzLnBhbmVsQ291bnQgPSBuZXdQYW5lbENvdW50O1xuICB9XG4gIHB1YmxpYyBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRQYW5lbENvdW50QmFzZWRPblZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbFVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLnBhbmVsc1tpXSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxTdXJ2ZXlWYWx1ZUNoYW5nZWQodGhpcy5wYW5lbHNbaV0pO1xuICAgIH1cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGFuZWxVcGRhdGVWYWx1ZUZyb21TdXJ2ZXkocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEocGFuZWwuZGF0YSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgcS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCldKTtcbiAgICAgIHEudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoXG4gICAgICAgIHZhbHVlc1txLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGFuZWxTdXJ2ZXlWYWx1ZUNoYW5nZWQocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEocGFuZWwuZGF0YSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgcS5vblN1cnZleVZhbHVlQ2hhbmdlZCh2YWx1ZXNbcS5nZXRWYWx1ZU5hbWUoKV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5zZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpO1xuICAgICAgdGhpcy5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfVxuICB9XG4gIC8vSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YVxuICBnZXRJdGVtSW5kZXgoaXRlbTogSVN1cnZleURhdGEpOiBudW1iZXIge1xuICAgIHZhciByZXMgPSB0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgcmV0dXJuIHJlcyA+IC0xID8gcmVzIDogdGhpcy5pdGVtcy5sZW5ndGg7XG4gIH1cbiAgZ2V0UGFuZWxJdGVtRGF0YShpdGVtOiBJU3VydmV5RGF0YSk6IGFueSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB2YXIgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgIHZhciBxVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmIChpbmRleCA8IDAgJiYgQXJyYXkuaXNBcnJheShxVmFsdWUpICYmIHFWYWx1ZS5sZW5ndGggPiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gaXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4ge307XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSB8fCBxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSByZXR1cm4ge307XG4gICAgcmV0dXJuIHFWYWx1ZVtpbmRleF07XG4gIH1cbiAgcHJpdmF0ZSBpc1NldFBhbmVsSXRlbURhdGE6IEFycmF5PHN0cmluZz47XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1NldFBhbmVsSXRlbURhdGEgJiYgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEuaW5kZXhPZihuYW1lKSA+IC0xKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1NldFBhbmVsSXRlbURhdGEpIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhID0gW107XG4gICAgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEucHVzaChuYW1lKTtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIHFWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSkge1xuICAgICAgcVZhbHVlID0gW107XG4gICAgfVxuICAgIGlmIChxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gcVZhbHVlLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICAgIHFWYWx1ZS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFxVmFsdWVbaW5kZXhdKSBxVmFsdWVbaW5kZXhdID0ge307XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICBxVmFsdWVbaW5kZXhdW25hbWVdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcVZhbHVlW2luZGV4XVtuYW1lXTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnBhbmVscy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uID0gdGhpcy5wYW5lbHNbaW5kZXhdLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBxVmFsdWU7XG4gICAgdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICBwYW5lbDogKDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+aXRlbSkucGFuZWwsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGl0ZW1JbmRleDogaW5kZXgsXG4gICAgICAgIGl0ZW1WYWx1ZTogcVZhbHVlW2luZGV4XSxcbiAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICBnZXRSb290RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSB0aGlzLnBhbmVscy5tYXAoXG4gICAgICAgIChwYW5lbDogUGFuZWxNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHZhciBwYW5lbERhdGFJdGVtID0gPGFueT57XG4gICAgICAgICAgICBuYW1lOiBwYW5lbC5uYW1lIHx8IGluZGV4LFxuICAgICAgICAgICAgdGl0bGU6IHBhbmVsLnRpdGxlIHx8IFwiUGFuZWxcIixcbiAgICAgICAgICAgIHZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiBwYW5lbC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcGFuZWwucXVlc3Rpb25zXG4gICAgICAgICAgICAgIC5tYXAoKHF1ZXN0aW9uOiBRdWVzdGlvbikgPT4gcXVlc3Rpb24uZ2V0UGxhaW5EYXRhKG9wdGlvbnMpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+ICEhZCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBwYW5lbERhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSAoPGFueT5wYW5lbClbXG4gICAgICAgICAgICAgIGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcGFuZWxEYXRhSXRlbTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIHJhbmdlTWF4ID0gdGhpcy5wYW5lbENvdW50O1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJwYW5lbER5bmFtaWNQcm9ncmVzc1RleHRcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmN1cnJlbnRJbmRleCArIDEsIHJhbmdlTWF4KTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWxXcmFwcGVyQ3NzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLmNzc0NsYXNzZXMucGFuZWxXcmFwcGVyO1xuICAgIGlmICh0aGlzLnBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgY3NzQ2xhc3NlcyArPSBcIiBcIiArIHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXJJblJvdztcbiAgICB9XG4gICAgcmV0dXJuIGNzc0NsYXNzZXM7XG4gIH1cbiAgcHVibGljIGdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCk6IHN0cmluZyB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPVxuICAgICAgdGhpcy5jc3NDbGFzc2VzLmJ1dHRvbiArIFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLmJ1dHRvblJlbW92ZTtcbiAgICBpZiAodGhpcy5wYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIGNzc0NsYXNzZXMgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlUmlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicGFuZWxkeW5hbWljXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlRWxlbWVudHNcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGVtcGxhdGVUaXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZW1wbGF0ZVRpdGxlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlRGVzY3JpcHRpb246dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RlbXBsYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVBhbmVsOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxDb3VudDpudW1iZXJcIixcbiAgICAgIGlzQmluZGFibGU6IHRydWUsXG4gICAgICBkZWZhdWx0OiAwLFxuICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtaW5QYW5lbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4UGFuZWxDb3VudDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnQsXG4gICAgfSxcbiAgICBcImRlZmF1bHRQYW5lbFZhbHVlOnBhbmVsdmFsdWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWw6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxzU3RhdGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImNvbGxhcHNlZFwiLCBcImV4cGFuZGVkXCIsIFwiZmlyc3RFeHBhbmRlZFwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJrZXlOYW1lXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NLZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29uZmlybURlbGV0ZVRleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJwYW5lbEFkZFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsQWRkVGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsUmVtb3ZlVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxSZW1vdmVUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxQcmV2VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxQcmV2VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsTmV4dFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsTmV4dFRleHRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgICAgZGVmYXVsdDogXCJvZmZcIixcbiAgICAgIGNob2ljZXM6IFtcIm9mZlwiLCBcIm9uUGFuZWxcIiwgXCJvblN1cnZleVwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzaG93UmFuZ2VJblByb2dyZXNzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVuZGVyTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJsaXN0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJsaXN0XCIsIFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiLCBcInByb2dyZXNzVG9wQm90dG9tXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgICBjaG9pY2VzOiBbXCJib3R0b21cIiwgXCJyaWdodFwiXSxcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHJhZGlvZ3JvdXAgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyYWRpb2dyb3VwXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHRoaXMudmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IFwiY2xlYXIgYnV0dG9uXCIgZmxhZy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93Q2xlYXJCdXR0b25cIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0NsZWFyQnV0dG9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dDbGVhckJ1dHRvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuU2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dDbGVhckJ1dHRvbiAmJiAhdGhpcy5pc1JlYWRPbmx5O1xuICB9XG4gIHB1YmxpYyBnZXQgY2xlYXJCdXR0b25DYXB0aW9uKCkge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2xlYXJDYXB0aW9uXCIpO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmFkaW9ncm91cFwiLFxuICBbeyBuYW1lOiBcInNob3dDbGVhckJ1dHRvbjpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94YmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCBTb3J0YWJsZUxpYiBmcm9tIFwic29ydGFibGVqc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgSXNNb2JpbGUgfSBmcm9tIFwiLi91dGlscy9pcy1tb2JpbGVcIjtcblxuY29uc3QgU29ydGFibGUgPSA8YW55PlNvcnRhYmxlTGliO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgcmFua2luZyBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYW5raW5nTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICBwcml2YXRlIGRvbU5vZGU6IEhUTUxFbGVtZW50ID0gbnVsbDtcbiAgcHJpdmF0ZSBzb3J0YWJsZUluc3Q6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhbmtpbmdcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNJbmRldGVybWluYXRlKCkge1xuICAgIHJldHVybiAhdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm9vdENsYXNzKCkge1xuICAgIGNvbnN0IGNzczogYW55ID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIGlmIChJc01vYmlsZSkgcmV0dXJuIGNzcy5yb290ICsgXCIgXCIgKyBjc3Mucm9vdE1vYmlsZU1vZDtcbiAgICByZXR1cm4gY3NzLnJvb3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbmRldGVybWluYXRlID8gXCJcXHUyMDEzXCIgOiBpbmRleCArIDEgKyBcIlwiO1xuICB9XG5cbiAgcHVibGljIGdldCByYW5raW5nQ2hvaWNlcygpIHtcbiAgICBsZXQgcmVzdWx0OiBJdGVtVmFsdWVbXSA9IFtdO1xuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IHZpc2libGVDaG9pY2VzOiBJdGVtVmFsdWVbXSA9IHRoaXMucmVtb3ZlT3RoZXJDaG9pY2VGcm9tQ2hvaWNlcyhcbiAgICAgIHRoaXMudmlzaWJsZUNob2ljZXNcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNJbmRldGVybWluYXRlKSB7XG4gICAgICByZXN1bHQgPSAgdmlzaWJsZUNob2ljZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubWVyZ2VWYWx1ZUFuZFZpc2libGVDaG9pY2VzKHZhbHVlLCB2aXNpYmxlQ2hvaWNlcyk7XG4gICAgfVxuICAgIFxuICAgIC8vIHJhbmtpbmcgcXVlc3Rpb24gd2l0aCBvbmx5IG9uZSBjaG9pY2UgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHJlc3VsdCA9IFtdO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlT3RoZXJDaG9pY2VGcm9tQ2hvaWNlcyhjaG9pY2VzOiBJdGVtVmFsdWVbXSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNob2ljZXM7XG4gICAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2U6IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGNob2ljZS52YWx1ZSA9PT0gXCJvdGhlclwiKSB7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoaW5kZXgsIDEpOyAvLyByZW1vdmUgb3RoZXIgY2hvaWNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vY3Jvc3MgZnJhbWV3b3JrIGluaXRpYWxpemF0aW9uXG4gIHB1YmxpYyBhZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoISFlbCkge1xuICAgICAgdGhpcy5pbml0U29ydGFibGUoZWwpO1xuICAgIH1cbiAgICBzdXBlci5hZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbCk7XG4gIH1cbiAgLy9jcm9zcyBmcmFtZXdvcmsgZGVzdHJveVxuICBwdWJsaWMgYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5zb3J0YWJsZUluc3QpIHRoaXMuc29ydGFibGVJbnN0LmRlc3Ryb3koKTtcbiAgICBzdXBlci5iZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXk6IGFueSA9IGV2ZW50LmtleTtcbiAgICBjb25zdCBhcnJheTogTm9kZUxpc3RPZjxFbGVtZW50PiA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbVxuICAgICk7XG4gICAgY29uc3QgaW5kZXg6IG51bWJlciA9IFtdLmluZGV4T2YuY2FsbChhcnJheSwgZXZlbnQudGFyZ2V0KTtcblxuICAgIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiICYmIGluZGV4KSB7XG4gICAgICB0aGlzLmhhbmRsZUFycm93VXAoaW5kZXgpO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiICYmIGluZGV4ICE9PSBhcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmhhbmRsZUFycm93RG93bihpbmRleCk7XG4gICAgfVxuICB9O1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0U2VsZWN0QWxsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE5vbmUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gdG8gbWFrZSBcImNhcnJ5IGZvcndhcmRcIiBmZWF0dXJlIHdvcmsgcHJvcGVybHkgd2l0aCByYW5raW5nXG4gIHByb3RlY3RlZCBvblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuXG4gICAgaWYgKHRoaXMuaXNJbmRldGVybWluYXRlKSByZXR1cm47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMucmFua2luZ0Nob2ljZXMubWFwKGNob2ljZSA9PiBjaG9pY2UudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVZhbHVlQW5kVmlzaWJsZUNob2ljZXMoXG4gICAgdmFsdWU6IGFueSxcbiAgICB2aXNpYmxlQ2hvaWNlczogQXJyYXk8SXRlbVZhbHVlPlxuICApIHtcbiAgICBjb25zdCBsZW5ndGg6IG51bWJlciA9IHZpc2libGVDaG9pY2VzLmxlbmd0aDtcbiAgICBsZXQgcmVzdWx0OiBBcnJheTxJdGVtVmFsdWU+ID0gW107XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaG9pY2UgPSB2aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdmFsdWUuaW5kZXhPZihjaG9pY2UudmFsdWUpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoaW5kZXgsIDEsIGNob2ljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuc3BsaWNlKHJlc3VsdC5sZW5ndGggLSAxLCAwLCBjaG9pY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGNob2ljZSA9PiAhIWNob2ljZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNvcnRhYmxlKGRvbU5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCFkb21Ob2RlKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogUXVlc3Rpb25SYW5raW5nTW9kZWwgPSB0aGlzO1xuICAgIHNlbGYuZG9tTm9kZSA9IGRvbU5vZGU7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuXG4gICAgc2VsZi5zb3J0YWJsZUluc3QgPSBuZXcgU29ydGFibGUoZG9tTm9kZSwge1xuICAgICAgYW5pbWF0aW9uOiAxMDAsXG4gICAgICBmb3JjZUZhbGxiYWNrOiB0cnVlLFxuICAgICAgZGVsYXk6IDIwMCxcbiAgICAgIGRlbGF5T25Ub3VjaE9ubHk6IHRydWUsXG4gICAgICBoYW5kbGU6IElzTW9iaWxlXG4gICAgICAgID8gXCIuXCIgKyBzZWxmLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXJcbiAgICAgICAgOiBcIi5cIiArIHNlbGYuY3NzQ2xhc3Nlcy5pdGVtQ29udGVudCxcbiAgICAgIGdob3N0Q2xhc3M6IHNlbGYuY3NzQ2xhc3Nlcy5pdGVtR2hvc3RNb2QsXG4gICAgICBkcmFnQ2xhc3M6IHNlbGYuY3NzQ2xhc3Nlcy5pdGVtRHJhZ01vZCxcbiAgICAgIG9uU3RhcnQoZXZ0OiBhbnkpIHtcbiAgICAgICAgKDxhbnk+U29ydGFibGUuZ2hvc3Quc3R5bGUub3BhY2l0eSkgPSAxO1xuICAgICAgICBkb21Ob2RlLmNsYXNzTmFtZSArPSBcIiBcIiArIHNlbGYuY3NzQ2xhc3Nlcy5yb290RHJhZ01vZDtcbiAgICAgICAgaWYgKHNlbGYuaXNJbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgc2VsZi5zZXRHaG9zdFRleHQoZXZ0Lm9sZEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVuZCgpIHtcbiAgICAgICAgZG9tTm9kZS5jbGFzc05hbWUgPSBkb21Ob2RlLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgIFwiIFwiICsgc2VsZi5jc3NDbGFzc2VzLnJvb3REcmFnTW9kLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICAgICAgc2VsZi5zZXRWYWx1ZUZyb21VSSgpO1xuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlKGV2dDogYW55KSB7XG4gICAgICAgIGlmICghc2VsZi5pc0luZGV0ZXJtaW5hdGUpIHNlbGYuc3luY051bWJlcnMoKTtcbiAgICAgICAgc2VsZi5zZXRHaG9zdFRleHQoZXZ0Lm5ld0luZGV4ICsgMSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd1VwID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBhcnJheTogc3RyaW5nW10gPSB0aGlzLnNvcnRhYmxlSW5zdC50b0FycmF5KCk7XG4gICAgdGhpcy5tb3ZlQXJyYXlJdGVtQmFjayhhcnJheSwgaW5kZXgpO1xuICAgIHRoaXMuc29ydGFibGVJbnN0LnNvcnQoYXJyYXkpO1xuICAgIHRoaXMuc3luY051bWJlcnMoKTtcbiAgICB0aGlzLnNldFZhbHVlRnJvbVVJKCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaW5kZXggLSAxKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZUFycm93RG93biA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgYXJyYXk6IHN0cmluZ1tdID0gdGhpcy5zb3J0YWJsZUluc3QudG9BcnJheSgpO1xuICAgIHRoaXMubW92ZUFycmF5SXRlbUZvcndhcmQoYXJyYXksIGluZGV4KTtcbiAgICB0aGlzLnNvcnRhYmxlSW5zdC5zb3J0KGFycmF5KTtcbiAgICB0aGlzLnN5bmNOdW1iZXJzKCk7XG4gICAgdGhpcy5zZXRWYWx1ZUZyb21VSSgpO1xuICAgIHRoaXMuZm9jdXNJdGVtKGluZGV4ICsgMSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBtb3ZlQXJyYXlJdGVtQmFjayA9IChhcnJheTogc3RyaW5nW10sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBbYXJyYXlbaW5kZXhdLCBhcnJheVtpbmRleCAtIDFdXSA9IFthcnJheVtpbmRleCAtIDFdLCBhcnJheVtpbmRleF1dO1xuICB9O1xuXG4gIHByaXZhdGUgbW92ZUFycmF5SXRlbUZvcndhcmQgPSAoYXJyYXk6IHN0cmluZ1tdLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgW2FycmF5W2luZGV4XSwgYXJyYXlbaW5kZXggKyAxXV0gPSBbYXJyYXlbaW5kZXggKyAxXSwgYXJyYXlbaW5kZXhdXTtcbiAgfTtcblxuICBwcml2YXRlIGZvY3VzSXRlbSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaXRlbXNOb2RlczogYW55ID0gdGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5cIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtXG4gICAgKTtcbiAgICBpdGVtc05vZGVzW2luZGV4XS5mb2N1cygpO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0VmFsdWVGcm9tVUkgPSAoKSA9PiB7XG4gICAgY29uc3QgdmFsdWU6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdGV4dE5vZGVzID0gdGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5cIiArIHRoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWxcbiAgICApO1xuICAgIHRleHROb2Rlcy5mb3JFYWNoKCh0ZXh0Tm9kZTogYW55LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJUZXh0OiBzdHJpbmcgPSB0ZXh0Tm9kZS5pbm5lclRleHQ7XG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzLmZvckVhY2goKHZpc2libGVDaG9pY2U6IEl0ZW1WYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaW5uZXJUZXh0ID09PSB2aXNpYmxlQ2hvaWNlLnRleHQpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKHZpc2libGVDaG9pY2UudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH07XG5cbiAgcHJpdmF0ZSBzeW5jTnVtYmVycyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuZG9tTm9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdG9yOiBzdHJpbmcgPVxuICAgICAgXCIuXCIgK1xuICAgICAgdGhpcy5jc3NDbGFzc2VzLml0ZW0gK1xuICAgICAgXCI6bm90KC5cIiArXG4gICAgICB0aGlzLmNzc0NsYXNzZXMuaXRlbURyYWdNb2QgK1xuICAgICAgXCIpXCIgK1xuICAgICAgXCIgLlwiICtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5kZXg7XG5cbiAgICBjb25zdCBpbmRleE5vZGVzOiBOb2RlTGlzdE9mPEVsZW1lbnQ+ID0gdGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBzZWxlY3RvclxuICAgICk7XG4gICAgaW5kZXhOb2Rlcy5mb3JFYWNoKChpbmRleE5vZGU6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGluZGV4Tm9kZS5pbm5lclRleHQgPSB0aGlzLmdldE51bWJlckJ5SW5kZXgoaW5kZXgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0R2hvc3RUZXh0ID0gKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGluZGV4Tm9kZXM6IE5vZGVMaXN0T2Y8RWxlbWVudD4gPSB0aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIFwiLlwiICsgdGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleFxuICAgICk7XG4gICAgY29uc3QgZ2hvc3ROb2RlOiBFbGVtZW50ID0gaW5kZXhOb2Rlc1tpbmRleE5vZGVzLmxlbmd0aCAtIDFdO1xuICAgICg8YW55Pmdob3N0Tm9kZSkuaW5uZXJUZXh0ID0gdGV4dDtcbiAgfTtcbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJyYW5raW5nXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzT3RoZXJcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJvdGhlclRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJvdGhlckVycm9yVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaGFzTm9uZVwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaGFzU2VsZWN0QWxsXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwic2VsZWN0QWxsVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm1heFNlbGVjdGVkQ2hvaWNlc1wiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYW5raW5nTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYW5raW5nXCIsIG5hbWUgPT4ge1xuICBjb25zdCBxOiBRdWVzdGlvblJhbmtpbmdNb2RlbCA9IG5ldyBRdWVzdGlvblJhbmtpbmdNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSByYXRpbmcgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ01vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICByYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcInJhdGVWYWx1ZXNcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJyYXRlVmFsdWVzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChmdW5jdGlvbihzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMubmFtZSA9PSBcInJhdGVNaW5cIiB8fFxuICAgICAgICBvcHRpb25zLm5hbWUgPT0gXCJyYXRlTWF4XCIgfHxcbiAgICAgICAgb3B0aW9ucy5uYW1lID09IFwicmF0ZVN0ZXBcIlxuICAgICAgKSB7XG4gICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYucmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgICAgXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHRoaXMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICB2YXIgbG9jTWF4UmF0ZURlc2NyaXB0aW9uVmFsdWUgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgICAgXCJtYXhSYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHRoaXMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBsb2NNaW5SYXRlRGVzY3JpcHRpb25WYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0ID8gdGV4dCArIFwiIFwiIDogdGV4dDtcbiAgICB9O1xuICAgIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlLm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuIHRleHQgPyBcIiBcIiArIHRleHQgOiB0ZXh0O1xuICAgIH07XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiByYXRlIGl0ZW1zLiBFdmVyeSBpdGVtIGhhcyB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdGhlIHZhbHVlIGlzIHJlbmRlcmVkLiBUaGUgaXRlbSB0ZXh0IHN1cHBvcnRzIG1hcmtkb3duLiBJZiBpdCBpcyBlbXB0eSB0aGUgYXJyYXkgaXMgZ2VuZXJhdGVkIGJ5IHVzaW5nIHJhdGVNaW4sIHJhdGVNYXggYW5kIHJhdGVTdGVwIHByb3BlcnRpZXMuXG4gICAqIEBzZWUgcmF0ZU1pblxuICAgKiBAc2VlIHJhdGVNYXhcbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlVmFsdWVzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYXRlVmFsdWVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmF0ZVZhbHVlcyh2YWw6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlVmFsdWVzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBnZW5lcmF0ZSByYXRlIHZhbHVlcyBpZiByYXRlVmFsdWVzIGFycmF5IGlzIGVtcHR5LiBJdCBpcyB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlIHJhdGluZy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogQHNlZSByYXRlVmFsdWVzXG4gICAqIEBzZWUgcmF0ZU1heFxuICAgKiBAc2VlIHJhdGVTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJhdGVNaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZU1pblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVNaW4odmFsOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgdmFsID4gdGhpcy5yYXRlTWF4IC0gdGhpcy5yYXRlU3RlcClcbiAgICAgIHZhbCA9IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZVN0ZXA7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZU1pblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmF0ZSB2YWx1ZXMgaWYgcmF0ZVZhbHVlcyBhcnJheSBpcyBlbXB0eS4gSXQgaXMgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIHJhdGluZy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS5cbiAgICogQHNlZSByYXRlVmFsdWVzXG4gICAqIEBzZWUgcmF0ZU1pblxuICAgKiBAc2VlIHJhdGVTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJhdGVNYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZU1heFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVNYXgodmFsOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgdmFsIDwgdGhpcy5yYXRlTWluICsgdGhpcy5yYXRlU3RlcClcbiAgICAgIHZhbCA9IHRoaXMucmF0ZU1pbiArIHRoaXMucmF0ZVN0ZXA7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZU1heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmF0ZSB2YWx1ZXMgaWYgcmF0ZVZhbHVlcyBhcnJheSBpcyBlbXB0eS4gSXQgaXMgdGhlIHN0ZXAgdmFsdWUuIFRoZSBudW1iZXIgb2YgcmF0ZSB2YWx1ZXMgYXJlIChyYXRlTWF4IC0gcmF0ZU1pbikgLyByYXRlU3RlcC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogQHNlZSByYXRlVmFsdWVzXG4gICAqIEBzZWUgcmF0ZU1pblxuICAgKiBAc2VlIHJhdGVNYXhcbiAgICovXG4gIHB1YmxpYyBnZXQgcmF0ZVN0ZXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVN0ZXBcIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlU3RlcCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPD0gMCkgdmFsID0gMTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgdmFsID4gdGhpcy5yYXRlTWF4IC0gdGhpcy5yYXRlTWluKVxuICAgICAgdmFsID0gdGhpcy5yYXRlTWF4IC0gdGhpcy5yYXRlTWluO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVTdGVwXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHJlcyA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnZpc2libGVSYXRlVmFsdWVzLCB2YWx1ZSk7XG4gICAgcmV0dXJuICEhcmVzID8gcmVzIDogdmFsdWU7XG4gIH1cbiAgZ2V0IHZpc2libGVSYXRlVmFsdWVzKCk6IEl0ZW1WYWx1ZVtdIHtcbiAgICBpZiAodGhpcy5yYXRlVmFsdWVzLmxlbmd0aCA+IDApIHJldHVybiB0aGlzLnJhdGVWYWx1ZXM7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMucmF0ZU1pbjtcbiAgICB2YXIgc3RlcCA9IHRoaXMucmF0ZVN0ZXA7XG4gICAgd2hpbGUgKFxuICAgICAgdmFsdWUgPD0gdGhpcy5yYXRlTWF4ICYmXG4gICAgICByZXMubGVuZ3RoIDwgc2V0dGluZ3MucmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50XG4gICAgKSB7XG4gICAgICByZXMucHVzaChuZXcgSXRlbVZhbHVlKHZhbHVlKSk7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29ycmVjdFZhbHVlKHZhbHVlICsgc3RlcCwgc3RlcCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjb3JyZWN0VmFsdWUodmFsdWU6IG51bWJlciwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKE1hdGgucm91bmQodmFsdWUpID09IHZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgdmFyIGZyID0gMDtcbiAgICB3aGlsZSAoTWF0aC5yb3VuZChzdGVwKSAhPSBzdGVwKSB7XG4gICAgICBzdGVwICo9IDEwO1xuICAgICAgZnIrKztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUudG9GaXhlZChmcikpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmF0aW5nXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgbWluaW11bSAoZmlyc3QpIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblJhdGVEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pblJhdGVEZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblJhdGVEZXNjcmlwdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWluUmF0ZURlc2NyaXB0aW9uXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY01pblJhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJtaW5SYXRlRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiBtYXhpbXVtIChsYXN0KSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhSYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhSYXRlRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1heFJhdGVEZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNYXhSYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWF4UmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHByb3RlY3RlZCB2YWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnJhdGVWYWx1ZXMsIHZhbCk7XG4gICAgICByZXR1cm4gISFpdGVtID8gaXRlbS52YWx1ZSA6IHZhbDtcbiAgICB9XG4gICAgcmV0dXJuICFpc05hTih2YWwpID8gcGFyc2VGbG9hdCh2YWwpIDogdmFsO1xuICB9XG4gIC8qKlxuICAgKiBDbGljayB2YWx1ZSBhZ2FpbiB0byBjbGVhci5cbiAgICovXG4gIHB1YmxpYyBzZXRWYWx1ZUZyb21DbGljayh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IHBhcnNlRmxvYXQodmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJyYXRpbmdcIixcbiAgW1xuICAgIHsgbmFtZTogXCJoYXNDb21tZW50OnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzQ29tbWVudFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc0NvbW1lbnQ7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIsXG4gICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJhdGVWYWx1ZXM6aXRlbXZhbHVlW11cIixcbiAgICAgIGJhc2VWYWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJyYXRlTWluOm51bWJlclwiLCBkZWZhdWx0OiAxIH0sXG4gICAgeyBuYW1lOiBcInJhdGVNYXg6bnVtYmVyXCIsIGRlZmF1bHQ6IDUgfSxcbiAgICB7IG5hbWU6IFwicmF0ZVN0ZXA6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIG1pblZhbHVlOiAwLjEgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm1pbmludW1SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwibWF4aW11bVJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01heFJhdGVEZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYXRpbmdcIiwgbmFtZSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCBTaWduYXR1cmVQYWQgZnJvbSBcInNpZ25hdHVyZV9wYWRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuXG52YXIgZGVmYXVsdFdpZHRoID0gMzAwO1xudmFyIGRlZmF1bHRIZWlnaHQgPSAyMDA7XG5cbmZ1bmN0aW9uIHJlc2l6ZUNhbnZhcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSB7XG4gIHZhciBjb250ZXh0OiBhbnkgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICB2YXIgZGV2aWNlUGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHZhciBiYWNraW5nU3RvcmVSYXRpbyA9XG4gICAgY29udGV4dC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgY29udGV4dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgY29udGV4dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgMTtcblxuICB2YXIgcmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvIC8gYmFja2luZ1N0b3JlUmF0aW87XG5cbiAgdmFyIG9sZFdpZHRoID0gY2FudmFzLndpZHRoO1xuICB2YXIgb2xkSGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICBjYW52YXMud2lkdGggPSBvbGRXaWR0aCAqIHJhdGlvO1xuICBjYW52YXMuaGVpZ2h0ID0gb2xkSGVpZ2h0ICogcmF0aW87XG5cbiAgY2FudmFzLnN0eWxlLndpZHRoID0gb2xkV2lkdGggKyBcInB4XCI7XG4gIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBvbGRIZWlnaHQgKyBcInB4XCI7XG5cbiAgY29udGV4dC5zY2FsZShyYXRpbywgcmF0aW8pO1xufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIHNpZ25hdHVyZSBwYWQgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwcm90ZWN0ZWQgZ2V0Q3NzUm9vdChjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBjbGFzc2VzID0gc3VwZXIuZ2V0Q3NzUm9vdChjc3NDbGFzc2VzKTtcbiAgICBpZiAoXCJcIiArIHRoaXMud2lkdGggPT09IFwiMzAwXCIpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnNtYWxsO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5zaWduYXR1cmVQYWQpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5zaWduYXR1cmVQYWQudG9EYXRhVVJMKHRoaXMuZGF0YUZvcm1hdCk7XG4gICAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNpZ25hdHVyZXBhZFwiO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoISFlbCkge1xuICAgICAgdGhpcy5pbml0U2lnbmF0dXJlUGFkKGVsKTtcbiAgICB9XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghIWVsKSB7XG4gICAgICB0aGlzLmRlc3Ryb3lTaWduYXR1cmVQYWQoZWwpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRTaWduYXR1cmVQYWQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgdmFyIGNhbnZhczogYW55ID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF07XG4gICAgdmFyIGJ1dHRvbkVsID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIilbMF07XG4gICAgdmFyIHNpZ25hdHVyZVBhZCA9IG5ldyBTaWduYXR1cmVQYWQoY2FudmFzLCB7IGJhY2tncm91bmRDb2xvcjogXCIjZmZmZmZmXCIgfSk7XG4gICAgaWYgKHRoaXMuaXNJbnB1dFJlYWRPbmx5KSB7XG4gICAgICBzaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgfVxuXG4gICAgYnV0dG9uRWwub25jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dDbGVhciB8fCB0aGlzLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgICBzaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgICAgIGJ1dHRvbkVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5vbigpO1xuICAgICAgICBidXR0b25FbC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzaWduYXR1cmVQYWQucGVuQ29sb3IgPSB0aGlzLnBlbkNvbG9yO1xuICAgIHNpZ25hdHVyZVBhZC5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICBzaWduYXR1cmVQYWQub25CZWdpbiA9ICgpID0+IHtcbiAgICAgIGNhbnZhcy5mb2N1cygpO1xuICAgIH07XG4gICAgc2lnbmF0dXJlUGFkLm9uRW5kID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIH07XG4gICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy52YWx1ZTtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMud2lkdGggfHwgZGVmYXVsdFdpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMuaGVpZ2h0IHx8IGRlZmF1bHRIZWlnaHQ7XG4gICAgICByZXNpemVDYW52YXMoY2FudmFzKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBzaWduYXR1cmVQYWQuY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5mcm9tRGF0YVVSTChkYXRhKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gc2lnbmF0dXJlUGFkO1xuICAgIHZhciBwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IFwid2lkdGhcIiB8fCBvcHRpb25zLm5hbWUgPT09IFwiaGVpZ2h0XCIpIHtcbiAgICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyKTtcbiAgICB0aGlzLnNpZ25hdHVyZVBhZC5wcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gcHJvcGVydHlDaGFuZ2VkSGFuZGxlcjtcbiAgfVxuICBkZXN0cm95U2lnbmF0dXJlUGFkKGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnNpZ25hdHVyZVBhZCkge1xuICAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUodGhpcy5zaWduYXR1cmVQYWQucHJvcGVydHlDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLnNpZ25hdHVyZVBhZC5vZmYoKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5zaWduYXR1cmVQYWQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGRhdGFGb3JtYXQgZm9yIHRoZSBzaWduYXR1cmUgcGFkIGltYWdlIGRhdGEuXG4gICAqIGZvcm1hdHM6IFwiXCIgKGRlZmF1bHQpIC0gcG5nLCBcImltYWdlL2pwZWdcIiAtIGpwZWcsIFwiaW1hZ2Uvc3ZnK3htbFwiIC0gc3ZnXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRhdGFGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGF0YUZvcm1hdFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFGb3JtYXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkYXRhRm9ybWF0XCIsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgd2lkdGggZm9yIHRoZSBzaWduYXR1cmUgcGFkLlxuICAgKi9cbiAgcHVibGljIGdldCB3aWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCAzMDApO1xuICB9XG4gIHB1YmxpYyBzZXQgd2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyBoZWlnaHQgZm9yIHRoZSBzaWduYXR1cmUgcGFkLlxuICAgKi9cbiAgcHVibGljIGdldCBoZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIsIDIwMCk7XG4gIH1cbiAgcHVibGljIHNldCBoZWlnaHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGNsZWFyIGNvbnRlbnQgb2YgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93Q2xlYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q2xlYXJcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0NsZWFyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q2xlYXJcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCBwZW4gY29sb3IgZm9yIHRoZSBzaWduYXR1cmUgcGFkLlxuICAgKi9cbiAgcHVibGljIGdldCBwZW5Db2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwZW5Db2xvclwiLCBcIiMxYWIzOTRcIik7XG4gIH1cbiAgcHVibGljIHNldCBwZW5Db2xvcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBlbkNvbG9yXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJhY2tncm91bmRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjZmZmZmZmXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYmFja2dyb3VuZENvbG9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYmFja2dyb3VuZENvbG9yXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjbGVhciBzaWduYXR1cmUgYnV0dG9uIGNhcHRpb24uXG4gICAqL1xuICBnZXQgY2xlYXJCdXR0b25DYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjbGVhckNhcHRpb25cIik7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzaWduYXR1cmVwYWRcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwid2lkdGg6bnVtYmVyXCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiAzMDAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlaWdodDpudW1iZXJcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IDIwMCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYWxsb3dDbGVhcjpib29sZWFuXCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwZW5Db2xvcjpjb2xvclwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogXCIjMWFiMzk0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImJhY2tncm91bmRDb2xvcjpjb2xvclwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogXCIjZmZmZmZmXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImRhdGFGb3JtYXRcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgdmFsdWU6IFwiXCIsIHRleHQ6IFwiUE5HXCIgfSxcbiAgICAgICAgeyB2YWx1ZTogXCJpbWFnZS9qcGVnXCIsIHRleHQ6IFwiSlBFR1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IFwiaW1hZ2Uvc3ZnK3htbFwiLCB0ZXh0OiBcIlNWR1wiIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImRlZmF1bHRWYWx1ZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb3JyZWN0QW5zd2VyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgbmFtZSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIExvY2FsaXphYmxlU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBFbWFpbFZhbGlkYXRvciwgU3VydmV5VmFsaWRhdG9yIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IEN1c3RvbUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhbiBpbnB1dCB0ZXh0IHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByaXZhdGUgbG9jRGF0YUxpc3RWYWx1ZTogTG9jYWxpemFibGVTdHJpbmdzO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm1pbkVycm9yVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibWF4RXJyb3JUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMubG9jRGF0YUxpc3RWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZ3ModGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wibWluXCIsIFwibWF4XCIsIFwiaW5wdXRUeXBlXCIsIFwibWluVmFsdWVFeHByZXNzaW9uXCIsIFwibWF4VmFsdWVFeHByZXNzaW9uXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFJlbmRlcmVkTWluTWF4KCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wiaW5wdXRUeXBlXCIsIFwic2l6ZVwiXSwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVJbnB1dFNpemUoKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNUZXh0VmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFtcInRleHRcIiwgXCJudW1iZXJcIiwgXCJwYXNzd29yZFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA+IC0xO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5zZXRSZW5kZXJlZE1pbk1heCgpO1xuICAgIHRoaXMudXBkYXRlSW5wdXRTaXplKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBpbnB1dCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRUeXBlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5wdXRUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbCA9PSBcImRhdGV0aW1lX2xvY2FsXCIpIHZhbCA9IFwiZGF0ZXRpbWUtbG9jYWxcIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbnB1dFR5cGVcIiwgdmFsLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5taW4gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1heCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RlcCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMubWluVmFsdWVFeHByZXNzaW9uIHx8ICEhdGhpcy5tYXhWYWx1ZUV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMuc2V0UmVuZGVyZWRNaW5NYXgodmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgcXVlc3Rpb24gdXBkYXRlcyBpdCdzIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICogLSBgZGVmYXVsdGAgLSBnZXQgdGhlIHZhbHVlIGZyb20gc3VydmV5LnRleHRVcGRhdGVNb2RlXG4gICAqIC0gYG9uQmx1cmAgLSB0aGUgdmFsdWUgaXMgdXBkYXRlZCBhZnRlciBhbiBpbnB1dCBsb3NlcyB0aGUgZm9jdXMuXG4gICAqIC0gYG9uVHlwaW5nYCAtIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGV4dCBxdWVzdGlvbnMsIFwidGV4dFwiIGFuZCBcImNvbW1lbnRcIiwgb24gZXZlcnkga2V5IHByZXNzLlxuICAgKlxuICAgKiBOb3RlLCB0aGF0IHNldHRpbmcgdG8gXCJvblR5cGluZ1wiIG1heSBsZWFkIHRvIGEgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGluIGNhc2UgeW91IGhhdmUgbWFueSBleHByZXNzaW9ucyBpbiB0aGUgc3VydmV5LlxuICAgKiBAc2VlIHN1cnZleS50ZXh0VXBkYXRlTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCB0ZXh0VXBkYXRlTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHRVcGRhdGVNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGV4dFVwZGF0ZU1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnRleHRVcGRhdGVNb2RlID09IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1VwZGF0ZVZhbHVlVGV4dE9uVHlwaW5nIDogZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudGV4dFVwZGF0ZU1vZGUgPT0gXCJvblR5cGluZ1wiO1xuICB9XG4gIHB1YmxpYyBnZXRWYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHZhciB2YWxpZGF0b3JzID0gc3VwZXIuZ2V0VmFsaWRhdG9ycygpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRUeXBlID09PSBcImVtYWlsXCIgJiZcbiAgICAgICF0aGlzLnZhbGlkYXRvcnMuc29tZSh2ID0+IHYuZ2V0VHlwZSgpID09PSBcImVtYWlsdmFsaWRhdG9yXCIpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobmV3IEVtYWlsVmFsaWRhdG9yKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRleHQgbGVuZ3RoLiBJZiBpdCBpcyAtMSwgZGVmYXVsIHZhbHVlLCB0aGVuIHRoZSBzdXJ2ZXkgbWF4VGV4dExlbmd0aCBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gICAqIElmIGl0IGlzIDAsIHRoZW4gdGhlIHZhbHVlIGlzIHVubGltaXRlZFxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1heFRleHRMZW5ndGhcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heExlbmd0aFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heExlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heExlbmd0aFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRNYXhMZW5ndGgoKTogYW55IHtcbiAgICByZXR1cm4gSGVscGVycy5nZXRNYXhMZW5ndGgoXG4gICAgICB0aGlzLm1heExlbmd0aCxcbiAgICAgIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkubWF4VGV4dExlbmd0aCA6IC0xXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRleHQgaW5wdXQgc2l6ZVxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNpemVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2l6ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNUZXh0SW5wdXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIFtcInRleHRcIiwgXCJzZWFyY2hcIiwgXCJ0ZWxcIiwgXCJ1cmxcIiwgXCJlbWFpbFwiLCBcInBhc3N3b3JkXCJdLmluZGV4T2YoXG4gICAgICAgIHRoaXMuaW5wdXRUeXBlXG4gICAgICApID4gLTFcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXRTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlucHV0U2l6ZVwiLCAwKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0V2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRXaWR0aFwiKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlSW5wdXRTaXplKCkge1xuICAgIHZhciBzaXplID0gdGhpcy5pc1RleHRJbnB1dCAmJiB0aGlzLnNpemUgPiAwID8gdGhpcy5zaXplIDogMDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVGV4dElucHV0ICYmXG4gICAgICBzaXplIDwgMSAmJlxuICAgICAgdGhpcy5wYXJlbnQgJiZcbiAgICAgICEhKDxhbnk+dGhpcy5wYXJlbnQpW1wiaXRlbVNpemVcIl1cbiAgICApIHtcbiAgICAgIHNpemUgPSAoPGFueT50aGlzLnBhcmVudClbXCJpdGVtU2l6ZVwiXTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRTaXplXCIsIHNpemUpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0V2lkdGhcIiwgc2l6ZSA+IDAgPyBcImF1dG9cIiA6IFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUZXh0IGF1dG8gY29tcGxldGVcbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0b0NvbXBsZXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImF1dG9Db21wbGV0ZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF1dG9Db21wbGV0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImF1dG9Db21wbGV0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBtaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluKHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUV4cHJlc3Npb24odmFsKSkge1xuICAgICAgdGhpcy5taW5WYWx1ZUV4cHJlc3Npb24gPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heCh2YWw6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFeHByZXNzaW9uKHZhbCkpIHtcbiAgICAgIHRoaXMubWF4VmFsdWVFeHByZXNzaW9uID0gdmFsLnN1YnN0cigxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoYXQgeW91IGNhbiBzZXR1cCBhcyBleHByZXNzaW9uLCBmb3IgZXhhbXBsZSB0b2RheSgtMSkgPSB5ZXN0ZXJkYXk7XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblZhbHVlRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5WYWx1ZUV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5WYWx1ZUV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5WYWx1ZUV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdmFsdWUgdGhhdCB5b3UgY2FuIHNldHVwIGFzIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIHRvZGF5KDEpID0gdG9tb3Jyb3c7XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFZhbHVlRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhWYWx1ZUV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhWYWx1ZUV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhWYWx1ZUV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkTWluKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWluXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRNYXgoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRNYXhcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRoYXQgc2hvd3Mgd2hlbiB2YWx1ZSBpcyBsZXNzIHRoYW4gbWluIHByb3BlcnR5LlxuICAgKiBAc2VlIG1pblxuICAgKiBAc2VlIG1heEVycm9yVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBtaW5FcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcIm1pbkVycm9yVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1pbkVycm9yXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbkVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWluRXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY01pbkVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJtaW5FcnJvclRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRoYXQgc2hvd3Mgd2hlbiB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gbWFuIHByb3BlcnR5LlxuICAgKiBAc2VlIG1heFxuICAgKiBAc2VlIG1pbkVycm9yVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcIm1heEVycm9yVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1heEVycm9yXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4RXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY01heEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJtYXhFcnJvclRleHRcIik7XG4gIH1cblxuICAvKipcbiAgICogUmVhZG9ubHkgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgaW5wdXRUeXBlIGFsbG93cyB0byBzZXQgbWluIGFuZCBtYXggcHJvcGVydGllc1xuICAgKiBAc2VlIGlucHV0VHlwZVxuICAgKiBAc2VlIG1pblxuICAgKiBAc2VlIG1heFxuICAgKi9cbiAgcHVibGljIGdldCBpc01pbk1heFR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1pbk1heFR5cGVzLmluZGV4T2YodGhpcy5pbnB1dFR5cGUpID4gLTE7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKGlzT25WYWx1ZUNoYW5nZWQgfHwgdGhpcy5jYW5TZXRWYWx1ZVRvU3VydmV5KCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1ZhbHVlTGVzc01pbikge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIG5ldyBDdXN0b21FcnJvcihcbiAgICAgICAgICB0aGlzLmdldE1pbk1heEVycm9yVGV4dChcbiAgICAgICAgICAgIHRoaXMubWluRXJyb3JUZXh0LFxuICAgICAgICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNaW4pXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmFsdWVHcmVhdGVyTWF4KSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgbmV3IEN1c3RvbUVycm9yKFxuICAgICAgICAgIHRoaXMuZ2V0TWluTWF4RXJyb3JUZXh0KFxuICAgICAgICAgICAgdGhpcy5tYXhFcnJvclRleHQsXG4gICAgICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1heClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblNldFZhbHVlVG9TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzTWluTWF4VHlwZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUxlc3NNaW4pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlck1heCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZ2V0TWluTWF4RXJyb3JUZXh0KGVycm9yVGV4dDogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZXJyb3JUZXh0O1xuICAgIHJldHVybiBlcnJvclRleHQucmVwbGFjZShcInswfVwiLCB2YWx1ZS50b1N0cmluZygpKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1ZhbHVlTGVzc01pbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMucmVuZGVyZWRNaW4pICYmXG4gICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy52YWx1ZSkgPFxuICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1pbilcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzVmFsdWVHcmVhdGVyTWF4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5yZW5kZXJlZE1heCkgJiZcbiAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnZhbHVlKSA+XG4gICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnJlbmRlcmVkTWF4KVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNEYXRlSW5wdXRUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlucHV0VHlwZSA9PT0gXCJkYXRlXCIgfHwgdGhpcy5pbnB1dFR5cGUgPT09IFwiZGF0ZXRpbWUtbG9jYWxcIjtcbiAgfVxuICBwcml2YXRlIGdldENhbGN1bGF0ZWRNaW5NYXgobWluTWF4OiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShtaW5NYXgpKSByZXR1cm4gbWluTWF4O1xuICAgIHJldHVybiB0aGlzLmlzRGF0ZUlucHV0VHlwZSA/IG5ldyBEYXRlKG1pbk1heCkgOiBtaW5NYXg7XG4gIH1cbiAgcHJpdmF0ZSBzZXRSZW5kZXJlZE1pbk1heChcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5zZXRWYWx1ZUFuZFJ1bkV4cHJlc3Npb24oXG4gICAgICB0aGlzLm1pblZhbHVlRXhwcmVzc2lvbixcbiAgICAgIHRoaXMubWluLFxuICAgICAgdmFsID0+IHtcbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5pc0RhdGVJbnB1dFR5cGUgJiYgISFzZXR0aW5ncy5taW5EYXRlKSB7XG4gICAgICAgICAgdmFsID0gc2V0dGluZ3MubWluRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1pblwiLCB2YWwpO1xuICAgICAgfSxcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5tYXhWYWx1ZUV4cHJlc3Npb24sXG4gICAgICB0aGlzLm1heCxcbiAgICAgIHZhbCA9PiB7XG4gICAgICAgIGlmICghdmFsICYmIHRoaXMuaXNEYXRlSW5wdXRUeXBlKSB7XG4gICAgICAgICAgdmFsID0gISFzZXR0aW5ncy5tYXhEYXRlID8gc2V0dGluZ3MubWF4RGF0ZSA6IFwiMjk5OS0xMi0zMVwiO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWF4XCIsIHZhbCk7XG4gICAgICB9LFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0ZXAgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RlcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGVwXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RlcCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0ZXBcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkU3RlcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnN0ZXApID8gXCJhbnlcIiA6IHRoaXMuc3RlcDtcbiAgfVxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5pc0VtcHR5KCkgfHwgdGhpcy52YWx1ZSA9PT0gXCJcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5kZXhPZih0aGlzLmlucHV0VHlwZSkgPCAwO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUVycm9yKCkge1xuICAgIHJldHVybiBbXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA8IDA7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwbGFjZSBob2xkZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGxhY2VIb2xkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGxhY2VIb2xkZXJcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGxhY2VIb2xkZXJcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHJlY29tbWVuZGVkIG9wdGlvbnMgYXZhaWxhYmxlIHRvIGNob29zZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGF0YUxpc3QoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jRGF0YUxpc3QudmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBkYXRhTGlzdCh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmxvY0RhdGFMaXN0LnZhbHVlID0gdmFsO1xuICB9XG4gIGdldCBsb2NEYXRhTGlzdCgpOiBMb2NhbGl6YWJsZVN0cmluZ3Mge1xuICAgIHJldHVybiB0aGlzLmxvY0RhdGFMaXN0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkYXRhTGlzdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICF0aGlzLmxvY0RhdGFMaXN0LmlzRW1wdHkgPyB0aGlzLmlkICsgXCJfZGF0YWxpc3RcIiA6IFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJ1blZhbGlkYXRvcnMoaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmVycm9ycy5sZW5ndGggPiAwIHx8XG4gICAgICAhaXNPblZhbHVlQ2hhbmdlZCB8fFxuICAgICAgdGhpcy5zdXBwb3J0R29OZXh0UGFnZUVycm9yKClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgbmV3VmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZVR5cGUobmV3VmFsdWUpO1xuICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29ycmVjdFZhbHVlVHlwZShuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIW5ld1ZhbHVlKSByZXR1cm4gbmV3VmFsdWU7XG4gICAgaWYgKHRoaXMuaW5wdXRUeXBlID09IFwibnVtYmVyXCIgfHwgdGhpcy5pbnB1dFR5cGUgPT0gXCJyYW5nZVwiKSB7XG4gICAgICByZXR1cm4gSGVscGVycy5pc051bWJlcihuZXdWYWx1ZSkgPyBwYXJzZUZsb2F0KG5ld1ZhbHVlKSA6IFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfVxufVxuXG5jb25zdCBtaW5NYXhUeXBlcyA9IFtcbiAgXCJudW1iZXJcIixcbiAgXCJyYW5nZVwiLFxuICBcImRhdGVcIixcbiAgXCJkYXRldGltZS1sb2NhbFwiLFxuICBcIm1vbnRoXCIsXG4gIFwidGltZVwiLFxuICBcIndlZWtcIixcbl07XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidGV4dFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJpbnB1dFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwidGV4dFwiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICBcImNvbG9yXCIsXG4gICAgICAgIFwiZGF0ZVwiLFxuICAgICAgICBcImRhdGV0aW1lXCIsXG4gICAgICAgIFwiZGF0ZXRpbWUtbG9jYWxcIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcIm1vbnRoXCIsXG4gICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgIFwicGFzc3dvcmRcIixcbiAgICAgICAgXCJyYW5nZVwiLFxuICAgICAgICBcInRlbFwiLFxuICAgICAgICBcInRleHRcIixcbiAgICAgICAgXCJ0aW1lXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwid2Vla1wiLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2l6ZTpudW1iZXJcIixcbiAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICBkYXRhTGlzdDogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICAgIFwiZ2l2ZW4tbmFtZVwiLFxuICAgICAgICBcImFkZGl0aW9uYWwtbmFtZVwiLFxuICAgICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICAgIFwiaG9ub3JpZmljLXN1ZmZpeFwiLFxuICAgICAgICBcIm5pY2tuYW1lXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICAgIFwidXNlcm5hbWVcIixcbiAgICAgICAgXCJuZXctcGFzc3dvcmRcIixcbiAgICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uXCIsXG4gICAgICAgIFwic3RyZWV0LWFkZHJlc3NcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwzXCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDJcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgICBcImNvdW50cnlcIixcbiAgICAgICAgXCJjb3VudHJ5LW5hbWVcIixcbiAgICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgICBcImNjLW5hbWVcIixcbiAgICAgICAgXCJjYy1naXZlbi1uYW1lXCIsXG4gICAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiY2MtZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJjYy1udW1iZXJcIixcbiAgICAgICAgXCJjYy1leHBcIixcbiAgICAgICAgXCJjYy1leHAtbW9udGhcIixcbiAgICAgICAgXCJjYy1leHAteWVhclwiLFxuICAgICAgICBcImNjLWNzY1wiLFxuICAgICAgICBcImNjLXR5cGVcIixcbiAgICAgICAgXCJ0cmFuc2FjdGlvbi1jdXJyZW5jeVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgICBcImxhbmd1YWdlXCIsXG4gICAgICAgIFwiYmRheVwiLFxuICAgICAgICBcImJkYXktZGF5XCIsXG4gICAgICAgIFwiYmRheS1tb250aFwiLFxuICAgICAgICBcImJkYXkteWVhclwiLFxuICAgICAgICBcInNleFwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcInBob3RvXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGVsLWNvdW50cnktY29kZVwiLFxuICAgICAgICBcInRlbC1uYXRpb25hbFwiLFxuICAgICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWxcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtcHJlZml4XCIsXG4gICAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgICBcInRlbC1leHRlbnNpb25cIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcImltcHBcIixcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pblwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgICBvblByb3BlcnR5RWRpdG9yVXBkYXRlOiBmdW5jdGlvbihvYmo6IGFueSwgcHJvcGVydHlFZGl0b3I6IGFueSkge1xuICAgICAgICBwcm9wZXJ0eUVkaXRvci5pbnB1dFR5cGUgPSBvYmouaW5wdXRUeXBlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4XCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiAhIW9iaiAmJiBvYmouaXNNaW5NYXhUeXBlO1xuICAgICAgfSxcbiAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uKG9iajogYW55LCBwcm9wZXJ0eUVkaXRvcjogYW55KSB7XG4gICAgICAgIHByb3BlcnR5RWRpdG9yLmlucHV0VHlwZSA9IG9iai5pbnB1dFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5WYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgICAgY2F0ZWdvcnk6IFwibG9naWNcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5FcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5FcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhFcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhFcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzdGVwOm51bWJlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJudW1iZXJcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heExlbmd0aDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IC0xLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGxhY2VIb2xkZXJcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlzVGV4dElucHV0O1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGF0YUxpc3Q6c3RyaW5nW11cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEYXRhTGlzdFwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gb2JqLmlucHV0VHlwZSA9PT0gXCJ0ZXh0XCI7XG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIG5hbWUgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5cbi8vVE9ETyByZXBsYWNlIGNvbXBsZXRlbHkgd2l0aCBFbGVtZW50RmFjdG9yeVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdENob2ljZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIxXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIyXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpICsgXCIzXCIsXG4gICAgXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q29sdW1zKCk6IHN0cmluZ1tdIHtcbiAgICB2YXIgY29sTmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XG4gICAgcmV0dXJuIFtjb2xOYW1lICsgXCIxXCIsIGNvbE5hbWUgKyBcIjJcIiwgY29sTmFtZSArIFwiM1wiXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Um93cygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIHJvd05hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKSArIFwiIFwiO1xuICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRNdXRsaXBsZVRleHRJdGVtcygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIGl0ZW1OYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm11bHRpcGxldGV4dF9pdGVtbmFtZVwiKTtcbiAgICByZXR1cm4gW2l0ZW1OYW1lICsgXCIxXCIsIGl0ZW1OYW1lICsgXCIyXCJdO1xuICB9XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbj4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uXG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgdW5yZWdpc3RlckVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRWxlbWVudEZhY3RvcnkgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyxcbiAgICBlbGVtZW50Q3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyB1bnJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIHJlbW92ZUZyb21TZXJpYWxpemVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgZGVsZXRlIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS51bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50VHlwZSk7XG4gICAgaWYgKHJlbW92ZUZyb21TZXJpYWxpemVyKSB7XG4gICAgICBTZXJpYWxpemVyLnJlbW92ZUNsYXNzKGVsZW1lbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbClcbiAgICAgIHJldHVybiBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oZWxlbWVudFR5cGUsIG5hbWUpO1xuICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3Igbm9uIHZhbHVlIHF1ZXN0aW9uLiBUaGlzIHF1ZXN0aW9uIGRvZXNuJ3QgYWRkIGFueSBuZXcgZnVuY3Rpb25hbGl0eS4gSXQgaGlkZXMgc29tZSBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ob25WYWx1ZSBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJub252YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge31cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm5vbnZhbHVlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVzY3JpcHRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsdWVOYW1lXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImRlZmF1bHRWYWx1ZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb3JyZWN0QW5zd2VyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImlzUmVxdWlyZWRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZWFkT25seVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZElmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInZhbGlkYXRvcnNcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVMb2NhdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk5vblZhbHVlKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJlckZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZW5kZXJlckZhY3RvcnkgPSBuZXcgUmVuZGVyZXJGYWN0b3J5KCk7XG5cbiAgcHJpdmF0ZSByZW5kZXJlcnNIYXNoOiB7XG4gICAgW3F1ZXN0aW9uVHlwZTogc3RyaW5nXTogeyBbcmVuZGVyQXM6IHN0cmluZ106IGFueSB9O1xuICB9ID0ge307XG5cbiAgcHVibGljIHVucmVnaXN0ZXJSZW5kZXJlcihxdWVzdGlvblR5cGU6IHN0cmluZywgcmVuZGVyZXJBczogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdW3JlbmRlcmVyQXNdO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyUmVuZGVyZXIoXG4gICAgcXVlc3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgcmVuZGVyQXM6IHN0cmluZyxcbiAgICByZW5kZXJlcjogYW55XG4gICkge1xuICAgIGlmICghdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV0pIHtcbiAgICAgIHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdID0ge307XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdW3JlbmRlckFzXSA9IHJlbmRlcmVyO1xuICB9XG5cbiAgcHVibGljIGdldFJlbmRlcmVyKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCByZW5kZXJBczogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXSAmJlxuICAgICAgICB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXVtyZW5kZXJBc10pIHx8XG4gICAgICBcImRlZmF1bHRcIlxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVuZGVyZXJCeVF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZXIocXVlc3Rpb24uZ2V0VHlwZSgpLCBxdWVzdGlvbi5yZW5kZXJBcyk7XG4gIH1cbn1cbiIsIi8qKlxuICogR2xvYmFsIHN1cnZleSBzZXR0aW5nc1xuICovXG5leHBvcnQgdmFyIHNldHRpbmdzID0ge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0aGF0IHVzZXMgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIGNvbW1lbnQsIGFzIHtxdWVzdGlvbk5hbWV9ICsge2NvbW1lbnRQcmVmaXh9LlxuICAgKiBUaGUgZGVmYXVsdFxuICAgKi9cbiAgY29tbWVudFByZWZpeDogXCItQ29tbWVudFwiLFxuICAvKipcbiAgICogRW5jb2RlIHBhcmFtZXRlciBvbiBjYWxsaW5nIHJlc3RmdWwgd2ViIEFQSVxuICAgKi9cbiAgd2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnM6IHRydWUsXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgcmVzdWx0IGZvciBjaG9pY2VzIGdldHRpbmcgZnJvbSB3ZWIgc2VydmljZXMuIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBkaXNhYmxlIHRoZSBjYWNoaW5nLlxuICAgKi9cbiAgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsOiB0cnVlLFxuICBnZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCgpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9LFxuICBzZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWwgPSB2YWw7XG4gIH0sXG4gIC8qKlxuICAgKiBTdXJ2ZXlKUyB3ZWIgc2VydmljZSBBUEkgdXJsXG4gICAqL1xuICBzdXJ2ZXlTZXJ2aWNlVXJsOiBcImh0dHBzOi8vYXBpLnN1cnZleWpzLmlvL3B1YmxpYy92MS9TdXJ2ZXlcIixcbiAgLyoqXG4gICAqIHNlcGFyYXRvciB0aGF0IGNhbiBhbGxvdyB0byBzZXQgdmFsdWUgYW5kIHRleHQgb2YgSXRlbVZhbHVlIG9iamVjdCBpbiBvbmUgc3RyaW5nIGFzOiBcInZhbHVlfHRleHRcIlxuICAgKi9cbiAgaXRlbVZhbHVlU2VwYXJhdG9yOiBcInxcIixcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIG9yIChkaXYpXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWluV2lkdGg6IFwiMzAwcHhcIixcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWF4V2lkdGg6IFwiaW5pdGlhbFwiLFxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB0ZWxscyBob3cgbWFueSB0aW1lcyBzdXJ2ZXkgcmUtcnVuIGV4cHJlc3Npb25zIG9uIHZhbHVlIGNoYW5nZXMgZHVyaW5nIGNvbmRpdGlvbiBydW5uaW5nLiBXZSBuZWVkIGl0IHRvIGF2b2lkIHJlY3Vyc2lvbnMgaW4gdGhlIGV4cHJlc3Npb25zXG4gICAqL1xuICBtYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZDogMTAsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCB0aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIiBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZTogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCBoaWRlTnVtYmVyID0gdHJ1ZSBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSBudW1iZXIgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHJvd3MgYXJlIHJlbmRlcmVkIG5vIG1hdHRlcnMgd2h3dGhlciB0aGV5IGFyZSB2aXNpYmxlLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBsYXp5Um93c1JlbmRlcmluZzogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIGl0ZW1zIGFyZSBvcmRlcmVkIGluIHJvd3MuXG4gICAqIFNldCBpdCBcImNvbHVtblwiLCBhbmQgaXRlbXMgd2lsbCBiZSBvcmRlcmVkIGluIGNvbHVtbnMuXG4gICAqL1xuICBzaG93SXRlbXNJbk9yZGVyOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIFN1cHBvcnRlZCB2YWxpZGF0b3JzIGJ5IHF1ZXN0aW9uIHR5cGVzLiBZb3UgY2FuIG1vZGlmeSB0aGlzIHZhcmlhYmxlIHRvIGFkZCB2YWxpZGF0b3JzIGZvciBuZXcgcXVlc3Rpb24gdHlwZXMgb3IgYWRkL3JlbW92ZSBmb3IgZXhpc3RpbmcgcXVlc3Rpb24gdHlwZXMuXG4gICAqL1xuICBzdXBwb3J0ZWRWYWxpZGF0b3JzOiB7XG4gICAgcXVlc3Rpb246IFtcImV4cHJlc3Npb25cIl0sXG4gICAgY29tbWVudDogW1widGV4dFwiLCBcInJlZ2V4XCJdLFxuICAgIHRleHQ6IFtcIm51bWVyaWNcIiwgXCJ0ZXh0XCIsIFwicmVnZXhcIiwgXCJlbWFpbFwiXSxcbiAgICBjaGVja2JveDogW1wiYW5zd2VyY291bnRcIl0sXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgbGVzcyB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1pbkRhdGU6IFwiXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1heERhdGU6IFwiXCIsXG4gIHNob3dNb2RhbDogPFxuICAgIChcbiAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIG9uQXBwbHk6ICgpID0+IHZvaWQsXG4gICAgICBvbkNhbmNlbD86ICgpID0+IHZvaWRcbiAgICApID0+IHZvaWRcbiAgPnVuZGVmaW5lZCxcbiAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG59O1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuZXhwb3J0IGNsYXNzIFN0eWxlc01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBTdXJ2ZXlKU1N0eWxlc1NoZWV0SWQgPSBcInN1cnZleWpzLXN0eWxlc1wiO1xuXG4gIHB1YmxpYyBzdGF0aWMgU3R5bGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3NcIjpcbiAgICAvLyAgIFwicG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNFwiLFxuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X2N1c3RvbV9oZWFkZXJcIjpcbiAgICAvLyAgIFwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNzVweDsgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcIixcbiAgICAvLyBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9jb250YWluZXJcIjpcbiAgICAvLyAgIFwibWF4LXdpZHRoOiA4MCU7IG1hcmdpbjogYXV0bzsgcG9zaXRpb246IHJlbGF0aXZlOyBjb2xvcjogIzZkNzA3MjsgcGFkZGluZzogMCAxZW07XCIsXG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2NzcyAucGFuZWwtYm9keVwiOlxuICAgIC8vICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMWVtIDFlbSA1ZW0gMWVtOyBib3JkZXItdG9wOiAycHggc29saWQgbGlnaHRncmF5O1wiLFxuICAgIFwiLnN2X21haW4gc3BhblwiOiBcIndvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG5cbiAgICBcIi5zdl9tYWluIGxlZ2VuZFwiOiBcImJvcmRlcjogbm9uZTsgbWFyZ2luOiAwO1wiLFxuXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0blwiOiBcInBhZGRpbmc6IDAuNWVtIDFlbSAxLjVlbSAxZW07XCIsXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcWNiYyBpbnB1dFt0eXBlPWNoZWNrYm94XSwgLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FjYmMgaW5wdXRbdHlwZT1yYWRpb11cIjpcbiAgICAgIFwidmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLXRvcDogLTFweFwiLFxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gZmllbGRzZXRcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuICAuc3ZfcV9jaGVja2JveF9pbmxpbmUsIC5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcblxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyIFwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogMjUwcHg7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4tdG9wOiAxMHB4O1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZTsgcG9zaXRpb246IHN0YXRpYztcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuY2hlY2tib3hcIjpcbiAgICAgIFwibWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweDtcIixcblxuICAgIFwiLnN2X3Jvd1wiOiBcImNsZWFyOiBib3RoOyBtaW4td2lkdGg6MzAwcHg7XCIsXG4gICAgXCIuc3Zfcm93IC5zdl9xc3RuXCI6IFwiZmxvYXQ6IGxlZnRcIixcbiAgICBcIi5zdl9yb3cgLnN2X3FzdG46bGFzdC1jaGlsZFwiOiBcImZsb2F0OiBub25lXCIsXG4gICAgXCIuc3ZfcXN0blwiOlxuICAgICAgXCJkaXNwbGF5OiB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBvdmVyZmxvdzogYXV0bzsgbWluLXdpZHRoOjMwMHB4O1wiLFxuICAgIFwiLnN2X3BfY29udGFpbmVyXCI6XG4gICAgICBcImRpc3BsYXk6IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1pbi13aWR0aDozMDBweDtcIixcblxuICAgIFwiLnN2X3FfdGl0bGUgLnN2X3F1ZXN0aW9uX2ljb25cIjogXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLnN2X3FfdGl0bGUgLnN2X3F1ZXN0aW9uX2ljb246OmJlZm9yZVwiOlxuICAgICAgXCJjb250ZW50OiAnJzsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyBwYWRkaW5nOiAwLjVlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejROQ2p3aExTMGdSMlZ1WlhKaGRHOXlPaUJCWkc5aVpTQkpiR3gxYzNSeVlYUnZjaUF5TWk0d0xqRXNJRk5XUnlCRmVIQnZjblFnVUd4MVp5MUpiaUF1SUZOV1J5QldaWEp6YVc5dU9pQTJMakF3SUVKMWFXeGtJREFwSUNBdExUNE5Danh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lEUW9KSUhacFpYZENiM2c5SWpBZ01DQXhNQ0F4TUNJZ2MzUjViR1U5SW1WdVlXSnNaUzFpWVdOclozSnZkVzVrT201bGR5QXdJREFnTVRBZ01UQTdJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWo0TkNqeHpkSGxzWlNCMGVYQmxQU0owWlhoMEwyTnpjeUkrRFFvSkxuTjBNSHRtYVd4c09pTTJSRGN3TnpJN2ZRMEtQQzl6ZEhsc1pUNE5Danh3YjJ4NVoyOXVJR05zWVhOelBTSnpkREFpSUhCdmFXNTBjejBpTWl3eUlEQXNOQ0ExTERrZ01UQXNOQ0E0TERJZ05TdzFJQ0l2UGcwS1BDOXpkbWMrRFFvPSk7XCIsXG4gICAgXCIuc3ZfcV90aXRsZSAuc3ZfcXVlc3Rpb25faWNvbi5zdl9leHBhbmRlZDo6YmVmb3JlXCI6XG4gICAgICBcInRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XCIsXG4gICAgXCIuc3ZfcWJsbiAuY2hlY2tib3gtbWF0ZXJpYWxcIjogXCJtYXJnaW4tcmlnaHQ6IDNweDtcIixcbiAgICBcIi5zdl9xY2J4IC5jaGVja2JveC1tYXRlcmlhbFwiOiBcIm1hcmdpbi1yaWdodDogNXB4O1wiLFxuICAgIFwiLnN2X3FjYnggLmNoZWNrYm94IGxhYmVsXCI6IFwianVzdGlmeS1jb250ZW50OiBsZWZ0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcXN0biAucmFkaW8gbGFiZWxcIjogXCJqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xc3RuIC5zdl9xX2ltZ3NlbCA+IGxhYmVsIGltZ1wiOiBcInBvaW50ZXItZXZlbnRzOiBub25lO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FzdG4gbGFiZWwuc3ZfcV9tX2xhYmVsXCI6XG4gICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbWFyZ2luOiAwOyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7XCIsXG4gICAgXCIuc3ZfcXN0biB0ZFwiOiBcInBvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICBcIi5zdl9xX210X2l0ZW1fdmFsdWVcIjogXCJmbG9hdDogbGVmdDtcIixcbiAgICAnW2Rpcj1cInJ0bFwiXSAuc3ZfcV9tdF9pdGVtX3ZhbHVlJzogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCIuc3ZfcXN0bi5zdl9xc3RuX2xlZnRcIjogXCJtYXJnaW4tdG9wOiAwLjc1ZW07XCIsXG4gICAgXCIuc3ZfcXN0biAudGl0bGUtbGVmdFwiOiBcImZsb2F0OiBsZWZ0OyBtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICAnW2Rpcj1cInJ0bFwiXSAuc3ZfcXN0biAudGl0bGUtbGVmdCc6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tbGVmdDogMWVtO1wiLFxuICAgIFwiLnN2X3FzdG4gLmNvbnRlbnQtbGVmdFwiOiBcIm92ZXJmbG93OiBoaWRkZW5cIixcbiAgICBcIi5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lIC5zdl9xX3JhZGlvZ3JvdXBfb3RoZXJcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcV9jaGVja2JveF9pbmxpbmUgLnN2X3FfY2hlY2tib3hfb3RoZXJcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcV9jaGVja2JveF9pbmxpbmUsIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lLCAuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIjpcbiAgICAgIFwibGluZS1oZWlnaHQ6IDIuNWVtO1wiLFxuICAgIFwiLmZvcm0taW5saW5lIC5zdl9xX2NoZWNrYm94X2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6IFwibWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuZm9ybS1pbmxpbmUgLnN2X3FfcmFkaW9ncm91cF9pbmxpbmU6bm90KDpsYXN0LWNoaWxkKVwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5zdl9pbWdzZWwgLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lOm5vdCg6bGFzdC1jaGlsZClcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldFwiOiBcImJvcmRlcjogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2X3FfZmlsZV9wbGFjZWhvbGRlclwiOiBcImRpc3BsYXk6bm9uZVwiLFxuXG4gICAgXCIuc3ZfcF90aXRsZVwiOiBcInBhZGRpbmctbGVmdDogMWVtOyBwYWRkaW5nLWJvdHRvbTogMC4zZW07XCIsXG4gICAgXCIuc3ZfcF90aXRsZV9leHBhbmRhYmxlXCI6IFwiY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2X3FfdGl0bGVfZXhwYW5kYWJsZVwiOiBcImN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uXCI6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uOjpiZWZvcmVcIjpcbiAgICAgIFwiY29udGVudDogJyc7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgcGFkZGluZzogMC41ZW07IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TUNBeE1DSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UQWdNVEE3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb0pMbk4wTUh0bWFXeHNPaU0yUkRjd056STdmUTBLUEM5emRIbHNaVDROQ2p4d2IyeDVaMjl1SUdOc1lYTnpQU0p6ZERBaUlIQnZhVzUwY3owaU1pd3lJREFzTkNBMUxEa2dNVEFzTkNBNExESWdOU3cxSUNJdlBnMEtQQzl6ZG1jK0RRbz0pO1wiLFxuICAgIFwiLnN2X3BfdGl0bGUgLnN2X3BhbmVsX2ljb24uc3ZfZXhwYW5kZWQ6OmJlZm9yZVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgIFwiLnN2X3BfZm9vdGVyXCI6IFwicGFkZGluZy1sZWZ0OiAxZW07IHBhZGRpbmctYm90dG9tOiAxZW07cGFkZGluZy10b3A6IDFlbTtcIixcblxuICAgIFwiLnN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIjogXCJwb3NpdGlvbjogcmVsYXRpdmVcIixcbiAgICBcIi5zdl9kZXRhaWxfcGFuZWxfaWNvblwiOlxuICAgICAgXCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA1MCU7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDtcIixcbiAgICBcIi5zdl9kZXRhaWxfcGFuZWxfaWNvbjo6YmVmb3JlXCI6XG4gICAgICBcImNvbnRlbnQ6ICcnOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IHdpZHRoOiAxNHB4OyBoZWlnaHQ6IDE0cHg7IGRpc3BsYXk6IGJsb2NrOyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnJTNGJTNFJTNDIS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjEuMS4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLSUzRSUzQ3N2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDE1IDE1JyBzdHlsZT0nZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNSAxNTsnIHhtbDpzcGFjZT0ncHJlc2VydmUnJTNFJTNDc3R5bGUgdHlwZT0ndGV4dC9jc3MnJTNFIC5zdDAlN0JmaWxsOiUyM0ZGRkZGRjslN0QlMEElM0Mvc3R5bGUlM0UlM0Nwb2x5Z29uIGNsYXNzPSdzdDAnIHBvaW50cz0nMTQsNS41IDEyLjYsNC4xIDcuNSw5LjEgMi40LDQuMSAxLDUuNSA3LjUsMTIgJy8lM0UlM0Mvc3ZnJTNFJTBBXFxcIik7XCIsXG4gICAgXCIuc3ZfZGV0YWlsX3BhbmVsX2ljb24uc3ZfZGV0YWlsX2V4cGFuZGVkOjpiZWZvcmVcIjpcbiAgICAgIFwidHJhbnNmb3JtOiByb3RhdGUoMGRlZylcIixcbiAgICBcIi5zdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCI6XG4gICAgICBcInRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIixcbiAgICBcIi5zdl9tYXRyaXhfZW1wdHlfcm93c190ZXh0XCI6IFwicGFkZGluZzoyMHB4XCIsXG5cbiAgICBcIi5zdl9xX2ZpbGUgPiBpbnB1dFt0eXBlPWZpbGVdLCAuc3ZfcV9maWxlID4gYnV0dG9uXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xX2ZpbGVfcHJldmlld1wiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsgcGFkZGluZzogNXB4OyBtYXJnaW4tdG9wOiAxMHB4O1wiLFxuICAgIFwiLnN2X3FfZmlsZV9wcmV2aWV3ID4gYVwiOlxuICAgICAgXCJkaXNwbGF5OiBibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XCIsXG4gICAgXCIuc3ZfcV9maWxlX3JlbW92ZV9idXR0b25cIjogXCJsaW5lLWhlaWdodDogbm9ybWFsO1wiLFxuICAgIFwiLnN2X3FfZmlsZV9yZW1vdmVcIjogXCJkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyO1wiLFxuXG4gICAgXCIuc3ZfcV9tX2NlbGxfdGV4dFwiOiBcImN1cnNvcjogcG9pbnRlcjtcIixcblxuICAgIFwiLnN2X3FfZGRfb3RoZXJcIjogXCJtYXJnaW4tdG9wOiAxZW07XCIsXG4gICAgXCIuc3ZfcV9kZF9vdGhlciBpbnB1dFwiOiBcIndpZHRoOiAxMDAlO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0xXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC0yLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTJcIjpcbiAgICAgIFwid2lkdGg6IGNhbGMoNTAlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMywgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0zXCI6XG4gICAgICBcIndpZHRoOiBjYWxjKDMzLjMzMzMzJSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTQsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtNFwiOlxuICAgICAgXCJ3aWR0aDogY2FsYygyNSUgLSAxZW0pOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC01LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTVcIjpcbiAgICAgIFwid2lkdGg6IGNhbGMoMjAlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi0xLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTFcIjpcbiAgICAgIFwid2lkdGg6IDEwMCU7IG1heC13aWR0aDogMTAwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tMiwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi0yXCI6XG4gICAgICBcIm1heC13aWR0aDogNTAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi0zLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTNcIjpcbiAgICAgIFwibWF4LXdpZHRoOiAzMy4zMzMzMyU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTQsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tNFwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDI1JTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tNSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi01XCI6XG4gICAgICBcIm1heC13aWR0aDogMjAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3FfZmlsZV9pbnB1dFwiOiBcImNvbG9yOiB0cmFuc3BhcmVudDtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsIGxhYmVsID4gZGl2XCI6XG4gICAgICBcIm92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBwYWRkaW5nOiA0cHg7IGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsgYm9yZGVyLXJhZGl1czogNHB4O1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsIGxhYmVsID4gZGl2ID4gaW1nLCAuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgbGFiZWwgPiBkaXYgPiBlbWJlZFwiOlxuICAgICAgXCJkaXNwbGF5OiBibG9jaztcIixcblxuICAgIFwiLnN2X3FzdG4gdGFibGUgdHIgdGQgLnN2X3FfbV9jZWxsX2xhYmVsXCI6XG4gICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwO1wiLFxuXG4gICAgXCJmLXBhbmVsXCI6IFwicGFkZGluZzogMC41ZW0gMWVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGxpbmUtaGVpZ2h0OiAyZW07XCIsXG5cbiAgICBcIi5zdl9wcm9ncmVzc19iYXIgPiBzcGFuXCI6IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYnV0dG9uc1xuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2NvbnRhaW5lci1jZW50ZXJcIjogXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgZm9udC1zaXplOjA7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDExMDBweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1hcmdpbi10b3A6IDIycHg7IGZvbnQtc2l6ZTogMTRweDsgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweDsgY3Vyc29yOiBwb2ludGVyOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejROQ2p3aExTMGdSMlZ1WlhKaGRHOXlPaUJCWkc5aVpTQkpiR3gxYzNSeVlYUnZjaUF5TWk0d0xqRXNJRk5XUnlCRmVIQnZjblFnVUd4MVp5MUpiaUF1SUZOV1J5QldaWEp6YVc5dU9pQTJMakF3SUVKMWFXeGtJREFwSUNBdExUNE5Danh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lEUW9KSUhacFpYZENiM2c5SWpBZ01DQXhOaUF4TmlJZ2MzUjViR1U5SW1WdVlXSnNaUzFpWVdOclozSnZkVzVrT201bGR5QXdJREFnTVRZZ01UWTdJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWo0TkNqeHdiMng1WjI5dUlIQnZhVzUwY3owaU1URXNNVElnT1N3eE5DQXpMRGdnT1N3eUlERXhMRFFnTnl3NElDSXZQZzBLUEM5emRtYytEUW89KTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tdG9wOiAyMnB4OyBmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TmlBeE5pSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UWWdNVFk3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlOU3cwSURjc01pQXhNeXc0SURjc01UUWdOU3d4TWlBNUxEZ2dJaTgrRFFvOEwzTjJaejROQ2c9PSk7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIjogXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIjpcbiAgICAgIFwibWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzNnB4KTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBvdmVyZmxvdzogaGlkZGVuO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogbWF4LWNvbnRlbnQ7IHBhZGRpbmctbGVmdDogMjhweDsgcGFkZGluZy1yaWdodDogMjhweDsgbWFyZ2luLXRvcDogMTRweDsgbWFyZ2luLWJvdHRvbTogMTRweDtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpXCI6XG4gICAgICBcIndpZHRoOiAxMzhweDsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgcG9zaXRpb246IHJlbGF0aXZlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmJlZm9yZVwiOlxuICAgICAgXCJ3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyBjb250ZW50OiAnJzsgbGluZS1oZWlnaHQ6IDMwcHg7IGJvcmRlcjogM3B4IHNvbGlkICM4ZGQ5Y2E7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDAgYXV0byAxMHB4IGF1dG87IGJvcmRlci1yYWRpdXM6IDUwJTsgYm94LXNpemluZzogY29udGVudC1ib3g7IGJhY2tncm91bmQtY29sb3I6ICM4ZGQ5Y2E7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmFmdGVyXCI6XG4gICAgICBcIndpZHRoOiA3MyU7IGhlaWdodDogM3B4OyBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRkNGQ0OyB0b3A6IDE1cHg7IGxlZnQ6IC0zNi41JTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmZpcnN0LWNoaWxkOmFmdGVyXCI6IFwiY29udGVudDogbm9uZTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IC5zdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLXRpdGxlXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgY29sb3I6ICR0ZXh0LWNvbG9yOyBmb250LXdlaWdodDogYm9sZDtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IC5zdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogIzFhYjM5NDsgYmFja2dyb3VuZC1jb2xvcjogIzFhYjM5NDtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkICsgbGk6YWZ0ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogIzhkZDljYTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAjMWFiMzk0OyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAjMWFiMzk0OyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tbm9uY2xpY2thYmxlOmJlZm9yZVwiOlxuICAgICAgXCJjdXJzb3I6IG5vdC1hbGxvd2VkO1wiLFxuXG4gICAgLy8gcmFua2luZ1xuICAgIFwiLnN2LXJhbmtpbmdcIjogXCJvdXRsaW5lOiBub25lO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbVwiOlxuICAgICAgXCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDVweDtwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmZvY3VzIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW06aG92ZXIgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogdmlzaWJsZTtcIixcbiAgICBcIi5zdi1xdWVzdGlvbi0tZGlzYWJsZWQgLnN2LXJhbmtpbmctaXRlbTpob3ZlciAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmZvY3VzXCI6IFwib3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW06Zm9jdXMgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0tZm9jdXNcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogdmlzaWJsZTsgdG9wOiAxNXB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1cyAuc3YtcmFua2luZy1pdGVtX19pbmRleFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAycHggc29saWQgIzE5YjM5NDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO2JhY2tncm91bmQtY29sb3I6IHdoaXRlO3BhZGRpbmctdG9wOiA1cHg7cGFkZGluZy1ib3R0b206IDVweDtwYWRkaW5nLWxlZnQ6IDM1cHg7cGFkZGluZy1yaWdodDogMTBweDsgYm9yZGVyLXJhZGl1czogMTAwcHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMDt0b3A6IDA7Ym90dG9tOiAwO3dpZHRoOiAzNXB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9faWNvblwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiBoaWRkZW47bGVmdDoxMHB4O3RvcDoyMHB4O2ZpbGw6IzE5YjM5NDtwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX19pbmRleFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7cGFkZGluZzogMTBweCAxNnB4O2JhY2tncm91bmQ6IHJnYmEoMjUsIDE3OSwgMTQ4LCAwLjEpO2JvcmRlci1yYWRpdXM6IDEwMHB4O2JvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OyBtYXJnaW4tcmlnaHQ6IDEwcHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX190ZXh0XCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIjpcbiAgICAgIFwiZGlzcGxheTogbm9uZTtiYWNrZ3JvdW5kOiAjZjNmM2YzO2JvcmRlci1yYWRpdXM6IDEwMHB4O3dpZHRoOiAyMDBweDtoZWlnaHQ6IDU1cHg7ei1pbmRleDogMTtwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMzVweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWdob3N0IC5zdi1yYW5raW5nLWl0ZW1fX2dob3N0XCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtLS1naG9zdCAuc3YtcmFua2luZy1pdGVtX19jb250ZW50XCI6IFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZHJhZyAuc3YtcmFua2luZy1pdGVtX19jb250ZW50XCI6XG4gICAgICBcImJveC1zaGFkb3c6IDBweCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMSk7Ym9yZGVyLXJhZGl1czogMTAwcHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy0tZHJhZyAuc3YtcmFua2luZy1pdGVtOmhvdmVyIC5zdi1yYW5raW5nLWl0ZW1fX2ljb25cIjpcbiAgICAgIFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZHJhZyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiB2aXNpYmxlO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctLW1vYmlsZSAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OnZpc2libGU7IGZpbGw6IzlmOWY5ZjtcIixcbiAgICBcIi5zdi1yYW5raW5nLS1tb2JpbGUuc3YtcmFua2luZy0tZHJhZyAuc3YtcmFua2luZy1pdGVtLS1naG9zdCAuc3YtcmFua2luZy1pdGVtX19pY29uLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTpoaWRkZW47XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW5cIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtaW4td2lkdGg6IDEwJTtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3Ffc2VsZWN0X2NvbHVtbiA+ICo6bm90KC5zdl90ZWNobmljYWwpXCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcXN0biAuc3ZfcV9zZWxlY3RfY29sdW1uIHRleHRhcmVhXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiAwOyBwYWRkaW5nLWxlZnQ6IDA7IGxpbmUtaGVpZ2h0OiBpbml0aWFsO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWhpZGRlblwiOiBcImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi12aXN1YWxseWhpZGRlblwiOlxuICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogMXB4ICFpbXBvcnRhbnQ7IHdpZHRoOiAxcHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGhpZGRlbjsgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpOyBjbGlwOiByZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7XCIsXG5cbiAgICAvLyBwYW5lbGR5bmFtaWMgcHJvZ3Jlc3NcbiAgICBcIi5zdl9tYWluIC5zdi1wcm9ncmVzc1wiOlxuICAgICAgXCJoZWlnaHQ6IDAuMTllbTsgYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOyBwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgaGVpZ2h0OiAxMDAlOyBwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgLy8gRU8gcGFuZWxkeW5hbWljIHByb2dyZXNzXG5cbiAgICAvLyBwYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IGNhbGMoMTAwJSAtIDI1MHB4KTsgbWFyZ2luLXRvcDogMjBweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuLS1saXN0LW1vZGVcIjpcbiAgICAgIFwiZmxvYXQ6IG5vbmU7IG1hcmdpbi10b3A6IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuXCI6IFwibWFyZ2luLXRvcDogMS4yNWVtO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0bi0tcmlnaHRcIjpcbiAgICAgIFwibWFyZ2luLXRvcDogMDsgbWFyZ2luLWxlZnQ6IDEuMjVlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlcjsgd2lkdGg6IDAuN2VtOyB0b3A6IC0wLjI4ZW07IHBvc2l0aW9uOiBhYnNvbHV0ZTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCI6XG4gICAgICBcImxlZnQ6IC0xLjNlbTsgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4gXCI6XG4gICAgICBcInJpZ2h0OiAtMS4zZW07IHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiY3Vyc29yOiBhdXRvO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOlxuICAgICAgXCJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAwLjg3ZW07IG1hcmdpbi10b3A6IDAuNjllbTsgbWFyZ2luLWxlZnQ6IDRlbVwiLFxuICAgIC8vIEVPIHBhbmVsZHluYW1pY1xuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdpZHRoOiA2M3B4OyBoZWlnaHQ6IDI0cHg7IG1hcmdpbi1yaWdodDogMTdweDsgbWFyZ2luLWxlZnQ6IDIxcHg7IHBhZGRpbmc6IDJweCAzcHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4OyB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuNHM7IHRyYW5zaXRpb24tcHJvcGVydHk6IG1hcmdpbi1sZWZ0OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEwMCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWxcIjogXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogY2FsYyg1MCUgLSAxMHB4KTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1jaGVja2VkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiBjYWxjKDEwMCUgLSAyMHB4KTtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuX19sYWJlbCBcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYyg1MCUgLSAwLjYyNWVtKTtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuLS1jaGVja2VkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1ZW0pO1wiLFxuICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbl9fbGFiZWwgXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuLS1pbmRldGVybWluYXRlIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDUwJSAtIDAuNjI1ZW0pO1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuLS1jaGVja2VkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1ZW0pO1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG5cbiAgICAvLyBFTyBib29sZWFuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9udW1cIjogXCJcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX251bSArIHNwYW5cIjogXCJcIixcblxuICAgIC8vIFNpZ25hdHVyZVBhZFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzXCI6IFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyBib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzID4gYnV0dG9uXCI6IFwidXNlci1zZWxlY3Q6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lcj5kaXY+Y2FudmFzOmZvY3VzXCI6IFwib3V0bGluZTogbm9uZTtcIixcblxuICAgIC8vIGxvZ29cbiAgICAvLyBcIi5zdl9tYWluIC5zdl9oZWFkZXJcIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2xvZ29cIjogXCJcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS1sZWZ0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXJpZ2h0OiAyZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tbGVmdDogMmVtOyBmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHQrLnN2LWxvZ28tLXJpZ2h0LXRhaWxcIjogXCJjbGVhcjogYm90aDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS10b3BcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tYm90dG9tXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2hlYWRlcl9fdGV4dFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1heC13aWR0aDogMTAwJVwiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtZXhwYW5kLWFjdGlvbjpiZWZvcmVcIjogYGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQyUzRnhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCclM0YlM0UlM0MhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApIC0tJTNFJTNDc3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgMTAgMTAnIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDEwIDEwOycgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM0UlM0NzdHlsZSB0eXBlPSd0ZXh0L2NzcyclM0UgLnN0MCU3QmZpbGw6JTIzNDA0MDQwOyU3RCUwQSUzQy9zdHlsZSUzRSUzQ3BvbHlnb24gY2xhc3M9J3N0MCcgcG9pbnRzPScyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyBoZWlnaHQ6IDEwcHg7IHdpZHRoOiAxMnB4OyBtYXJnaW46IGF1dG8gOHB4O2AsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1leHBhbmQtYWN0aW9uLS1leHBhbmRlZDpiZWZvcmVcIjogYHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7YCxcblxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXJcIjogYGRpc3BsYXk6IGZsZXg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWFyZ2luLWxlZnQ6IGF1dG87IHBhZGRpbmc6IDAgMCAwIDE2cHg7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7YCxcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiOiBgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDI0cHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1yaWdodDogMTZweDsgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDZkNjtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbVwiOiBgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAtbW96LWFwcGVhcmFuY2U6IG5vbmU7IGFwcGVhcmFuY2U6IG5vbmU7IGRpc3BsYXk6IGZsZXg7IGhlaWdodDogNDBweDsgcGFkZGluZzogOHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBtYXJnaW4tcmlnaHQ6IDE2cHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgY3Vyc29yOiBwb2ludGVyOyBsaW5lLWhlaWdodDogMjRweDsgZm9udC1zaXplOiAxNnB4OyBvdmVyZmxvdy14OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IG1pbi13aWR0aDogYXV0bzsgZm9udC13ZWlnaHQ6IG5vcm1hbGAsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiOiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgd2hpdGUtc3BhY2U6IG5vd3JhcDtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9fdGl0bGUtLXdpdGgtaWNvblwiOiBgbWFyZ2luLWxlZnQ6IDhweDtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvblwiOiBgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtgLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi0taGlkZGVuXCI6IFwidmlzaWJpbGl0eTogaGlkZGVuXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHN2Z1wiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTphY3RpdmVcIjogXCJvcGFjaXR5OiAwLjU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtOmZvY3VzXCI6IFwib3V0bGluZTogbm9uZTtcIixcblxuICAgIFwiLnN2X21haW4gLnN2LXRpdGxlLWFjdGlvbnNcIjogXCJkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtdGl0bGUtYWN0aW9uc19fdGl0bGVcIjpcbiAgICAgIFwiZmxleC13cmFwOiB3cmFwOyBtYXgtd2lkdGg6IDkwJTsgbWluLXdpZHRoOiA1MCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtdGl0bGUtYWN0aW9uc19fYmFyXCI6IFwibWluLXdpZHRoOiA1NnB4O1wiLFxuICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9jZWxsX2FjdGlvbnMgLnN2LWFjdGlvbi1iYXJcIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IDA7IHBhZGRpbmctbGVmdDogMDtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9wX3dyYXBwZXJfaW5fcm93XCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAgLnN2X3BfcmVtb3ZlX2J0bl9yaWdodFwiOiBcIm1hcmdpbi1sZWZ0OiAxZW07XCIsXG4gICAgLy9idXR0b24tZ3JvdXBcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBcIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZmxleC1kaXJlY3Rpb246IHJvdzsgZm9udC1zaXplOiAxNnB4OyBoZWlnaHQ6IDQ4cHg7IG92ZXJmbG93OiBhdXRvO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbVwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBmbGV4LWRpcmVjdGlvbjogcm93OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IDExcHggMTZweDsgbGluZS1oZWlnaHQ6IDI0cHg7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGN1cnNvcjogcG9pbnRlcjsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtOm5vdCg6Zmlyc3Qtb2YtdHlwZSlcIjogXCJtYXJnaW4tbGVmdDogLTFweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiOiBcImRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDI0cHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiOiBcImZvbnQtd2VpZ2h0OiA2MDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvbiArIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogOHB4O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIjogXCJjb2xvcjogY3Vyc29yOiBkZWZhdWx0O1wiLFxuICAgIC8vZW8gYnV0dG9uLWdyb3VwXG4gICAgLy9wb3B1cFxuICAgIFwic3YtcG9wdXBcIjogXCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiAtMTtcIixcbiAgICBcIi5zdi1wb3B1cFwiOlxuICAgICAgXCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsgei1pbmRleDogMTAwMDsgd2lkdGg6IDEwMHZ3OyBoZWlnaHQ6IDEwMHZoO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1tb2RhbFwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIixcbiAgICBcIi5zdi1wb3B1cC0tbW9kYWwgLnN2LXBvcHVwX19jb250YWluZXJcIjpcbiAgICAgIFwicG9zaXRpb246IHN0YXRpYzsgZmlsdGVyOiBub25lOyBwYWRkaW5nOiBjYWxjKDQgKiA4cHgpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19jb250YWluZXJcIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlOyBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCBjYWxjKDEgKiA4cHgpIGNhbGMoMiAqIDhweCkgcmdiYSgwLCAwLCAwLCAwLjEpKTsgcGFkZGluZzogY2FsYygxICogOHB4KSAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNHB4O1wiLFxuICAgIFwiLnN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudFwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDkwdnc7IG1heC1oZWlnaHQ6IDkwdmg7IG92ZXJmbG93OiBhdXRvO1wiLFxuICAgIFwiLnN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXJcIjpcbiAgICAgIFwiaGVpZ2h0OiA2cHg7IHdpZHRoOiA2cHg7IGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYlwiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiByZ2JhKDI1LCAxNzksIDE0OCwgMC4xKTtcIixcbiAgICBcIi5zdi1wb3B1cF9fY29udGVudFwiOiBcIm1pbi13aWR0aDogMTAwJTtcIixcbiAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS10b3BcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiA4cHgpKTtcIixcbiAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS10b3AgLnN2LXBvcHVwX19wb2ludGVyXCI6XG4gICAgICBcInRyYW5zZm9ybTogdHJhbnNsYXRlKGNhbGMoLTEgKiA4cHgpKSByb3RhdGUoMTgwZGVnKTtcIixcbiAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS1ib3R0b21cIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLWJvdHRvbSAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIDhweCksIGNhbGMoLTEgKiA4cHgpKTtcIixcbiAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS1yaWdodFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKDEgKiA4cHgpKTtcIixcbiAgICBcIi5zdi1wb3B1cC0tc2hvdy1wb2ludGVyLnN2LXBvcHVwLS1yaWdodCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEycHgsIC00cHgpIHJvdGF0ZSgtOTBkZWcpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLWxlZnRcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLWxlZnQgLnN2LXBvcHVwX19wb2ludGVyXCI6XG4gICAgICBcInRyYW5zZm9ybTogdHJhbnNsYXRlKC00cHgsIC00cHgpIHJvdGF0ZSg5MGRlZyk7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3BvaW50ZXJcIjogXCJkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlO1wiLFxuICAgIFwiLnN2LXBvcHVwX19wb2ludGVyOmFmdGVyXCI6XG4gICAgICBcImNvbnRlbnQ6ICcgJzsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IGJvcmRlci1sZWZ0OiBjYWxjKDEgKiA4cHgpIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItcmlnaHQ6IGNhbGMoMSAqIDhweCkgc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1ib3R0b206IGNhbGMoMSAqIDhweCkgc29saWQgd2hpdGU7IGFsaWduLXNlbGY6IGNlbnRlcjtcIixcbiAgICBcIi5zdi1wb3B1cF9fZm9vdGVyXCI6IFwiZGlzcGxheTogZmxleDsgbWFyZ2luLXRvcDogY2FsYyg0ICogOHB4KTtcIixcbiAgICBcIi5zdi1wb3B1cF9fZm9vdGVyLWl0ZW06Zmlyc3QtY2hpbGRcIjogXCJtYXJnaW4tbGVmdDogYXV0bztcIixcbiAgICBcIi5zdi1wb3B1cF9fZm9vdGVyLWl0ZW0gKyAuc3YtcG9wdXBfX2Zvb3Rlci1pdGVtXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiBjYWxjKDEgKiA4cHgpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b25cIjpcbiAgICAgIFwicGFkZGluZzogY2FsYygyICogOHB4KSBjYWxjKDYgKiA4cHgpOyBiYWNrZ3JvdW5kOiAjZmZmOyBib3gtc2hhZG93OiAwcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOyBib3JkZXItcmFkaXVzOiA0cHg7IGN1cnNvcjogcG9pbnRlcjsgbWFyZ2luOiAycHg7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogY2FsYygyICogOHB4KTsgbGluZS1oZWlnaHQ6IGNhbGMoMyAqIDhweCk7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMxOWIzOTQ7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdi1wb3B1cF9fYnV0dG9uOmhvdmVyXCI6IFwiYm94LXNoYWRvdzogMCAwIDAgMnB4ICMxOWIzOTQ7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpkaXNhYmxlZFwiOlxuICAgICAgXCJjb2xvcjogcmdiYSgyMiwgMjIsIDIyLCAwLjE2KTsgY3Vyc29yOiBkZWZhdWx0O1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b246ZGlzYWJsZWQ6aG92ZXJcIjpcbiAgICAgIFwiYm94LXNoYWRvdzogMHB4IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcIixcbiAgICBcIi5zdi1wb3B1cF9fYnV0dG9uLS1hcHBseVwiOiBcImJhY2tncm91bmQtY29sb3I6ICMxOWIzOTQ7IGNvbG9yOiAjZmZmO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b24tLWFwcGx5OmRpc2FibGVkXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICAvL2VvIHBvcHVwXG4gICAgLy9saXN0XG4gICAgXCIuc3YtbGlzdFwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgcGFkZGluZzogMDsgbWFyZ2luOiAwOyBiYWNrZ3JvdW5kOiAjZmZmZmZmOyBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBwYWRkaW5nOiBjYWxjKDEgKiA4cHgpIGNhbGMoMiAqIDhweCk7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLWljb25cIjpcbiAgICAgIFwiZmxvYXQ6IGxlZnQ7IHdpZHRoOiBjYWxjKDMgKiA4cHgpOyBoZWlnaHQ6IGNhbGMoMyAqIDhweCk7IG1hcmdpbi1yaWdodDogY2FsYygyICogOHB4KTtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLWljb24gc3ZnXCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbS1pY29uIHVzZVwiOiBcImZpbGw6ICM5MDkwOTA7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAjMTliMzk0OyBjb2xvcjogI2ZmZjtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLS1zZWxlY3RlZDpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICMxOWIzOTQ7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWQgLnN2LWxpc3RfX2l0ZW0taWNvbiB1c2VcIjogXCJmaWxsOiAjZmZmO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0tLWRpc2FibGVkXCI6XG4gICAgICBcImNvbG9yOiByZ2JhKDIyLCAyMiwgMjIsIDAuMTYpOyBjdXJzb3I6IGRlZmF1bHQ7IHBvaW50ZXItZXZlbnRzOiBub25lO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0gc3BhblwiOiBcIndoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgLy9lbyBsaXN0XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBNZWRpYTogeyBba2V5OiBzdHJpbmddOiB7IG1lZGlhOiBzdHJpbmc7IHN0eWxlOiBzdHJpbmcgfSB9ID0ge1xuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTFcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtMlwiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC0zXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTRcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtNVwiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG5cIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC50aXRsZS1sZWZ0XCI6IHtcbiAgICAgIHN0eWxlOiBcImZsb2F0OiBub25lO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuc3ZfcV9yYWRpb2dyb3VwX2lubGluZSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfY2hlY2tib3hfaW5saW5lLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0aGVhZFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBub25lO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0Ym9keSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdHIsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRkXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZTpub3QoLnN2X3FfbWF0cml4KSB0ZDpiZWZvcmVcIjoge1xuICAgICAgc3R5bGU6IFwiY29udGVudDogYXR0cih0aXRsZSk7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnN2X3FfbWF0cml4IHRkOmFmdGVyXCI6IHtcbiAgICAgIHN0eWxlOiBcImNvbnRlbnQ6IGF0dHIodGl0bGUpOyBwYWRkaW5nLWxlZnQ6IDFlbVwiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAucmFkaW8gbGFiZWwsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5jaGVja2JveCBsYWJlbFwiOiB7XG4gICAgICBzdHlsZTogXCJsaW5lLWhlaWdodDogMTJweDsgdmVydGljYWwtYWxpZ246IHRvcDtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gbGFiZWwuc3ZfcV9tX2xhYmVsXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGlubGluZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2N1c3RvbV9oZWFkZXJcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2hlYWRlciBoM1wiOiB7XG4gICAgICBzdHlsZTogXCJmb250LXNpemU6IDEuNWVtO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDEzMDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAuc3ZfaGVhZGVyIGgzIHNwYW5cIjoge1xuICAgICAgc3R5bGU6IFwiZm9udC1zaXplOiAwLjc1ZW07XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNzAwcHgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwX2NzcyAuc3YtcHJvZ3Jlc3NfX3RleHRcIjoge1xuICAgICAgc3R5bGU6IFwibWFyZ2luLWxlZnQ6IDhlbTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWluLXdpZHRoOiA3NjhweClcIixcbiAgICB9LFxuXG4gICAgXCIuc3Zfcm93XCI6IHtcbiAgICAgIHN0eWxlOiBcIiBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7XCIsXG4gICAgICBtZWRpYTogXCJAc3VwcG9ydHMgKGRpc3BsYXk6IGZsZXgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2LXZ1ZS1yb3ctYWRkaXRpb25hbC1kaXZcIjoge1xuICAgICAgc3R5bGU6IFwiIGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZmxleC1iYXNpczogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBzdXBwb3J0cyAoZGlzcGxheTogZmxleClcIixcbiAgICB9LFxuXG4gICAgXCIuc3Ytcm93ID4gLnN2LXJvd19fcGFuZWwsIC5zdi1yb3dfX3F1ZXN0aW9uOm5vdCg6bGFzdC1jaGlsZClcIjoge1xuICAgICAgc3R5bGU6IFwiZmxvYXQ6IGxlZnQ7XCIsXG4gICAgICBtZWRpYTpcbiAgICAgICAgXCJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSlcIixcbiAgICB9LFxuXG4gICAgXCJbZGlyPSdydGwnXSxbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LXJvd19fcXVlc3Rpb246bm90KDpsYXN0LWNoaWxkKVwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgICBtZWRpYTpcbiAgICAgICAgXCJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSlcIixcbiAgICB9LFxuXG4gICAgXCIuc3Ytcm93ID4gLnN2LXJvd19fcGFuZWwsIC5zdi1yb3dfX3F1ZXN0aW9uXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIFRoZW1lQ29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjRmNGY0XCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzBhYTM4NFwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgb3JhbmdlOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjhmOGY4XCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjZjc4MTE5XCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiI2U3NzEwOVwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiI2Y3ODExOVwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgZGFya2JsdWU6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Q5ZDhkZFwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNmY3ZjJcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMzYzRmNmRcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMmMzZjVkXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBkYXJrcm9zZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZGRkMmNlXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y3ZWZlZFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzY4NjU2ZVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiM1ODU1NWVcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIHN0b25lOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNjZGNjZDJcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZWZlZGY0XCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzE5MTk1NVwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgd2ludGVyOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiM4MmI4ZGFcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZGFlMWU3XCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjM2MzYjQwXCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzFlMWQyMFwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgd2ludGVyc3RvbmU6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzMyMzIzMlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmOGY4ZjhcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiM1YWM4ZmFcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMDZhMWU3XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBtb2Rlcm46IHtcbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgICBcIiRhZGQtYnV0dG9uLWNvbG9yXCI6IFwiIzE5NDhiM1wiLFxuICAgICAgXCIkcmVtb3ZlLWJ1dHRvbi1jb2xvclwiOiBcIiNmZjE4MDBcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNkNTI5MDFcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNDA0MDQwXCIsXG4gICAgICBcIiRsaWdodC10ZXh0LWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkYnV0dG9uLXRleHQtY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRjaGVja21hcmstY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRtYXRyaXgtdGV4dC1jaGVja2VkLWNvbG9yXCI6IFwiI2ZmZlwiLFxuXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzQwNDA0MFwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiR0ZXh0LWJvcmRlci1jb2xvclwiOiBcIiNkNGQ0ZDRcIixcbiAgICAgIFwiJGRpc2FibGVkLXRleHQtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcInJnYig2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRkcm9wZG93bi1ib3JkZXItY29sb3JcIjogXCIjZDRkNGQ0XCIsXG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICAgIFwiJGFuc3dlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwicmdiYSgyNiwgMTc5LCAxNDgsIDAuMilcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCJyZ2JhKDIxMywgNDEsIDEsIDAuMilcIixcbiAgICAgIFwiJHJhZGlvLWNoZWNrZWQtY29sb3JcIjogXCIjNDA0MDQwXCIsXG4gICAgICBcIiRjbGVhbi1idXR0b24tY29sb3JcIjogXCIjMTk0OGIzXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuICAgIH0sXG4gICAgYm9vdHN0cmFwOiB7XG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzE4YTY4OVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0MDQwNDA7XCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgICBib290c3RyYXBtYXRlcmlhbDoge1xuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxOGE2ODlcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0MDQwNDA7XCIsXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG4gICAgfSxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIFRoZW1lQ3NzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIFwiLnN2X2RlZmF1bHRfY3NzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBoclwiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddLCAuc3ZfZGVmYXVsdF9jc3MgYnV0dG9uXCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXTpob3ZlciwgLnN2X2RlZmF1bHRfY3NzIGJ1dHRvbjpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9oZWFkZXJcIjogXCJjb2xvcjogJGhlYWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfY3VzdG9tX2hlYWRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lclwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfYm9keVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wcm9ncmVzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Bfcm9vdCA+IC5zdl9yb3dcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Bfcm9vdCA+IC5zdl9yb3c6bnRoLWNoaWxkKG9kZClcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3JvdzpudGgtY2hpbGQoZXZlbilcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9vdGhlciBpbnB1dFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfdGV4dF9yb290XCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9kcm9wZG93bl9jb250cm9sXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXRbdHlwZT0ndGV4dCddXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBzZWxlY3RcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0ZXh0YXJlYVwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXQ6bm90KFt0eXBlPSdidXR0b24nXSk6bm90KFt0eXBlPSdyZXNldCddKTpub3QoW3R5cGU9J3N1Ym1pdCddKTpub3QoW3R5cGU9J2ltYWdlJ10pOm5vdChbdHlwZT0nY2hlY2tib3gnXSk6bm90KFt0eXBlPSdyYWRpbyddKVwiOlxuICAgICAgXCJib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7Y29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtaW5wdXQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXQ6bm90KFt0eXBlPSdidXR0b24nXSk6bm90KFt0eXBlPSdyZXNldCddKTpub3QoW3R5cGU9J3N1Ym1pdCddKTpub3QoW3R5cGU9J2ltYWdlJ10pOm5vdChbdHlwZT0nY2hlY2tib3gnXSk6bm90KFt0eXBlPSdyYWRpbyddKTpmb2N1c1wiOlxuICAgICAgXCJib3JkZXI6IDFweCBzb2xpZCAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyIC5zdl9ib2R5IC5zdl9wX3Jvb3QgLnN2X3EgLnN2X3NlbGVjdF93cmFwcGVyIC5zdl9xX2Ryb3Bkb3duX2NvbnRyb2wgXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9vdGhlciBpbnB1dDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfdGV4dF9yb290OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9kcm9wZG93bl9jb250cm9sOmZvY3VzXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXRbdHlwZT0ndGV4dCddOmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICAnLnN2X2RlZmF1bHRfY3NzIC5zdl9jb250YWluZXIgLnN2X2JvZHkgLnN2X3Bfcm9vdCAuc3ZfcSBpbnB1dFt0eXBlPVwicmFkaW9cIl06Zm9jdXMsIC5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyIC5zdl9ib2R5IC5zdl9wX3Jvb3QgLnN2X3EgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzJzpcbiAgICAgIFwib3V0bGluZTogMXB4IGRvdHRlZCAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBzZWxlY3Q6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRleHRhcmVhOmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9zZWxlY3Rfd3JhcHBlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9zZWxlY3Rfd3JhcHBlcjo6YmVmb3JlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfcmF0aW5nX2l0ZW0uYWN0aXZlIC5zdl9xX3JhdGluZ19pdGVtX3RleHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4taG92ZXItY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3JhdGluZ19pdGVtIC5zdl9xX3JhdGluZ19pdGVtX3RleHRcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3JhdGluZ19pdGVtIC5zdl9xX3JhdGluZ19pdGVtX3RleHQ6aG92ZXJcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRhYmxlLnN2X3FfbWF0cml4IHRyXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRhYmxlLnN2X3FfbWF0cml4X2Ryb3Bkb3duIHRyXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0YWJsZS5zdl9xX21hdHJpeF9keW5hbWljIHRyXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX21fY2VsbF9zZWxlY3RlZFwiOlxuICAgICAgXCJjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdl9xX2ZpbGVfcmVtb3ZlOmhvdmVyXCI6IFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FfZmlsZV9jaG9vc2VfYnV0dG9uXCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ZpbGVfY2hvb3NlX2J1dHRvbjpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X3FfaW1nc2VsLmNoZWNrZWQgbGFiZWw+ZGl2XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3JcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wX2Rlc2NyaXB0aW9uXCI6IFwicGFkZGluZy1sZWZ0OiAxLjI5ZW07XCIsXG4gICAgLy9wcm9ncmVzcyBiYXJcbiAgICBcIi5zdl9tYWluIC5zdi1wcm9ncmVzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wcm9ncmVzc19fYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICAvL3BhbmVsZHluYW1pY1xuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4uc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi0tZGlzYWJsZWQsIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImZpbGw6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOiBcImNvbG9yOiAkcHJvZ3Jlc3MtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJmaWxsOiAkdGV4dC1jb2xvclwiLFxuXG4gICAgLy9ib29sZWFuXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIjogXCJjb2xvcjogJGRpc2FibGVkLWxhYmVsLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkIC5zdi1ib29sZWFuX19zd2l0Y2hcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXN3aXRjaC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zbGlkZXItY29sb3I7XCIsXG4gICAgLy9lbyBib29sZWFuXG5cbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfZGV0YWlsX3Jvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkOyBib3JkZXItdG9wOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgLy9hY3Rpb24tYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9faWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06aG92ZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG4gICAgLy9lbyBhY3Rpb24tYmFyXG5cbiAgICAvL2J1dHRvbi1ncm91cFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbTpob3Zlcjpub3QoLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWQpOm5vdChub3QoLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWQpXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCI6IFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWQgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOlxuICAgICAgXCJmaWxsOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWRpc2FibGVkO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWQgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOlxuICAgICAgXCJmaWxsOiAkZm9yZWdyb3VuZC1kaXNhYmxlZDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW1cIjpcbiAgICAgIFwiYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgLy9lbyBidXR0b24tZ3JvdXBcblxuICAgIFwiLnN2X21haW4gLnN2X3FzdG4gdGV4dGFyZWFcIjogXCJtYXgtd2lkdGg6IDEwMCVcIixcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIG1vZGVyblRoZW1lQ3NzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFwiLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIC8vIFwiLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRyZW1vdmUtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc2xpZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3YtYnRuXCI6IFwiY29sb3I6ICRidXR0b24tdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveF9fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBmaWxsOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tYWxsb3dob3Zlcjpob3ZlciAuc3YtY2hlY2tib3hfX3N2Z1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgZmlsbDogJGNoZWNrbWFyay1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tY2hlY2tlZCAuc3YtY2hlY2tib3hfX3N2Z1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgZmlsbDogJGNoZWNrbWFyay1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tY2hlY2tlZC5zdi1jaGVja2JveC0tZGlzYWJsZWQgLnN2LWNoZWNrYm94X19zdmdcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7IGZpbGw6ICRjaGVja21hcmstY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWRpc2FibGVkIC5zdi1jaGVja2JveF9fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1jb21tZW50XCI6IFwiYm9yZGVyLWNvbG9yOiAkdGV4dC1ib3JkZXItY29sb3I7IG1heC13aWR0aDogMTAwJTtcIixcbiAgICBcIi5zdi1jb21tZW50OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1jb21wbGV0ZWRwYWdlXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtY29udGFpbmVyLW1vZGVyblwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1jb250YWluZXItbW9kZXJuX190aXRsZVwiOiBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1kZXNjcmlwdGlvblwiOiBcImNvbG9yOiAkZGlzYWJsZWQtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1kcm9wZG93blwiOiBcImJvcmRlci1ib3R0b206IDAuMDZlbSBzb2xpZCAkdGV4dC1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd246Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRkcm9wZG93bi1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd24tLWVycm9yXCI6IFwiYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7IGNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd24tLWVycm9yOjpwbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd24tLWVycm9yOjotbXMtaW5wdXQtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZpbGVfX2RlY29yYXRvclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19jbGVhbi1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19jaG9vc2UtYnRuOm5vdCguc3YtZmlsZV9fY2hvb3NlLWJ0bi0tZGlzYWJsZWQpXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGFkZC1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2hvb3NlLWJ0bi0tZGlzYWJsZWRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19yZW1vdmUtc3ZnXCI6IFwiZmlsbDogI2ZmMTgwMDtcIixcbiAgICBcIi5zdi1maWxlX19zaWduIGFcIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19jb21wbGV0ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX25leHQtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19wcmV2LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fc3RhcnQtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19wcmV2aWV3LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fZWRpdC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1pbWFnZXBpY2tlcl9faXRlbS0tYWxsb3dob3Zlcjpob3ZlciAuc3YtaW1hZ2VwaWNrZXJfX2ltYWdlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWltYWdlcGlja2VyX19pdGVtLS1jaGVja2VkIC5zdi1pbWFnZXBpY2tlcl9faW1hZ2VcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWRpc2FibGVkLnN2LWltYWdlcGlja2VyX19pdGVtLS1jaGVja2VkIC5zdi1pbWFnZXBpY2tlcl9faW1hZ2VcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7IGJvcmRlci1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtaXRlbV9fY29udHJvbDpmb2N1cyArIC5zdi1pdGVtX19kZWNvcmF0b3JcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1tYXRyaXhfX3RleHQtLWNoZWNrZWRcIjpcbiAgICAgIFwiY29sb3I6ICRtYXRyaXgtdGV4dC1jaGVja2VkLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1tYXRyaXhfX3RleHQtLWRpc2FibGVkLnN2LW1hdHJpeF9fdGV4dC0tY2hlY2tlZFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1tYXRyaXhkeW5hbWljX19hZGQtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGFkZC1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4ZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRyZW1vdmUtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRyZW1vdmUtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXByb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXByb2dyZXNzX19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc19fdGV4dFwiOiBcImNvbG9yOiAkcHJvZ3Jlc3MtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fZXJib3hcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LXF1ZXN0aW9uX190aXRsZS0tYW5zd2VyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRhbnN3ZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fdGl0bGUtLWVycm9yXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGVycm9yLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcGFuZWxfX3RpdGxlLS1lcnJvclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhZGlvX19zdmdcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGZpbGw6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXJhZGlvLS1hbGxvd2hvdmVyOmhvdmVyIC5zdi1yYWRpb19fc3ZnXCI6IFwiZmlsbDogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tY2hlY2tlZCAuc3YtcmFkaW9fX3N2Z1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRyYWRpby1jaGVja2VkLWNvbG9yOyBmaWxsOiAkcmFkaW8tY2hlY2tlZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tZGlzYWJsZWQgLnN2LXJhZGlvX19zdmdcIjogXCJib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhZGlvLS1kaXNhYmxlZC5zdi1yYWRpby0tY2hlY2tlZCAuc3YtcmFkaW9fX3N2Z1wiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdcIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nIGlucHV0OmZvY3VzICsgLnN2LXJhdGluZ19fbWluLXRleHQgKyAuc3YtcmF0aW5nX19pdGVtLXRleHQsIC5zdi1yYXRpbmcgaW5wdXQ6Zm9jdXMgKyAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwib3V0bGluZS1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBib3JkZXI6IHNvbGlkIDAuMTg3NWVtICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nLS1kaXNhYmxlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyIC5zdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCI6Oi13ZWJraXQtc2Nyb2xsYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG4gICAgXCI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6IFwiYmFja2dyb3VuZDogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3Ytc2VsZWN0YmFzZV9fY2xlYXItYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGNsZWFuLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi10YWJsZVwiOiBcImJhY2tncm91bmQtY29sb3I6IHJnYmEoJG1haW4taG92ZXItY29sb3IsIDAuMSk7XCIsXG4gICAgXCIuc3YtdGV4dDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgJy5zdi10ZXh0W3R5cGU9XCJkYXRlXCJdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3InOlxuICAgICAgXCJjb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXRleHQtLWVycm9yXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvcjo6LW1zLXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvcjotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiaW5wdXQuc3YtdGV4dCwgdGV4dGFyZWEuc3YtY29tbWVudCwgc2VsZWN0LnN2LWRyb3Bkb3duXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQ6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQ6Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdi10YWJsZV9fcm93LS1kZXRhaWxcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBib290c3RyYXBUaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcF9kZXNjcmlwdGlvblwiOiBcInBhZGRpbmctbGVmdDogMS42NmVtO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FzdG5fZXJyb3JfYm90dG9tXCI6IFwibWFyZ2luLXRvcDogMjBweDsgbWFyZ2luLWJvdHRvbTogMDtcIixcbiAgICBcIi5zdl9tYWluIC5wcm9ncmVzc1wiOiBcIndpZHRoOiA2MCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcbiAgICBcIi5zdl9tYWluIC50YWJsZT50Ym9keT50cj50ZFwiOiBcIm1pbi13aWR0aDogOTBweDtcIixcbiAgICBcIi5zdl9tYWluIGYtcGFuZWwgLnN2X3FzdG5cIjogXCJwYWRkaW5nOiAwOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3FzdG46Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9wX2NvbnRhaW5lcjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkXCI6XG4gICAgICBcImZsZXg6IG5vbmUgIWltcG9ydGFudDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cblxuICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9kZXRhaWxfcm93XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7IGJvcmRlci10b3A6IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGJvb3RzdHJhcG1hdGVyaWFsVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAuaXMtZm9jdXNlZCAuZm9ybS1jb250cm9sXCI6XG4gICAgICBcImxpbmVhci1ncmFkaWVudCgwZGVnLCAkbWFpbi1jb2xvciAycHgsICRtYWluLWNvbG9yIDApLGxpbmVhci1ncmFkaWVudCgwZGVnLCAjRDJEMkQyIDFweCwgdHJhbnNwYXJlbnQgMCk7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FzdG5cIjogXCJtYXJnaW4tYm90dG9tOiAxcmVtO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOlxuICAgICAgXCJoZWlnaHQ6IDEwMCU7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3FzdG46Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9wX2NvbnRhaW5lcjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkXCI6XG4gICAgICBcImZsZXg6IG5vbmUgIWltcG9ydGFudDtcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0LmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0OmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuYnRuLXNlY29uZGFyeTphY3RpdmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddLmJ0bi1wcmltYXJ5LCAuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgYnV0dG9uLmJ0bi1wcmltYXJ5XCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXS5idG4tcHJpbWFyeTpob3ZlciwgLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGJ1dHRvbi5idG4tcHJpbWFyeTpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfZmlsZV9yZW1vdmU6aG92ZXJcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAgaW5wdXRbdHlwZT1maWxlXVwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG9wYWNpdHk6IDE7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnByb2dyZXNzXCI6IFwid2lkdGg6IDYwJTsgaGVpZ2h0OiAxLjVlbTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4gLmNoZWNrYm94LWRlY29yYXRvclwiOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbC5zdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbFwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfZGV0YWlsX3Jvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkOyBib3JkZXItdG9wOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9faWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06aG92ZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG4gIH07XG5cbiAgcHJpdmF0ZSBzaGVldDogQ1NTU3R5bGVTaGVldCA9IG51bGw7XG5cbiAgc3RhdGljIGZpbmRTaGVldChzdHlsZVNoZWV0SWQ6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICAhIWRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSAmJlxuICAgICAgICAoPGFueT5kb2N1bWVudCkuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlW1wiaWRcIl0gPT09IHN0eWxlU2hlZXRJZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiA8Q1NTU3R5bGVTaGVldD5kb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlU2hlZXQoc3R5bGVTaGVldElkOiBzdHJpbmcpIHtcbiAgICBsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGUuaWQgPSBzdHlsZVNoZWV0SWQ7XG4gICAgLy8gQWRkIGEgbWVkaWEgKGFuZC9vciBtZWRpYSBxdWVyeSkgaGVyZSBpZiB5b3UnZCBsaWtlIVxuICAgIC8vIHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIFwic2NyZWVuXCIpXG4gICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDEwMjRweClcIilcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgcmV0dXJuIDxDU1NTdHlsZVNoZWV0PnN0eWxlLnNoZWV0O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcHBseVRoZW1lKFxuICAgIHRoZW1lTmFtZTogc3RyaW5nID0gXCJkZWZhdWx0XCIsXG4gICAgdGhlbWVTZWxlY3Rvcjogc3RyaW5nID0gXCIuc3ZfbWFpblwiXG4gICkge1xuICAgIGxldCBUaGVtZUNzczogYW55O1xuXG4gICAgaWYgKHRoZW1lTmFtZSA9PT0gXCJtb2Rlcm5cIikgdGhlbWVTZWxlY3RvciA9IFwiLnN2LXJvb3QtbW9kZXJuIFwiO1xuXG4gICAgaWYgKFxuICAgICAgW1wiYm9vdHN0cmFwXCIsIFwiYm9vdHN0cmFwbWF0ZXJpYWxcIiwgXCJtb2Rlcm5cIl0uaW5kZXhPZih0aGVtZU5hbWUpICE9PSAtMVxuICAgICkge1xuICAgICAgVGhlbWVDc3MgPSAoPGFueT5TdHlsZXNNYW5hZ2VyKVt0aGVtZU5hbWUgKyBcIlRoZW1lQ3NzXCJdO1xuICAgICAgc3VydmV5Q3NzLmN1cnJlbnRUeXBlID0gdGhlbWVOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBUaGVtZUNzcyA9IFN0eWxlc01hbmFnZXIuVGhlbWVDc3M7XG4gICAgICBzdXJ2ZXlDc3MuY3VycmVudFR5cGUgPSBcInN0YW5kYXJkXCI7XG4gICAgfVxuXG4gICAgaWYgKFN0eWxlc01hbmFnZXIuRW5hYmxlZCkge1xuICAgICAgbGV0IHNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQodGhlbWVOYW1lICsgdGhlbWVTZWxlY3Rvcik7XG4gICAgICBpZiAoIXNoZWV0KSB7XG4gICAgICAgIHNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgICAgbGV0IHRoZW1lID1cbiAgICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW3RoZW1lTmFtZV0gfHxcbiAgICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW1wiZGVmYXVsdFwiXTtcblxuICAgICAgICBPYmplY3Qua2V5cyhUaGVtZUNzcykuZm9yRWFjaChzZWxlY3RvciA9PiB7XG4gICAgICAgICAgbGV0IGNzc1J1bGVUZXh0ID0gVGhlbWVDc3Nbc2VsZWN0b3JdO1xuICAgICAgICAgIE9iamVjdC5rZXlzKHRoZW1lKS5mb3JFYWNoKFxuICAgICAgICAgICAgY29sb3JWYXJpYWJsZU5hbWUgPT5cbiAgICAgICAgICAgICAgKGNzc1J1bGVUZXh0ID0gY3NzUnVsZVRleHQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKFwiXFxcXFwiICsgY29sb3JWYXJpYWJsZU5hbWUsIFwiZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVtZVtjb2xvclZhcmlhYmxlTmFtZV1cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgICB0aGVtZVNlbGVjdG9yICsgc2VsZWN0b3IgKyBcIiB7IFwiICsgY3NzUnVsZVRleHQgKyBcIiB9XCIsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBFbmFibGVkID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoU3R5bGVzTWFuYWdlci5FbmFibGVkKSB7XG4gICAgICB0aGlzLnNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQoU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWQpO1xuICAgICAgaWYgKCF0aGlzLnNoZWV0KSB7XG4gICAgICAgIHRoaXMuc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmNyZWF0ZVNoZWV0KFxuICAgICAgICAgIFN0eWxlc01hbmFnZXIuU3VydmV5SlNTdHlsZXNTaGVldElkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0eWxlcyh0aGlzLnNoZWV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVN0eWxlcyhzaGVldDogQ1NTU3R5bGVTaGVldCkge1xuICAgIGlmIChTdHlsZXNNYW5hZ2VyLkVuYWJsZWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuU3R5bGVzKS5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgc2VsZWN0b3IgKyBcIiB7IFwiICsgU3R5bGVzTWFuYWdlci5TdHlsZXNbc2VsZWN0b3JdICsgXCIgfVwiLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuTWVkaWEpLmZvckVhY2goc2VsZWN0b3IgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNoZWV0Lmluc2VydFJ1bGUoXG4gICAgICAgICAgICBTdHlsZXNNYW5hZ2VyLk1lZGlhW3NlbGVjdG9yXS5tZWRpYSArXG4gICAgICAgICAgICAgIFwiIHsgXCIgK1xuICAgICAgICAgICAgICBzZWxlY3RvciArXG4gICAgICAgICAgICAgIFwiIHsgXCIgK1xuICAgICAgICAgICAgICBTdHlsZXNNYW5hZ2VyLk1lZGlhW3NlbGVjdG9yXS5zdHlsZSArXG4gICAgICAgICAgICAgIFwiIH0gfVwiLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEpzb25PYmplY3QsIEpzb25FcnJvciwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElTdXJ2ZXksXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5SW1wbCxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElRdWVzdGlvbixcbiAgSVBhbmVsLFxuICBJRWxlbWVudCxcbiAgSVBhZ2UsXG4gIFN1cnZleUVycm9yLFxuICBFdmVudEJhc2UsXG4gIElTdXJ2ZXlFcnJvck93bmVyLFxuICBJU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RWxlbWVudCxcbiAgSVByb2dyZXNzSW5mbyxcbiAgSUZpbmRFbGVtZW50LFxufSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG5pbXBvcnQgeyBJU3VydmV5VHJpZ2dlck93bmVyLCBTdXJ2ZXlUcmlnZ2VyIH0gZnJvbSBcIi4vdHJpZ2dlclwiO1xuaW1wb3J0IHsgQ2FsY3VsYXRlZFZhbHVlIH0gZnJvbSBcIi4vY2FsY3VsYXRlZFZhbHVlXCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBUZXh0UHJlUHJvY2Vzc29yLCBUZXh0UHJlUHJvY2Vzc29yVmFsdWUgfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IGR4U3VydmV5U2VydmljZSB9IGZyb20gXCIuL2R4U3VydmV5U2VydmljZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgQ3VzdG9tRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwiLi9zdHlsZXNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlUaW1lciB9IGZyb20gXCIuL3N1cnZleXRpbWVyXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7XG4gIEh0bWxDb25kaXRpb25JdGVtLFxuICBVcmxDb25kaXRpb25JdGVtLFxuICBFeHByZXNzaW9uSXRlbSxcbn0gZnJvbSBcIi4vZXhwcmVzc2lvbkl0ZW1zXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uUnVubmVyLCBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBJQWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcblxuLyoqXG4gKiBUaGUgYFN1cnZleWAgb2JqZWN0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXJ2ZXksIFBhZ2VzLCBRdWVzdGlvbnMsIGZsb3cgbG9naWMgYW5kIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzXG4gICAgSVN1cnZleSxcbiAgICBJU3VydmV5RGF0YSxcbiAgICBJU3VydmV5SW1wbCxcbiAgICBJU3VydmV5VHJpZ2dlck93bmVyLFxuICAgIElTdXJ2ZXlFcnJvck93bmVyLFxuICAgIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTogc3RyaW5nID1cbiAgICBcInN2LXRlbXBsYXRlLXJlbmRlcmVyXCI7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBzdHlsZXNNYW5hZ2VyOiBTdHlsZXNNYW5hZ2VyID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBwbGF0Zm9ybTogc3RyaW5nID0gXCJ1bmtub3duXCI7XG4gIHB1YmxpYyBnZXQgcGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleU1vZGVsLnBsYXRmb3JtO1xuICB9XG4gIC8qKlxuICAgKiBZb3UgY2FuIGRpc3BsYXkgYW4gYWRkaXRpb25hbCBmaWVsZCAoY29tbWVudCBmaWVsZCkgZm9yIHRoZSBtb3N0IG9mIHF1ZXN0aW9uczsgdXNlcnMgY2FuIGVudGVyIGFkZGl0aW9uYWwgY29tbWVudHMgdG8gdGhlaXIgcmVzcG9uc2UuXG4gICAqIFRoZSBjb21tZW50IGZpZWxkIGlucHV0IGlzIHNhdmVkIGFzIGAncXVlc3Rpb24gbmFtZScgKyAnY29tbWVudFByZWZpeCdgLlxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBRdWVzdGlvbi5oYXNDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuY29tbWVudFByZWZpeDtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbW1lbnRQcmVmaXgodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5jb21tZW50UHJlZml4ID0gdmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudFBhZ2VWYWx1ZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHByaXZhdGUgc2V0IGN1cnJlbnRQYWdlVmFsdWUodmFsOiBQYWdlTW9kZWwpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjdXJyZW50UGFnZVZhbHVlXCIsIHZhbCk7XG4gIH1cblxuICBwcml2YXRlIHZhbHVlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XG4gIHByaXZhdGUgdmFyaWFibGVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcbiAgcHJpdmF0ZSBlZGl0aW5nT2JqVmFsdWU6IEJhc2U7XG5cbiAgcHJpdmF0ZSBsb2NhbGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29tcGxldGVkU3RhdGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBjb21wbGV0ZWRTdGF0ZVRleHRWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIGlzVGltZXJTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGVkIGFuZCB0aGUgYG9uQ29tcGxldGVgIGV2ZW50IGlzIGZpcmVkLiBZb3UgY2FuIHByZXZlbnQgdGhlIHN1cnZleSBmcm9tIGNvbXBsZXRpbmcgYnkgc2V0dGluZyBgb3B0aW9ucy5hbGxvd0NvbXBsZXRlYCB0byBgZmFsc2VgXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93Q29tcGxldGVgIC0gU3BlY2lmaWVzIHdoZXRoZXIgYSB1c2VyIGNhbiBjb21wbGV0ZSBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBzdXJ2ZXkgZnJvbSBjb21wbGV0aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqIDxici8+IGBvcHRpb25zLmlzQ29tcGxldGVPblRyaWdnZXJgIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGluZyBvbiBcImNvbXBsZXRlXCIgdHJpZ2dlci5cbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgb25Db21wbGV0aW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBhIHVzZXIgY2xpY2tzIHRoZSAnQ29tcGxldGUnIGJ1dHRvbiBhbmQgZmluaXNoZXMgYSBzdXJ2ZXkuIFVzZSB0aGlzIGV2ZW50IHRvIHNlbmQgdGhlIHN1cnZleSBkYXRhIHRvIHlvdXIgd2ViIHNlcnZlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmcodGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgdGhlIHN1cnZleSBpcyBzYXZpbmcgc3VydmV5IGRhdGEgb24geW91ciBzZXJ2ZXIuIFRoZSBgdGV4dGAgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNob3cgYSBjdXN0b20gbWVzc2FnZSBpbnN0ZWFkIG9mIGRlZmF1bHQuXG4gICAqIDxici8+IGBvcHRpb25zLnNob3dEYXRhU2F2aW5nRXJyb3IodGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIHRoZSBkYXRhIG9uIHlvdXIgc2VydmVyLiBJZiB5b3Ugd2FudCB0byBzaG93IGEgY3VzdG9tIGVycm9yLCB1c2UgYW4gb3B0aW9uYWwgYHRleHRgIHBhcmFtZXRlci5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdTdWNjZXNzKHRleHQpYCAtIGNhbGwgdGhpcyBtZXRob2QgdG8gc2hvdyB0aGF0IHRoZSBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgb24gdGhlIHNlcnZlci5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdDbGVhcmAgLSBjYWxsIHRoaXMgbWV0aG9kIHRvIGhpZGUgdGhlIHRleHQgYWJvdXQgdGhlIHNhdmluZyBwcm9ncmVzcy5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNDb21wbGV0ZU9uVHJpZ2dlcmAgLSByZXR1cm5zIHRydWUgaWYgdGhlIHN1cnZleSBpcyBjb21wbGV0ZWQgb24gXCJjb21wbGV0ZVwiIHRyaWdnZXIuXG4gICAqICBAc2VlIGRhdGFcbiAgICogQHNlZSBjbGVhckludmlzaWJsZVZhbHVlc1xuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICovXG4gIHB1YmxpYyBvbkNvbXBsZXRlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBhIHVzZXIgY2xpY2tzIHRoZSAnQ29tcGxldGUnIGJ1dHRvbi4gVGhlIGV2ZW50IGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgVVJMIG9wZW5lZCBhZnRlciBjb21wbGV0aW5nIGEgc3VydmV5LlxuICAgKiBTcGVjaWZ5IHRoZSBgbmF2aWdhdGVUb1VybGAgcHJvcGVydHkgdG8gbWFrZSBzdXJ2ZXkgbmF2aWdhdGUgdG8gYW5vdGhlciB1cmwuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnVybGAgLSBTcGVjaWZpZXMgYSBVUkwgb3BlbmVkIGFmdGVyIGNvbXBsZXRpbmcgYSBzdXJ2ZXkuIFNldCB0aGlzIHByb3BlcnR5IHRvIGFuIGVtcHR5IHN0cmluZyB0byBjYW5jZWwgdGhlIG5hdmlnYXRpb24gYW5kIHNob3cgdGhlIGNvbXBsZXRlZCBzdXJ2ZXkgcGFnZS5cbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXG4gICAqL1xuICBwdWJsaWMgb25OYXZpZ2F0ZVRvVXJsOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgc3VydmV5IGNoYW5nZWQgaXQncyBzdGF0ZSBmcm9tIFwic3RhcnRpbmdcIiB0byBcInJ1bm5pbmdcIi4gVGhlIFwic3RhcnRpbmdcIiBzdGF0ZSBtZWFucyB0aGF0IHN1cnZleSBzaG93cyB0aGUgc3RhcnRlZCBwYWdlLlxuICAgKiBUaGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAsIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgYSBzdGFydCBwYWdlIGluIHlvdXIgc3VydmV5LiBJbiB0aGlzIGNhc2UsIGFuIGVuZCB1c2VyIHNob3VsZCBjbGljayB0aGUgXCJTdGFydFwiIGJ1dHRvbiB0byBzdGFydCB0aGUgc3VydmV5LlxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKi9cbiAgcHVibGljIG9uU3RhcnRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2xpY2tpbmcgdGhlICdOZXh0JyBidXR0b24gaWYgdGhlIGBzZW5kUmVzdWx0T25QYWdlTmV4dGAgaXMgc2V0IHRvIGB0cnVlYC4gWW91IGNhbiB1c2UgaXQgdG8gc2F2ZSB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIGZvciBleGFtcGxlLCBpZiB5b3VyIHN1cnZleSBpcyBsYXJnZSBlbm91Z2guXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIEBzZWUgc2VuZFJlc3VsdE9uUGFnZU5leHRcbiAgICovXG4gIHB1YmxpYyBvblBhcnRpYWxTZW5kOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIGN1cnJlbnQgcGFnZSBjaGFuZ2VzIHRvIGFub3RoZXIgcGFnZS4gVHlwaWNhbGx5IGl0IGhhcHBlbnMgd2hlbiBhIHVzZXIgY2xpY2sgdGhlICdOZXh0JyBvciAnUHJldicgYnV0dG9ucy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbi5vbGRDdXJyZW50UGFnZWAgLSB0aGUgcHJldmlvdXMgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbi5uZXdDdXJyZW50UGFnZWAgLSBhIG5ldyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLmFsbG93Q2hhbmdpbmdgIC0gc2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgY3VycmVudCBwYWdlIGNoYW5naW5nLiBJdCBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICogPGJyLz4gYG9wdGlvbi5pc05leHRQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBuZXh0IHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIG5leHQgcGFnZSBhZnRlciBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIDxici8+IGBvcHRpb24uaXNQcmV2UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgcHJldmlvdXMgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgcHJldmlvdXMgcGFnZSBiZWZvcmUgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VOb1xuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqIEBzZWUgcHJldlBhZ2VcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqIEBzZWUgb25DdXJyZW50UGFnZUNoYW5nZWRcbiAgICoqL1xuICBwdWJsaWMgb25DdXJyZW50UGFnZUNoYW5naW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgY3VycmVudCBwYWdlIGhhcyBiZWVuIGNoYW5nZWQgdG8gYW5vdGhlciBwYWdlLiBUeXBpY2FsbHkgaXQgaGFwcGVucyB3aGVuIGEgdXNlciBjbGljayBvbiAnTmV4dCcgb3IgJ1ByZXYnIGJ1dHRvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb24ub2xkQ3VycmVudFBhZ2VgIC0gYSBwcmV2aW91cyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLm5ld0N1cnJlbnRQYWdlYCAtIGEgbmV3IGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24uaXNOZXh0UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgbmV4dCBwYWdlIGJ1dHRvbi4gSW4gZ2VuZXJhbCwgaXQgbWVhbnMgdGhhdCBvcHRpb25zLm5ld0N1cnJlbnRQYWdlIGlzIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiA8YnIvPiBgb3B0aW9uLmlzUHJldlBhZ2VgIC0gY29tbW9ubHkgbWVhbnMsIHRoYXQgZW5kLXVzZXIgcHJlc3MgdGhlIHByZXZpb3VzIHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIHByZXZpb3VzIHBhZ2UgYmVmb3JlIG9wdGlvbnMub2xkQ3VycmVudFBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG9uQ3VycmVudFBhZ2VDaGFuZ2luZ1xuICAgKi9cbiAgcHVibGljIG9uQ3VycmVudFBhZ2VDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKSBpcyBjaGFuZ2VkLiBJdCBjYW4gYmUgZG9uZSB2aWEgVUkgYnkgYSB1c2VyIG9yIHByb2dyYW1tYXRpY2FsbHkgb24gY2FsbGluZyB0aGUgYHNldFZhbHVlYCBtZXRob2QuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIHZhbHVlIG5hbWUgdGhhdCBoYXMgYmVpbmcgY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB3aGljaCBgcXVlc3Rpb24ubmFtZWAgZXF1YWxzIHRvIHRoZSB2YWx1ZSBuYW1lLiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBxdWVzdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgdXNlZC4gSWYgdGhlcmUgaXMgbm8gc3VjaCBxdWVzdGlvbnMsIHRoZSBgb3B0aW9ucy5xdWVzdGlvbmAgaXMgbnVsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMub2xkVmFsdWVgIC0gYW4gb2xkLCBwcmV2aW91cyB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuIFlvdSBjYW4gY2hhbmdlIGl0LlxuICAgKiBAc2VlIHNldFZhbHVlXG4gICAqIEBzZWUgb25WYWx1ZUNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdpbmc6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHF1ZXN0aW9uIHZhbHVlIChpLmUuLCBhbnN3ZXIpIGhhcyBiZWVuIGNoYW5nZWQuIFRoZSBxdWVzdGlvbiB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBpbiBVSSAoYnkgYSB1c2VyKSBvciBwcm9ncmFtbWF0aWNhbGx5IChvbiBjYWxsaW5nIGBzZXRWYWx1ZWAgbWV0aG9kKS5cbiAgICogVXNlIHRoZSBgb25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkYCBhbmQgYG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZGAgZXZlbnRzIHRvIGhhbmRsZSBjaGFuZ2VzIGluIGEgcXVlc3Rpb24gaW4gdGhlIFBhbmVsIER5bmFtaWMgYW5kIGEgY2VsbCBxdWVzdGlvbiBpbiBtYXRyaWNlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgdmFsdWUgbmFtZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gd2hpY2ggYHF1ZXN0aW9uLm5hbWVgIGVxdWFscyB0byB0aGUgdmFsdWUgbmFtZS4gSWYgdGhlcmUgYXJlIHNldmVyYWwgcXVlc3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIGZpcnN0IHF1ZXN0aW9uIGlzIHVzZWQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggcXVlc3Rpb25zLCB0aGUgYG9wdGlvbnMucXVlc3Rpb25gIGlzIGBudWxsYC5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICogQHNlZSBvblZhbHVlQ2hhbmdpbmdcbiAgICogQHNlZSBvbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWRcbiAgICogQHNlZSBvbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIHF1ZXN0aW9uIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB3aGljaCB2aXNpYmlsaXR5IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52aXNpYmxlYCAtIGEgcXVlc3Rpb24gYHZpc2libGVgIGJvb2xlYW4gdmFsdWUuXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJpbGVcbiAgICogQHNlZSBRdWVzdGlvbi52aXNpYmlsZUlmXG4gICAqL1xuICBwdWJsaWMgb25WaXNpYmxlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNoYW5naW5nIGEgcGFnZSB2aXNpYmlsaXR5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSB3aGljaCB2aXNpYmlsaXR5IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBwYWdlIGB2aXNpYmxlYCBib29sZWFuIHZhbHVlLlxuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmlsZVxuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmlsZUlmXG4gICAqL1xuICBwdWJsaWMgb25QYWdlVmlzaWJsZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjaGFuZ2luZyBhIHBhbmVsIHZpc2liaWxpdHkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcGFuZWwgd2hpY2ggdmlzaWJpbGl0eSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52aXNpYmxlYCAtIGEgcGFuZWwgYHZpc2libGVgIGJvb2xlYW4gdmFsdWUuXG4gICAqIEBzZWUgUGFuZWxNb2RlbC52aXNpYmlsZVxuICAgKiBAc2VlIFBhbmVsTW9kZWwudmlzaWJpbGVJZlxuICAgKi9cbiAgcHVibGljIG9uUGFuZWxWaXNpYmxlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNyZWF0aW5nIGEgbmV3IHF1ZXN0aW9uLlxuICAgKiBVbmxpa2UgdGhlIG9uUXVlc3Rpb25BZGRlZCBldmVudCwgdGhpcyBldmVudCBjYWxscyBmb3IgYWxsIHF1ZXN0aW9uIGNyZWF0ZWQgaW4gc3VydmV5IGluY2x1ZGluZyBpbnNpZGU6IGEgcGFnZSwgcGFuZWwsIG1hdHJpeCBjZWxsLCBkeW5hbWljIHBhbmVsIGFuZCBtdWx0aXBsZSB0ZXh0LlxuICAgKiBvciBpbnNpZGUgYSBtYXRyaXggY2VsbCBvciBpdCBjYW4gYmUgYSB0ZXh0IHF1ZXN0aW9uIGluIG11bHRpcGxlIHRleHQgaXRlbXMgb3IgaW5zaWRlIGEgcGFuZWwgb2YgYSBwYW5lbCBkeW5hbWljLlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHRvIHNldCB1cCBwcm9wZXJ0aWVzIHRvIGEgcXVlc3Rpb24gYmFzZWQgb24gaXQncyB0eXBlIGZvciBhbGwgcXVlc3Rpb25zLCByZWdhcmRsZXNzIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQsIG9uIHRoZSBwYWdlIG9yIGluc2lkZSBhIG1hdHJpeCBjZWxsLlxuICAgKiBQbGVhc2Ugbm90ZTogSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgZXZlbnQgZm9yIHF1ZXN0aW9ucyBsb2FkZWQgZnJvbSBKU09OIHRoZW4geW91IGhhdmUgdG8gY3JlYXRlIHN1cnZleSB3aXRoIGVtcHR5L251bGwgSlNPTiBwYXJhbWV0ZXIsIGFzc2lnbiB0aGUgZXZlbnQgYW5kIGNhbGwgc3VydmV5LmZyb21KU09OKHlvdXJKU09OKSBmdW5jdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBuZXdseSBjcmVhdGVkIHF1ZXN0aW9uIG9iamVjdC5cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKiBAc2VlIG9uUXVlc3Rpb25BZGRlZFxuICAgKi9cbiAgcHVibGljIG9uUXVlc3Rpb25DcmVhdGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gYWRkaW5nIGEgbmV3IHF1ZXN0aW9uIGludG8gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG5ld2x5IGFkZGVkIHF1ZXN0aW9uIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLmluZGV4YCAtIGFuIGluZGV4IG9mIHRoZSBxdWVzdGlvbiBpbiB0aGUgY29udGFpbmVyIChwYWdlIG9yIHBhbmVsKS5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFyZW50UGFuZWxgIC0gYSBjb250YWluZXIgd2hlcmUgYSBuZXcgcXVlc3Rpb24gaXMgbG9jYXRlZC4gSXQgY2FuIGJlIGEgcGFnZSBvciBwYW5lbC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm9vdFBhbmVsYCAtIHR5cGljYWxseSwgaXQgaXMgYSBwYWdlLlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqIEBzZWUgb25RdWVzdGlvbkNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyBvblF1ZXN0aW9uQWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcXVlc3Rpb24gZnJvbSBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcmVtb3ZlZCBxdWVzdGlvbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBxdWVzdGlvbiBuYW1lLlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25RdWVzdGlvblJlbW92ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBwYW5lbCBpbnRvIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBuZXdseSBhZGRlZCBwYW5lbCBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbmRleGAgLSBhbiBpbmRleCBvZiB0aGUgcGFuZWwgaW4gdGhlIGNvbnRhaW5lciAoYSBwYWdlIG9yIHBhbmVsKS5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFyZW50UGFuZWxgIC0gYSBjb250YWluZXIgKGEgcGFnZSBvciBwYW5lbCkgd2hlcmUgYSBuZXcgcGFuZWwgaXMgbG9jYXRlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm9vdFBhbmVsYCAtIGEgcm9vdCBjb250YWluZXIsIHR5cGljYWxseSBpdCBpcyBhIHBhZ2UuXG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uUGFuZWxBZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gcmVtb3ZpbmcgYSBwYW5lbCBmcm9tIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSByZW1vdmVkIHBhbmVsIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHBhbmVsIG5hbWUuXG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uUGFuZWxSZW1vdmVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBwYWdlIGludG8gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgbmV3bHkgYWRkZWQgYHBhbmVsYCBvYmplY3QuXG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uUGFnZUFkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiB2YWxpZGF0aW5nIHZhbHVlIGluIGEgcXVlc3Rpb24uIFlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHVzaW5nIGBvcHRpb25zLmVycm9yYC4gVGhlIHN1cnZleSBibG9ja3MgY29tcGxldGluZyB0aGUgc3VydmV5IG9yIGdvaW5nIHRvIHRoZSBuZXh0IHBhZ2Ugd2hlbiB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSB2YWxpZGF0ZWQgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgY3VycmVudCBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gZXJyb3Igc3RyaW5nLiBJdCBpcyBlbXB0eSBieSBkZWZhdWx0LlxuICAgKiBAc2VlIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnNcbiAgICogQHNlZSBvblNldHRpbmdRdWVzdGlvbkVycm9yc1xuICAgKi9cbiAgcHVibGljIG9uVmFsaWRhdGVRdWVzdGlvbjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBlcnJvcnMgYXJlIGFzc2lnbmVkIHRvIGEgcXVlc3Rpb24uIFlvdSBtYXkgYWRkL3JlbW92ZS9tb2RpZnkgZXJyb3JzIGZvciBhIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHZhbGlkYXRlZCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JzYCAtIHRoZSBsaXN0IG9mIGVycm9ycy4gVGhlIGxpc3QgaXMgZW1wdHkgYnkgZGVmYXVsdCBhbmQgcmVtYWlucyBlbXB0eSBpZiBhIHZhbGlkYXRlZCBxdWVzdGlvbiBoYXMgbm8gZXJyb3JzLlxuICAgKiBAc2VlIG9uVmFsaWRhdGVRdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byB2YWxpZGF0ZSBkYXRhIG9uIHlvdXIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kYXRhYCAtIHRoZSB2YWx1ZXMgb2YgYWxsIG5vbi1lbXB0eSBxdWVzdGlvbnMgb24gdGhlIGN1cnJlbnQgcGFnZS4gWW91IGNhbiBnZXQgYSBxdWVzdGlvbiB2YWx1ZSBhcyBgb3B0aW9ucy5kYXRhW1wibXlRdWVzdGlvbk5hbWVcIl1gLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcnNgIC0gc2V0IHlvdXIgZXJyb3JzIHRvIHRoaXMgb2JqZWN0IGFzOiBgb3B0aW9ucy5lcnJvcnNbXCJteVF1ZXN0aW9uTmFtZVwiXSA9IFwiRXJyb3IgdGV4dFwiO2AuIEl0IHdpbGwgYmUgc2hvd24gYXMgYSBxdWVzdGlvbiBlcnJvci5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29tcGxldGUoKWAgLSBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGVsbCBzdXJ2ZXkgdGhhdCB5b3VyIHNlcnZlciBjYWxsYmFjayBoYXMgYmVlbiBwcm9jZXNzZWQuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqIEBzZWUgb25WYWxpZGF0ZVBhbmVsXG4gICAqL1xuICBwdWJsaWMgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uczogYW55ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSB0aGUgSFRNTCBiZWZvcmUgcmVuZGVyaW5nLCBmb3IgZXhhbXBsZSBIVE1MIG9uIGEgY29tcGxldGVkIHBhZ2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxgIC0gYW4gSFRNTCB0aGF0IHlvdSBtYXkgY2hhbmdlIGJlZm9yZSB0ZXh0IHByb2Nlc3NpbmcgYW5kIHRoZW4gcmVuZGVyaW5nLlxuICAgKiBAc2VlIGNvbXBsZXRlZEh0bWxcbiAgICogQHNlZSBsb2FkaW5nSHRtbFxuICAgKiBAc2VlIFF1ZXN0aW9uSHRtbE1vZGVsLmh0bWxcbiAgICovXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gdmFsaWRhdGluZyBhIHBhbmVsLiBTZXQgeW91ciBlcnJvciB0byBgb3B0aW9ucy5lcnJvcmAgYW5kIHN1cnZleSB3aWxsIHNob3cgdGhlIGVycm9yIGZvciB0aGUgcGFuZWwgYW5kIGJsb2NrIGNvbXBsZXRpbmcgdGhlIHN1cnZleSBvciBnb2luZyB0byB0aGUgbmV4dCBwYWdlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcGFuZWwgbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gZXJyb3Igc3RyaW5nLiBJdCBpcyBlbXB0eSBieSBkZWZhdWx0LlxuICAgKiBAc2VlIG9uVmFsaWRhdGVRdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uVmFsaWRhdGVQYW5lbDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhlIGV2ZW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBlcnJvciB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIGFuIGVycm9yIHRleHQuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yYCAtIGFuIGluc3RhbmNlIG9mIHRoZSBgU3VydmV5RXJyb3JgIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgZXJyb3IgbmFtZS4gVGhlIGZvbGxvd2luZyBlcnJvciBuYW1lcyBhcmUgYXZhaWxhYmxlOlxuICAgKiByZXF1aXJlZCwgcmVxdWlyZW9uZWFuc3dlciwgcmVxdWlyZW51bWVyaWMsIGV4Y2VlZHNpemUsIHdlYnJlcXVlc3QsIHdlYnJlcXVlc3RlbXB0eSwgb3RoZXJlbXB0eSxcbiAgICogdXBsb2FkaW5nZmlsZSwgcmVxdWlyZWRpbmFsbHJvd3NlcnJvciwgbWlucm93Y291bnRlcnJvciwga2V5ZHVwbGljYXRpb25lcnJvciwgY3VzdG9tXG4gICAqL1xuICBwdWJsaWMgb25FcnJvckN1c3RvbVRleHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGUgdGhpcyBldmVudCB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBzdXJ2ZXkgZmluaXNoZWQgdmFsaWRhdGUgcXVlc3Rpb25zIG9uIHRoZSBjdXJyZW50IHBhZ2UuIEl0IGNvbW1vbmx5IGhhcHBlbnMgd2hlbiBhIHVzZXIgdHJ5IHRvIGdvIHRvIHRoZSBuZXh0IHBhZ2Ugb3IgY29tcGxldGUgdGhlIHN1cnZleVxuICAgKiBvcHRpb25zLnF1ZXN0aW9ucyAtIHRoZSBsaXN0IG9mIHF1ZXN0aW9ucyB0aGF0IGhhdmUgZXJyb3JzXG4gICAqIG9wdGlvbnMuZXJyb3JzIC0gdGhlIGxpc3Qgb2YgZXJyb3JzXG4gICAqIG9wdGlvbnMucGFnZSAtIHRoZSBwYWdlIHdoZXJlIHF1ZXN0aW9uKHMpIGFyZSBsb2NhdGVkXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBtb2RpZnkgdGhlIEhUTUwgY29udGVudCBiZWZvcmUgcmVuZGVyaW5nLCBmb3IgZXhhbXBsZSBgY29tcGxldGVIdG1sYCBvciBgbG9hZGluZ0h0bWxgLlxuICAgKiBgb3B0aW9ucy5odG1sYCAtIHNwZWNpZmllcyB0aGUgbW9kaWZpZWQgSFRNTCBjb250ZW50LlxuICAgKiBAc2VlIGNvbXBsZXRlZEh0bWxcbiAgICogQHNlZSBsb2FkaW5nSHRtbFxuICAgKi9cbiAgcHVibGljIG9uUHJvY2Vzc0h0bWw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBxdWVzdGlvbiB0aXRsZSBpbiBjb2RlLiBJZiB5b3Ugd2FudCB0byByZW1vdmUgcXVlc3Rpb24gbnVtYmVyaW5nIHRoZW4gc2V0IHNob3dRdWVzdGlvbk51bWJlcnMgdG8gXCJvZmZcIi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGl0bGVgIC0gYSBjYWxjdWxhdGVkIHF1ZXN0aW9uIHRpdGxlLCBiYXNlZCBvbiBxdWVzdGlvbiBgdGl0bGVgLCBgbmFtZWAuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiBAc2VlIHNob3dRdWVzdGlvbk51bWJlcnNcbiAgICogQHNlZSByZXF1aXJlZFRleHRcbiAgICovXG4gIHB1YmxpYyBvbkdldFF1ZXN0aW9uVGl0bGU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgcXVlc3Rpb24gbm8gaW4gY29kZS4gSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHF1ZXN0aW9uIG51bWJlcmluZyB0aGVuIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzIHRvIFwib2ZmXCIuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5vYCAtIGEgY2FsY3VsYXRlZCBxdWVzdGlvbiBubywgYmFzZWQgb24gcXVlc3Rpb24gYHZpc2libGVJbmRleGAsIHN1cnZleSBgLnF1ZXN0aW9uU3RhcnRJbmRleGAgcHJvcGVydGllcy4gWW91IGNhbiBjaGFuZ2UgaXQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiBAc2VlIHNob3dRdWVzdGlvbk51bWJlcnNcbiAgICogQHNlZSBxdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBvbkdldFF1ZXN0aW9uTm86IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBwcm9ncmVzcyB0ZXh0IGluIGNvZGUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnRleHRgIC0gYSBwcm9ncmVzcyB0ZXh0LCB0aGF0IFN1cnZleUpTIHdpbGwgcmVuZGVyIGluIHByb2dyZXNzIGJhci5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25Db3VudGAgLSBhIG51bWJlciBvZiBxdWVzdGlvbnMgdGhhdCBoYXZlIGlucHV0KHMpLiBXZSBkbyBub3QgY291bnQgaHRtbCBvciBleHByZXNzaW9uIHF1ZXN0aW9uc1xuICAgKiA8YnIvPiBgb3B0aW9ucy5hbnN3ZXJlZFF1ZXN0aW9uQ291bnRgIC0gYSBudW1iZXIgb2YgcXVlc3Rpb25zIHRoYXQgaGF2ZSBpbnB1dChzKSBhbmQgYW4gdXNlciBoYXMgYW5zd2VyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnJlcXVpcmVkUXVlc3Rpb25Db3VudGAgLSBhIG51bWJlciBvZiByZXF1aXJlZCBxdWVzdGlvbnMgdGhhdCBoYXZlIGlucHV0KHMpLiBXZSBkbyBub3QgY291bnQgaHRtbCBvciBleHByZXNzaW9uIHF1ZXN0aW9uc1xuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudGAgLSBhIG51bWJlciBvZiByZXF1aXJlZCBxdWVzdGlvbnMgdGhhdCBoYXZlIGlucHV0KHMpIGFuZCBhbiB1c2VyIGhhcyBhbnN3ZXJlZC5cbiAgICogIEBzZWUgcHJvZ3Jlc3NCYXJUeXBlXG4gICAqL1xuICBwdWJsaWMgb25Qcm9ncmVzc1RleHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gcHJvY2VzcyB0aGUgbWFya2Rvd24gdGV4dC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudGAgLSBTdXJ2ZXlKUyBlbGVtZW50IChhIHF1ZXN0aW9uLCBwYW5lbCwgcGFnZSwgb3Igc3VydmV5KSB3aGVyZSB0aGUgc3RyaW5nIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcHJvcGVydHkgbmFtZSBpcyBnb2luZyB0byBiZSByZW5kZXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGV4dGAgLSBhIHRleHQgdGhhdCBpcyBnb2luZyB0byBiZSByZW5kZXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbGAgLSBhbiBIVE1MIGNvbnRlbnQuIEl0IGlzIGBudWxsYCBieSBkZWZhdWx0LiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBIVE1MIGNvbnRlbnQgcmVuZGVyZWQgaW5zdGVhZCBvZiBgb3B0aW9ucy50ZXh0YC5cbiAgICovXG4gIHB1YmxpYyBvblRleHRNYXJrZG93bjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBzcGVjaXR5IHJlbmRlciBjb21wb25lbnQgbmFtZSB1c2VkIGZvciB0ZXh0IHJlbmRlcmluZy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudGAgLSBTdXJ2ZXlKUyBlbGVtZW50IChhIHF1ZXN0aW9uLCBwYW5lbCwgcGFnZSwgb3Igc3VydmV5KSB3aGVyZSB0aGUgc3RyaW5nIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcHJvcGVydHkgbmFtZSBpcyBnb2luZyB0byBiZSByZW5kZXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucmVuZGVyQXNgIC0gYSBjb21wb25lbnQgbmFtZSB1c2VkIGZvciB0ZXh0IHJlbmRlcmluZy5cbiAgICovXG4gIHB1YmxpYyBvblRleHRSZW5kZXJBczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgZmlyZXMgd2hlbiBpdCBnZXRzIHJlc3BvbnNlIGZyb20gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIG9uIHNhdmluZyBzdXJ2ZXkgcmVzdWx0cy4gVXNlIGl0IHRvIGZpbmQgb3V0IGlmIHRoZSByZXN1bHRzIGhhdmUgYmVlbiBzYXZlZCBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnN1Y2Nlc3NgIC0gaXQgaXMgYHRydWVgIGlmIHRoZSByZXN1bHRzIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHNlcnZpY2Ugc3VjY2Vzc2Z1bGx5LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXNwb25zZWAgLSBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgb25TZW5kUmVzdWx0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSBpdCB0byBnZXQgcmVzdWx0cyBhZnRlciBjYWxsaW5nIHRoZSBgZ2V0UmVzdWx0YCBtZXRob2QuIEl0IHJldHVybnMgYSBzaW1wbGUgYW5hbHl0aWNzIGZyb20gW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnN1Y2Nlc3NgIC0gaXQgaXMgYHRydWVgIGlmIHRoZSByZXN1bHRzIHdlcmUgZ290IGZyb20gdGhlIHNlcnZpY2Ugc3VjY2Vzc2Z1bGx5LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kYXRhYCAtIHRoZSBvYmplY3QgYHtBbnN3ZXJzQ291bnQsIFF1ZXN0aW9uUmVzdWx0IDoge30gfWAuIGBBbnN3ZXJzQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgcG9zdGVkIHN1cnZleSByZXN1bHRzLiBgUXVlc3Rpb25SZXN1bHRgIGlzIGFuIG9iamVjdCB3aXRoIGFsbCBwb3NzaWJsZSB1bmlxdWUgYW5zd2VycyB0byB0aGUgcXVlc3Rpb24gYW5kIG51bWJlciBvZiB0aGVzZSBhbnN3ZXJzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kYXRhTGlzdGAgLSBhbiBhcnJheSBvZiBvYmplY3RzIGB7bmFtZSwgdmFsdWV9YCwgd2hlcmUgYG5hbWVgIGlzIGEgdW5pcXVlIHZhbHVlL2Fuc3dlciB0byB0aGUgcXVlc3Rpb24gYW5kIGB2YWx1ZWAgaXMgYSBudW1iZXIvY291bnQgb2Ygc3VjaCBhbnN3ZXJzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXNwb25zZWAgLSB0aGUgc2VydmVyIHJlc3BvbnNlLlxuICAgKiBAc2VlIGdldFJlc3VsdFxuICAgKi9cbiAgcHVibGljIG9uR2V0UmVzdWx0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiB1cGxvYWRpbmcgdGhlIGZpbGUgaW4gUXVlc3Rpb25GaWxlIHdoZW4gYHN0b3JlRGF0YUFzVGV4dGAgaXMgc2V0IHRvIGBmYWxzZWAuIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgdXBsb2FkZWQgZmlsZSBuYW1lIG9yIHRvIHByZXZlbnQgYSBwYXJ0aWN1bGFyIGZpbGUgZnJvbSBiZWluZyB1cGxvYWRlZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIGZpbGUgcXVlc3Rpb24gaW5zdGFuY2UuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLmZpbGVzYCAtIHRoZSBKYXZhc2NyaXB0IEZpbGUgb2JqZWN0cyBhcnJheSB0byB1cGxvYWQuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmaWxlIHVwbG9hZCBzdGF0dXMgYW5kIHRoZSB1cGRsb2FkZWQgZmlsZSBjb250ZW50LlxuICAgKiBAc2VlIHVwbG9hZEZpbGVzXG4gICAqIEBzZWUgUXVlc3Rpb25GaWxlTW9kZWwuc3RvcmVEYXRhQXNUZXh0XG4gICAqIEBzZWUgb25Eb3dubG9hZEZpbGVcbiAgICogQHNlZSBvbkNsZWFyRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uVXBsb2FkRmlsZXMlMjIpXG4gICAqL1xuICBwdWJsaWMgb25VcGxvYWRGaWxlczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gZG93bmxvYWRpbmcgYSBmaWxlIGluIFF1ZXN0aW9uRmlsZS4gVXNlIHRoaXMgZXZlbnQgdG8gcGFzcyB0aGUgZmlsZSB0byBhIHByZXZpZXcuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbnRlbnRgIC0gdGhlIGZpbGUgY29udGVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZmlsZVZhbHVlYCAtIHNpbmdsZSBmaWxlIHF1ZXN0aW9uIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jYWxsYmFja2AgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgZmlsZSBkb3dubG9hZGluZyBzdGF0dXMgYW5kIHRoZSBkb3dubG9hZGVkIGZpbGUgY29udGVudC5cbiAgICogQHNlZSBkb3dubG9hZEZpbGVcbiAgICogQHNlZSBvbkNsZWFyRmlsZXNcbiAgICogQHNlZSBvblVwbG9hZEZpbGVzXG4gICAqIEBzZWUgW1ZpZXcgRXhhbXBsZXNdKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9c2l0ZSUzQWh0dHBzJTNBJTJGJTJGc3VydmV5anMuaW8lMkZFeGFtcGxlcyUyRislMjJvbkRvd25sb2FkRmlsZSUyMilcbiAgICovXG4gIHB1YmxpYyBvbkRvd25sb2FkRmlsZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIG9uIGNsZWFyaW5nIHRoZSB2YWx1ZSBpbiBhIFF1ZXN0aW9uRmlsZS4gVXNlIHRoaXMgZXZlbnQgdG8gcmVtb3ZlIGZpbGVzIHN0b3JlZCBvbiB5b3VyIHNlcnZlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYHF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbiBpbnN0YW5jZS5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5maWxlTmFtZWAgLSBhIHJlbW92ZWQgZmlsZSdzIG5hbWUsIHNldCBpdCB0byBgbnVsbGAgdG8gY2xlYXIgYWxsIGZpbGVzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jYWxsYmFja2AgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgb3BlcmF0aW9uIHN0YXR1cy5cbiAgICogQHNlZSBjbGVhckZpbGVzXG4gICAqIEBzZWUgb25Eb3dubG9hZEZpbGVcbiAgICogQHNlZSBvblVwbG9hZEZpbGVzXG4gICAqIEBzZWUgW1ZpZXcgRXhhbXBsZXNdKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9c2l0ZSUzQWh0dHBzJTNBJTJGJTJGc3VydmV5anMuaW8lMkZFeGFtcGxlcyUyRislMjJvbkNsZWFyRmlsZXMlMjIpXG4gICAqL1xuICBwdWJsaWMgb25DbGVhckZpbGVzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBjaG9pY2VzIGZvciByYWRpb2dyb3VwLCBjaGVja2JveCwgYW5kIGRyb3Bkb3duIGhhcyBiZWVuIGxvYWRlZCBmcm9tIGEgUkVTVGZ1bCBzZXJ2aWNlIGFuZCBiZWZvcmUgdGhleSBhcmUgYXNzaWduZWQgdG8gYSBxdWVzdGlvbi5cbiAgICogWW91IG1heSBjaGFuZ2UgdGhlIGNob2ljZXMsIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCBvciBkaXNhYmxlL2VuYWJsZWQgbWFrZSB2aXNpYmxlL2ludmlzaWJsZSBxdWVzdGlvbiwgYmFzZWQgb24gbG9hZGVkIHJlc3VsdHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBxdWVzdGlvbmAgLSB0aGUgcXVlc3Rpb24gd2hlcmUgbG9hZGVkIGNob2ljZXMgYXJlIGdvaW5nIHRvIGJlIGFzc2lnbmVkLlxuICAgKiA8YnIvPiBgY2hvaWNlc2AgLSB0aGUgbG9hZGVkIGNob2ljZXMuIFlvdSBjYW4gY2hhbmdlIHRoZSBsb2FkZWQgY2hvaWNlcyB0byBiZWZvcmUgdGhleSBhcmUgYXNzaWduZWQgdG8gcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZXJ2ZXJSZXN1bHRgIC0gYSByZXN1bHQgdGhhdCBjb21lcyBmcm9tIHRoZSBzZXJ2ZXIgYXMgaXQgaXMuXG4gICAqL1xuICBwdWJsaWMgb25Mb2FkQ2hvaWNlc0Zyb21TZXJ2ZXI6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciBzdXJ2ZXkgaXMgbG9hZGVkIGZyb20gYXBpLnN1cnZleWpzLmlvIHNlcnZpY2UuXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdG8gcGVyZm9ybSBtYW5pcHVsYXRpb24gd2l0aCB0aGUgc3VydmV5IG1vZGVsIGFmdGVyIGl0IHdhcyBsb2FkZWQgZnJvbSB0aGUgd2ViIHNlcnZpY2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIEBzZWUgc3VydmV5SWRcbiAgICogQHNlZSBsb2FkU3VydmV5RnJvbVNlcnZpY2VcbiAgICovXG4gIHB1YmxpYyBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gcHJvY2Vzc2luZyB0aGUgdGV4dCB3aGVuIGl0IGZpbmRzIGEgdGV4dCBpbiBicmFja2V0czogYHtzb21ldmFsdWV9YC4gQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgdmFsdWUgb2Ygc3VydmV5IHF1ZXN0aW9uIHZhbHVlcyBhbmQgdmFyaWFibGVzLlxuICAgKiBGb3IgZXhhbXBsZSwgeW91IG1heSB1c2UgdGhlIHRleHQgcHJvY2Vzc2luZyBpbiBsb2FkaW5nIGNob2ljZXMgZnJvbSB0aGUgd2ViLiBJZiB5b3VyIGBjaG9pY2VzQnlVcmwudXJsYCBlcXVhbHMgdG8gXCJVcmxUb1NlcnZpY2VUb0dldEFsbENpdGllcy97Y291bnRyeX0ve3N0YXRlfVwiLFxuICAgKiB5b3UgbWF5IHNldCBvbiB0aGlzIGV2ZW50IGBvcHRpb25zLnZhbHVlYCB0byBcImFsbFwiIG9yIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBcInN0YXRlXCIgdmFsdWUvcXVlc3Rpb24gaXMgbm9uIHNlbGVjdGVkIGJ5IGEgdXNlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgbmFtZSBvZiB0aGUgcHJvY2Vzc2luZyB2YWx1ZSwgZm9yIGV4YW1wbGUsIFwic3RhdGVcIiBpbiBvdXIgZXhhbXBsZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gdGhlIHZhbHVlIG9mIHRoZSBwcm9jZXNzaW5nIHRleHQuXG4gICAqIDxici8+IGBvcHRpb25zLmlzRXhpc3RzYCAtIGEgYm9vbGVhbiB2YWx1ZS4gU2V0IGl0IHRvIGB0cnVlYCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIHZhbHVlIGFuZCBzZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3QuXG4gICAqL1xuICBwdWJsaWMgb25Qcm9jZXNzVGV4dFZhbHVlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBhIHF1ZXN0aW9uLiBVc2UgaXQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcXVlc3Rpb24gQ1NTIGNsYXNzZXMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gZm9yIHdoaWNoIHlvdSBjYW4gY2hhbmdlIHRoZSBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYG9wdGlvbnMuY3NzQ2xhc3Nlc2AgLSBhbiBvYmplY3Qgd2l0aCBDU1MgY2xhc3Nlcy4gRm9yIGV4YW1wbGUgYHtyb290OiBcInRhYmxlXCIsIGJ1dHRvbjogXCJidXR0b25cIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBhIHBhbmVsLiBVc2UgaXQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFuZWwgQ1NTIGNsYXNzZXMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcGFuZWwgZm9yIHdoaWNoIHlvdSBjYW4gY2hhbmdlIHRoZSBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYG9wdGlvbnMuY3NzQ2xhc3Nlc2AgLSBhbiBvYmplY3Qgd2l0aCBDU1MgY2xhc3Nlcy4gRm9yIGV4YW1wbGUgYHt0aXRsZTogXCJzdl9wX3RpdGxlXCIsIGRlc2NyaXB0aW9uOiBcInNtYWxsXCJ9YC4gWW91IGNhbiBjaGFuZ2UgdGhlbSB0byB5b3VyIG93biBDU1MgY2xhc3Nlcy5cbiAgICovXG4gIHB1YmxpYyBvblVwZGF0ZVBhbmVsQ3NzQ2xhc3NlczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSByZW5kZXJpbmcgYSBwYWdlLiBVc2UgaXQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFnZSBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2UgZm9yIHdoaWNoIHlvdSBjYW4gY2hhbmdlIHRoZSBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYG9wdGlvbnMuY3NzQ2xhc3Nlc2AgLSBhbiBvYmplY3Qgd2l0aCBDU1MgY2xhc3Nlcy4gRm9yIGV4YW1wbGUgYHt0aXRsZTogXCJzdl9wX3RpdGxlXCIsIGRlc2NyaXB0aW9uOiBcInNtYWxsXCJ9YC4gWW91IGNhbiBjaGFuZ2UgdGhlbSB0byB5b3VyIG93biBDU1MgY2xhc3Nlcy5cbiAgICovXG4gIHB1YmxpYyBvblVwZGF0ZVBhZ2VDc3NDbGFzc2VzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgcmlnaHQgYWZ0ZXIgc3VydmV5IGlzIHJlbmRlcmVkIGluIERPTS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYSByb290IEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgc3VydmV5IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyU3VydmV5OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgcmlnaHQgYWZ0ZXIgYSBwYWdlIGlzIHJlbmRlcmVkIGluIERPTS4gVXNlIGl0IHRvIG1vZGlmeSBIVE1MIGVsZW1lbnRzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhbiBIVE1MIGVsZW1lbnQgYm91bmQgdG8gdGhlIHN1cnZleSBoZWFkZXIgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJIZWFkZXI6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhZ2UgaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBwYWdlIG9iamVjdCBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLiBUeXBpY2FsbHkgdGhlIGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcGFnZSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlclBhZ2U6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHF1ZXN0aW9uIGlzIHJlbmRlcmVkIGluIERPTS4gVXNlIGl0IHRvIG1vZGlmeSBIVE1MIGVsZW1lbnRzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIG9iamVjdCBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhbiBIVE1MIGVsZW1lbnQgYm91bmQgdG8gdGhlIHF1ZXN0aW9uIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUXVlc3Rpb246IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIG5vbi1jb21wb3NpdGUgcXVlc3Rpb24gKHRleHQsIGNvbW1lbnQsIGRyb3Bkb3duLCByYWRpb2dyb3VwLCBjaGVja2JveCkgaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIFRoaXMgZXZlbnQgaXMgbm90IGZpcmVkIGZvciBtYXRyaWNlcywgcGFuZWxzLCBtdWx0aXBsZSB0ZXh0IGFuZCBpbWFnZSBwaWNrZXIuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcXVlc3Rpb24gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgcmlnaHQgYWZ0ZXIgYSBwYW5lbCBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIHBhbmVsIG9iamVjdCBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcGFuZWwgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlclBhbmVsOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gYWRkaW5nIGEgbmV3IHJvdyBpbiBNYXRyaXggRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgbmV3IGFkZGVkIHJvdy5cbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnZpc2libGVSb3dzXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhSb3dBZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBhZGRpbmcgYSBuZXcgcm93IGluIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jYW5BZGRSb3dgIC0gc3BlY2lmaWVzIHdoZXRoZXIgYSBuZXcgcm93IGNhbiBiZSBhZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwudmlzaWJsZVJvd3NcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbW92aW5nIGEgcm93IGZyb20gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uIFlvdSBjYW4gZGlzYWJsZSByZW1vdmluZyBhbmQgY2xlYXIgdGhlIGRhdGEgaW5zdGVhZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93SW5kZXhgIC0gYSByb3cgaW5kZXguXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSBhIHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93YCAtIGEgYm9vbGVhbiBwcm9wZXJ0eS4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgcm93IHJlbW92aW5nLlxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgb25NYXRyaXhSb3dSZW1vdmVkXG4gICAqIEBzZWUgb25NYXRyaXhBbGxvd1JlbW92ZVJvd1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Um93UmVtb3Zpbmc6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHJvdyBmcm9tIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uXG4gICAqIDxici8+IGBvcHRpb25zLnJvd0luZGV4YCAtIGEgcmVtb3ZlZCByb3cgaW5kZXhcbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgcmVtb3ZlZCByb3cgb2JqZWN0XG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC52aXNpYmxlUm93c1xuICAgKiBAc2VlIG9uTWF0cml4Um93UmVtb3ZpbmdcbiAgICogQHNlZSBvbk1hdHJpeEFsbG93UmVtb3ZlUm93XG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhSb3dSZW1vdmVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBcIlJlbW92ZVwiIGJ1dHRvbiBmb3IgcmVtb3ZpbmcgYSByb3cgZnJvbSBNYXRyaXggRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93SW5kZXhgIC0gYSByb3cgaW5kZXguXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSBhIHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93YCAtIGEgYm9vbGVhbiBwcm9wZXJ0eS4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgcm93IHJlbW92aW5nLlxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgb25NYXRyaXhSb3dSZW1vdmluZ1xuICAgKiBAc2VlIG9uTWF0cml4Um93UmVtb3ZlZFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4QWxsb3dSZW1vdmVSb3c6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBmb3IgZXZlcnkgY2VsbCBjcmVhdGVkIGluIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsYCAtIHRoZSBtYXRyaXggY2VsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2VsbFF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbi9lZGl0b3IgaW4gdGhlIGNlbGwuIFlvdSBtYXkgY3VzdG9taXplIGl0LCBjaGFuZ2UgaXQncyBwcm9wZXJ0aWVzLCBsaWtlIGNob2ljZXMgb3IgdmlzaWJsZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93VmFsdWVgIC0gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHJvdy4gVG8gYWNjZXNzIGEgcGFydGljdWxhciBjb2x1bW4ncyB2YWx1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcm93LCB1c2U6IGBvcHRpb25zLnJvd1ZhbHVlW1wiY29sdW1uVmFsdWVcIl1gLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5gIC0gdGhlIG1hdHJpeCBjb2x1bW4gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Um93QWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q2VsbENyZWF0ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBmb3IgZXZlcnkgY2VsbCBhZnRlciBpcyBoYXMgYmVlbiByZW5kZXJlZCBpbiBET00uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxgIC0gdGhlIG1hdHJpeCBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsUXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uL2VkaXRvciBpbiB0aGUgY2VsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBgY2VsbFF1ZXN0aW9uYCBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbmAgLSB0aGUgbWF0cml4IGNvbHVtbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIEBzZWUgb25NYXRyaXhDZWxsQ3JlYXRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhBZnRlckNlbGxSZW5kZXI6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGNlbGwgdmFsdWUgaXMgY2hhbmdlZCBpbiBNYXRyaXggRHluYW1pYyBhbmQgTWF0cml4IERyb3Bkb3duIHF1ZXN0aW9ucy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uTmFtZWAgLSB0aGUgbWF0cml4IGNvbHVtbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZ2V0Q2VsbFF1ZXN0aW9uKGNvbHVtbk5hbWUpYCAtIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNlbGwgcXVlc3Rpb24gYnkgY29sdW1uIG5hbWUuXG4gICAqIEBzZWUgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2luZ1xuICAgKiBAc2VlIG9uTWF0cml4QmVmb3JlUm93QWRkZWRcbiAgICogQHNlZSBvbk1hdHJpeFJvd0FkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjaGFuZ2luZyBjZWxsIHZhbHVlIGluIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zLiBZb3UgbWF5IGNoYW5nZSB0aGUgYG9wdGlvbnMudmFsdWVgIHByb3BlcnR5IHRvIGNoYW5nZSBhIGNlbGwgdmFsdWUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbk5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLm9sZFZhbHVlYCAtIHRoZSBvbGQgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmdldENlbGxRdWVzdGlvbihjb2x1bW5OYW1lKWAgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2VsbCBxdWVzdGlvbiBieSBjb2x1bW4gbmFtZS5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWRcbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2luZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMgdmFsaWRhdGUgdGhlIGNlbGwgdmFsdWUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yYCAtIGFuIGVycm9yIHN0cmluZy4gSXQgaXMgZW1wdHkgYnkgZGVmYXVsdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uTmFtZWAgLSB0aGUgbWF0cml4IGNvbHVtbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIGNlbGwgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmdldENlbGxRdWVzdGlvbihjb2x1bW5OYW1lKWAgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjZWxsIHF1ZXN0aW9uIGJ5IGNvbHVtbiBuYW1lLlxuICAgKiBAc2VlIG9uTWF0cml4QmVmb3JlUm93QWRkZWRcbiAgICogQHNlZSBvbk1hdHJpeFJvd0FkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeENlbGxWYWxpZGF0ZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIG5ldyBwYW5lbCBpbiBQYW5lbCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHBhbmVsIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhbiBhZGRlZCBwYW5lbC5cbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wYW5lbHNcbiAgICovXG4gIHB1YmxpYyBvbkR5bmFtaWNQYW5lbEFkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gcmVtb3ZpbmcgYSBwYW5lbCBmcm9tIFBhbmVsIER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcGFuZWwgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsSW5kZXhgIC0gYSByZW1vdmVkIHBhbmVsIGluZGV4LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIHJlbW92ZWQgcGFuZWwuXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucGFuZWxzXG4gICAqL1xuICBwdWJsaWMgb25EeW5hbWljUGFuZWxSZW1vdmVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgZXZlcnkgc2Vjb25kIGlmIHRoZSBtZXRob2QgYHN0YXJ0VGltZXJgIGhhcyBiZWVuIGNhbGxlZC5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgdGltZVNwZW50XG4gICAqIEBzZWUgUGFnZS50aW1lU3BlbnRcbiAgICovXG4gIHB1YmxpYyBvblRpbWVyOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgZGlzcGxheWluZyBhIG5ldyBpbmZvcm1hdGlvbiBpbiB0aGUgVGltZXIgUGFuZWwuIFVzZSBpdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGV4dGAgLSB0aGUgdGltZXIgcGFuZWwgaW5mbyB0ZXh0LlxuICAgKi9cbiAgcHVibGljIG9uVGltZXJQYW5lbEluZm9UZXh0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiBpdGVtIHZhbHVlIGlzIGNoYW5nZWQgaW4gUGFuZWwgRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIHBhbmVsIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSB0aGUgZHluYW1pYyBwYW5lbCBpdGVtLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBpdGVtIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pdGVtSW5kZXhgIC0gdGhlIHBhbmVsIGl0ZW0gaW5kZXguXG4gICAqIDxici8+IGBvcHRpb25zLml0ZW1WYWx1ZWAgLSB0aGUgcGFuZWwgaXRlbSBvYmplY3QuXG4gICAqIEBzZWUgb25EeW5hbWljUGFuZWxBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGRlZmluZSwgd2hldGhlciBhbiBhbnN3ZXIgdG8gYSBxdWVzdGlvbiBpcyBjb3JyZWN0IG9yIG5vdC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvbiB3aGljaCB5b3UgaGF2ZSB0byBkZWNpZGUgaWYgdGhlIGFuc3dlciBpcyBjb3JyZWN0IG9yIG5vdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucmVzdWx0YCAtIHJldHVybnMgYHRydWVgLCBpZiBhbiBhbnN3ZXIgaXMgY29ycmVjdCwgb3IgYGZhbHNlYCwgaWYgdGhlIGFuc3dlciBpcyBub3QgY29ycmVjdC4gVXNlIHF1ZXN0aW9ucycgYHZhbHVlYCBhbmQgYGNvcnJlY3RBbnN3ZXJgIHByb3BlcnRpZXMgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb3JyZWN0QW5zd2Vyc2AgLSB5b3UgbWF5IGNoYW5nZSB0aGUgZGVmYXVsdCBudW1iZXIgb2YgY29ycmVjdCBvciBpbmNvcnJlY3QgYW5zd2VycyBpbiB0aGUgcXVlc3Rpb24sIGZvciBleGFtcGxlIGZvciBtYXRyaXgsIHdoZXJlIGVhY2ggcm93IGlzIGEgcXVpeiBxdWVzdGlvbi5cbiAgICogQHNlZSBRdWVzdGlvbi52YWx1ZVxuICAgKiBAc2VlIFF1ZXN0aW9uLmNvcnJlY3RBbnN3ZXJcbiAgICovXG4gIHB1YmxpYyBvbklzQW5zd2VyQ29ycmVjdDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY29udHJvbCBkcmFnJmRyb3Agb3BlcmF0aW9ucyBkdXJpbmcgZGVzaWduIG1vZGUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93YCAtIHNldCBpdCB0byBgZmFsc2VgIHRvIGRpc2FibGUgZHJhZ2dpbmcuXG4gICAqIDxici8+IGBvcHRpb25zLnRhcmdldGAgLSBhIHRhcmdldCBlbGVtZW50IHRoYXQgaXMgZHJhZ2dlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc291cmNlYCAtIGEgc291cmNlIGVsZW1lbnQuIEl0IGNhbiBiZSBgbnVsbGAsIGlmIGl0IGlzIGEgbmV3IGVsZW1lbnQsIGRyYWdnaW5nIGZyb20gdG9vbGJveC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFyZW50YCAtIGEgcGFnZSBvciBwYW5lbCB3aGVyZSB0YXJnZXQgZWxlbWVudCBpcyBkcmFnZ2luZy5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5zZXJ0QmVmb3JlYCAtIGFuIGVsZW1lbnQgYmVmb3JlIHRoZSB0YXJnZXQgZWxlbWVudCBpcyBkcmFnZ2luZy4gSXQgY2FuIGJlIGBudWxsYCBpZiBwYXJlbnQgY29udGFpbmVyIChwYWdlIG9yIHBhbmVsKSBpcyBlbXB0eSBvciBkcmFnZ2luZyBhbiBlbGVtZW50IGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQgaW4gYSBjb250YWluZXIuXG4gICAqIDxici8+IGBvcHRpb25zLmluc2VydEFmdGVyYCAtIGFuIGVsZW1lbnQgYWZ0ZXIgdGhlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLiBJdCBjYW4gYmUgYG51bGxgIGlmIHBhcmVudCBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpIGlzIGVtcHR5IG9yIGRyYWdnaW5nIGVsZW1lbnQgdG8gdGhlIGZpcnN0IHBvc2l0aW9uIHdpdGhpbiB0aGUgcGFyZW50IGNvbnRhaW5lci5cbiAgICogQHNlZSBzZXREZXNpZ25Nb2RlXG4gICAqIEBzZWUgaXNEZXNpZ25Nb2RlXG4gICAqL1xuICBwdWJsaWMgb25EcmFnRHJvcEFsbG93OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNvbnRyb2wgc2Nyb2xsaW5nIGVsZW1lbnQgdG8gdG9wLiBZb3UgY2FuIGNhbmNlbCB0aGUgZGVmYXVsdCBiZWhhdmlvciBieSBzZXR0aW5nIG9wdGlvbnMuY2FuY2VsIHByb3BlcnR5IHRvIHRydWUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmVsZW1lbnRgIC0gYW4gZWxlbWVudCB0aGF0IGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRvcC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB0aGF0IGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRvcC4gSXQgY2FuIGJlIG51bGwgaWYgb3B0aW9ucy5wYWdlIGlzIG5vdCBudWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSB0aGF0IGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRvcC4gSXQgY2FuIGJlIG51bGwgaWYgb3B0aW9ucy5xdWVzdGlvbiBpcyBub3QgbnVsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudElkYCAtIHRoZSB1bmlxdWUgZWxlbWVudCBET00gSWQuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbmNlbGAgLSBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGNhbmNlbCB0aGUgZGVmYXVsdCBzY3JvbGxpbmcuXG4gICAqL1xuICBwdWJsaWMgb25TY3JvbGxpbmdFbGVtZW50VG9Ub3A6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcblxuICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkRXZlbnQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcblxuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY3JlYXRlL2N1c3RvbWl6ZSBhY3Rpb25zIHRvIGJlIGRpc3BsYXllZCBpbiBhIHF1ZXN0aW9uJ3MgdGl0bGUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBbU3VydmV5XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1TdXJ2ZXlNb2RlbCkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBBIFtRdWVzdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9UXVlc3Rpb24pIG9iamVjdCBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbkJhckl0ZW1dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb25CYXJJdGVtKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBxdWVzdGlvbi5cbiAgICogQHNlZSBJQWN0aW9uQmFySXRlbVxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25HZXRRdWVzdGlvblRpdGxlQWN0aW9uczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY3JlYXRlL2N1c3RvbWl6ZSBhY3Rpb25zIHRvIGJlIGRpc3BsYXllZCBpbiBhIHBhbmVsJ3MgdGl0bGUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBBIHBhbmVsIChbUGFuZWxNb2RlbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cGFuZWxtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbkJhckl0ZW1dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb25CYXJJdGVtKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBwYW5lbC5cbiAgICogQHNlZSBJQWN0aW9uQmFySXRlbVxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbkdldFBhbmVsVGl0bGVBY3Rpb25zOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjcmVhdGUvY3VzdG9taXplIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIGEgcGFnZSdzIHRpdGxlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBBIHBhZ2UgKFtQYWdlTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXBhZ2Vtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbkJhckl0ZW1dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb25CYXJJdGVtKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBwYWdlLlxuICAgKiBAc2VlIElBY3Rpb25CYXJJdGVtXG4gICAqIEBzZWUgUGFnZU1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25HZXRQYWdlVGl0bGVBY3Rpb25zOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjcmVhdGUvY3VzdG9taXplIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIGEgbWF0cml4IHF1ZXN0aW9uJ3Mgcm93LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gQSBtYXRyaXggcXVlc3Rpb24gKFtRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25tYXRyaXhiYXNlbW9kZWwpIG9iamVjdCkgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIEEgbWF0cml4IHJvdyBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbkJhckl0ZW1dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb25CYXJJdGVtKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBtYXRyaXggcXVlc3Rpb24gYW5kIHJvdy5cbiAgICogQHNlZSBJQWN0aW9uQmFySXRlbVxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcbiAgICovXG4gIHB1YmxpYyBvbkdldE1hdHJpeFJvd0FjdGlvbnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgc3VydmV5IGVsZW1lbnQgY29udGVudCB3YXMgY29sbGFwc2VkIG9yIGV4cGFuZGVkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFNwZWNpZmllcyB3aGljaCBzdXJ2ZXkgZWxlbWVudCBjb250ZW50IHdhcyBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuXG4gICAqIEBzZWUgb25FbGVtZW50Q29udGVudFZpc2liaWxpdHlDaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgb25FbGVtZW50Q29udGVudFZpc2liaWxpdHlDaGFuZ2VkOiBFdmVudEJhc2U8XG4gICAgU3VydmV5TW9kZWxcbiAgPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlcnJvcnMgb24gbG9hZGluZyBzdXJ2ZXkgSlNPTi4gSWYgdGhlIGxpc3QgaXMgZW1wdHkgYWZ0ZXIgbG9hZGluZyBhIEpTT04sIHRoZW4gdGhlIEpTT04gaXMgY29ycmVjdCBhbmQgaGFzIG5vIGVycm9ycy5cbiAgICogQHNlZSBKc29uRXJyb3JcbiAgICovXG4gIHB1YmxpYyBqc29uRXJyb3JzOiBBcnJheTxKc29uRXJyb3I+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBTdXJ2ZXlNb2RlbC5zdHlsZXNNYW5hZ2VyID0gbmV3IFN0eWxlc01hbmFnZXIoKTtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibG9nb1wiLCB0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEJlZm9yZUh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxvYWRpbmdIdG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFnZU5leHRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInByZXZpZXdUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJlZGl0VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcbiAgICAgIFwicGFnZXNcIixcbiAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZG9PblBhZ2VBZGRlZCh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kb09uUGFnZVJlbW92ZWQodmFsdWUpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInRyaWdnZXJzXCIsICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICB2YWx1ZS5zZXRPd25lcih0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiY2FsY3VsYXRlZFZhbHVlc1wiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUuc2V0T3duZXIodGhpcyk7XG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIiwgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMub25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIm1vZGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInByb2dyZXNzQmFyVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiLCBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgIH07XG4gICAgdGhpcy5vblByb2dyZXNzVGV4dC5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH07XG4gICAgdGhpcy5vblRleHRNYXJrZG93bi5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcbiAgICBpZiAoanNvbk9iaikge1xuICAgICAgaWYgKHR5cGVvZiBqc29uT2JqID09PSBcInN0cmluZ1wiIHx8IGpzb25PYmogaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAganNvbk9iaiA9IEpTT04ucGFyc2UoanNvbk9iaiBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKGpzb25PYmogJiYganNvbk9iai5jbGllbnRJZCkge1xuICAgICAgICB0aGlzLmNsaWVudElkID0ganNvbk9iai5jbGllbnRJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXlJZCkge1xuICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkLCB0aGlzLmNsaWVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIpIHtcbiAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBwYWdlcyBpbiB0aGUgc3VydmV5LCBpbmNsdWRpbmcgaW52aXNpYmxlIHBhZ2VzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgKiBAc2VlIHZpc2libGVQYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFnZXNcIik7XG4gIH1cbiAgcHVibGljIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNzcztcbiAgfVxuICBwcml2YXRlIGNzc1ZhbHVlOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIGlmICghdGhpcy5jc3NWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NWYWx1ZSA9IHt9O1xuICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3Nlcyh0aGlzLmNzc1ZhbHVlLCBzdXJ2ZXlDc3MuZ2V0Q3NzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jc3NWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKGZhbHNlKTtcbiAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uQ29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLmNvbXBsZXRlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2aWV3KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5wcmV2aWV3XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25FZGl0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5lZGl0XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25QcmV2KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5wcmV2XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24uc3RhcnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbk5leHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLm5leHRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY29tcGxldGVkQ3NzKCkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICByZXR1cm4gY3NzLmJvZHkgKyBcIiBcIiArIGNzcy5jb21wbGV0ZWRQYWdlO1xuICB9XG4gIHByaXZhdGUgZ2V0TmF2aWdhdGlvbkNzcyhtYWluOiBzdHJpbmcsIGJ0bjogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1haW4pIHJlcyA9IG1haW47XG4gICAgaWYgKGJ0bikgcmVzICs9IFwiIFwiICsgYnRuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBsYXp5UmVuZGVyaW5nVmFsdWU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIGlmIHRoZXkgYXJlIHZpc2libGUgb3Igbm90LlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxhenlSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGF6eVJlbmRlcmluZ1ZhbHVlID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgbGF6eVJlbmRlcmluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxhenlSZW5kZXJpbmdWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTGF6eVJlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXp5UmVuZGVyaW5nIHx8IHNldHRpbmdzLmxhenlSb3dzUmVuZGVyaW5nO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaXN0IG9mIHRyaWdnZXJzIGluIHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgU3VydmV5VHJpZ2dlclxuICAgKi9cbiAgcHVibGljIGdldCB0cmlnZ2VycygpOiBBcnJheTxTdXJ2ZXlUcmlnZ2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRyaWdnZXJzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdHJpZ2dlcnModmFsOiBBcnJheTxTdXJ2ZXlUcmlnZ2VyPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRyaWdnZXJzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGxpc3Qgb2YgY2FsY3VsYXRlZCB2YWx1ZXMgaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBDYWxjdWxhdGVkVmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFZhbHVlcygpOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2FsY3VsYXRlZFZhbHVlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNhbGN1bGF0ZWRWYWx1ZXModmFsOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2FsY3VsYXRlZFZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gaWRlbnRpZmllciBvZiBhIHN1cnZleSBtb2RlbCBsb2FkZWQgZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuIFdoZW4gc3BlY2lmaWVkLCB0aGUgc3VydmV5IEpTT04gaXMgYXV0b21hdGljYWxseSBsb2FkZWQgZnJvbSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHNlZSBsb2FkU3VydmV5RnJvbVNlcnZpY2VcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN1cnZleUlkXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VydmV5SWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlJZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gaWRlbnRpZmllciBvZiBhIHN1cnZleSBtb2RlbCBzYXZlZCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuIFdoZW4gc3BlY2lmaWVkLCB0aGUgc3VydmV5IGRhdGEgaXMgYXV0b21hdGljYWxseSBzYXZlZCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgb25Db21wbGV0ZVxuICAgKiBAc2VlIHN1cnZleVNob3dEYXRhU2F2aW5nXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleVBvc3RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlQb3N0SWRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdXJ2ZXlQb3N0SWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlQb3N0SWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHVzZXIncyBpZGVudGlmaWVyIChlLmcuLCBlLW1haWwgb3IgdW5pcXVlIGN1c3RvbWVyIGlkKSBpbiB5b3VyIHdlYiBhcHBsaWNhdGlvbi5cbiAgICogSWYgeW91IGxvYWQgc3VydmV5IG9yIHBvc3Qgc3VydmV5IHJlc3VsdHMgZnJvbS90byBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSwgdGhlbiB0aGUgbGlicmFyeSBkbyBub3QgYWxsb3cgdXNlcnMgdG8gcnVuIHRoZSBzYW1lIHN1cnZleSB0aGUgc2Vjb25kIHRpbWUuXG4gICAqIE9uIHRoZSBzZWNvbmQgcnVuLCB0aGUgdXNlciB3aWxsIHNlZSB0aGUgc3VydmV5IGNvbXBsZXRlIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsaWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsaWVudElkXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xpZW50SWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGllbnRJZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBjb29raWUgbmFtZSB1c2VkIHRvIHNhdmUgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGVtcHR5LCBiZWZvcmUgc3RhcnRpbmcgdGhlIHN1cnZleSwgdGhlIFN1cnZleSBsaWJyYXJ5IGNoZWNrcyBpZiB0aGUgY29va2llIHdpdGggdGhpcyBuYW1lIGV4aXN0cy5cbiAgICogSWYgaXQgaXMgYHRydWVgLCB0aGUgc3VydmV5IGdvZXMgdG8gY29tcGxldGUgbW9kZSBhbmQgYSB1c2VyIHNlZXMgdGhlIHN1cnZleSBjb21wbGV0ZSBwYWdlLiBPbiBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkgdGhlIGNvb2tpZSB3aXRoIHRoaXMgbmFtZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjb29raWVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvb2tpZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb29raWVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29va2llTmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBzYXZlIHN1cnZleSByZXN1bHRzIG9uIGNvbXBsZXRpbmcgZXZlcnkgcGFnZS4gSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBgb25QYXJ0aWFsU2VuZGAgZXZlbnQgaXMgZmlyZWQuXG4gICAqIEBzZWUgb25QYXJ0aWFsU2VuZFxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbmRSZXN1bHRPblBhZ2VOZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZW5kUmVzdWx0T25QYWdlTmV4dFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzZW5kUmVzdWx0T25QYWdlTmV4dCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZW5kUmVzdWx0T25QYWdlTmV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBzaG93IHRoZSBwcm9ncmVzcyBvbiBzYXZpbmcvc2VuZGluZyBkYXRhIGludG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXlTaG93RGF0YVNhdmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5U2hvd0RhdGFTYXZpbmdcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VydmV5U2hvd0RhdGFTYXZpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5U2hvd0RhdGFTYXZpbmdcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIGZpcnN0IGlucHV0IGlzIGZvY3VzZWQgb24gc2hvd2luZyBhIG5leHQgb3IgYSBwcmV2aW91cyBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIGZpcnN0IGlucHV0IGlzIGZvY3VzZWQgaWYgdGhlIGN1cnJlbnQgcGFnZSBoYXMgZXJyb3JzLlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgICh0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWApIGlmIHlvdSBkbyBub3Qgd2FudCB0byBicmluZyB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgaGFzIGVycm9yIG9uIHRoZSBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBmb2N1c09uRmlyc3RFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNPbkZpcnN0RXJyb3JcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBmb2N1c09uRmlyc3RFcnJvcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmb2N1c09uRmlyc3RFcnJvclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG5hdmlnYXRpb24gYnV0dG9ucyBwb3NpdGlvbi5cbiAgICogUG9zc2libGUgdmFsdWVzOiAnYm90dG9tJyAoZGVmYXVsdCksICd0b3AnLCAnYm90aCcgYW5kICdub25lJy4gU2V0IGl0IHRvICdub25lJyB0byBoaWRlICdQcmV2JywgJ05leHQnIGFuZCAnQ29tcGxldGUnIGJ1dHRvbnMuXG4gICAqIEl0IG1ha2VzIHNlbnNlIGlmIHlvdSBhcmUgZ29pbmcgdG8gY3JlYXRlIGEgY3VzdG9tIG5hdmlnYXRpb24sIGhhdmUgb25seSBhIHNpbmdsZSBwYWdlLCBvciB0aGUgYGdvTmV4dFBhZ2VBdXRvbWF0aWNgIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAuXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKiBAc2VlIHNob3dQcmV2QnV0dG9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dOYXZpZ2F0aW9uQnV0dG9ucygpOiBzdHJpbmcgfCBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TmF2aWdhdGlvbkJ1dHRvbnModmFsOiBzdHJpbmcgfCBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWwgPSBcImJvdHRvbVwiO1xuICAgIH1cbiAgICBpZiAodmFsID09PSBmYWxzZSkge1xuICAgICAgdmFsID0gXCJub25lXCI7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgU3VydmV5IGRpc3BsYXlzIFwiUHJldlwiIGJ1dHRvbiBpbiBpdHMgcGFnZXMuIFNldCBpdCB0byBgZmFsc2VgIHRvIHByZXZlbnQgZW5kLXVzZXJzIGZyb20gZ29pbmcgYmFjayB0byB0aGVpciBhbnN3ZXJzLlxuICAgKiBAc2VlIHNob3dOYXZpZ2F0aW9uQnV0dG9uc1xuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJldkJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZCdXR0b25cIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJldkJ1dHRvbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldkJ1dHRvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgU3VydmV5IGRpc3BsYXlzIHN1cnZleSB0aXRsZSBpbiBpdHMgcGFnZXMuIFNldCBpdCB0byBgZmFsc2VgIHRvIGhpZGUgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGl0bGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGl0bGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpdGxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBTdXJ2ZXkgZGlzcGxheXMgcGFnZSB0aXRsZXMuIFNldCBpdCB0byBgZmFsc2VgIHRvIGhpZGUgcGFnZSB0aXRsZXMuXG4gICAqIEBzZWUgUGFnZU1vZGVsLnRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQYWdlVGl0bGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZVRpdGxlc1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQYWdlVGl0bGVzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlVGl0bGVzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIE9uIGZpbmlzaGluZyB0aGUgc3VydmV5IHRoZSBjb21wbGV0ZSBwYWdlIGlzIHNob3duLiBTZXQgdGhlIHByb3BlcnR5IHRvIGBmYWxzZWAsIHRvIGhpZGUgdGhlIGNvbXBsZXRlIHBhZ2UuXG4gICAqIEBzZWUgZGF0YVxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dDb21wbGV0ZWRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tcGxldGVkUGFnZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dDb21wbGV0ZWRQYWdlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dDb21wbGV0ZWRQYWdlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGEgdXJsIHlvdSB3YW50IHRvIG5hdmlnYXRlIGFmdGVyIGEgdXNlciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkuXG4gICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBhZnRlciBjYWxsaW5nIG9uQ29tcGxldGUgZXZlbnQuIEluIGNhc2UgY2FsbGluZyBvcHRpb25zLnNob3dEYXRhU2F2aW5nIGNhbGxiYWNrIGluIG9uQ29tcGxldGUgZXZlbnQsIG5hdmlnYXRlVG9Vcmwgd2lsbCBiZSB1c2VkIG9uIGNhbGxpbmcgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3MgY2FsbGJhY2suXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hdmlnYXRlVG9VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRlVG9VcmwodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGxpc3Qgb2YgVVJMIGNvbmRpdGlvbiBpdGVtcy4gSWYgdGhlIGV4cHJlc3Npb24gb2YgdGhpcyBpdGVtIHJldHVybnMgYHRydWVgLCB0aGVuIHN1cnZleSB3aWxsIG5hdmlnYXRlIHRvIHRoZSBpdGVtIFVSTC5cbiAgICogQHNlZSBVcmxDb25kaXRpb25JdGVtXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgKi9cbiAgcHVibGljIGdldCBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb24oKTogQXJyYXk8VXJsQ29uZGl0aW9uSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb24odmFsOiBBcnJheTxVcmxDb25kaXRpb25JdGVtPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblwiLCB2YWwpO1xuICB9XG5cbiAgcHVibGljIGdldE5hdmlnYXRlVG9VcmwoKTogc3RyaW5nIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0RXhwcmVzc2lvbkl0ZW1PblJ1bkNvbmRpdGlvbihcbiAgICAgIHRoaXMubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXG4gICAgKTtcbiAgICB2YXIgdXJsID0gISFpdGVtID8gKDxVcmxDb25kaXRpb25JdGVtPml0ZW0pLnVybCA6IHRoaXMubmF2aWdhdGVUb1VybDtcbiAgICBpZiAoISF1cmwpIHtcbiAgICAgIHVybCA9IHRoaXMucHJvY2Vzc1RleHQodXJsLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwcml2YXRlIG5hdmlnYXRlVG8oKSB7XG4gICAgdmFyIHVybCA9IHRoaXMuZ2V0TmF2aWdhdGVUb1VybCgpO1xuICAgIHZhciBvcHRpb25zID0geyB1cmw6IHVybCB9O1xuICAgIHRoaXMub25OYXZpZ2F0ZVRvVXJsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnVybCB8fCB0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cubG9jYXRpb24pXG4gICAgICByZXR1cm47XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBvcHRpb25zLnVybDtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSByZXF1aXJlZCBxdWVzdGlvbiBtYXJrLiBUaGUgcmVxdWlyZWQgcXVlc3Rpb24gbWFyayBpcyBhIGNoYXIgb3Igc3RyaW5nIHRoYXQgaXMgcmVuZGVyZWQgaW4gdGhlIHJlcXVpcmVkIHF1ZXN0aW9ucycgdGl0bGVzLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZFRleHRcIiwgXCIqXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRUZXh0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIGhpZGUgYWxsIHJlcXVpcmVkIGVycm9ycy5cbiAgICovXG4gIHB1YmxpYyBoaWRlUmVxdWlyZWRFcnJvcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYmVmb3JlU2V0dGluZ1F1ZXN0aW9uRXJyb3JzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5tYWFrZVJlcXVpcmVkRXJyb3JzSW52aXNpYmdsZShlcnJvcnMpO1xuICAgIHRoaXMub25TZXR0aW5nUXVlc3Rpb25FcnJvcnMuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICB9KTtcbiAgfVxuICBiZWZvcmVTZXR0aW5nUGFuZWxFcnJvcnMocXVlc3Rpb246IElQYW5lbCwgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pOiB2b2lkIHtcbiAgICB0aGlzLm1hYWtlUmVxdWlyZWRFcnJvcnNJbnZpc2liZ2xlKGVycm9ycyk7XG4gIH1cbiAgcHJpdmF0ZSBtYWFrZVJlcXVpcmVkRXJyb3JzSW52aXNpYmdsZShlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikge1xuICAgIGlmICghdGhpcy5oaWRlUmVxdWlyZWRFcnJvcnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVyVHlwZSA9IGVycm9yc1tpXS5nZXRFcnJvclR5cGUoKTtcbiAgICAgIGlmIChlclR5cGUgPT0gXCJyZXF1aXJlZFwiIHx8IGVyVHlwZSA9PSBcInJlcXVpcmVvbmVhbnN3ZXJcIikge1xuICAgICAgICBlcnJvcnNbaV0udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBmaXJzdCBxdWVzdGlvbiBpbmRleC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4IGlzICcxJyBieSBkZWZhdWx0LiBZb3UgbWF5IHN0YXJ0IGl0IGZyb20gJzEwMCcgb3IgZnJvbSAnQScsIGJ5IHNldHRpbmcgJzEwMCcgb3IgJ0EnIHRvIHRoaXMgcHJvcGVydHkuXG4gICAqIFlvdSBjYW4gc2V0IHRoZSBzdGFydCBpbmRleCB0byBcIigxKVwiIG9yIFwiIyBBKVwiIG9yIFwiYSlcIiB0byByZW5kZXIgcXVlc3Rpb24gbnVtYmVyIGFzICgxKSwgIyBBKSBhbmQgYSkgYWNjb3JkaW5nbHkuXG4gICAqIEBzZWUgUXVlc3Rpb24udGl0bGVcbiAgICogQHNlZSByZXF1aXJlZFRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25TdGFydEluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uU3RhcnRJbmRleCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgXCJPdGhlcnNcIiBvcHRpb24gdGV4dCBpcyBzdG9yZWQgYXMgcXVlc3Rpb24gY29tbWVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCB0aGUgZW50ZXJlZCB0ZXh0IGluIHRoZSBcIk90aGVyc1wiIGlucHV0IGluIHRoZSBjaGVja2JveC9yYWRpb2dyb3VwL2Ryb3Bkb3duIGlzIHN0b3JlZCBhcyBgXCJxdWVzdGlvbiBuYW1lIFwiICsgXCItQ29tbWVudFwiYC4gVGhlIHZhbHVlIGl0c2VsZiBpcyBgXCJxdWVzdGlvbiBuYW1lXCI6IFwib3RoZXJzXCJgLlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgLCB0byBzdG9yZSB0aGUgZW50ZXJlZCB0ZXh0IGRpcmVjdGx5IGluIHRoZSBgXCJxdWVzdGlvbiBuYW1lXCJgIGtleS5cbiAgICogQHNlZSBjb21tZW50UHJlZml4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0b3JlT3RoZXJzQXNDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0b3JlT3RoZXJzQXNDb21tZW50KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aCBmb3IgcXVlc3Rpb25zIGxpa2UgdGV4dCBhbmQgY29tbWVudCwgaW5jbHVkaW5nIG1hdHJpeCBjZWxsIHF1ZXN0aW9ucy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDBgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIHRleHQgYW5kIGNvbW1lbnQgaGF2ZSB0aGUgc2FtZSBtYXggbGVuZ3RoIGFzIHRoZSBzdGFuZGFyZCBIVE1MIGlucHV0IC0gNTI0Mjg4IGNoYXJhY3RlcnM6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vdGFncy9hdHRfaW5wdXRfbWF4bGVuZ3RoLmFzcC5cbiAgICogQHNlZSBtYXhPdGhlcnNMZW5ndGhcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGV4dExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhUZXh0TGVuZ3RoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGV4dExlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRleHRMZW5ndGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoIGZvciBxdWVzdGlvbiBjb21tZW50cyBhbmQgb3RoZXJzXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwYCwgdGhhdCBtZWFucyB0aGF0IHRoZSBxdWVzdGlvbiBjb21tZW50cyBoYXZlIHRoZSBzYW1lIG1heCBsZW5ndGggYXMgdGhlIHN0YW5kYXJkIEhUTUwgaW5wdXQgLSA1MjQyODggY2hhcmFjdGVyczogaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2F0dF9pbnB1dF9tYXhsZW5ndGguYXNwLlxuICAgKiBAc2VlIFF1ZXN0aW9uLmhhc0NvbW1lbnRcbiAgICogQHNlZSBRdWVzdGlvbi5oYXNPdGhlclxuICAgKiBAc2VlIG1heFRleHRMZW5ndGhcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4T3RoZXJzTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heE90aGVyc0xlbmd0aFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heE90aGVyc0xlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heE90aGVyc0xlbmd0aFwiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2VzIHdoZXRoZXIgYSB1c2VyIGNhbiBuYXZpZ2F0ZSB0aGUgbmV4dCBwYWdlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgYW5zd2VyaW5nIGFsbCB0aGUgcXVlc3Rpb25zIG9uIGEgcGFnZSB3aXRob3V0IHByZXNzaW5nIHRoZSBcIk5leHRcIiBidXR0b24uXG4gICAqIFRoZSBhdmFpbGFibGUgb3B0aW9uczpcbiAgICpcbiAgICogLSBgdHJ1ZWAgLSBuYXZpZ2F0ZSB0aGUgbmV4dCBwYWdlIGFuZCBzdWJtaXQgc3VydmV5IGRhdGEgYXV0b21hdGljYWxseS5cbiAgICogLSBgYXV0b2dvbmV4dGAgLSBuYXZpZ2F0ZSB0aGUgbmV4dCBwYWdlIGF1dG9tYXRpY2FsbHkgYnV0IGRvIG5vdCBzdWJtaXQgc3VydmV5IGRhdGEuXG4gICAqIC0gYGZhbHNlYCAtIGRvIG5vdCBuYXZpZ2F0ZSB0aGUgbmV4dCBwYWdlIGFuZCBkbyBub3Qgc3VibWl0IHN1cnZleSBkYXRhIGF1dG9tYXRpY2FsbHkuXG4gICAqIEBzZWUgc2hvd05hdmlnYXRpb25CdXR0b25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdvTmV4dFBhZ2VBdXRvbWF0aWMoKTogYm9vbGVhbiB8IFwiYXV0b2dvbmV4dFwiIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBnb05leHRQYWdlQXV0b21hdGljKHZhbDogYm9vbGVhbiB8IFwiYXV0b2dvbmV4dFwiKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciBhIHN1cnZleSBpcyBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlZCB3aGVuIGBnb05leHRQYWdlQXV0b21hdGljID0gdHJ1ZWAuIFNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzdWJtaXQgc3VydmV5IGF1dG9tYXRpY2FsbHkgb24gY29tcGxldGluZyB0aGUgbGFzdCBzdXJ2ZXkgcGFnZS5cbiAgICogQHNlZSBnb05leHRQYWdlQXV0b21hdGljXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBzdXJ2ZXkgdmFsaWRhdGVzIHRoZSBxdWVzdGlvbiBhbnN3ZXJzLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgb25OZXh0UGFnZWAgKGRlZmF1bHQpIC0gY2hlY2sgZXJyb3JzIG9uIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgcGFnZSBvciBvbiBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkuXG4gICAqIC0gYG9uVmFsdWVDaGFuZ2VkYCAtIGNoZWNrIGVycm9ycyBvbiBldmVyeSBxdWVzdGlvbiB2YWx1ZSAoaS5lLiwgYW5zd2VyKSBjaGFuZ2luZy5cbiAgICogLSBgb25WYWx1ZUNoYW5naW5nYCAtIGNoZWNrIGVycm9ycyBiZWZvcmUgc2V0dGluZyB2YWx1ZSBpbnRvIHN1cnZleS4gSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZW4gc3VydmV5IGRhdGEgaXMgbm90IGNoYW5nZWQsIGJ1dCBxdWVzdGlvbiB2YWx1ZSB3aWxsIGJlIGtlZXBlZC5cbiAgICogLSBgb25Db21wbGV0ZWAgLSB0byB2YWxpZGF0ZSBhbGwgdmlzaWJsZSBxdWVzdGlvbnMgb24gY29tcGxldGUgYnV0dG9uIGNsaWNrLiBJZiB0aGVyZSBhcmUgZXJyb3JzIG9uIHByZXZpb3VzIHBhZ2VzLCB0aGVuIHRoZSBwYWdlIHdpdGggdGhlIGZpcnN0IGVycm9yIGJlY29tZXMgdGhlIGN1cnJlbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoZWNrRXJyb3JzTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaGVja0Vycm9yc01vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaGVja0Vycm9yc01vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaGVja0Vycm9yc01vZGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBzdXJ2ZXkgdXBkYXRlcyBpdHMgcXVlc3Rpb25zJyB0ZXh0IHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uQmx1cmAgKGRlZmF1bHQpIC0gdGhlIHZhbHVlIGlzIHVwZGF0ZWQgYWZ0ZXIgYW4gaW5wdXQgbG9zZXMgdGhlIGZvY3VzLlxuICAgKiAtIGBvblR5cGluZ2AgLSB1cGRhdGUgdGhlIHZhbHVlIG9mIHRleHQgcXVlc3Rpb25zLCBcInRleHRcIiBhbmQgXCJjb21tZW50XCIsIG9uIGV2ZXJ5IGtleSBwcmVzcy5cbiAgICpcbiAgICogTm90ZSwgdGhhdCBzZXR0aW5nIHRvIFwib25UeXBpbmdcIiBtYXkgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBpbiBjYXNlIHlvdSBoYXZlIG1hbnkgZXhwcmVzc2lvbnMgaW4gdGhlIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGV4dFVwZGF0ZU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGV4dFVwZGF0ZU1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0VXBkYXRlTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgaW52aXNpYmxlIGRhdGEgaXMgaW5jbHVkZWQgaW4gc3VydmV5IGRhdGEuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBub25lYCAtIGluY2x1ZGUgdGhlIGludmlzaWJsZSB2YWx1ZXMgaW50byB0aGUgc3VydmV5IGRhdGEuXG4gICAqIC0gYG9uSGlkZGVuYCAtIGNsZWFyIHRoZSBxdWVzdGlvbiB2YWx1ZSB3aGVuIGl0IGJlY29tZXMgaW52aXNpYmxlLiBJZiBhIHF1ZXN0aW9uIGhhcyB2YWx1ZSBhbmQgaXQgd2FzIGludmlzaWJsZSBpbml0aWFsbHkgdGhlbiBzdXJ2ZXkgY2xlYXJzIHRoZSB2YWx1ZSBvbiBjb21wbGV0aW5nLlxuICAgKiAtIGBvbkhpZGRlbkNvbnRhaW5lcmAgLSBjbGVhciB0aGUgcXVlc3Rpb24gdmFsdWUgd2hlbiBpdCBvciBpdHMgcGFyZW50IChwYWdlIG9yIHBhbmVsKSBiZWNvbWVzIGludmlzaWJsZS4gSWYgYSBxdWVzdGlvbiBoYXMgdmFsdWUgYW5kIGl0IHdhcyBpbnZpc2libGUgaW5pdGlhbGx5IHRoZW4gc3VydmV5IGNsZWFycyB0aGUgdmFsdWUgb24gY29tcGxldGluZy5cbiAgICogLSBgb25Db21wbGV0ZWAgKGRlZmF1bHQpIC0gY2xlYXIgaW52aXNpYmxlIHF1ZXN0aW9uIHZhbHVlcyBvbiBzdXJ2ZXkgY29tcGxldGUuIEluIHRoaXMgY2FzZSwgdGhlIGludmlzaWJsZSBxdWVzdGlvbnMgd2lsbCBub3QgYmUgc3RvcmVkIG9uIHRoZSBzZXJ2ZXIuXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJsZVxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2xlYXJJbnZpc2libGVWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjbGVhckludmlzaWJsZVZhbHVlcyh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHZhbCA9IFwib25Db21wbGV0ZVwiO1xuICAgIGlmICh2YWwgPT09IGZhbHNlKSB2YWwgPSBcIm5vbmVcIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCBxdWVzdGlvbiB2YWx1ZXMgZnJvbSB0aGUgc3VydmV5LCB0aGF0IGVuZC11c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gZW50ZXIuXG4gICAqIEZvciBleGFtcGxlIHRoZSB2YWx1ZSB0aGF0IGRvZXNuJ3QgZXhpc3RzIGluIGEgcmFkaW9ncm91cC9kcm9wZG93bi9jaGVja2JveCBjaG9pY2VzIG9yIG1hdHJpeCByb3dzL2NvbHVtbnMuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2xlYXIgdmFsdWVzIGZvciBpbnZpc2libGUgcXVlc3Rpb25zIG9yIHZhbHVlcyB0aGF0IGRvZXNuJ3QgYXNzb2NpYXRlZCB3aXRoIHF1ZXN0aW9ucy5cbiAgICogSW4gZmFjdCB0aGlzIGZ1bmN0aW9uIGp1c3QgY2FsbCBjbGVhckluY29ycmVjdFZhbHVlcyBmdW5jdGlvbiBvZiBhbGwgcXVlc3Rpb25zIGluIHRoZSBzdXJ2ZXlcbiAgICogQHBhcmFtIHJlbW92ZU5vbkV4aXNpbmdSb290S2V5cyAtIHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlIHRvIHJlbW92ZSBrZXlzIGZyb20gc3VydmV5LmRhdGEgdGhhdCBkb2Vzbid0IGhhdmUgY29ycmVzcG9uZGVkIHF1ZXN0aW9ucyBhbmQgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICogQHNlZSBRdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlc1xuICAgKiBAc2VlIFBhZ2UuY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICogQHNlZSBQYW5lbC5jbGVhckluY29ycmVjdFZhbHVlc1xuICAgKi9cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKHJlbW92ZU5vbkV4aXNpbmdSb290S2V5czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICAgIGlmICghcmVtb3ZlTm9uRXhpc2luZ1Jvb3RLZXlzKSByZXR1cm47XG4gICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdmFyIGhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgaWYgKCEhdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgoa2V5LCBzZXR0aW5ncy5jb21tZW50UHJlZml4KSB8fFxuICAgICAgICB0aGlzLmlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgoa2V5LCBzZXR0aW5ncy5tYXRyaXhUb3RhbFZhbHVlUG9zdEZpeClcbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YXIgY2FsY1ZhbHVlID0gdGhpcy5nZXRDYWxjdWxhdGVkVmFsdWVCeU5hbWUoa2V5KTtcbiAgICAgIGlmICghIWNhbGNWYWx1ZSAmJiBjYWxjVmFsdWUuaW5jbHVkZUludG9SZXN1bHQpIGNvbnRpbnVlO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgIH1cbiAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHBvc3RQcmVmaXg6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAoa2V5LmluZGV4T2YocG9zdFByZWZpeCkgIT09IGtleS5sZW5ndGggLSBwb3N0UHJlZml4Lmxlbmd0aClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISF0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoXG4gICAgICBrZXkuc3Vic3RyKDAsIGtleS5pbmRleE9mKHBvc3RQcmVmaXgpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBzdXJ2ZXkgbG9jYWxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpdCBpcyBlbXB0eSwgdGhpcyBtZWFucyB0aGUgJ2VuJyBsb2NhbGUgaXMgdXNlZC5cbiAgICogWW91IGNhbiBzZXQgaXQgdG8gJ2RlJyAtIEdlcm1hbiwgJ2ZyJyAtIEZyZW5jaCBhbmQgc28gb24uIFRoZSBsaWJyYXJ5IGhhcyBidWlsdC1pbiBsb2NhbGl6YXRpb24gZm9yIHNldmVyYWwgbGFuZ3VhZ2VzLiBUaGUgbGlicmFyeSBoYXMgYSBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0IGFzIHdlbGwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uY3VycmVudExvY2FsZSA9IHZhbHVlO1xuICAgIHRoaXMubG9jYWxlVmFsdWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uY3VycmVudExvY2FsZTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJsb2NhbGVcIiwgdGhpcy5sb2NhbGVWYWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgdGhpcy5vbkxvY2FsZUNoYW5nZWRFdmVudC5maXJlKHRoaXMsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBsb2NhbGVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHN1cnZleSdzIHRyYW5zbGF0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldFVzZWRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciBsb2NzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICB0aGlzLmFkZFVzZWRMb2NhbGVzKGxvY3MpO1xuICAgIC8vUmVwbGFjZSB0aGUgZGVmYXVsdCBsb2NhbGUgd2l0aCB0aGUgcmVhbCBvbmVcbiAgICB2YXIgaW5kZXggPSBsb2NzLmluZGV4T2YoXCJkZWZhdWx0XCIpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB2YXIgZGVmYXVsdExvYyA9IHN1cnZleUxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlO1xuICAgICAgLy9SZW1vdmUgdGhlIGRlZmF1bHRMb2NcbiAgICAgIHZhciBkZWZJbmRleCA9IGxvY3MuaW5kZXhPZihkZWZhdWx0TG9jKTtcbiAgICAgIGlmIChkZWZJbmRleCA+IC0xKSB7XG4gICAgICAgIGxvY3Muc3BsaWNlKGRlZkluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGluZGV4ID0gbG9jcy5pbmRleE9mKFwiZGVmYXVsdFwiKTtcbiAgICAgIGxvY3NbaW5kZXhdID0gZGVmYXVsdExvYztcbiAgICB9XG4gICAgcmV0dXJuIGxvY3M7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmxvY2FsZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgLy9JTG9jYWxpemFibGVPd25lclxuICBnZXRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIC8vRG8gbm90IHNldCBjdXJyZW50IHBhZ2UgaWYgaXQgaXMgbm90IHNldCB5ZXQuXG4gICAgLy9BdCBmaXJzdCB3ZSBkbyBub3QgbmVlZCB0aGlzLCBhdCBzZWNvbmQgaXQgY3JlYXRlcyBpc3N1ZXMgd2l0aCBWdWUgQ0xJIHByb2plY3RzXG4gICAgLy9Nb3JlIGluZm9ybWF0aW9uIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXJ2ZXlqcy9zdXJ2ZXktbGlicmFyeS9pc3N1ZXMvMjU5OVxuICAgIGlmICghdGhpcy5jdXJyZW50UGFnZVZhbHVlKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICB2YXIgcGFnZSA9IHRoaXMuYWN0aXZlUGFnZTtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBwYWdlLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5TWFya2Rvd25IdG1sKHRoaXMsIHRleHQsIG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlckZvclN0cmluZyhlbGVtZW50OiBCYXNlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlbmRlckFzID0gdGhpcy5nZXRCdWlsdEluUmVuZGVyZXJGb3JTdHJpbmcoZWxlbWVudCwgbmFtZSk7XG4gICAgdmFyIG9wdGlvbnMgPSB7IGVsZW1lbnQ6IGVsZW1lbnQsIG5hbWU6IG5hbWUsIHJlbmRlckFzOiByZW5kZXJBcyB9O1xuICAgIHRoaXMub25UZXh0UmVuZGVyQXMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5yZW5kZXJBcztcbiAgfVxuICBwcml2YXRlIGdldEJ1aWx0SW5SZW5kZXJlckZvclN0cmluZyhlbGVtZW50OiBCYXNlLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXI7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCB0cnVlKTtcbiAgfVxuICBnZXRMb2NTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpO1xuICB9XG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHRleHQ6IHRleHQsXG4gICAgICBuYW1lOiBlcnJvci5nZXRFcnJvclR5cGUoKSxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xuICAgIHRoaXMub25FcnJvckN1c3RvbVRleHQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gdGhlcmUgYXJlIG5vIGFueSB2aXNpYmxlIHBhZ2VzIGFuZCBxdWVzdGlvbmEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVtcHR5U3VydmV5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcImVtcHR5U3VydmV5XCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgZGVzY3JpcHRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidGl0bGVcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBkZXNjcmlwdGlvbi4gVGhlIHN1cnZleSBkZXNjcmlwdGlvbiBpcyBkaXNwbGF5ZWQgdW5kZXIgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImRlc2NyaXB0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ28oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nbyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9nbygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsb2dvXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRTaXplKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlICsgXCJweFwiO1xuICAgIH1cbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGxhc3RTeW1ib2wgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIG51bSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgIHJldHVybiBcIlwiICsgbnVtICsgXCJweFwiO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgc3VydmV5IGxvZ28gd2lkdGguXG4gICAqIEBzZWUgbG9nb1xuICAgKi9cbiAgcHVibGljIGdldCBsb2dvV2lkdGgoKTogYW55IHtcbiAgICB2YXIgd2lkdGggPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJsb2dvV2lkdGhcIik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZSh3aWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvV2lkdGgodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIGhlaWdodC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29IZWlnaHQoKTogYW55IHtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiKTtcbiAgICByZXR1cm4gdGhpcy5nZXRTaXplKGhlaWdodCk7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvSGVpZ2h0KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJsb2dvSGVpZ2h0XCIsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgc3VydmV5IGxvZ28gcG9zaXRpb24uXG4gICAqIEBzZWUgbG9nb1xuICAgKi9cbiAgcHVibGljIGdldCBsb2dvUG9zaXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1Bvc2l0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb1Bvc2l0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJsb2dvUG9zaXRpb25cIiwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzTG9nbygpIHtcbiAgICByZXR1cm4gISF0aGlzLmxvZ28gJiYgdGhpcy5sb2dvUG9zaXRpb24gIT09IFwibm9uZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNMb2dvQmVmb3JlKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc0xvZ28gJiZcbiAgICAgICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwidG9wXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0FmdGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc0xvZ28gJiZcbiAgICAgICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJyaWdodFwiIHx8IHRoaXMubG9nb1Bvc2l0aW9uID09PSBcImJvdHRvbVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBsb2dvQ2xhc3NOYW1lcygpOiBzdHJpbmcge1xuICAgIHZhciBsb2dvQ2xhc3NlczogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbGVmdDogXCJzdi1sb2dvLS1sZWZ0XCIsXG4gICAgICByaWdodDogXCJzdi1sb2dvLS1yaWdodFwiLFxuICAgICAgdG9wOiBcInN2LWxvZ28tLXRvcFwiLFxuICAgICAgYm90dG9tOiBcInN2LWxvZ28tLWJvdHRvbVwiLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY3NzLmxvZ28gKyBcIiBcIiArIGxvZ29DbGFzc2VzW3RoaXMubG9nb1Bvc2l0aW9uXTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxvZ28gZml0IG1vZGUuXG4gICAqIEBzZWUgbG9nb1xuICAgKi9cbiAgcHVibGljIGdldCBsb2dvRml0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29GaXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0ZpdFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgX2lzTW9iaWxlID0gZmFsc2U7XG4gIHB1YmxpYyBzZXRJc01vYmlsZShuZXdWYWwgPSB0cnVlKSB7XG4gICAgdGhpcy5faXNNb2JpbGUgPSBuZXdWYWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIGlzTW9iaWxlKCkgfHwgdGhpcy5faXNNb2JpbGU7XG4gIH1cbiAgcHVibGljIGdldCB0aXRsZU1heFdpZHRoKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlICYmICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmxvZ28pKSB7XG4gICAgICB2YXIgbG9nb1dpZHRoID0gdGhpcy5sb2dvV2lkdGg7XG4gICAgICBpZiAodGhpcy5sb2dvUG9zaXRpb24gPT09IFwibGVmdFwiIHx8IHRoaXMubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgcmV0dXJuIFwiY2FsYygxMDAlIC0gNXB4IC0gMmVtIC0gXCIgKyBsb2dvV2lkdGggKyBcIilcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgSFRNTCBjb250ZW50IGRpc3BsYXllZCBvbiB0aGUgY29tcGxldGUgcGFnZS4gVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvbXBsZXRlIHBhZ2UgdGV4dC5cbiAgICogQHNlZSBzaG93Q29tcGxldGVkUGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkSHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlZEh0bWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkSHRtbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0NvbXBsZXRlZEh0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVkSHRtbFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgSFRNTCBjb25kaXRpb24gaXRlbXMuIElmIHRoZSBleHByZXNzaW9uIG9mIHRoaXMgaXRlbSByZXR1cm5zIGB0cnVlYCwgdGhlbiBhIHN1cnZleSB3aWxsIHVzZSB0aGlzIGl0ZW0gSFRNTCBpbnN0ZWFkIG9mIGBjb21wbGV0ZWRIdG1sYC5cbiAgICogQHNlZSBIdG1sQ29uZGl0aW9uSXRlbVxuICAgKiBAc2VlIGNvbXBsZXRlSHRtbFxuICAgKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZWRIdG1sT25Db25kaXRpb24oKTogQXJyYXk8SHRtbENvbmRpdGlvbkl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uKHZhbDogQXJyYXk8SHRtbENvbmRpdGlvbkl0ZW0+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYSBnaXZlbiBleHByZXNzaW9uIGFuZCByZXR1cm5zIGEgcmVzdWx0IHZhbHVlLlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvblxuICAgKi9cbiAgcHVibGljIHJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWV4cHJlc3Npb24pIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblJ1bm5lcihleHByZXNzaW9uKS5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhIGdpdmVuIGV4cHJlc3Npb24gYW5kIHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAuXG4gICAqIEBwYXJhbSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgcnVuQ29uZGl0aW9uKGV4cHJlc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uUnVubmVyKGV4cHJlc3Npb24pLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIC8qKlxuICAgKiBSdW4gYWxsIHRyaWdnZXJzIHRoYXQgcGVyZm9ybXMgb24gdmFsdWUgY2hhbmdlZCBhbmQgbm90IG9uIG1vdmluZyB0byB0aGUgbmV4dCBwYWdlLlxuICAgKi9cbiAgcHVibGljIHJ1blRyaWdnZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tUcmlnZ2Vycyh0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCksIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkQ29tcGxldGVkSHRtbCgpOiBzdHJpbmcge1xuICAgIHZhciBpdGVtID0gdGhpcy5nZXRFeHByZXNzaW9uSXRlbU9uUnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5jb21wbGV0ZWRIdG1sT25Db25kaXRpb25cbiAgICApO1xuICAgIHJldHVybiAhIWl0ZW0gPyAoPEh0bWxDb25kaXRpb25JdGVtPml0ZW0pLmh0bWwgOiB0aGlzLmNvbXBsZXRlZEh0bWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRFeHByZXNzaW9uSXRlbU9uUnVuQ29uZGl0aW9uKFxuICAgIGl0ZW1zOiBBcnJheTxFeHByZXNzaW9uSXRlbT5cbiAgKTogRXhwcmVzc2lvbkl0ZW0ge1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpKSB7XG4gICAgICAgIHJldHVybiBpdGVtc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEhUTUwgY29udGVudCBkaXNwbGF5ZWQgdG8gYW4gZW5kIHVzZXIgdGhhdCBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhlIHN1cnZleS5cbiAgICogQHNlZSBjbGllbnRJZFxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZWRCZWZvcmVIdG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkQmVmb3JlSHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlZEJlZm9yZUh0bWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkQmVmb3JlSHRtbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0NvbXBsZXRlZEJlZm9yZUh0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVkQmVmb3JlSHRtbFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIEhUTUwgdGhhdCBzaG93cyBvbiBsb2FkaW5nIHN1cnZleSBKc29uIGZyb20gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAc2VlIHN1cnZleUlkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvYWRpbmdIdG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9hZGluZ0h0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBsb2FkaW5nSHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2FkaW5nSHRtbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0xvYWRpbmdIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImxvYWRpbmdIdG1sXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlICdTdGFydCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIFRoZSAnU3RhcnQnIGJ1dHRvbiBpcyBzaG93biBvbiB0aGUgc3RhcnRlZCBwYWdlLiBTZXQgdGhlIGBmaXJzdFBhZ2VJc1N0YXJ0ZWRgIHByb3BlcnR5IHRvIGB0cnVlYCwgdG8gZGlzcGxheSB0aGUgc3RhcnRlZCBwYWdlLlxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBzdGFydFN1cnZleVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInN0YXJ0U3VydmV5VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RhcnRTdXJ2ZXlUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInN0YXJ0U3VydmV5VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1N0YXJ0U3VydmV5VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgJ1ByZXYnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlUHJldlRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhZ2VQcmV2VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJwYWdlUHJldlRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFnZVByZXZUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhZ2VQcmV2VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1BhZ2VQcmV2VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYWdlUHJldlRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgJ05leHQnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlTmV4dFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhZ2VOZXh0VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJwYWdlTmV4dFRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFnZU5leHRUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhZ2VOZXh0VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1BhZ2VOZXh0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYWdlTmV4dFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqICBHZXRzIG9yIHNldHMgdGhlICdDb21wbGV0ZScgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29tcGxldGVUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcImNvbXBsZXRlVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0ZVRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIEdldHMgb3Igc2V0cyB0aGUgJ1ByZXZpZXcnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBAc2VlIGxvY2FsZVxuICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICogQHNlZSBlZGl0VGV4dFxuICAgKiBAc2VlIHNob3dQcmV2aWV3XG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZXZpZXdUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwcmV2aWV3VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJwcmV2aWV3VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwcmV2aWV3VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwcmV2aWV3VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1ByZXZpZXdUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInByZXZpZXdUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgR2V0cyBvciBzZXRzIHRoZSAnRWRpdCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgY2FuY2VsUHJldmlld1xuICAgKi9cbiAgcHVibGljIGdldCBlZGl0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiZWRpdFRleHRcIixcbiAgICAgIHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWRpdFRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgZWRpdFRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZWRpdFRleHRcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGdldCBsb2NFZGl0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJlZGl0VGV4dFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBhdHRlcm4gZm9yIHF1ZXN0aW9uIHRpdGxlLiBEZWZhdWx0IGlzIFwibnVtVGl0bGVSZXF1aXJlXCIsIDEuIFdoYXQgaXMgeW91ciBuYW1lPyAqLFxuICAgKiBZb3UgY2FuIHNldCBpdCB0byBudW1SZXF1aXJlVGl0bGU6IDEuICogV2hhdCBpcyB5b3VyIG5hbWU/XG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvIHJlcXVpcmVOdW1UaXRsZTogKiAxLiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogWW91IGNhbiBzZXQgaXQgdG8gbnVtVGl0bGUgKHJlbW92ZSByZXF1aXJlIHN5bWJvbCBjb21wbGV0ZWx5KTogMS4gV2hhdCBpcyB5b3VyIG5hbWU/XG4gICAqIEBzZWUgUXVlc3Rpb25Nb2RlbC50aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvblRpdGxlUGF0dGVybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlUGF0dGVyblwiLCBcIm51bVRpdGxlUmVxdWlyZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVQYXR0ZXJuKHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdmFsICE9PSBcIm51bVJlcXVpcmVUaXRsZVwiICYmXG4gICAgICB2YWwgIT09IFwicmVxdWlyZU51bVRpdGxlXCIgJiZcbiAgICAgIHZhbCAhPSBcIm51bVRpdGxlXCJcbiAgICApIHtcbiAgICAgIHZhbCA9IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsIHZhbCk7XG4gIH1cbiAgZ2V0UXVlc3Rpb25UaXRsZVBhdHRlcm5PcHRpb25zKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0TG9jU3RyaW5nKFwicXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0XCIpO1xuICAgIHZhciBudW0gPSAhIXRoaXMucXVlc3Rpb25TdGFydEluZGV4ID8gdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggOiBcIjEuXCI7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwibnVtVGl0bGVSZXF1aXJlXCIsXG4gICAgICB0ZXh0OiBudW0gKyBcIiBcIiArIHRpdGxlICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dCxcbiAgICB9KTtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1SZXF1aXJlVGl0bGVcIixcbiAgICAgIHRleHQ6IG51bSArIFwiIFwiICsgdGhpcy5yZXF1aXJlZFRleHQgKyBcIiBcIiArIHRpdGxlLFxuICAgIH0pO1xuICAgIHJlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiBcInJlcXVpcmVOdW1UaXRsZVwiLFxuICAgICAgdGV4dDogdGhpcy5yZXF1aXJlZFRleHQgKyBcIiBcIiArIG51bSArIFwiIFwiICsgdGl0bGUsXG4gICAgfSk7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwibnVtVGl0bGVcIixcbiAgICAgIHRleHQ6IG51bSArIFwiIFwiICsgdGl0bGUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgcXVlc3Rpb24gdGl0bGUgdGVtcGxhdGUuIE9ic29sZXRlLCBwbGVhc2UgdXNlIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuXG4gICAqIEBzZWUgUXVlc3Rpb25Nb2RlbC50aXRsZVxuICAgKiBAc2VlIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIiwgdmFsdWUpO1xuICAgIHRoaXMucXVlc3Rpb25UaXRsZVBhdHRlcm4gPSB0aGlzLmdldE5ld1RpdGxlUGF0dGVybih2YWx1ZSk7XG4gICAgdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggPSB0aGlzLmdldE5ld1F1ZXN0aW9uVGl0bGVFbGVtZW50KFxuICAgICAgdmFsdWUsXG4gICAgICBcIm5vXCIsXG4gICAgICB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCxcbiAgICAgIFwiMVwiXG4gICAgKTtcbiAgICB0aGlzLnJlcXVpcmVkVGV4dCA9IHRoaXMuZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQoXG4gICAgICB2YWx1ZSxcbiAgICAgIFwicmVxdWlyZVwiLFxuICAgICAgdGhpcy5yZXF1aXJlZFRleHQsXG4gICAgICBcIipcIlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdUaXRsZVBhdHRlcm4odGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGVtcGxhdGUpIHtcbiAgICAgIHZhciBzdHJzID0gW107XG4gICAgICB3aGlsZSAodGVtcGxhdGUuaW5kZXhPZihcIntcIikgPiAtMSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cih0ZW1wbGF0ZS5pbmRleE9mKFwie1wiKSArIDEpO1xuICAgICAgICB2YXIgaW5kID0gdGVtcGxhdGUuaW5kZXhPZihcIn1cIik7XG4gICAgICAgIGlmIChpbmQgPCAwKSBicmVhaztcbiAgICAgICAgc3Rycy5wdXNoKHRlbXBsYXRlLnN1YnN0cigwLCBpbmQpKTtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5zdWJzdHIoaW5kICsgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3Rycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChzdHJzWzBdID09IFwicmVxdWlyZVwiKSByZXR1cm4gXCJyZXF1aXJlTnVtVGl0bGVcIjtcbiAgICAgICAgaWYgKHN0cnNbMV0gPT0gXCJyZXF1aXJlXCIgJiYgc3Rycy5sZW5ndGggPT0gMykgcmV0dXJuIFwibnVtUmVxdWlyZVRpdGxlXCI7XG4gICAgICAgIGlmIChzdHJzLmluZGV4T2YoXCJyZXF1aXJlXCIpIDwgMCkgcmV0dXJuIFwibnVtVGl0bGVcIjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJzLmxlbmd0aCA9PSAxICYmIHN0cnNbMF0gPT0gXCJ0aXRsZVwiKSB7XG4gICAgICAgIHJldHVybiBcIm51bVRpdGxlXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQoXG4gICAgdGVtcGxhdGU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY3VycmVudFZhbHVlOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBuYW1lID0gXCJ7XCIgKyBuYW1lICsgXCJ9XCI7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCB0ZW1wbGF0ZS5pbmRleE9mKG5hbWUpIDwgMCkgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB2YXIgaW5kID0gdGVtcGxhdGUuaW5kZXhPZihuYW1lKTtcbiAgICB2YXIgcHJlZml4ID0gXCJcIjtcbiAgICB2YXIgcG9zdGZpeCA9IFwiXCI7XG4gICAgdmFyIGkgPSBpbmQgLSAxO1xuICAgIGZvciAoOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRlbXBsYXRlW2ldID09IFwifVwiKSBicmVhaztcbiAgICB9XG4gICAgaWYgKGkgPCBpbmQgLSAxKSB7XG4gICAgICBwcmVmaXggPSB0ZW1wbGF0ZS5zdWJzdHIoaSArIDEsIGluZCAtIGkgLSAxKTtcbiAgICB9XG4gICAgaW5kICs9IG5hbWUubGVuZ3RoO1xuICAgIGkgPSBpbmQ7XG4gICAgZm9yICg7IGkgPCB0ZW1wbGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRlbXBsYXRlW2ldID09IFwie1wiKSBicmVhaztcbiAgICB9XG4gICAgaWYgKGkgPiBpbmQpIHtcbiAgICAgIHBvc3RmaXggPSB0ZW1wbGF0ZS5zdWJzdHIoaW5kLCBpIC0gaW5kKTtcbiAgICB9XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBwcmVmaXgubGVuZ3RoICYmIHByZWZpeC5jaGFyQ29kZUF0KGkpIDwgMzMpIGkrKztcbiAgICBwcmVmaXggPSBwcmVmaXguc3Vic3RyKGkpO1xuICAgIGkgPSBwb3N0Zml4Lmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKGkgPj0gMCAmJiBwb3N0Zml4LmNoYXJDb2RlQXQoaSkgPCAzMykgaS0tO1xuICAgIHBvc3RmaXggPSBwb3N0Zml4LnN1YnN0cigwLCBpICsgMSk7XG4gICAgaWYgKCFwcmVmaXggJiYgIXBvc3RmaXgpIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgdmFyIHZhbHVlID0gISFjdXJyZW50VmFsdWUgPyBjdXJyZW50VmFsdWUgOiBkZWZhdWx0VmFsdWU7XG4gICAgcmV0dXJuIHByZWZpeCArIHZhbHVlICsgcG9zdGZpeDtcbiAgfVxuICBnZXQgbG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiKTtcbiAgfVxuICBnZXRVcGRhdGVkUXVlc3Rpb25UaXRsZShxdWVzdGlvbjogSVF1ZXN0aW9uLCB0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uVGl0bGUuaXNFbXB0eSkgcmV0dXJuIHRpdGxlO1xuICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogcXVlc3Rpb24sIHRpdGxlOiB0aXRsZSB9O1xuICAgIHRoaXMub25HZXRRdWVzdGlvblRpdGxlLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGU7XG4gIH1cbiAgZ2V0VXBkYXRlZFF1ZXN0aW9uTm8ocXVlc3Rpb246IElRdWVzdGlvbiwgbm86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMub25HZXRRdWVzdGlvbk5vLmlzRW1wdHkpIHJldHVybiBubztcbiAgICB2YXIgb3B0aW9ucyA9IHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBubzogbm8gfTtcbiAgICB0aGlzLm9uR2V0UXVlc3Rpb25Oby5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLm5vO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgc3VydmV5IGRpc3BsYXlzIHBhZ2UgbnVtYmVycyBvbiBwYWdlcyB0aXRsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQYWdlTnVtYmVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1BhZ2VOdW1iZXJzXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQYWdlTnVtYmVycyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5zaG93UGFnZU51bWJlcnMpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZU51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBxdWVzdGlvbiBudW1iZXJzIGFyZSBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBvbmAgLSBkaXNwbGF5IHF1ZXN0aW9uIG51bWJlcnNcbiAgICogLSBgb25wYWdlYCAtIGRpc3BsYXkgcXVlc3Rpb24gbnVtYmVycywgc3RhcnQgbnVtYmVyaW5nIG9uIGV2ZXJ5IHBhZ2VcbiAgICogLSBgb2ZmYCAtIHR1cm4gb2ZmIHRoZSBudW1iZXJpbmcgZm9yIHF1ZXN0aW9ucyB0aXRsZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1F1ZXN0aW9uTnVtYmVycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1F1ZXN0aW9uTnVtYmVycyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwib25wYWdlXCIgPyBcIm9uUGFnZVwiIDogdmFsdWU7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc3VydmV5IHByb2dyZXNzIGJhciBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9mZmAgKGRlZmF1bHQpIC0gZG9uJ3Qgc2hvdyBwcm9ncmVzcyBiYXJcbiAgICogLSBgdG9wYCAtIHNob3cgcHJvZ3Jlc3MgYmFyIGluIHRoZSB0b3BcbiAgICogLSBgYm90dG9tYCAtIHNob3cgcHJvZ3Jlc3MgYmFyIGluIHRoZSBib3R0b21cbiAgICogLSBgYm90aGAgLSBzaG93IHByb2dyZXNzIGJhciBpbiBib3RoIHNpZGVzOiB0b3AgYW5kIGJvdHRvbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1Byb2dyZXNzQmFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQcm9ncmVzc0JhclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQcm9ncmVzc0JhcihuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIsIG5ld1ZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHR5cGUgb2YgaW5mbyBpbiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgcGFnZXNgIChkZWZhdWx0KSxcbiAgICogLSBgcXVlc3Rpb25zYCxcbiAgICogLSBgcmVxdWlyZWRRdWVzdGlvbnNgLFxuICAgKiAtIGBjb3JyZWN0UXVlc3Rpb25zYCxcbiAgICogLSBgYnV0dG9uc2BcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NCYXJUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzQmFyVHlwZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByb2dyZXNzQmFyVHlwZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5ld1ZhbHVlID09PSBcImNvcnJlY3RxdWVzdGlvblwiKSBuZXdWYWx1ZSA9IFwiY29ycmVjdFF1ZXN0aW9uXCI7XG4gICAgaWYgKG5ld1ZhbHVlID09PSBcInJlcXVpcmVkcXVlc3Rpb25cIikgbmV3VmFsdWUgPSBcInJlcXVpcmVkUXVlc3Rpb25cIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc0JhclR5cGVcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJvZ3Jlc3NCYXJPblRvcCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuU2hvd1Byb3Jlc0JhcigpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcInRvcFwiIHx8IHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdGhcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhblNob3dQcm9yZXNCYXIoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnNob3dQcm9ncmVzc0JhciA9PT0gXCJib3R0b21cIiB8fCB0aGlzLnNob3dQcm9ncmVzc0JhciA9PT0gXCJib3RoXCI7XG4gIH1cbiAgcHJpdmF0ZSBjYW5TaG93UHJvcmVzQmFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc1Nob3dpbmdQcmV2aWV3IHx8XG4gICAgICB0aGlzLnNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgIT0gXCJzaG93QWxsUXVlc3Rpb25zXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0L0hUTUwgdGhhdCBpcyByZW5kZXJlZCBhcyBhIHN1cnZleSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgYm90dG9tYCAtIHNob3cgYSBxdWVzdGlvbiB0aXRsZSB0byBib3R0b21cbiAgICogLSBgbGVmdGAgLSBzaG93IGEgcXVlc3Rpb24gdGl0bGUgdG8gbGVmdFxuICAgKiAtIGB0b3BgIC0gc2hvdyBhIHF1ZXN0aW9uIHRpdGxlIHRvIHRvcC5cbiAgICpcbiAgICogPiBTb21lIHF1ZXN0aW9ucywgZm9yIGV4YW1wbGUgbWF0cml4ZXMsIGRvIG5vdCBzdXBwb3J0ICdsZWZ0JyB2YWx1ZS4gVGhlIHRpdGxlIGZvciB0aGVtIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB0b3AuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyh0cnVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUVsZW1lbnRDc3MocmVOZXc/OiBib29sZWFuKSB7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFnZXNbaV0udXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGVycm9yIG1lc3NhZ2UgcG9zaXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGB0b3BgIC0gdG8gc2hvdyBxdWVzdGlvbiBlcnJvcihzKSBvdmVyIHRoZSBxdWVzdGlvbixcbiAgICogLSBgYm90dG9tYCAtIHRvIHNob3cgcXVlc3Rpb24gZXJyb3IocykgdW5kZXIgdGhlIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25FcnJvckxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIiwgdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gZGVzY3JpcHRpb24gcG9zaXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB1bmRlclRpdGxlYC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHVuZGVyVGl0bGVgIC0gc2hvdyBxdWVzdGlvbiBkZXNjcmlwdGlvbiB1bmRlciB0aGUgcXVlc3Rpb24gdGl0bGUsXG4gICAqIC0gYHVuZGVySW5wdXRgIC0gc2hvdyBxdWVzdGlvbiBkZXNjcmlwdGlvbiB1bmRlciB0aGUgcXVlc3Rpb24gaW5wdXQgaW5zdGVhZCBvZiBxdWVzdGlvbiB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBzdXJ2ZXkgZWRpdCBtb2RlLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgZWRpdGAgKGRlZmF1bHQpIC0gbWFrZSBhIHN1cnZleSBlZGl0YWJsZSxcbiAgICogLSBgZGlzcGxheWAgLSBtYWtlIGEgc3VydmV5IHJlYWQtb25seS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLm1vZGUpIHJldHVybjtcbiAgICBpZiAodmFsdWUgIT0gXCJlZGl0XCIgJiYgdmFsdWUgIT0gXCJkaXNwbGF5XCIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtb2RlXCIsIHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIG9uTW9kZUNoYW5nZWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICBwYWdlLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlYWRPbmx5XCIsIHBhZ2UuaXNSZWFkT25seSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gb2JqZWN0IHRoYXQgc3RvcmVzIHRoZSBzdXJ2ZXkgcmVzdWx0cy9kYXRhLiBZb3UgY2FuIHNldCBpdCBkaXJlY3RseSBhcyBgeyAncXVlc3Rpb24gbmFtZSc6IHF1ZXN0aW9uVmFsdWUsIC4uLiB9YFxuICAgKlxuICAgKiA+IElmIHlvdSBzZXQgdGhlIGBkYXRhYCBwcm9wZXJ0eSBhZnRlciBjcmVhdGluZyB0aGUgc3VydmV5LCB5b3UgbWF5IG5lZWQgdG8gc2V0IHRoZSBgY3VycmVudFBhZ2VOb2AgdG8gYDBgLCBpZiB5b3UgYXJlIHVzaW5nIGB2aXNpYmxlSWZgIHByb3BlcnRpZXMgZm9yIHF1ZXN0aW9ucy9wYWdlcy9wYW5lbHMgdG8gZW5zdXJlIHRoYXQgeW91IGFyZSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBwYWdlLlxuICAgKiBAc2VlIHNldFZhbHVlXG4gICAqIEBzZWUgZ2V0VmFsdWVcbiAgICogQHNlZSBtZXJnZURhdGFcbiAgICogQHNlZSBjdXJyZW50UGFnZU5vXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgZGF0YVZhbHVlID0gdGhpcy5nZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwga2V5KTtcbiAgICAgIGlmIChkYXRhVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHRba2V5XSA9IGRhdGFWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRDYWxjdWF0ZWRWYWx1ZXNJbnRvUmVzdWx0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXNIYXNoID0ge307XG4gICAgdGhpcy5zZXREYXRhQ29yZShkYXRhKTtcbiAgfVxuICAvKipcbiAgICogTWVyZ2UgdGhlIHZhbHVlcyBpbnRvIHN1cnZleS5kYXRhLiBJdCB3b3JrcyBhcyBzdXJ2ZXkuZGF0YSwgZXhjZXB0IGl0IGRvZXNuJ3QgY2xlYW4gdGhlIGV4aXN0aW5nIGRhdGEsIGJ1dCBvdmVycmlkZXMgdGhlbS5cbiAgICogQHBhcmFtIGRhdGEgZGF0YSB0byBtZXJnZS4gSXQgc2hvdWxkIGJlIGFuIG9iamVjdCB7a2V5VmFsdWU6IFZhbHVlLCAuLi59XG4gICAqIEBzZWUgZGF0YVxuICAgKiBAc2VlIHNldFZhbHVlXG4gICAqL1xuICBwdWJsaWMgbWVyZ2VEYXRhKGRhdGE6IGFueSkge1xuICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0RGF0YUNvcmUoZGF0YSk7XG4gIH1cbiAgcHVibGljIHNldERhdGFDb3JlKGRhdGE6IGFueSkge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICB0aGlzLnNldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXksIGRhdGFba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQWxsUXVlc3Rpb25zVmFsdWUoKTtcbiAgICB0aGlzLm5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCk7XG4gICAgdGhpcy5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChcIlwiKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRpbmdPYmooKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ09ialZhbHVlO1xuICB9XG4gIHByaXZhdGUgb25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkOiAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIHB1YmxpYyBzZXQgZWRpdGluZ09iaih2YWw6IEJhc2UpIHtcbiAgICBpZiAodGhpcy5lZGl0aW5nT2JqID09IHZhbCkgcmV0dXJuO1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikge1xuICAgICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZShcbiAgICAgICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gdmFsO1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBxdWVzdGlvbnNbaV0udW5iaW5kVmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICB0aGlzLnNldERhdGFDb3JlKHt9KTtcbiAgICAgIHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkID0gKHNlbmRlcjogQmFzZSwgb3B0aW9uczogYW55KSA9PiB7XG4gICAgICAgIGlmICghU2VyaWFsaXplci5oYXNPcmlnaW5hbFByb3BlcnR5KHRoaXMuZWRpdGluZ09iaiwgb3B0aW9ucy5uYW1lKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMudXBkYXRlT25TZXRWYWx1ZShvcHRpb25zLm5hbWUsIG9wdGlvbnMubmV3VmFsdWUsIG9wdGlvbnMub2xkVmFsdWUpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZWRpdGluZ09iai5vblByb3BlcnR5Q2hhbmdlZC5hZGQodGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzRWRpdGluZ1N1cnZleUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5lZGl0aW5nT2JqO1xuICB9XG4gIHByaXZhdGUgc2V0Q2FsY3VhdGVkVmFsdWVzSW50b1Jlc3VsdChyZXN1bHQ6IGFueSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FsVmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXNbaV07XG4gICAgICBpZiAoXG4gICAgICAgIGNhbFZhbHVlLmluY2x1ZGVJbnRvUmVzdWx0ICYmXG4gICAgICAgICEhY2FsVmFsdWUubmFtZSAmJlxuICAgICAgICB0aGlzLmdldFZhcmlhYmxlKGNhbFZhbHVlLm5hbWUpICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICByZXN1bHRbY2FsVmFsdWUubmFtZV0gPSB0aGlzLmdldFZhcmlhYmxlKGNhbFZhbHVlLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRBbGxWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHN1cnZleSByZXN1bHQgZGF0YSBhcyBhbiBhcnJheSBvZiBwbGFpbiBvYmplY3RzOiB3aXRoIHF1ZXN0aW9uIGB0aXRsZWAsIGBuYW1lYCwgYHZhbHVlYCwgYW5kIGBkaXNwbGF5VmFsdWVgLlxuICAgKlxuICAgKiBGb3IgY29tcGxleCBxdWVzdGlvbnMgKGxpa2UgbWF0cml4LCBldGMuKSBgaXNOb2RlYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAgYW5kIGRhdGEgY29udGFpbnMgYXJyYXkgb2YgbmVzdGVkIG9iamVjdHMgKHJvd3MpLlxuICAgKlxuICAgKiBTZXQgYG9wdGlvbnMuaW5jbHVkZUVtcHR5YCB0byBgZmFsc2VgIGlmIHlvdSB3YW50IHRvIHNraXAgZW1wdHkgYW5zd2Vycy5cbiAgICovXG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzPzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM6IGZhbHNlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8YW55PiA9IFtdO1xuICAgIHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCkuZm9yRWFjaCgocXVlc3Rpb24pID0+IHtcbiAgICAgIHZhciByZXN1bHRJdGVtID0gKDxRdWVzdGlvbj5xdWVzdGlvbikuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgICAgaWYgKCEhcmVzdWx0SXRlbSkge1xuICAgICAgICByZXN1bHQucHVzaChyZXN1bHRJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFyaWFibGVzSGFzaCkgdmFsdWVzW2tleV0gPSB0aGlzLnZhcmlhYmxlc0hhc2hba2V5XTtcbiAgICB0aGlzLmFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzKTtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YWx1ZXNba2V5XSA9IHRoaXMuZ2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgcHJpdmF0ZSBhZGRDYWxjdWxhdGVkVmFsdWVzSW50b0ZpbHRlcmVkVmFsdWVzKHZhbHVlczoge1xuICAgIFtpbmRleDogc3RyaW5nXTogYW55O1xuICB9KSB7XG4gICAgdmFyIGNhY2xWYWx1ZXMgPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNsVmFsdWVzLmxlbmd0aDsgaSsrKVxuICAgICAgdmFsdWVzW2NhY2xWYWx1ZXNbaV0ubmFtZV0gPSBjYWNsVmFsdWVzW2ldLnZhbHVlO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcyB9O1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVzS2V5cygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZWRpdGluZ09iaikgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzSGFzaCk7XG4gICAgdmFyIHByb3BzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzQnlPYmoodGhpcy5lZGl0aW5nT2JqKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2gocHJvcHNbaV0ubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldERhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iailcbiAgICAgIHJldHVybiBTZXJpYWxpemVyLmdldE9ialByb3BlcnR5VmFsdWUodGhpcy5lZGl0aW5nT2JqLCBrZXkpO1xuICAgIHJldHVybiB2YWx1ZXNIYXNoW2tleV07XG4gIH1cbiAgcHVibGljIHNldERhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikge1xuICAgICAgU2VyaWFsaXplci5zZXRPYmpQcm9wZXJ0eVZhbHVlKHRoaXMuZWRpdGluZ09iaiwga2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlc0hhc2hba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZGVsZXRlRGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICAoPGFueT50aGlzLmVkaXRpbmdPYmopW2tleV0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVzSGFzaFtrZXldO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbGwgY29tbWVudHMgZnJvbSB0aGUgZGF0YS5cbiAgICogQHNlZSBkYXRhXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRzKCk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuY29tbWVudFByZWZpeCkgPiAwKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5nZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwga2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdmlzaWJsZSBwYWdlcy4gSWYgYWxsIHBhZ2VzIGFyZSB2aXNpYmxlLCB0aGVuIHRoaXMgcHJvcGVydHkgcmV0dXJucyB0aGUgc2FtZSBsaXN0IGFzIHRoZSBgcGFnZXNgIHByb3BlcnR5LlxuICAgKiBAc2VlIHBhZ2VzXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2libGVcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVQYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0aGlzLnBhZ2VzO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8UGFnZU1vZGVsPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucGFnZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGNvbnRhaW5zIG5vIHBhZ2VzLiBUaGUgc3VydmV5IGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2VzLmxlbmd0aCA9PSAwO1xuICB9XG4gIC8qKlxuICAgKiBEZXByZWNhdGVkLiBVc2UgdGhlIGBwYWdlQ291bnRgIHByb3BlcnR5IGluc3RlYWQuXG4gICAqL1xuICBnZXQgUGFnZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnZUNvdW50O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdXJ2ZXkgcGFnZSBjb3VudC5cbiAgICogQHNlZSB2aXNpYmxlUGFnZUNvdW50XG4gICAqIEBzZWUgcGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbnVtYmVyIG9mIHZpc2libGUgcGFnZXMgd2l0aGluIHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgcGFnZUNvdW50XG4gICAqIEBzZWUgdmlzaWJsZVBhZ2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVQYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFydGVkIHBhZ2UuIFRoaXMgcHJvcGVydHkgd29ya3MgaWYgdGhlIGBmaXJzdFBhZ2VJc1N0YXJ0ZWRgIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXJ0ZWRQYWdlKCk6IFBhZ2VNb2RlbCB7XG4gICAgdmFyIHBhZ2UgPVxuICAgICAgdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQgJiYgdGhpcy5wYWdlcy5sZW5ndGggPiAwID8gdGhpcy5wYWdlc1swXSA6IG51bGw7XG4gICAgaWYgKCEhcGFnZSkge1xuICAgICAgcGFnZS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgICBwYWdlLnNldFdhc1Nob3duKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IHN1cnZleSBwYWdlLiBJZiBhIHN1cnZleSBpcyByZW5kZXJlZCwgdGhlbiB0aGlzIHByb3BlcnR5IHJldHVybnMgYSBwYWdlIHRoYXQgYSB1c2VyIGNhbiBzZWUvZWRpdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFBhZ2UoKTogYW55IHtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAodlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZVZhbHVlKSA8IDApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLm9uQ29udGFpbnNQYWdlQ2FsbGJhY2sgfHxcbiAgICAgICAgICAhdGhpcy5vbkNvbnRhaW5zUGFnZUNhbGxiYWNrKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBudWxsICYmIHZQYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudFBhZ2UodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIG5ld1BhZ2UgPSB0aGlzLmdldFBhZ2VCeU9iamVjdCh2YWx1ZSk7XG4gICAgaWYgKCEhdmFsdWUgJiYgIW5ld1BhZ2UpIHJldHVybjtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgaWYgKG5ld1BhZ2UgIT0gbnVsbCAmJiB2UGFnZXMuaW5kZXhPZihuZXdQYWdlKSA8IDApIHJldHVybjtcbiAgICBpZiAobmV3UGFnZSA9PSB0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHJldHVybjtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRQYWdlQ2hhbmdpbmcobmV3UGFnZSwgb2xkVmFsdWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlID0gbmV3UGFnZTtcbiAgICBpZiAoISFuZXdQYWdlKSB7XG4gICAgICBuZXdQYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgIG5ld1BhZ2UudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgICAgbmV3UGFnZS5zZXRXYXNTaG93bih0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2VDaGFuZ2VkKG5ld1BhZ2UsIG9sZFZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudFBhZ2UsIHVubGVzcyB0aGUgc3RhcnRlZCBwYWdlIGlzIHNob3dpbmcuIEluIHRoaXMgY2FzZSByZXR1cm5zIHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICogQHNlZSBzdGFydGVkUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBhY3RpdmVQYWdlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdGFydGVkU3RhdGUgJiYgdGhpcy5zdGFydGVkUGFnZVxuICAgICAgPyB0aGlzLnN0YXJ0ZWRQYWdlXG4gICAgICA6IHRoaXMuY3VycmVudFBhZ2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYWdlQnlPYmplY3QodmFsdWU6IGFueSk6IFBhZ2VNb2RlbCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHZhbHVlLmdldFR5cGUgJiYgdmFsdWUuZ2V0VHlwZSgpID09IFwicGFnZVwiKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcbiAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeU5hbWUoU3RyaW5nKHZhbHVlKSk7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhciBpbmRleCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IHZQYWdlcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHZQYWdlc1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgdmlzaWJsZSBwYWdlcyBhcnJheS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFBhZ2VObygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudFBhZ2VObyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdlBhZ2VzLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbdmFsdWVdO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHF1ZXN0aW9uIGRpc3BsYXkgb3JkZXIuIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJhbmRvbWl6ZSBxdWVzdGlvbnMuIFlvdSBjYW4gcmFuZG9taXplIHF1ZXN0aW9ucyBvbiBhIHNwZWNpZmljIHBhZ2UuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGByYW5kb21gIC0gcmFuZG9taXplIHF1ZXN0aW9uc1xuICAgKiAtIGBpbml0aWFsYCAtIGtlZXAgcXVlc3Rpb25zIGluIHRoZSBzYW1lIG9yZGVyLCBhcyBpbiBhIHN1cnZleSBtb2RlbC5cbiAgICogQHNlZSBTdXJ2ZXlQYWdlLnF1ZXN0aW9uc09yZGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uc09yZGVyKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uc09yZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT3JkZXJcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCBmb2N1cyB0byB0aGUgZmlyc3QgcXVlc3Rpb24gd2l0aCB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgIGlmIChwYWdlKSB7XG4gICAgICBwYWdlLnNjcm9sbFRvVG9wKCk7XG4gICAgICBwYWdlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xuICAgIH1cbiAgfVxuICBzY3JvbGxUb1RvcE9uUGFnZUNoYW5nZSgpIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuYWN0aXZlUGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjtcbiAgICBwYWdlLnNjcm9sbFRvVG9wKCk7XG4gICAgaWYgKHRoaXMuZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljKSB7XG4gICAgICBwYWdlLmZvY3VzRmlyc3RRdWVzdGlvbigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdXJ2ZXkgc3RhdGU6XG4gICAqXG4gICAqIC0gYGxvYWRpbmdgIC0gdGhlIHN1cnZleSBpcyBiZWluZyBsb2FkZWQgZnJvbSBKU09OLFxuICAgKiAtIGBlbXB0eWAgLSB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGN1cnJlbnQgc3VydmV5LFxuICAgKiAtIGBzdGFydGluZ2AgLSB0aGUgc3VydmV5J3Mgc3RhcnQgcGFnZSBpcyBkaXNwbGF5ZWQsXG4gICAqIC0gYHJ1bm5pbmdgIC0gYSByZXNwb25kZW50IGlzIGFuc3dlcmluZyBzdXJ2ZXkgcXVlc3Rpb25zIHJpZ2h0IG5vdyxcbiAgICogLSBgcHJldmlld2AgLSBhIHJlc3BvbmRlbnQgaXMgcHJldmlld2luZyBhbnN3ZXJlZCBxdWVzdGlvbnMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHN1cnZleSAoc2VlIFtleGFtcGxlXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnk/aWQ9c3VydmV5LXNob3dwcmV2aWV3KSksXG4gICAqIC0gYGNvbXBsZXRlZGAgLSBhIHJlc3BvbmRlbnQgaGFzIGNvbXBsZXRlZCB0aGUgc3VydmV5IGFuZCBzdWJtaXR0ZWQgdGhlIHJlc3VsdHMuXG4gICAqXG4gICAqIERldGFpbHM6IFtQcmV2aWV3IFN0YXRlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeSNzdGF0ZXMpXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSByZXR1cm4gXCJsb2FkaW5nXCI7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZWQpIHJldHVybiBcImNvbXBsZXRlZFwiO1xuICAgIGlmICh0aGlzLmlzQ29tcGxldGVkQmVmb3JlKSByZXR1cm4gXCJjb21wbGV0ZWRiZWZvcmVcIjtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc0Rlc2lnbk1vZGUgJiZcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSAmJlxuICAgICAgdGhpcy5zdGFydGVkUGFnZVxuICAgIClcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPyBcInByZXZpZXdcIiA6IFwiZW1wdHlcIjtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA/IFwicnVubmluZ1wiIDogXCJlbXB0eVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgaXNDb21wbGV0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1Nob3dpbmdQcmV2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dpbmdQcmV2aWV3XCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc1Nob3dpbmdQcmV2aWV3KHZhbDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTaG93aW5nUHJldmlld1wiLCB2YWwpO1xuICAgIHRoaXMub25TaG93aW5nUHJldmlld0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc1N0YXJ0ZWRTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNTdGFydGVkU3RhdGVcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzU3RhcnRlZFN0YXRlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU3RhcnRlZFN0YXRlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb21wbGV0ZWRCZWZvcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkQmVmb3JlXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0NvbXBsZXRlZEJlZm9yZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZEJlZm9yZVwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0xvYWRpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNMb2FkaW5nXCIsIHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZFN0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxldGVkU3RhdGVWYWx1ZTtcbiAgfVxuICBnZXQgY29tcGxldGVkU3RhdGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxldGVkU3RhdGVUZXh0VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENvbXBsZXRlZFN0YXRlKHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuY29tcGxldGVkU3RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgaWYgKHZhbHVlID09IFwic2F2aW5nXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFcIik7XG4gICAgICBpZiAodmFsdWUgPT0gXCJlcnJvclwiKSB0ZXh0ID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJzYXZpbmdEYXRhRXJyb3JcIik7XG4gICAgICBpZiAodmFsdWUgPT0gXCJzdWNjZXNzXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFTdWNjZXNzXCIpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBsZXRlZFN0YXRlVGV4dFZhbHVlID0gdGV4dDtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzdXJ2ZXkgZGF0YSBhbmQgc3RhdGUuIElmIHRoZSBzdXJ2ZXkgaGFzIGEgYGNvbXBsZXRlZGAgc3RhdGUsIGl0IHdpbGwgZ2V0IGEgYHJ1bm5pbmdgIHN0YXRlLlxuICAgKiBAcGFyYW0gY2xlYXJEYXRhIGNsZWFyIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBnb3RvRmlyc3RQYWdlIG1ha2UgdGhlIGZpcnN0IHBhZ2UgYXMgYSBjdXJyZW50IHBhZ2UuXG4gICAqIEBzZWUgZGF0YVxuICAgKiBAc2VlIHN0YXRlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcihjbGVhckRhdGE6IGJvb2xlYW4gPSB0cnVlLCBnb3RvRmlyc3RQYWdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChjbGVhckRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnZhcmlhYmxlc0hhc2ggPSB7fTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS50aW1lU3BlbnQgPSAwO1xuICAgICAgdGhpcy5wYWdlc1tpXS5zZXRXYXNTaG93bihmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnBhc3NlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0NvbXBsZXRlZEJlZm9yZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIGlmIChnb3RvRmlyc3RQYWdlICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1swXTtcbiAgICB9XG4gICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG1lcmdlVmFsdWVzKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcbiAgICBpZiAoIWRlc3QgfHwgIXNyYykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgZGVzdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHNyY1trZXldO1xuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoIWRlc3Rba2V5XSkgZGVzdFtrZXldID0ge307XG4gICAgICAgIHRoaXMubWVyZ2VWYWx1ZXModmFsdWUsIGRlc3Rba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXNXaXRoRGVmYXVsdHMoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuaXNMb2FkaW5nKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYWdlc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBxdWVzdGlvbnNbal0udXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUN1c3RvbVdpZGdldHMocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47XG4gICAgcGFnZS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdpbmcobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgb2xkQ3VycmVudFBhZ2U6IG9sZFZhbHVlLFxuICAgICAgbmV3Q3VycmVudFBhZ2U6IG5ld1ZhbHVlLFxuICAgICAgYWxsb3dDaGFuZ2luZzogdHJ1ZSxcbiAgICAgIGlzTmV4dFBhZ2U6IHRoaXMuaXNOZXh0UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgICAgaXNQcmV2UGFnZTogdGhpcy5pc1ByZXZQYWdlKG5ld1ZhbHVlLCBvbGRWYWx1ZSksXG4gICAgfTtcbiAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2luZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93Q2hhbmdpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIGN1cnJlbnRQYWdlQ2hhbmdlZChuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKSB7XG4gICAgY29uc3QgaXNOZXh0UGFnZTogYm9vbGVhbiA9IHRoaXMuaXNOZXh0UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIGlmIChpc05leHRQYWdlKSB7XG4gICAgICBvbGRWYWx1ZS5wYXNzZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm9uQ3VycmVudFBhZ2VDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgb2xkQ3VycmVudFBhZ2U6IG9sZFZhbHVlLFxuICAgICAgbmV3Q3VycmVudFBhZ2U6IG5ld1ZhbHVlLFxuICAgICAgaXNOZXh0UGFnZTogaXNOZXh0UGFnZSxcbiAgICAgIGlzUHJldlBhZ2U6IHRoaXMuaXNQcmV2UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgaXNOZXh0UGFnZShuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFuZXdWYWx1ZSB8fCAhb2xkVmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3VmFsdWUudmlzaWJsZUluZGV4ID09IG9sZFZhbHVlLnZpc2libGVJbmRleCArIDE7XG4gIH1cbiAgcHJpdmF0ZSBpc1ByZXZQYWdlKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld1ZhbHVlIHx8ICFvbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXdWYWx1ZS52aXNpYmxlSW5kZXggKyAxID09IG9sZFZhbHVlLnZpc2libGVJbmRleDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqIEl0IGRlcGVuZHMgZnJvbSBwcm9ncmVzc0JhclR5cGUgcHJvcGVydHlcbiAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICogQHNlZSBwcm9ncmVzc1ZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodGhpcy5wcm9ncmVzc0JhclR5cGUgIT09IFwicGFnZXNcIikge1xuICAgICAgdmFyIGluZm8gPSB0aGlzLmdldFByb2dyZXNzSW5mbygpO1xuICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NCYXJUeXBlID09PSBcInJlcXVpcmVkUXVlc3Rpb25zXCIpIHtcbiAgICAgICAgcmV0dXJuIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICAgID8gTWF0aC5jZWlsKFxuICAgICAgICAgICAgICAoaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCAqIDEwMCkgL1xuICAgICAgICAgICAgICAgIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAxMDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5mby5xdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICA/IE1hdGguY2VpbCgoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKiAxMDApIC8gaW5mby5xdWVzdGlvbkNvdW50KVxuICAgICAgICA6IDEwMDtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoaW5kZXggKiAxMDApIC8gdGhpcy52aXNpYmxlUGFnZUNvdW50KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqIEl0IGRlcGVuZHMgZnJvbSBwcm9ncmVzc0JhclR5cGUgcHJvcGVydHlcbiAgICogQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwcm9ncmVzc1ZhbHVlXCIsIDApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGkuZS4sICdQcmV2JywgJ05leHQnLCBvciAnQ29tcGxldGUnIGFuZCAnUHJldmlldycpIHBvc2l0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwibm9uZVwiO1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIm5vbmVcIjtcbiAgICBpZiAocGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgPT09IFwic2hvd1wiKSB7XG4gICAgICByZXR1cm4gXCJib3R0b21cIjtcbiAgICB9XG4gICAgaWYgKHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09PSBcImhpZGVcIikge1xuICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG93TmF2aWdhdGlvbkJ1dHRvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBidXR0b25zIChpLmUuLCAnUHJldicsICdOZXh0Jywgb3IgJ0NvbXBsZXRlJyBhbmQgJ1ByZXZpZXcnKSBhcmUgc2hvd3Mgb24gdG9wLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oXCJ0b3BcIik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBidXR0b25zIChpLmUuLCAnUHJldicsICdOZXh0Jywgb3IgJ0NvbXBsZXRlJyBhbmQgJ1ByZXZpZXcnKSBhcmUgc2hvd3Mgb24gYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBpc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oXCJib3R0b21cIik7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uKGJ1dHRvblBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gdGhpcy5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZztcbiAgICByZXR1cm4gcmVzID09IFwiYm90aFwiIHx8IHJlcyA9PSBidXR0b25Qb3NpdGlvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBpbiBlZGl0IG1vZGUuXG4gICAqIEBzZWUgbW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0VkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gXCJlZGl0XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBsZXRlQnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICAoIXRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlIHx8IHRoaXMuc3RhdGUgPT0gXCJwcmV2aWV3XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUHJldmlld0J1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSAmJlxuICAgICAgdGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgIHRoaXMuc3RhdGUgPT0gXCJydW5uaW5nXCJcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDYW5jZWxQcmV2aWV3QnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIGluIHByZXZpZXcgbW9kZS5cbiAgICogQHNlZSBtb2RlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gXCJkaXNwbGF5XCIgfHwgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVXBkYXRlVmFsdWVUZXh0T25UeXBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFVwZGF0ZU1vZGUgPT0gXCJvblR5cGluZ1wiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlLiBJdCBpcyB1c2VkIGJ5IFN1cnZleUpTIEVkaXRvci5cbiAgICogQHNlZSBzZXREZXNpZ25Nb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGVzaWduTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEZXNpZ25Nb2RlO1xuICB9XG4gIHByaXZhdGUgX2lzRGVzaWduTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0cyB0aGUgc3VydmV5IGludG8gZGVzaWduIG1vZGUuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdHJ1ZSB0byBzZXQgdGhlIHN1cnZleSBpbnRvIHRoZSBkZXNpZ24gbW9kZS5cbiAgICovXG4gIHB1YmxpYyBzZXREZXNpZ25Nb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNEZXNpZ25Nb2RlID0gdmFsdWU7XG4gICAgdGhpcy5vblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKFwic3RhbmRhcmRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNob3cgYWxsIGVsZW1lbnRzIGluIHRoZSBzdXJ2ZXksIHJlZ2FyZGxlc3MgdGhlaXIgdmlzaWJpbGl0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0ludmlzaWJsZUVsZW1lbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SW52aXNpYmxlRWxlbWVudHNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0ludmlzaWJsZUVsZW1lbnRzKHZhbDogYm9vbGVhbikge1xuICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dJbnZpc2libGVFbGVtZW50c1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodmlzUGFnZXMpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQWxsRWxlbWVudHNWaXNpYmlsaXR5KHZpc1BhZ2VzOiBBcnJheTxQYWdlTW9kZWw+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICBwYWdlLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICBpZiAodmlzUGFnZXMuaW5kZXhPZihwYWdlKSA+IC0xICE9IHBhZ2UuaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMub25QYWdlVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICB2aXNpYmxlOiBwYWdlLmlzVmlzaWJsZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnNob3dJbnZpc2libGVFbGVtZW50cztcbiAgfVxuICBwdWJsaWMgZ2V0IGFyZUVtcHR5RWxlbWVudHNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNTaG93aW5nUHJldmlldyAmJlxuICAgICAgdGhpcy5zaG93UHJldmlld0JlZm9yZUNvbXBsZXRlID09IFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYSB1c2VyIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgc3VydmV5IGluIHRoaXMgYnJvd3NlciBhbmQgdGhlcmUgaXMgYSBjb29raWUgYWJvdXQgaXQuIFN1cnZleSBnb2VzIHRvIGBjb21wbGV0ZWRgIHN0YXRlIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC5cbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc2V0Q29va2llXG4gICAqIEBzZWUgZGVsZXRlQ29va2llXG4gICAqIEBzZWUgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzQ29va2llKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb29raWVOYW1lIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llO1xuICAgIHJldHVybiBjb29raWVzICYmIGNvb2tpZXMuaW5kZXhPZih0aGlzLmNvb2tpZU5hbWUgKyBcIj10cnVlXCIpID4gLTE7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGluIHVzZXIncyBicm93c2VyLiBJdCBpcyBkb25lIGF1dG9tYXRpY2FsbHkgb24gc3VydmV5IGNvbXBsZXRlIGlmIHRoZSBgY29va2llTmFtZWAgcHJvcGVydHkgdmFsdWUgaXMgbm90IGVtcHR5LlxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICogQHNlZSBoYXNDb29raWVcbiAgICogQHNlZSBkZWxldGVDb29raWVcbiAgICovXG4gIHB1YmxpYyBzZXRDb29raWUoKSB7XG4gICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgZG9jdW1lbnQuY29va2llID1cbiAgICAgIHRoaXMuY29va2llTmFtZSArIFwiPXRydWU7IGV4cGlyZXM9RnJpLCAzMSBEZWMgOTk5OSAwOjA6MCBHTVRcIjtcbiAgfVxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGZyb20gdGhlIGJyb3dzZXIuXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKiBAc2VlIGhhc0Nvb2tpZVxuICAgKiBAc2VlIHNldENvb2tpZVxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPTtcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIHN1cnZleSBtdXN0IGlnbm9yZSB2YWxpZGF0aW9uIGxpa2UgcmVxdWlyZWQgcXVlc3Rpb25zIGFuZCBvdGhlcnMsIG9uIGBuZXh0UGFnZWAgYW5kIGBjb21wbGV0ZUxhc3RQYWdlYCBmdW5jdGlvbiBjYWxscy4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBtb2RlXG4gICAqL1xuICBwdWJsaWMgaWdub3JlVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogTmF2aWdhdGVzIHVzZXIgdG8gdGhlIG5leHQgcGFnZS5cbiAgICpcbiAgICogUmV0dXJucyBgZmFsc2VgIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAqXG4gICAqIC0gaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlLlxuICAgKiAtIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzIChmb3IgZXhhbXBsZSwgYSByZXF1aXJlZCBxdWVzdGlvbiBpcyBlbXB0eSkuXG4gICAqIEBzZWUgaXNDdXJyZW50UGFnZUhhc0Vycm9yc1xuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKi9cbiAgcHVibGljIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzT25OYXZpZ2F0ZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaWdub3JlVmFsaWRhdGlvbiB8fCAhdGhpcy5pc0VkaXRNb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGZ1bmMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25Db21wbGV0ZVwiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuaGFzRXJyb3JzKHRydWUsIHRydWUsIGZ1bmMpICE9PSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzQ3VycmVudFBhZ2VFcnJvcnMoZnVuYykgIT09IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zOiBBcnJheTxRdWVzdGlvbj47XG4gIHByaXZhdGUgY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICBxdWVzdGlvbnM6IEFycmF5PFF1ZXN0aW9uPixcbiAgICBmdW5jOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuY2xlYXJBc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1J1bm5pbmdWYWxpZGF0b3JzKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29tcGxldGVkQXN5bmNRdWVzdGlvblZhbGlkYXRvcnMoZnVuYywgaGFzRXJyb3JzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMucHVzaChxdWVzdGlvbnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMubGVuZ3RoID4gMDtcbiAgfVxuICBwcml2YXRlIGNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCkge1xuICAgIGlmICghIXRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKSB7XG4gICAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3luUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzeW5RdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucyA9IFtdO1xuICB9XG4gIHByaXZhdGUgb25Db21wbGV0ZWRBc3luY1F1ZXN0aW9uVmFsaWRhdG9ycyhcbiAgICBmdW5jOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkLFxuICAgIGhhc0Vycm9yczogYm9vbGVhblxuICApIHtcbiAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICB0aGlzLmNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCk7XG4gICAgICBmdW5jKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzeW5RdWVzdGlvbnNbaV0uaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuO1xuICAgIH1cbiAgICBmdW5jKGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzLCBmb3IgZXhhbXBsZSwgdGhlIHJlcXVpcmVkIHF1ZXN0aW9uIGlzIGVtcHR5IG9yIGEgcXVlc3Rpb24gdmFsaWRhdGlvbiBpcyBmYWlsZWQuXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNDdXJyZW50UGFnZUhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0lzQ3VycmVudFBhZ2VIYXNFcnJvcnMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgYW55IGVycm9yLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSBgb25Bc3luY1ZhbGlkYXRpb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gb25Bc3luY1ZhbGlkYXRpb24gdXNlIHRoaXMgcGFyYW1ldGVyIGlmIHlvdSB1c2UgYXN5bmMgZnVuY3Rpb25zIGluIHlvdXIgZXhwcmVzc2lvbnMuIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBoYXNFcnJvcnMgdmFsdWUgZXF1YWxzIHRvIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgKiBAc2VlIGhhc1BhZ2VFcnJvcnNcbiAgICogQHNlZSBoYXNFcnJvcnNcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGhhc0N1cnJlbnRQYWdlRXJyb3JzKFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQYWdlRXJyb3JzKHVuZGVmaW5lZCwgb25Bc3luY1ZhbGlkYXRpb24pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYSBwYWdlIGNvbnRhaW5zIGFuIGVycm9yLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2Vjb25kIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLCAgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gcGFnZSB0aGUgcGFnZSB0aGF0IHlvdSB3YW50IHRvIHZhbGlkYXRlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBgYWN0aXZlUGFnZWAgaXMgdXNpbmdcbiAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uIHVzZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgdXNlIGFzeW5jIGZ1bmN0aW9ucyBpbiB5b3VyIGV4cHJlc3Npb25zLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaGFzRXJyb3JzIHZhbHVlIGVxdWFscyB0byBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHNlZSBoYXNDdXJyZW50UGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc0Vycm9yc1xuICAgKiBAc2VlIGFjdGl2ZVBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGhhc1BhZ2VFcnJvcnMoXG4gICAgcGFnZT86IFBhZ2VNb2RlbCxcbiAgICBvbkFzeW5jVmFsaWRhdGlvbj86IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYWdlKSB7XG4gICAgICBwYWdlID0gdGhpcy5hY3RpdmVQYWdlO1xuICAgIH1cbiAgICBpZiAoIXBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyhwYWdlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFvbkFzeW5jVmFsaWRhdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNoZWNrRm9yQXN5bmNRdWVzdGlvblZhbGlkYXRpb24oXG4gICAgICBwYWdlLnF1ZXN0aW9ucyxcbiAgICAgIChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IG9uQXN5bmNWYWxpZGF0aW9uKGhhc0Vycm9ycylcbiAgICApXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIGFueSBvZiB0aGUgc3VydmV5IHBhZ2VzIGNvbnRhaW5zIGVycm9ycy4gSWYgdGhlcmUgaXMgYW4gYXN5bmMgZnVuY3Rpb24gaW4gYW4gZXhwcmVzc2lvbiwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgdmFsdWUuXG4gICAqIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCB1c2UgIHRoZSB0aGlyZCBgb25Bc3luY1ZhbGlkYXRpb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjYWxsYmFjayBmdW5jdGlvbjogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICAgKiBAcGFyYW0gZmlyZUNhbGxiYWNrIHNldCBpdCB0byBgdHJ1ZWAsIHRvIHNob3cgZXJyb3JzIGluIFVJLlxuICAgKiBAcGFyYW0gZm9jdXNPbkZpcnN0RXJyb3Igc2V0IGl0IHRvIGB0cnVlYCB0byBmb2N1cyBvbiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBkb2Vzbid0IHBhc3MgdGhlIHZhbGlkYXRpb24gYW5kIG1ha2UgdGhlIHBhZ2UsIHdoZXJlIHRoZSBxdWVzdGlvbiBpcyBsb2NhdGVkLCB0aGUgY3VycmVudC5cbiAgICogQHBhcmFtIG9uQXN5bmNWYWxpZGF0aW9uIHVzZSB0aGlzIHBhcmFtZXRlciBpZiB5b3UgdXNlIGFzeW5jIGZ1bmN0aW9ucyBpbiB5b3VyIGV4cHJlc3Npb25zLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaGFzRXJyb3JzIHZhbHVlIGVxdWFscyB0byBgdHJ1ZWAgb3IgYGZhbHNlYC5cbiAgICogQHNlZSBoYXNDdXJyZW50UGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc1BhZ2VFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSxcbiAgICBmb2N1c09uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoISFvbkFzeW5jVmFsaWRhdGlvbikge1xuICAgICAgZmlyZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdmFyIGZpcnN0RXJyb3JQYWdlID0gbnVsbDtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZpc1BhZ2VzW2ldLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZhbHNlKSkge1xuICAgICAgICBpZiAoIWZpcnN0RXJyb3JQYWdlKSBmaXJzdEVycm9yUGFnZSA9IHZpc1BhZ2VzW2ldO1xuICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9jdXNPbkZpcnN0RXJyb3IgJiYgISFmaXJzdEVycm9yUGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGZpcnN0RXJyb3JQYWdlO1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IGZpcnN0RXJyb3JQYWdlLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbnNbaV0uZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBxdWVzdGlvbnNbaV0uZm9jdXModHJ1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlcyB8fCAhb25Bc3luY1ZhbGlkYXRpb24pIHJldHVybiByZXM7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICAgIHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCksXG4gICAgICAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiBvbkFzeW5jVmFsaWRhdGlvbihoYXNFcnJvcnMpXG4gICAgKVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHN1cnZleSBlbGVtZW50cyAocGFnZXMsIHBhbmVscywgYW5kIHF1ZXN0aW9ucykgaGF2ZSB1bmlxdWUgcXVlc3Rpb24gbmFtZXMuXG4gICAqIFlvdSBjYW4gY2hlY2sgZm9yIHVuaXF1ZSBuYW1lcyBmb3IgaW5kaXZpZHVhbCBwYWdlIGFuZCBwYW5lbCAoYW5kIGFsbCB0aGVpciBlbGVtZW50cykgb3IgYSBxdWVzdGlvbi5cbiAgICogSWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGEgc3VydmV5IGNoZWNrcyB0aGF0IGFsbCBpdHMgZWxlbWVudHMgaGF2ZSB1bmlxdWUgbmFtZXMuXG4gICAqIEBwYXJhbSBlbGVtZW50IHBhZ2UsIHBhbmVsIG9yIHF1ZXN0aW9uLCBpdCBpcyBgbnVsbGAgYnkgZGVmYXVsdCwgdGhhdCBtZWFucyBhbGwgc3VydmV5IGVsZW1lbnRzIHdpbGwgYmUgY2hlY2tlZFxuICAgKi9cbiAgcHVibGljIGVuc3VyZVVuaXF1ZU5hbWVzKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50ID0gbnVsbCkge1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWUodGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVOYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQuaXNQYWdlKSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhZ2VOYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVBhbmVsTmFtZShlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaXNQYWdlIHx8IGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgdmFyIGVsZW1lbnRzID0gKDxJUGFuZWw+ZWxlbWVudCkuZWxlbWVudHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZXMoZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZVF1ZXN0aW9uTmFtZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVQYWdlTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeU5hbWUobmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZVBhbmVsTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsQnlOYW1lKG5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVRdWVzdGlvbk5hbWUoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICAobmFtZTogc3RyaW5nKTogSVN1cnZleUVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoXG4gICAgZWxlbWVudDogSVN1cnZleUVsZW1lbnQsXG4gICAgZ2V0RWxlbWVudEJ5TmFtZTogKG5hbWU6IHN0cmluZykgPT4gSVN1cnZleUVsZW1lbnRcbiAgKSB7XG4gICAgdmFyIGV4aXN0aW5nRWxlbWVudCA9IGdldEVsZW1lbnRCeU5hbWUoZWxlbWVudC5uYW1lKTtcbiAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCB8fCBleGlzdGluZ0VsZW1lbnQgPT0gZWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciBuZXdOYW1lID0gdGhpcy5nZXROZXdOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgd2hpbGUgKCEhZ2V0RWxlbWVudEJ5TmFtZShuZXdOYW1lKSkge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmdldE5ld05hbWUoZWxlbWVudC5uYW1lKTtcbiAgICB9XG4gICAgZWxlbWVudC5uYW1lID0gbmV3TmFtZTtcbiAgfVxuICBwcml2YXRlIGdldE5ld05hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcG9zID0gbmFtZS5sZW5ndGg7XG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgbmFtZVtwb3MgLSAxXSA+PSBcIjBcIiAmJiBuYW1lW3BvcyAtIDFdIDw9IFwiOVwiKSB7XG4gICAgICBwb3MtLTtcbiAgICB9XG4gICAgdmFyIGJhc2UgPSBuYW1lLnN1YnN0cigwLCBwb3MpO1xuICAgIHZhciBudW0gPSAwO1xuICAgIGlmIChwb3MgPCBuYW1lLmxlbmd0aCkge1xuICAgICAgbnVtID0gcGFyc2VJbnQobmFtZS5zdWJzdHIocG9zKSk7XG4gICAgfVxuICAgIG51bSsrO1xuICAgIHJldHVybiBiYXNlICsgbnVtO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKFxuICAgIGlzRm9jdXNlT25GaXJzdEVycm9yOiBib29sZWFuID0gdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrSXNQYWdlSGFzRXJyb3JzKHRoaXMuYWN0aXZlUGFnZSwgaXNGb2N1c2VPbkZpcnN0RXJyb3IpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJc1BhZ2VIYXNFcnJvcnMoXG4gICAgcGFnZTogUGFnZU1vZGVsLFxuICAgIGlzRm9jdXNlT25GaXJzdEVycm9yOiBib29sZWFuID0gdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChpc0ZvY3VzZU9uRmlyc3RFcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpc0ZvY3VzZU9uRmlyc3RFcnJvciA9IHRoaXMuZm9jdXNPbkZpcnN0RXJyb3I7XG4gICAgfVxuICAgIGlmICghcGFnZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHJlcyA9IHBhZ2UuaGFzRXJyb3JzKHRydWUsIGlzRm9jdXNlT25GaXJzdEVycm9yKTtcbiAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UocGFnZSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlLmlzRW1wdHkgfHwgIXBhZ2UpIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zT25QYWdlID0gcGFnZS5xdWVzdGlvbnM7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICB2YXIgZXJyb3JzID0gbmV3IEFycmF5PFN1cnZleUVycm9yPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zT25QYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc09uUGFnZVtpXTtcbiAgICAgIGlmIChxLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHEuZXJyb3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2gocS5lcnJvcnNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXG4gICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB1c2VyIHRvIGEgcHJldmlvdXMgcGFnZS4gSWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSwgYHByZXZQYWdlYCByZXR1cm5zIGBmYWxzZWAuIGBwcmV2UGFnZWAgZG9lcyBub3QgcGVyZm9ybSBhbnkgY2hlY2tzLCByZXF1aXJlZCBxdWVzdGlvbnMgY2FuIGJlIGVtcHR5LlxuICAgKiBAc2VlIGlzRmlyc3RQYWdlXG4gICAqL1xuICBwdWJsaWMgcHJldlBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4IC0gMV07XG4gIH1cbiAgLyoqXG4gICAqIENvbXBsZXRlcyB0aGUgc3VydmV5LCBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IG9uZS4gSXQgcmV0dXJucyBgZmFsc2VgIGlmIHRoZSBsYXN0IHBhZ2UgaGFzIGVycm9ycy5cbiAgICogSWYgdGhlIGxhc3QgcGFnZSBoYXMgbm8gZXJyb3JzLCBgY29tcGxldGVMYXN0UGFnZWAgY2FsbHMgYGRvQ29tcGxldGVgIGFuZCByZXR1cm5zIGB0cnVlYC5cbiAgICogQHNlZSBpc0N1cnJlbnRQYWdlSGFzRXJyb3JzXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICogQHNlZSBkb0NvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVMYXN0UGFnZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUodHJ1ZSk7XG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5jYW5jZWxQcmV2aWV3KCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc05hdmlnYXRpb25CdXR0b25QcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBuYXZpZ2F0aW9uTW91c2VEb3duKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNldE5hdmlnYXRpb25CdXR0b24oKSB7XG4gICAgdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNob3dzIHByZXZpZXcgZm9yIHRoZSBzdXJ2ZXkuIFN3aXRjaGVzIHRoZSBzdXJ2ZXkgdG8gdGhlIFwicHJldmlld1wiIHN0YXRlLlxuICAgKlxuICAgKiBEZXRhaWxzOiBbUHJldmlldyBTdGF0ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnkjc3RhdGVzLXByZXZpZXcpXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIGNhbmNlbFByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgZWRpdFRleHRcbiAgICovXG4gIHB1YmxpYyBzaG93UHJldmlldygpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIGlmICh0aGlzLmhhc0Vycm9yc09uTmF2aWdhdGUodHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5kb1NlcnZlclZhbGlkYXRpb24odHJ1ZSwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBDYW5jZWxzIHByZXZpZXcgYW5kIHN3aXRjaGVzIGJhY2sgdG8gdGhlIFwicnVubmluZ1wiIHN0YXRlLlxuICAgKlxuICAgKiBEZXRhaWxzOiBbUHJldmlldyBTdGF0ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnkjc3RhdGVzLXByZXZpZXcpXG4gICAqIEBwYXJhbSBjdXJQYWdlIC0gQSBuZXcgY3VycmVudCBwYWdlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IHBhZ2UgYmVjb21lcyB0aGUgY3VycmVudC5cbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGNhbmNlbFByZXZpZXcoY3VyUGFnZTogYW55ID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5pc1Nob3dpbmdQcmV2aWV3KSByZXR1cm47XG4gICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ID0gZmFsc2U7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGN1clBhZ2UpICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcbiAgICAgIGN1clBhZ2UgPSB0aGlzLnZpc2libGVQYWdlQ291bnQgLSAxO1xuICAgIH1cbiAgICBpZiAoY3VyUGFnZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGN1clBhZ2U7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3QnlQYWdlKHBhbmVsOiBJUGFuZWwpOiBhbnkge1xuICAgIHRoaXMuY2FuY2VsUHJldmlldygoPGFueT5wYW5lbClbXCJvcmlnaW5hbFBhZ2VcIl0pO1xuICB9XG4gIHByb3RlY3RlZCBkb0N1cnJlbnRQYWdlQ29tcGxldGUoZG9Db21wbGV0ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGluZ09uU2VydmVyKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5yZXNldE5hdmlnYXRpb25CdXR0b24oKTtcbiAgICBpZiAodGhpcy5oYXNFcnJvcnNPbk5hdmlnYXRlKGRvQ29tcGxldGUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZG9DdXJyZW50UGFnZUNvbXBsZXRlQ29yZShkb0NvbXBsZXRlKTtcbiAgfVxuICBwcml2YXRlIGRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRvU2VydmVyVmFsaWRhdGlvbihkb0NvbXBsZXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkb0NvbXBsZXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnBhc3NlZCA9IHRydWU7XG4gICAgICB0aGlzLmRvQ29tcGxldGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb05leHRQYWdlKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBPYnNvbGV0ZS4gVXNlIHRoZSBgcXVlc3Rpb25zT25QYWdlTW9kZWAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICogQHNlZSBxdWVzdGlvbnNPblBhZ2VNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzU2luZ2xlUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNPblBhZ2VNb2RlID09IFwic2luZ2xlUGFnZVwiO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNTaW5nbGVQYWdlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9IHZhbCA/IFwic2luZ2xlUGFnZVwiIDogXCJzdGFuZGFyZFwiO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHN1cnZleSBjb21iaW5lcyBxdWVzdGlvbnMsIHBhbmVscywgYW5kIHBhZ2VzLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgc2luZ2xlUGFnZWAgLSBjb21iaW5lIGFsbCBzdXJ2ZXkgcGFnZXMgaW4gYSBzaW5nbGUgcGFnZS4gUGFnZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gcGFuZWxzLlxuICAgKiAtIGBxdWVzdGlvblBlclBhZ2VgIC0gc2hvdyBvbmUgcXVlc3Rpb24gcGVyIHBhZ2UuIFN1cnZleSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIHBhZ2UgZm9yIGV2ZXJ5IHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnNPblBhZ2VNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09uUGFnZU1vZGVcIiwgXCJzdGFuZGFyZFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uc09uUGFnZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBzdXJ2ZXkgcGFnZSBpcyBhIHN0YXJ0IHBhZ2UuIFNldCB0aGlzIHByb3BlcnR5IHRvIGB0cnVlYCwgdG8gbWFrZSB0aGUgZmlyc3QgcGFnZSBhIHN0YXJ0aW5nIHBhZ2UuXG4gICAqIEFuIGVuZCB1c2VyIGNhbm5vdCBuYXZpZ2F0ZSB0byB0aGUgc3RhcnQgcGFnZSBhbmQgdGhlIHN0YXJ0IHBhZ2UgZG9lcyBub3QgYWZmZWN0IGEgc3VydmV5IHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGdldCBmaXJzdFBhZ2VJc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZpcnN0UGFnZUlzU3RhcnRlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBmaXJzdFBhZ2VJc1N0YXJ0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsIHZhbCk7XG4gIH1cbiAgaXNQYWdlU3RhcnRlZChwYWdlOiBJUGFnZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgJiYgdGhpcy5wYWdlc1swXSA9PT0gcGFnZVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwic2hvd0FsbFF1ZXN0aW9uc1wiIG9yIFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCIgdG8gYWxsb3cgcmVzcG9uZGVudHMgdG8gcHJldmlldyBhbnN3ZXJzIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBzdXJ2ZXkgcmVzdWx0cy5cbiAgICpcbiAgICogRGV0YWlsczogW1ByZXZpZXcgU3RhdGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5I3N0YXRlcy1wcmV2aWV3KVxuICAgKiBFeGFtcGxlOiBbU2hvdyBQcmV2aWV3IEJlZm9yZSBDb21wbGV0ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5P2lkPXN1cnZleS1zaG93cHJldmlldylcbiAgICogQHNlZSBzaG93UHJldmlld1xuICAgKiBAc2VlIGNhbmNlbFByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgZWRpdFRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIsIFwibm9QcmV2aWV3XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMuc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZTtcbiAgICByZXR1cm4gcHJldmlldyA9PSBcInNob3dBbGxRdWVzdGlvbnNcIiB8fCBwcmV2aWV3ID09IFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRmlyc3RQYWdlSXNTdGFydGVkQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZDtcbiAgICB0aGlzLnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLnBhZ2VzWzBdLCAhdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQpO1xuICB9XG4gIHByaXZhdGUgcnVubmluZ1BhZ2VzOiBhbnk7XG4gIHByaXZhdGUgb25TaG93aW5nUHJldmlld0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykge1xuICAgICAgdGhpcy5ydW5uaW5nUGFnZXMgPSB0aGlzLnBhZ2VzLnNsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgICAgIHRoaXMuc2V0dXBQYWdlc0ZvclBhZ2VNb2Rlcyh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucnVubmluZ1BhZ2VzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU9yaWdpb25hbFBhZ2VzKHRoaXMucnVubmluZ1BhZ2VzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucnVubmluZ1BhZ2VzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUFsbEVsZW1lbnRzVmlzaWJpbGl0eSh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZU5vID0gMDtcbiAgfVxuICBwcml2YXRlIG9yaWdpb25hbFBhZ2VzOiBhbnk7XG4gIHByb3RlY3RlZCBvblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3KSByZXR1cm47XG4gICAgaWYgKHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9PSBcInN0YW5kYXJkXCIgfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIGlmICh0aGlzLm9yaWdpb25hbFBhZ2VzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU9yaWdpb25hbFBhZ2VzKHRoaXMub3JpZ2lvbmFsUGFnZXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcmlnaW9uYWxQYWdlcyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvbGRWYWx1ZSB8fCBvbGRWYWx1ZSA9PSBcInN0YW5kYXJkXCIpIHtcbiAgICAgICAgdGhpcy5vcmlnaW9uYWxQYWdlcyA9IHRoaXMucGFnZXMuc2xpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXR1cFBhZ2VzRm9yUGFnZU1vZGVzKHRoaXMuaXNTaW5nbGVQYWdlKTtcbiAgICB9XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIHByaXZhdGUgcmVzdG9yZU9yaWdpb25hbFBhZ2VzKG9yaWdpbmFsUGFnZXM6IEFycmF5PFBhZ2VNb2RlbD4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQ2xlYXIoKTtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gob3JpZ2luYWxQYWdlc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0dXBQYWdlc0ZvclBhZ2VNb2Rlcyhpc1NpbmdsZVBhZ2U6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQ2xlYXIoKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkID8gMSA6IDA7XG4gICAgc3VwZXIuc3RhcnRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB2YXIgbmV3UGFnZXMgPSB0aGlzLmNyZWF0ZVBhZ2VzRm9yUXVlc3Rpb25PblBhZ2VNb2RlKFxuICAgICAgaXNTaW5nbGVQYWdlLFxuICAgICAgc3RhcnRJbmRleFxuICAgICk7XG4gICAgdmFyIGRlbGV0ZWRMZW4gPSB0aGlzLnBhZ2VzLmxlbmd0aCAtIHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlZExlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlcy5wdXNoKG5ld1BhZ2VzW2ldKTtcbiAgICB9XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3UGFnZXNbaV0uZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgICBuZXdQYWdlc1tpXS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmRvRWxlbWVudHNPbkxvYWQoKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVBhZ2VzRm9yUXVlc3Rpb25PblBhZ2VNb2RlKFxuICAgIGlzU2luZ2xlUGFnZTogYm9vbGVhbixcbiAgICBzdGFydEluZGV4OiBudW1iZXJcbiAgKTogQXJyYXk8UGFnZU1vZGVsPiB7XG4gICAgaWYgKGlzU2luZ2xlUGFnZSkge1xuICAgICAgcmV0dXJuIFt0aGlzLmNyZWF0ZVNpbmdsZVBhZ2Uoc3RhcnRJbmRleCldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQYWdlc0ZvckV2ZXJ5UXVlc3Rpb24oc3RhcnRJbmRleCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVTaW5nbGVQYWdlKHN0YXJ0SW5kZXg6IG51bWJlcik6IFBhZ2VNb2RlbCB7XG4gICAgdmFyIHNpbmdsZSA9IHRoaXMuY3JlYXRlTmV3UGFnZShcImFsbFwiKTtcbiAgICBzaW5nbGUuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIHZhciBwYW5lbCA9IFNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgICAgIHBhbmVsLm9yaWdpbmFsUGFnZSA9IHBhZ2U7XG4gICAgICBzaW5nbGUuYWRkUGFuZWwocGFuZWwpO1xuICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChwYWdlKTtcbiAgICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgcGFuZWwpO1xuICAgICAgaWYgKCF0aGlzLnNob3dQYWdlVGl0bGVzKSB7XG4gICAgICAgIHBhbmVsLnRpdGxlID0gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNpbmdsZTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVBhZ2VzRm9yRXZlcnlRdWVzdGlvbihzdGFydEluZGV4OiBudW1iZXIpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxQYWdlTW9kZWw+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3JpZ2luYWxQYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIC8vIEluaXRpYWxpemUgcmFuZG9taXphdGlvblxuICAgICAgb3JpZ2luYWxQYWdlLnNldFdhc1Nob3duKHRydWUpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvcmlnaW5hbFBhZ2UuZWxlbWVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsRWxlbWVudCA9IG9yaWdpbmFsUGFnZS5lbGVtZW50c1tqXTtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKG9yaWdpbmFsRWxlbWVudC5nZXRUeXBlKCkpO1xuICAgICAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICB2YXIganNvbk9iaiA9IG5ldyBKc29uT2JqZWN0KCk7XG4gICAgICAgIC8vRGVzZXJpYWxpemUgcGFnZSBwcm9wZXJ0aWVzIG9ubHksIGV4Y2x1ZGluZyBlbGVtZW50c1xuICAgICAgICBqc29uT2JqLmxpZ2h0U2VyaWFsaXppbmcgPSB0cnVlO1xuICAgICAgICB2YXIgcGFnZUpzb24gPSBqc29uT2JqLnRvSnNvbk9iamVjdChvcmlnaW5hbFBhZ2UpO1xuXG4gICAgICAgIHZhciBwYWdlID0gPFBhZ2VNb2RlbD5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKG9yaWdpbmFsUGFnZS5nZXRUeXBlKCkpO1xuICAgICAgICBwYWdlLmZyb21KU09OKHBhZ2VKc29uKTtcbiAgICAgICAgcGFnZS5uYW1lID0gXCJwYWdlXCIgKyAocmVzLmxlbmd0aCArIDEpO1xuICAgICAgICBwYWdlLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgICAgIHJlcy5wdXNoKHBhZ2UpO1xuICAgICAgICB2YXIganNvbiA9IG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KG9yaWdpbmFsRWxlbWVudCk7XG4gICAgICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgZWxlbWVudCk7XG4gICAgICAgIHBhZ2UuYWRkRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXNBZGRlZChwYWdlLnF1ZXN0aW9uc1trXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IG9uZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgPT0gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd1ByZXZCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UgfHwgIXRoaXMuc2hvd1ByZXZCdXR0b24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VzW3RoaXMuY3VycmVudFBhZ2VObyAtIDFdO1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPD0gMDtcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3Qgb25lLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICByZXR1cm4gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSkgPT0gdlBhZ2VzLmxlbmd0aCAtIDE7XG4gIH1cbiAgLyoqXG4gICAqIENvbXBsZXRlcyB0aGUgc3VydmV5LlxuICAgKlxuICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAgICpcbiAgICogLSB3cml0ZXMgY29va2llIGlmIHRoZSBgY29va2llTmFtZWAgcHJvcGVydHkgaXMgbm90IGVtcHR5XG4gICAqIC0gc2V0cyB0aGUgc3VydmV5IGludG8gYGNvbXBsZXRlZGAgc3RhdGVcbiAgICogLSBmaXJlcyB0aGUgYG9uQ29tcGxldGVgIGV2ZW50XG4gICAqIC0gY2FsbHMgYHNlbmRSZXN1bHRgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBDYWxsaW5nIHRoZSBgZG9Db21wbGV0ZWAgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkgdmFsaWRhdGlvbiwgdW5saWtlIHRoZSBgY29tcGxldGVMYXN0UGFnZWAgZnVuY3Rpb24uXG4gICAqIEl0IGNhbGxzIGBuYXZpZ2F0ZVRvVXJsYCBhZnRlciBjYWxsaW5nIGBvbkNvbXBsZXRlYCBldmVudC5cbiAgICogSW4gY2FzZSBjYWxsaW5nIGBvcHRpb25zLnNob3dEYXRhU2F2aW5nYCBjYWxsYmFjayBpbiB0aGUgYG9uQ29tcGxldGVgIGV2ZW50LCBgbmF2aWdhdGVUb1VybGAgaXMgdXNlZCBvbiBjYWxsaW5nIGBvcHRpb25zLnNob3dEYXRhU2F2aW5nU3VjY2Vzc2AgY2FsbGJhY2suXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblxuICAgKi9cbiAgcHVibGljIGRvQ29tcGxldGUoaXNDb21wbGV0ZU9uVHJpZ2dlcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdmFyIG9uQ29tcGxldGluZ09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0NvbXBsZXRlOiB0cnVlLFxuICAgICAgaXNDb21wbGV0ZU9uVHJpZ2dlcjogaXNDb21wbGV0ZU9uVHJpZ2dlcixcbiAgICB9O1xuICAgIHRoaXMub25Db21wbGV0aW5nLmZpcmUodGhpcywgb25Db21wbGV0aW5nT3B0aW9ucyk7XG4gICAgaWYgKCFvbkNvbXBsZXRpbmdPcHRpb25zLmFsbG93Q29tcGxldGUpIHJldHVybjtcbiAgICBsZXQgcHJldmlvdXNDb29raWUgPSB0aGlzLmhhc0Nvb2tpZTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIHRoaXMuc2V0Q29tcGxldGVkKCk7XG4gICAgdGhpcy5jbGVhclVudXNlZFZhbHVlcygpO1xuICAgIHRoaXMuc2V0Q29va2llKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBzYXZpbmdEYXRhU3RhcnRlZCA9IGZhbHNlO1xuICAgIHZhciBvbkNvbXBsZXRlT3B0aW9ucyA9IHtcbiAgICAgIGlzQ29tcGxldGVPblRyaWdnZXI6IGlzQ29tcGxldGVPblRyaWdnZXIsXG4gICAgICBzaG93RGF0YVNhdmluZzogZnVuY3Rpb24odGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNhdmluZ0RhdGFTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcInNhdmluZ1wiLCB0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBzaG93RGF0YVNhdmluZ0Vycm9yOiBmdW5jdGlvbih0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcImVycm9yXCIsIHRleHQpO1xuICAgICAgfSxcbiAgICAgIHNob3dEYXRhU2F2aW5nU3VjY2VzczogZnVuY3Rpb24odGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIHRleHQpO1xuICAgICAgICBzZWxmLm5hdmlnYXRlVG8oKTtcbiAgICAgIH0sXG4gICAgICBzaG93RGF0YVNhdmluZ0NsZWFyOiBmdW5jdGlvbih0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcIlwiLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm9uQ29tcGxldGUuZmlyZSh0aGlzLCBvbkNvbXBsZXRlT3B0aW9ucyk7XG4gICAgaWYgKCFwcmV2aW91c0Nvb2tpZSAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xuICAgICAgdGhpcy5zZW5kUmVzdWx0KCk7XG4gICAgfVxuICAgIGlmICghc2F2aW5nRGF0YVN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUbygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU3RhcnRzIHRoZSBzdXJ2ZXkuIENoYW5nZXMgdGhlIHN1cnZleSBtb2RlIGZyb20gXCJzdGFydGluZ1wiIHRvIFwicnVubmluZ1wiLiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91ciBzdXJ2ZXkgaGFzIGEgc3RhcnQgcGFnZSwgb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyh0aGlzLnN0YXJ0ZWRQYWdlLCB0cnVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgICB0aGlzLm9uU3RhcnRlZC5maXJlKHRoaXMsIHt9KTtcbiAgICBpZiAoISF0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIHF1ZXN0aW9uIHZhbHVlcyBvbiB0aGUgY3VycmVudCBwYWdlIGFyZSB2YWxpZGF0aW5nIG9uIHRoZSBzZXJ2ZXIgYXQgdGhlIGN1cnJlbnQgbW9tZW50LlxuICAgKiBAc2VlIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNWYWxpZGF0aW5nT25TZXJ2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmFsaWRhdGluZ09uU2VydmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldElzVmFsaWRhdGluZ09uU2VydmVyKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmFsaWRhdGluZ09uU2VydmVyXCIsIHZhbCk7XG4gICAgdGhpcy5vbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBkb1NlcnZlclZhbGlkYXRpb24oXG4gICAgZG9Db21wbGV0ZTogYm9vbGVhbixcbiAgICBpc1ByZXZpZXc6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zIHx8XG4gICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuaXNFbXB0eVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWRvQ29tcGxldGUgJiYgdGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25Db21wbGV0ZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgZGF0YTogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICBzdXJ2ZXk6IHRoaXMsXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuY29tcGxldGVTZXJ2ZXJWYWxpZGF0aW9uKG9wdGlvbnMsIGlzUHJldmlldyk7XG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRvQ29tcGxldGUgJiYgdGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25Db21wbGV0ZVwiKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmFjdGl2ZVBhZ2UucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpXG4gICAgICAgICAgb3B0aW9ucy5kYXRhW3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKHRydWUpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zOiBhbnksIGlzUHJldmlldzogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIoZmFsc2UpO1xuICAgIGlmICghb3B0aW9ucyAmJiAhb3B0aW9ucy5zdXJ2ZXkpIHJldHVybjtcbiAgICB2YXIgc2VsZiA9IG9wdGlvbnMuc3VydmV5O1xuICAgIHZhciBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgIHZhciBoYXNUb0ZvY3VzID0gdGhpcy5mb2N1c09uRmlyc3RFcnJvcjtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gc2VsZi5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uW1wiZXJyb3JzXCJdKSB7XG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvcnNbbmFtZV0sIHRoaXMpKTtcbiAgICAgICAgICBpZiAoaGFzVG9Gb2N1cykge1xuICAgICAgICAgICAgaGFzVG9Gb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCEhcXVlc3Rpb24ucGFnZSkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcXVlc3Rpb24ucGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXN0aW9uLmZvY3VzKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5maXJlVmFsaWRhdGVkRXJyb3JzT25QYWdlKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgIH1cbiAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgaWYgKGlzUHJldmlldykge1xuICAgICAgICB0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNlbGYuaXNMYXN0UGFnZSkgc2VsZi5kb0NvbXBsZXRlKCk7XG4gICAgICAgIGVsc2Ugc2VsZi5kb05leHRQYWdlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBkb05leHRQYWdlKCkge1xuICAgIHZhciBjdXJQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmNoZWNrT25QYWdlVHJpZ2dlcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDb21wbGV0ZWQpIHtcbiAgICAgIGlmICh0aGlzLnNlbmRSZXN1bHRPblBhZ2VOZXh0KSB7XG4gICAgICAgIHRoaXMuc2VuZFJlc3VsdCh0aGlzLnN1cnZleVBvc3RJZCwgdGhpcy5jbGllbnRJZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY3VyUGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4ICsgMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9Db21wbGV0ZSh0cnVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldENvbXBsZXRlZCgpIHtcbiAgICB0aGlzLmlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50IGZvciB0aGUgY29tcGxldGUgcGFnZS5cbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcbiAgICB2YXIgaHRtbCA9IHRoaXMucmVuZGVyZWRDb21wbGV0ZWRIdG1sO1xuICAgIGlmIChodG1sKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbChodG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0aW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBIVE1MIGNvbnRlbnQsIHRoYXQgaXMgc2hvd24gdG8gYSB1c2VyIHRoYXQgaGFkIGNvbXBsZXRlZCB0aGUgc3VydmV5IGJlZm9yZS5cbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY29tcGxldGVkQmVmb3JlSHRtbCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0h0bWwodGhpcy5jb21wbGV0ZWRCZWZvcmVIdG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0aW5nU3VydmV5QmVmb3JlXCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBIVE1MIGNvbnRlbnQsIHRoYXQgaXMgc2hvd3Mgd2hlbiBhIHN1cnZleSBsb2FkcyB0aGUgc3VydmV5IEpTT04uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZExvYWRpbmdIdG1sKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubG9hZGluZ0h0bWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMubG9hZGluZ0h0bWwpO1xuICAgIH1cbiAgICByZXR1cm4gXCI8aDM+XCIgKyB0aGlzLmdldExvY1N0cmluZyhcImxvYWRpbmdTdXJ2ZXlcIikgKyBcIjwvaDM+XCI7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICB2YXIgcGFnZXMgPSB0aGlzLmlzRGVzaWduTW9kZSA/IHRoaXMucGFnZXMgOiB0aGlzLnZpc2libGVQYWdlcztcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudC5nZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKHBhZ2VzLCBmYWxzZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NUZXh0XCIsIFwiXCIpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgICAgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NUZXh0XCIsIFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCA9IGZhbHNlO1xuICBwdWJsaWMgdXBkYXRlUHJvZ3Jlc3NUZXh0KG9uVmFsdWVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0NhbGN1bGF0aW5nUHJvZ3Jlc3NUZXh0KSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgb25WYWx1ZUNoYW5nZWQgJiZcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJUeXBlID09IFwicGFnZXNcIiAmJlxuICAgICAgdGhpcy5vblByb2dyZXNzVGV4dC5pc0VtcHR5XG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCA9IHRydWU7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NUZXh0XCIsIHRoaXMuZ2V0UHJvZ3Jlc3NUZXh0KCkpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVmFsdWVcIiwgdGhpcy5nZXRQcm9ncmVzcygpKTtcbiAgICB0aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiBcIlwiO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb25Db3VudDogMCxcbiAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgIHJlcXVpcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgIHJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgdGV4dDogXCJcIixcbiAgICB9O1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSBcInF1ZXN0aW9uc1wiIHx8XG4gICAgICB0eXBlID09PSBcInJlcXVpcmVkcXVlc3Rpb25zXCIgfHxcbiAgICAgIHR5cGUgPT09IFwiY29ycmVjdHF1ZXN0aW9uc1wiIHx8XG4gICAgICAhdGhpcy5vblByb2dyZXNzVGV4dC5pc0VtcHR5XG4gICAgKSB7XG4gICAgICB2YXIgaW5mbyA9IHRoaXMuZ2V0UHJvZ3Jlc3NJbmZvKCk7XG4gICAgICBvcHRpb25zLnF1ZXN0aW9uQ291bnQgPSBpbmZvLnF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLmFuc3dlcmVkUXVlc3Rpb25Db3VudCA9IGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50O1xuICAgICAgb3B0aW9ucy5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgPSBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudDtcbiAgICAgIG9wdGlvbnMucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPVxuICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50O1xuICAgIH1cblxuICAgIG9wdGlvbnMudGV4dCA9IHRoaXMuZ2V0UHJvZ3Jlc3NUZXh0Q29yZShvcHRpb25zKTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3NUZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGV4dDtcbiAgfVxuICBwcml2YXRlIGdldFByb2dyZXNzVGV4dENvcmUoaW5mbzogSVByb2dyZXNzSW5mbyk6IHN0cmluZyB7XG4gICAgdmFyIHR5cGUgPSB0aGlzLnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlID09PSBcInF1ZXN0aW9uc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50LFxuICAgICAgICBpbmZvLnF1ZXN0aW9uQ291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBcInJlcXVpcmVkcXVlc3Rpb25zXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInF1ZXN0aW9uc1Byb2dyZXNzVGV4dFwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCxcbiAgICAgICAgaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBcImNvcnJlY3RxdWVzdGlvbnNcIikge1xuICAgICAgdmFyIGNvcnJlY3RBbnN3ZXJzQ291bnQgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGNvcnJlY3RBbnN3ZXJzQ291bnQsXG4gICAgICAgIGluZm8ucXVlc3Rpb25Db3VudFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHZQYWdlcyA9IHRoaXMuaXNEZXNpZ25Nb2RlID8gdGhpcy5wYWdlcyA6IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaXNEZXNpZ25Nb2RlID8gMSA6IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJwcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oaW5kZXgsIHZQYWdlcy5sZW5ndGgpO1xuICB9XG4gIHByb3RlY3RlZCBhZnRlclJlbmRlclN1cnZleShodG1sRWxlbWVudDogYW55KSB7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyU3VydmV5LmZpcmUodGhpcywge1xuICAgICAgc3VydmV5OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLm9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgY3NzQ2xhc3NlczogY3NzQ2xhc3NlcyxcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVQYW5lbENzc0NsYXNzZXMocGFuZWw6IElQYW5lbCwgY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdGhpcy5vblVwZGF0ZVBhbmVsQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlUGFnZUNzc0NsYXNzZXMocGFnZTogSVBhZ2UsIGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHRoaXMub25VcGRhdGVQYWdlQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUGFnZShodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5pc0VtcHR5KSByZXR1cm47XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5maXJlKHRoaXMsIHtcbiAgICAgIHBhZ2U6IHRoaXMuYWN0aXZlUGFnZSxcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlckhlYWRlcihodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVySGVhZGVyLmlzRW1wdHkpIHJldHVybjtcbiAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJIZWFkZXIuZmlyZSh0aGlzLCB7XG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbi5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQuaXNFbXB0eSkgcmV0dXJuO1xuICAgIGxldCBpZCA9ICg8UXVlc3Rpb24+cXVlc3Rpb24pLmlucHV0SWQ7XG4gICAgaWYgKCEhaWQgJiYgaHRtbEVsZW1lbnQuaWQgIT09IGlkICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbGV0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQgPSBlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclBhbmVsKHBhbmVsOiBJRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFuZWwuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgfSk7XG4gIH1cbiAgbWF0cml4QmVmb3JlUm93QWRkZWQob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeEJlZm9yZVJvd0FkZGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgbWF0cml4Um93QWRkZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uTWF0cml4Um93QWRkZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgcm93OiByb3cgfSk7XG4gIH1cbiAgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBJUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlcyA9IHF1ZXN0aW9uc1tpXS5nZXRRdWVzdGlvbkZyb21BcnJheShuYW1lLCBpbmRleCk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIG1hdHJpeFJvd1JlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcm93SW5kZXg6IG51bWJlciwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uTWF0cml4Um93UmVtb3ZlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgIHJvdzogcm93LFxuICAgIH0pO1xuICB9XG4gIG1hdHJpeFJvd1JlbW92aW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvd0luZGV4OiBudW1iZXIsIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICByb3c6IHJvdyxcbiAgICAgIGFsbG93OiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5vbk1hdHJpeFJvd1JlbW92aW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWxsb3c7XG4gIH1cbiAgbWF0cml4QWxsb3dSZW1vdmVSb3coXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHJvdzogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93OiByb3csXG4gICAgICBhbGxvdzogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMub25NYXRyaXhBbGxvd1JlbW92ZVJvdy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIG1hdHJpeENlbGxDcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbENyZWF0ZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhBZnRlckNlbGxSZW5kZXIocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25NYXRyaXhBZnRlckNlbGxSZW5kZXIuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhDZWxsVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBnZXQgaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25WYWx1ZUNoYW5naW5nXCI7XG4gIH1cbiAgbWF0cml4Q2VsbFZhbGlkYXRlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IFN1cnZleUVycm9yIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxWYWxpZGF0ZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3IsIHRoaXMpIDogbnVsbDtcbiAgfVxuICBkeW5hbWljUGFuZWxBZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XG4gICAgaWYgKHRoaXMub25EeW5hbWljUGFuZWxBZGRlZC5pc0VtcHR5KSByZXR1cm47XG4gICAgdmFyIHBhbmVscyA9ICg8YW55PnF1ZXN0aW9uKS5wYW5lbHM7XG4gICAgdmFyIHBhbmVsID0gcGFuZWxzW3BhbmVscy5sZW5ndGggLSAxXTtcbiAgICB0aGlzLm9uRHluYW1pY1BhbmVsQWRkZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH0pO1xuICB9XG4gIGR5bmFtaWNQYW5lbFJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcGFuZWxJbmRleDogbnVtYmVyLCBwYW5lbDogSVBhbmVsKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9ICEhcGFuZWwgPyAoPFBhbmVsTW9kZWxCYXNlPnBhbmVsKS5xdWVzdGlvbnMgOiBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgIH1cbiAgICB0aGlzLm9uRHluYW1pY1BhbmVsUmVtb3ZlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHBhbmVsSW5kZXg6IHBhbmVsSW5kZXgsXG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgfSk7XG4gIH1cbiAgZHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBkcmFnQW5kRHJvcEFsbG93KG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIG9wdGlvbnMuYWxsb3cgPSB0cnVlO1xuICAgIHRoaXMub25EcmFnRHJvcEFsbG93LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWxsb3c7XG4gIH1cblxuICByZW5kZXJUaXRsZUFjdGlvbnMoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZWxlbWVudC5pc1BhbmVsKSByZXR1cm4gIXRoaXMub25HZXRQYW5lbFRpdGxlQWN0aW9ucy5pc0VtcHR5O1xuICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNQYWdlKSByZXR1cm4gIXRoaXMub25HZXRQYWdlVGl0bGVBY3Rpb25zLmlzRW1wdHk7XG4gICAgZWxzZSByZXR1cm4gIXRoaXMub25HZXRRdWVzdGlvblRpdGxlQWN0aW9ucy5pc0VtcHR5O1xuICB9XG4gIGVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUuZW5zdXJlUm93c1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQuZmlyZSh0aGlzLCB7IGVsZW1lbnQgfSk7XG4gIH1cblxuICBnZXRVcGRhdGVkUXVlc3Rpb25UaXRsZUFjdGlvbnMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb25CYXJJdGVtPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICB9XG5cbiAgZ2V0VXBkYXRlZFBhbmVsVGl0bGVBY3Rpb25zKFxuICAgIHBhbmVsOiBJUGFuZWwsXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uQmFySXRlbT5cbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICB0aXRsZUFjdGlvbnM6IHRpdGxlQWN0aW9ucyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRQYW5lbFRpdGxlQWN0aW9ucy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnRpdGxlQWN0aW9ucztcbiAgfVxuXG4gIGdldFVwZGF0ZWRQYWdlVGl0bGVBY3Rpb25zKHBhZ2U6IElQYWdlLCB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb25CYXJJdGVtPikge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcGFnZTogcGFnZSxcbiAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgIH07XG4gICAgdGhpcy5vbkdldFBhZ2VUaXRsZUFjdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZUFjdGlvbnM7XG4gIH1cblxuICBnZXRVcGRhdGVkTWF0cml4Um93QWN0aW9ucyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHJvdzogYW55LFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb25CYXJJdGVtPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnMsXG4gICAgICByb3c6IHJvdyxcbiAgICB9O1xuICAgIHRoaXMub25HZXRNYXRyaXhSb3dBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWN0aW9ucztcbiAgfVxuXG4gIHNjcm9sbEVsZW1lbnRUb1RvcChcbiAgICBlbGVtZW50OiBJU3VydmV5RWxlbWVudCxcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHBhZ2U6IElQYWdlLFxuICAgIGlkOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgZWxlbWVudElkOiBpZCxcbiAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLm9uU2Nyb2xsaW5nRWxlbWVudFRvVG9wLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLmNhbmNlbCkge1xuICAgICAgU3VydmV5RWxlbWVudC5TY3JvbGxFbGVtZW50VG9Ub3Aob3B0aW9ucy5lbGVtZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIGEgZmlsZSB0byBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBhIGZpbGUgcXVlc3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gZmlsZXMgZmlsZXMgdG8gdXBsb2FkXG4gICAqIEBwYXJhbSB1cGxvYWRpbmdDYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiB1cGxvYWRpbmcgdGhlIGZpbGVzXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkRmlsZXMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgICB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vblVwbG9hZEZpbGVzLmlzRW1wdHkpIHtcbiAgICAgIHVwbG9hZGluZ0NhbGxiYWNrKFwiZXJyb3JcIiwgZmlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVXBsb2FkRmlsZXMuZmlyZSh0aGlzLCB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgZmlsZXM6IGZpbGVzIHx8IFtdLFxuICAgICAgICBjYWxsYmFjazogdXBsb2FkaW5nQ2FsbGJhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5UG9zdElkKSB7XG4gICAgICB0aGlzLnVwbG9hZEZpbGVzQ29yZShuYW1lLCBmaWxlcywgdXBsb2FkaW5nQ2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRG93bmxvYWRzIGEgZmlsZSBmcm9tIHNlcnZlclxuICAgKiBAcGFyYW0gbmFtZSBhIHF1ZXN0aW9uIG5hbWVcbiAgICogQHBhcmFtIGZpbGVWYWx1ZSBhIHNpbmdsZSBmaWxlIHF1ZXN0aW9uIHZhbHVlXG4gICAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiBkb3dubG9hZGluZyB0aGUgZmlsZSBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZSBjb250ZW50XG4gICAqL1xuICBwdWJsaWMgZG93bmxvYWRGaWxlKFxuICAgIHF1ZXN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGZpbGVWYWx1ZTogYW55LFxuICAgIGNhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIGlmICh0aGlzLm9uRG93bmxvYWRGaWxlLmlzRW1wdHkpIHtcbiAgICAgICEhY2FsbGJhY2sgJiYgY2FsbGJhY2soXCJzdWNjZXNzXCIsIGZpbGVWYWx1ZS5jb250ZW50IHx8IGZpbGVWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMub25Eb3dubG9hZEZpbGUuZmlyZSh0aGlzLCB7XG4gICAgICBuYW1lOiBxdWVzdGlvbk5hbWUsXG4gICAgICBjb250ZW50OiBmaWxlVmFsdWUuY29udGVudCB8fCBmaWxlVmFsdWUsXG4gICAgICBmaWxlVmFsdWU6IGZpbGVWYWx1ZSxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGZpbGVzIGZyb20gc2VydmVyLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gcXVlc3Rpb25cbiAgICogQHBhcmFtIG5hbWUgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgZmlsZSBxdWVzdGlvbiB2YWx1ZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9mIHRoZSBjbGVhcmluZyBvcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBjbGVhckZpbGVzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vbkNsZWFyRmlsZXMuaXNFbXB0eSkge1xuICAgICAgISFjYWxsYmFjayAmJiBjYWxsYmFjayhcInN1Y2Nlc3NcIiwgdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xlYXJGaWxlcy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlQ2hvaWNlc0Zyb21TZXJ2ZXIoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBjaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHNlcnZlclJlc3VsdDogYW55XG4gICk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgIHNlcnZlclJlc3VsdDogc2VydmVyUmVzdWx0LFxuICAgIH07XG4gICAgdGhpcy5vbkxvYWRDaG9pY2VzRnJvbVNlcnZlci5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmNob2ljZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5U2VydmljZSgpOiBkeFN1cnZleVNlcnZpY2Uge1xuICAgIHJldHVybiBuZXcgZHhTdXJ2ZXlTZXJ2aWNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwbG9hZEZpbGVzQ29yZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmlsZXM6IEZpbGVbXSxcbiAgICB1cGxvYWRpbmdDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICB2YXIgcmVzcG9uc2VzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInVwbG9hZGluZ1wiLCBmaWxlKTtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLnNlbmRGaWxlKFxuICAgICAgICB0aGlzLnN1cnZleVBvc3RJZCxcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgcmVzcG9uc2VzLnB1c2goeyBjb250ZW50OiByZXNwb25zZSwgZmlsZTogZmlsZSB9KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZXMubGVuZ3RoID09PSBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKSB1cGxvYWRpbmdDYWxsYmFjayhcInN1Y2Nlc3NcIiwgcmVzcG9uc2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHVwbG9hZGluZ0NhbGxiYWNrKVxuICAgICAgICAgICAgICB1cGxvYWRpbmdDYWxsYmFjayhcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGdldFBhZ2UoaW5kZXg6IG51bWJlcik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXNbaW5kZXhdO1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4aXN0aW5nIHBhZ2UgdG8gdGhlIHN1cnZleS5cbiAgICogQHBhcmFtIHBhZ2UgYSBuZXdseSBhZGRlZCBwYWdlXG4gICAqIEBwYXJhbSBpbmRleCAtIGEgcGFnZSBpbmRleCB0byB3aGVyZSBpbnNlcnQgYSBwYWdlLiBJdCBpcyAtMSBieSBkZWZhdWx0IGFuZCB0aGUgcGFnZSB3aWxsIGJlIGFkZGVkIGludG8gdGhlIGVuZC5cbiAgICogQHNlZSBhZGROZXdQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIgPSAtMSkge1xuICAgIGlmIChwYWdlID09IG51bGwpIHJldHVybjtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gocGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAwLCBwYWdlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGFnZSBhbmQgYWRkcyBpdCB0byBhIHN1cnZleS4gR2VuZXJhdGVzIGEgbmV3IG5hbWUgaWYgdGhlIGBuYW1lYCBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZC5cbiAgICogQHBhcmFtIG5hbWUgYSBwYWdlIG5hbWVcbiAgICogQHBhcmFtIGluZGV4IC0gYSBwYWdlIGluZGV4IHRvIHdoZXJlIGluc2VydCBhIG5ldyBwYWdlLiBJdCBpcyAtMSBieSBkZWZhdWx0IGFuZCB0aGUgcGFnZSB3aWxsIGJlIGFkZGVkIGludG8gdGhlIGVuZC5cbiAgICogQHNlZSBhZGRQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkTmV3UGFnZShuYW1lOiBzdHJpbmcgPSBudWxsLCBpbmRleDogbnVtYmVyID0gLTEpIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3JlYXRlTmV3UGFnZShuYW1lKTtcbiAgICB0aGlzLmFkZFBhZ2UocGFnZSwgaW5kZXgpO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcGFnZSBmcm9tIGEgc3VydmV5LlxuICAgKiBAcGFyYW0gcGFnZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhZ2UocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlcy5sZW5ndGggPiAwID8gdGhpcy5wYWdlc1swXSA6IG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBRdWVzdGlvbiB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmVcbiAgICAgIDogdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcztcbiAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlc1swXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIGJ5IGl0cyB2YWx1ZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZU5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgKiBAc2VlIGdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBJUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSwgY2FzZUluc2Vuc2l0aXZlKTtcbiAgICByZXR1cm4gISFyZXMgPyByZXNbMF0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBxdWVzdGlvbnMgYnkgdGhlaXIgdmFsdWVOYW1lLiBuYW1lIHByb3BlcnR5IGlzIHVzZWQgaWYgdmFsdWVOYW1lIHByb3BlcnR5IGlzIGVtcHR5LlxuICAgKiBAcGFyYW0gdmFsdWVOYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZVxuICAgICAgOiB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXM7XG4gICAgdmFyIHJlcyA9IGhhc2hbdmFsdWVOYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q2FsY3VsYXRlZFZhbHVlQnlOYW1lKG5hbWU6IHN0cmluZyk6IENhbGN1bGF0ZWRWYWx1ZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuYW1lID09IHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5uYW1lKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgcXVlc3Rpb25zIGJ5IHRoZWlyIG5hbWVzLlxuICAgKiBAcGFyYW0gbmFtZXMgYW4gYXJyYXkgb2YgcXVlc3Rpb24gbmFtZXNcbiAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZXMoXG4gICAgbmFtZXM6IHN0cmluZ1tdLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElRdWVzdGlvbltdIHtcbiAgICB2YXIgcmVzdWx0OiBJUXVlc3Rpb25bXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZXNbaV0sIGNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgICBpZiAocXVlc3Rpb24pIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHBhZ2Ugb24gd2hpY2ggYW4gZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpIGlzIHBsYWNlZC5cbiAgICogQHBhcmFtIGVsZW1lbnQgUXVlc3Rpb24gb3IgUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogUGFnZU1vZGVsIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgaWYgKHBhZ2UuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gcGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIG9uIHdoaWNoIGEgcXVlc3Rpb24gaXMgbG9jYXRlZC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIGJ5IGl0J3MgbmFtZS5cbiAgICogQHBhcmFtIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlOYW1lKG5hbWU6IHN0cmluZyk6IFBhZ2VNb2RlbCB7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucGFnZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBwYWdlcyBieSB0aGVpciBuYW1lcy5cbiAgICogQHBhcmFtIG5hbWVzIGEgbGlzdCBvZiBwYWdlIG5hbWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZXNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSk6IFBhZ2VNb2RlbFtdIHtcbiAgICB2YXIgcmVzdWx0OiBQYWdlTW9kZWxbXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcbiAgICAgIGlmIChwYWdlKSByZXN1bHQucHVzaChwYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHF1ZXN0aW9ucyBpbiBhIHN1cnZleS5cbiAgICogQHBhcmFtIHZpc2libGVPbmx5IHNldCBpdCBgdHJ1ZWAsIGlmIHlvdSB3YW50IHRvIGdldCBvbmx5IHZpc2libGUgcXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0QWxsUXVlc3Rpb25zKFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdmlzaWJsZU9ubHksXG4gICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVpeiBxdWVzdGlvbnMuIEFsbCB2aXNpYmxlIHF1ZXN0aW9ucyB0aGF0IGhhcyBpbnB1dChzKSB3aWRnZXRzLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbkNvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0UXVpelF1ZXN0aW9ucygpOiBBcnJheTxJUXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PElRdWVzdGlvbj4oKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkID8gMSA6IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhZ2VzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2pdO1xuICAgICAgICBpZiAocS5xdWl6UXVlc3Rpb25Db3VudCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcGFuZWwgYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcGFuZWwgbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbEJ5TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogSVBhbmVsIHtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5nZXRBbGxQYW5lbHMoKTtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbE5hbWUgPSBwYW5lbHNbaV0ubmFtZTtcbiAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHBhbmVsTmFtZSA9IHBhbmVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHBhbmVsTmFtZSA9PSBuYW1lKSByZXR1cm4gcGFuZWxzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN1cnZleSdzIHBhbmVscy5cbiAgICovXG4gIHB1YmxpYyBnZXRBbGxQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXNbaV0uYWRkUGFuZWxzSW50b0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcGFnZSwgYnV0IGRvIG5vdCBhZGQgaXQgaW50byB0aGUgc3VydmV5LlxuICAgKiBZb3UgY2FuIHVzZSBhZGRQYWdlKHBhZ2UpIGZ1bmN0aW9uIHRvIGFkZCBpdCBpbnRvIHN1cnZleSBsYXRlci5cbiAgICogQHNlZSBhZGRQYWdlXG4gICAqIEBzZWUgYWRkTmV3UGFnZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZU5ld1BhZ2UobmFtZTogc3RyaW5nKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VNb2RlbChuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcXVlc3Rpb25PblZhbHVlQ2hhbmdpbmcodmFsdWVOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm9uVmFsdWVDaGFuZ2luZy5pc0VtcHR5KSByZXR1cm4gbmV3VmFsdWU7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICBxdWVzdGlvbjogdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHZhbHVlTmFtZSksXG4gICAgICB2YWx1ZTogdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSksXG4gICAgICBvbGRWYWx1ZTogdGhpcy5nZXRWYWx1ZSh2YWx1ZU5hbWUpLFxuICAgIH07XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlUXVlc3Rpb25WYWx1ZSh2YWx1ZU5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICBpZiAoISFxdWVzdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uc1tpXS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChxVmFsdWUgPT09IG5ld1ZhbHVlICYmIEFycmF5LmlzQXJyYXkocVZhbHVlKSAmJiAhIXRoaXMuZWRpdGluZ09iaikgfHxcbiAgICAgICAgICAhdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHFWYWx1ZSwgbmV3VmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uVmFsdWVDaGFuZ2VkXCIgfHxcbiAgICAgICAgcXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWRDb3JlKHF1ZXN0aW9uKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZENvcmUocXVlc3Rpb246IFF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEVycm9yQ291bnQgPSBxdWVzdGlvbi5nZXRBbGxFcnJvcnMoKS5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IHF1ZXN0aW9uLmhhc0Vycm9ycyh0cnVlLCB7XG4gICAgICBpc09uVmFsdWVDaGFuZ2VkOiAhdGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nLFxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgICEhcXVlc3Rpb24ucGFnZSAmJlxuICAgICAgKG9sZEVycm9yQ291bnQgPiAwIHx8IHF1ZXN0aW9uLmdldEFsbEVycm9ycygpLmxlbmd0aCA+IDApXG4gICAgKSB7XG4gICAgICB0aGlzLmZpcmVWYWxpZGF0ZWRFcnJvcnNPblBhZ2UoPFBhZ2VNb2RlbD5xdWVzdGlvbi5wYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nKFxuICAgIHZhbHVlTmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMocS52YWx1ZUZvclN1cnZleSwgbmV3VmFsdWUpKSB7XG4gICAgICAgIHEudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkQ29yZShxKSkgcmVzID0gdHJ1ZTtcbiAgICAgIHJlcyA9IHJlcyB8fCBxLmVycm9ycy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKHZhbHVlTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghIXF1ZXN0aW9ucykge1xuICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb24pO1xuICAgICAgICBxdWVzdGlvbi5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICAgIHF1ZXN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jaGVja0JpbmRpbmdzKHZhbHVlTmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKHZhbHVlTmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9PT0gXCJwcm9jZXNzaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IDxRdWVzdGlvbj5xdWVzdGlvbnNbaV07XG4gICAgICB2YXIgdmFsTmFtZSA9IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBxLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh0aGlzLmdldFZhbHVlKHZhbE5hbWUpKTtcbiAgICAgIGlmIChxLnJlcXVpcmVVcGRhdGVDb21tZW50VmFsdWUpIHtcbiAgICAgICAgcS51cGRhdGVDb21tZW50RnJvbVN1cnZleSh0aGlzLmdldENvbW1lbnQodmFsTmFtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIG5vdGlmeUFsbFF1ZXN0aW9uc09uVmFsdWVDaGFuZ2VkKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5vblN1cnZleVZhbHVlQ2hhbmdlZChcbiAgICAgICAgdGhpcy5nZXRWYWx1ZShxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrT25QYWdlVHJpZ2dlcnMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnModHJ1ZSk7XG4gICAgdmFyIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBuYW1lID0gcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICB2YWx1ZXNbbmFtZV0gPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmFkZENhbGN1bGF0ZWRWYWx1ZXNJbnRvRmlsdGVyZWRWYWx1ZXModmFsdWVzKTtcbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnModmFsdWVzLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKFxuICAgIGluY2x1ZGVJbnZzaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8UXVlc3Rpb24+ID0gW107XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuIHJlc3VsdDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYWdlLnF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICgoIWluY2x1ZGVJbnZzaWJsZSAmJiAhcXVlc3Rpb24udmlzaWJsZSkgfHwgIXF1ZXN0aW9uLm5hbWUpIGNvbnRpbnVlO1xuICAgICAgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaXNUcmlnZ2VySXNSdW5uaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgdHJpZ2dlclZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB0cmlnZ2VyS2V5czogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBjaGVja1RyaWdnZXJzKGtleTogYW55LCBpc09uTmV4dFBhZ2U6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCB8fCB0aGlzLnRyaWdnZXJzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICBmb3IgKHZhciBrIGluIGtleSkge1xuICAgICAgICB0aGlzLnRyaWdnZXJLZXlzW2tdID0ga2V5W2tdO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzVHJpZ2dlcklzUnVubmluZyA9IHRydWU7XG4gICAgdGhpcy50cmlnZ2VyS2V5cyA9IGtleTtcbiAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcnNbaV07XG4gICAgICBpZiAodHJpZ2dlci5pc09uTmV4dFBhZ2UgPT0gaXNPbk5leHRQYWdlKSB7XG4gICAgICAgIHRyaWdnZXIuY2hlY2tFeHByZXNzaW9uKFxuICAgICAgICAgIHRoaXMudHJpZ2dlcktleXMsXG4gICAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVzLFxuICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1RyaWdnZXJJc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvRWxlbWVudHNPbkxvYWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uU3VydmV5TG9hZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBnZXQgaXNSdW5uaW5nQ29uZGl0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmRpdGlvblZhbHVlcztcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzQ29tcGxldGVkIHx8XG4gICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID09PSBcInByb2Nlc3NpbmdcIiB8fFxuICAgICAgdGhpcy5pc1J1bm5pbmdDb25kaXRpb25zXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB2YXIgb2xkQ3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllcyk7XG4gICAgdGhpcy5jaGVja0lmTmV3UGFnZXNCZWNvbWVWaXNpYmxlKG9sZEN1cnJlbnRQYWdlSW5kZXgpO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uICYmXG4gICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lckNvdW50ZXIgPFxuICAgICAgICBzZXR0aW5ncy5tYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZFxuICAgICkge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyKys7XG4gICAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXJDb3VudGVyID0gMDtcbiAgICAgIGlmICh0aGlzLmNvbmRpdGlvblVwZGF0ZVZpc2libGVJbmRleGVzKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlVmlzaWJsZUluZGV4ZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uZGl0aW9uTm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25Ob3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllczogYW55KSB7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5wYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLnJlc2V0Q2FsY3VsYXRpb24oKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5kb0NhbGN1bGF0aW9uKFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMsXG4gICAgICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS5ydW5Db25kaXRpb24odGhpcy5jb25kaXRpb25WYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrSWZOZXdQYWdlc0JlY29tZVZpc2libGUob2xkQ3VycmVudFBhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgdmFyIG5ld0N1cnJlbnRQYWdlSW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZVZhbHVlKTtcbiAgICBpZiAobmV3Q3VycmVudFBhZ2VJbmRleCA8PSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMSkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSBvbGRDdXJyZW50UGFnZUluZGV4ICsgMTsgaSA8IG5ld0N1cnJlbnRQYWdlSW5kZXg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIGEgc3VydmV5IHJlc3VsdCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBwb3N0SWQgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UgcG9zdElkXG4gICAqIEBwYXJhbSBjbGllbnRJZCBUeXBpY2FsbHkgYSBjdXN0b21lciBlLW1haWwgb3IgYW4gaWRlbnRpZmllclxuICAgKiBAcGFyYW0gaXNQYXJ0aWFsQ29tcGxldGVkIFNldCBpdCB0byBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBub3QgY29tcGxldGVkIHlldCBhbmQgdGhlIHJlc3VsdHMgYXJlIGludGVybWVkaWF0ZVxuICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqL1xuICBwdWJsaWMgc2VuZFJlc3VsdChcbiAgICBwb3N0SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmIHRoaXMub25QYXJ0aWFsU2VuZCkge1xuICAgICAgdGhpcy5vblBhcnRpYWxTZW5kLmZpcmUodGhpcywgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFwb3N0SWQgJiYgdGhpcy5zdXJ2ZXlQb3N0SWQpIHtcbiAgICAgIHBvc3RJZCA9IHRoaXMuc3VydmV5UG9zdElkO1xuICAgIH1cbiAgICBpZiAoIXBvc3RJZCkgcmV0dXJuO1xuICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xuICAgIH1cbiAgICBpZiAoaXNQYXJ0aWFsQ29tcGxldGVkICYmICF0aGlzLmNsaWVudElkKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICB0aGlzLnNldENvbXBsZXRlZFN0YXRlKFwic2F2aW5nXCIsIFwiXCIpO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5zZW5kUmVzdWx0KFxuICAgICAgcG9zdElkLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgZnVuY3Rpb24oc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSwgcmVxdWVzdDogYW55KSB7XG4gICAgICAgIGlmIChzZWxmLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIFwiXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwiZXJyb3JcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZWxmLm9uU2VuZFJlc3VsdC5maXJlKHNlbGYsIHtcbiAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmNsaWVudElkLFxuICAgICAgaXNQYXJ0aWFsQ29tcGxldGVkXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIGFuZCwgb24gY2FsbGJhY2ssIGZpcmVzIHRoZSBgb25HZXRSZXN1bHRgIGV2ZW50IHdpdGggYWxsIGFuc3dlcnMgdGhhdCB5b3VyIHVzZXJzIG1hZGUgZm9yIGEgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXN1bHRJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSByZXN1bHRJZFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcXVlc3Rpb24gbmFtZVxuICAgKiBAc2VlIG9uR2V0UmVzdWx0XG4gICAqL1xuICBwdWJsaWMgZ2V0UmVzdWx0KHJlc3VsdElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRSZXN1bHQocmVzdWx0SWQsIG5hbWUsIGZ1bmN0aW9uKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIGRhdGFMaXN0OiBhbnlbXSxcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApIHtcbiAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGRhdGFMaXN0OiBkYXRhTGlzdCxcbiAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzdXJ2ZXkgSlNPTiBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogSWYgYGNsaWVudElkYCBpcyBub3QgYG51bGxgIGFuZCBhIHVzZXIgaGFkIGNvbXBsZXRlZCBhIHN1cnZleSBiZWZvcmUsIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gYGNvbXBsZXRlZGJlZm9yZWAgc3RhdGUuXG4gICAqIEBwYXJhbSBzdXJ2ZXlJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSBzdXJ2ZXlJZFxuICAgKiBAcGFyYW0gY2xpZW50SWQgdXNlcnMnIGluZGVudGlmaWVyLCBmb3IgZXhhbXBsZSBhbiBlLW1haWwgb3IgYSB1bmlxdWUgY3VzdG9tZXIgaWQgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgbG9hZFN1cnZleUZyb21TZXJ2aWNlKFxuICAgIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsLFxuICAgIGNsaWVuZElkOiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmIChzdXJ2ZXlJZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xuICAgIH1cbiAgICBpZiAoY2xpZW5kSWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbmRJZDtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgaWYgKGNsaWVuZElkKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQoXG4gICAgICAgIHRoaXMuc3VydmV5SWQsXG4gICAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGZ1bmN0aW9uKFxuICAgICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgICAganNvbjogc3RyaW5nLFxuICAgICAgICAgIGlzQ29tcGxldGVkOiBzdHJpbmcsXG4gICAgICAgICAgcmVzcG9uc2U6IGFueVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICBzZWxmLmlzQ29tcGxldGVkQmVmb3JlID0gaXNDb21wbGV0ZWQgPT0gXCJjb21wbGV0ZWRcIjtcbiAgICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmxvYWRTdXJ2ZXkodGhpcy5zdXJ2ZXlJZCwgZnVuY3Rpb24oXG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgIHJlc3VsdDogc3RyaW5nLFxuICAgICAgICByZXNwb25zZTogYW55XG4gICAgICApIHtcbiAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZWxmLmxvYWRTdXJ2ZXlGcm9tU2VydmljZUpzb24ocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgbG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihqc29uOiBhbnkpIHtcbiAgICBpZiAoIWpzb24pIHJldHVybjtcbiAgICB0aGlzLmZyb21KU09OKGpzb24pO1xuICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgdGhpcy5vbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlLmZpcmUodGhpcywge30pO1xuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpIHt9XG4gIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHt9XG4gIHByaXZhdGUgcmVzZXRWaXNpYmxlSW5kZXhlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnModHJ1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlSW5kZXhlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCAhIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMgJiZcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZC5pc0VtcHR5ICYmXG4gICAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmlzRW1wdHlcbiAgICApIHtcbiAgICAgIC8vUnVuIHVwZGF0ZSB2aXNpYmxlIGluZGV4IG9ubHkgb25lIHRpbWUgb24gZmluaXNoaW5nIHJ1bm5pbmcgY29uZGl0aW9uc1xuICAgICAgdGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcyA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUGFnZVZpc2libGVJbmRleGVzKHRoaXMuc2hvd1BhZ2VOdW1iZXJzKTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25QYWdlXCIpIHtcbiAgICAgIHZhciB2aXNQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2aXNQYWdlc1tpXS5zZXRWaXNpYmxlSW5kZXgoMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uXCIgPyAwIDogLTE7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5kZXggKz0gdGhpcy5wYWdlc1tpXS5zZXRWaXNpYmxlSW5kZXgoaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyhzaG93SW5kZXg6IGJvb2xlYW4pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzUGFnZVZpc2libGUgPSB0aGlzLnBhZ2VzW2ldLmlzVmlzaWJsZTtcbiAgICAgIHRoaXMucGFnZXNbaV0udmlzaWJsZUluZGV4ID0gaXNQYWdlVmlzaWJsZSA/IGluZGV4KysgOiAtMTtcbiAgICAgIHRoaXMucGFnZXNbaV0ubnVtID1cbiAgICAgICAgc2hvd0luZGV4ICYmIGlzUGFnZVZpc2libGUgPyB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCArIDEgOiAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGZyb21KU09OKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNDbGVhcigpO1xuICAgIHRoaXMuanNvbkVycm9ycyA9IG51bGw7XG4gICAgdmFyIGpzb25Db252ZXJ0ZXIgPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgIGpzb25Db252ZXJ0ZXIudG9PYmplY3QoanNvbiwgdGhpcyk7XG4gICAgaWYgKGpzb25Db252ZXJ0ZXIuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuanNvbkVycm9ycyA9IGpzb25Db252ZXJ0ZXIuZXJyb3JzO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0SnNvbk9iamVjdChqc29uT2JqOiBhbnkpIHtcbiAgICB0aGlzLmZyb21KU09OKGpzb25PYmopO1xuICB9XG4gIHByaXZhdGUgaXNFbmRMb2FkaW5nRnJvbUpzb246IHN0cmluZyA9IG51bGw7XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gXCJwcm9jZXNzaW5nXCI7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChcInN0YW5kYXJkXCIpO1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIGlmICh0aGlzLmhhc0Nvb2tpZSkge1xuICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XG4gICAgfVxuICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBcImNvbmRpdGlvbnNcIjtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBudWxsO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVDcmVhdGluZygpIHt9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZUNvcmUodGV4dFZhbHVlKTtcbiAgICBpZiAoIXRoaXMub25Qcm9jZXNzVGV4dFZhbHVlLmlzRW1wdHkpIHtcbiAgICAgIHZhciB3YXNFbXB0eSA9IHRoaXMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSk7XG4gICAgICB0aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZS5maXJlKHRoaXMsIHRleHRWYWx1ZSk7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPVxuICAgICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgfHwgKHdhc0VtcHR5ICYmICF0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWVDb3JlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogdm9pZCB7XG4gICAgdmFyIG5hbWUgPSB0ZXh0VmFsdWUubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmIChbXCJub1wiLCBcInJlcXVpcmVcIiwgXCJ0aXRsZVwiXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJwYWdlbm9cIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHBhZ2UgIT0gbnVsbCA/IHRoaXMudmlzaWJsZVBhZ2VzLmluZGV4T2YocGFnZSkgKyAxIDogMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicGFnZWNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLnZpc2libGVQYWdlQ291bnQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImxvY2FsZVwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gISF0aGlzLmxvY2FsZVxuICAgICAgICA/IHRoaXMubG9jYWxlXG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcnNcIiB8fCBuYW1lID09PSBcImNvcnJlY3RlZGFuc3dlcmNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImluY29ycmVjdGVkYW5zd2Vyc1wiIHx8IG5hbWUgPT09IFwiaW5jb3JyZWN0ZWRhbnN3ZXJjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5nZXRJbkNvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInF1ZXN0aW9uY291bnRcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9uQ291bnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHZhcmlhYmxlID0gdGhpcy5nZXRWYXJpYWJsZShuYW1lKTtcbiAgICBpZiAodmFyaWFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHZhcmlhYmxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldEZpcnN0TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB2YXIgZmlyc3ROYW1lID0gcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIG5hbWUgPSBmaXJzdE5hbWUgKyBuYW1lLnN1YnN0cihmaXJzdE5hbWUubGVuZ3RoKTtcbiAgICAgIG5hbWUgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgIHZhbHVlc1tmaXJzdE5hbWVdID0gdGV4dFZhbHVlLnJldHVybkRpc3BsYXlWYWx1ZVxuICAgICAgICA/IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShmYWxzZSwgdW5kZWZpbmVkKVxuICAgICAgICA6IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKG5hbWUsIHZhbHVlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUodGV4dFZhbHVlLm5hbWUpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0Rmlyc3ROYW1lKG5hbWU6IHN0cmluZyk6IElRdWVzdGlvbiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcXVlc3Rpb247XG4gICAgZG8ge1xuICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSwgdHJ1ZSk7XG4gICAgICBuYW1lID0gdGhpcy5yZWR1Y2VGaXJzdE5hbWUobmFtZSk7XG4gICAgfSB3aGlsZSAoIXF1ZXN0aW9uICYmICEhbmFtZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgcmVkdWNlRmlyc3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBvczEgPSBuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICB2YXIgcG9zMiA9IG5hbWUubGFzdEluZGV4T2YoXCJbXCIpO1xuICAgIGlmIChwb3MxIDwgMCAmJiBwb3MyIDwgMCkgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHBvcyA9IE1hdGgubWF4KHBvczEsIHBvczIpO1xuICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCBwb3MpO1xuICB9XG4gIHByaXZhdGUgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVW51c2VkVmFsdWVzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzICE9IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLmNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1Zpc2libGUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcXVlc3Rpb25Db3VudEJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIHJldHVybiAhIXF1ZXN0aW9ucyA/IHF1ZXN0aW9ucy5sZW5ndGggOiAwO1xuICB9XG4gIHByaXZhdGUgY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdmFyaWFibGUgdmFsdWUuIFZhcmlhYmxlLCB1bmxpa2UgdmFsdWVzLCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSBuYW1lIEEgdmFyaWFibGUgbmFtZVxuICAgKiBAc2VlIFNldFZhcmlhYmxlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHJlcykpIHJldHVybiByZXM7XG4gICAgaWYgKG5hbWUuaW5kZXhPZihcIi5cIikgPiAtMSB8fCBuYW1lLmluZGV4T2YoXCJbXCIpID4gLTEpIHtcbiAgICAgIGlmIChuZXcgUHJvY2Vzc1ZhbHVlKCkuaGFzVmFsdWUobmFtZSwgdGhpcy52YXJpYWJsZXNIYXNoKSlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB0aGlzLnZhcmlhYmxlc0hhc2gpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgdmFyaWFibGUgdmFsdWUuIFZhcmlhYmxlLCB1bmxpa2UgdmFsdWVzLCBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSBuYW1lIEEgdmFyaWFibGUgbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSB2YXJpYWJsZSBuZXcgdmFsdWVcbiAgICogQHNlZSBHZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy52YXJpYWJsZXNIYXNoW25hbWVdID0gbmV3VmFsdWU7XG4gICAgdGhpcy5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChuYW1lKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbGwgdmFyaWFibGVzIGluIHRoZSBzdXJ2ZXkuIFVzZSBzZXRWYXJpYWJsZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgdmFyaWFibGUuXG4gICAqIEBzZWUgZ2V0VmFyaWFibGVcbiAgICogQHNlZSBzZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIGdldFZhcmlhYmxlTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhcmlhYmxlc0hhc2gpIHtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLy9JU3VydmV5IGRhdGFcbiAgcHJvdGVjdGVkIGdldFVuYmluZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpIGJ5IGEgcXVlc3Rpb24ncyBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBBIHF1ZXN0aW9uIG5hbWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKS4gSXQgcnVucyBhbGwgdHJpZ2dlcnMgYW5kIGNvbmRpdGlvbnMgKGB2aXNpYmxlSWZgIHByb3BlcnRpZXMpLlxuICAgKlxuICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgaWYgYGdvTmV4dFBhZ2VBdXRvbWF0aWNgIGlzIGB0cnVlYCBhbmQgYWxsIHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlIGFyZSBhbnN3ZXJlZCBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSBuZXcgcXVlc3Rpb24gdmFsdWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgZ2V0VmFsdWVcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZUlmXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJsZUlmXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIHNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdRdWVzdGlvblZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdmFyIG5ld1ZhbHVlID0gbmV3UXVlc3Rpb25WYWx1ZTtcbiAgICBpZiAoYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbk9uVmFsdWVDaGFuZ2luZyhuYW1lLCBuZXdRdWVzdGlvblZhbHVlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nICYmXG4gICAgICB0aGlzLmNoZWNrRXJyb3JzT25WYWx1ZUNoYW5naW5nKG5hbWUsIG5ld1ZhbHVlKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5lZGl0aW5nT2JqICYmXG4gICAgICB0aGlzLmlzVmFsdWVFcXVhbChuYW1lLCBuZXdWYWx1ZSkgJiZcbiAgICAgIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgbmV3UXVlc3Rpb25WYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLmRlbGV0ZURhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVPblNldFZhbHVlKFxuICAgICAgbmFtZSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICBsb2NOb3RpZmljYXRpb24sXG4gICAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVPblNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVRdWVzdGlvblZhbHVlKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uID09PSB0cnVlIHx8IHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIHZhciB0cmlnZ2VyS2V5czogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdHJpZ2dlcktleXNbbmFtZV0gPSB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgb2xkVmFsdWU6IG9sZFZhbHVlIH07XG4gICAgdGhpcy5ydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHRyaWdnZXJLZXlzLCBmYWxzZSk7XG4gICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKVxuICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uICE9PSBcInRleHRcIikge1xuICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCh0cnVlKTtcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVFcXVhbChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgaWYgKG9sZFZhbHVlID09PSBcIlwiIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIG9sZFZhbHVlID0gbnVsbDtcbiAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IG51bGwpIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZUFkZGVkKHBhZ2U6IFBhZ2VNb2RlbCkge1xuICAgIHBhZ2Uuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBpZiAoIXBhZ2UubmFtZSkgcGFnZS5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUodGhpcy5wYWdlcywgXCJwYWdlXCIpO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhZ2UpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0geyBwYWdlOiBwYWdlIH07XG4gICAgdGhpcy5vblBhZ2VBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZVJlbW92ZWQocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKG51bGwpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2VuZXJhdGVOZXdOYW1lKGVsZW1lbnRzOiBBcnJheTxhbnk+LCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIga2V5czogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykga2V5c1tlbGVtZW50c1tpXVtcIm5hbWVcIl1dID0gdHJ1ZTtcbiAgICB2YXIgaW5kZXggPSAxO1xuICAgIHdoaWxlIChrZXlzW2Jhc2VOYW1lICsgaW5kZXhdKSBpbmRleCsrO1xuICAgIHJldHVybiBiYXNlTmFtZSArIGluZGV4O1xuICB9XG4gIHByb3RlY3RlZCB0cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWU6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgIXRoaXMuZ29OZXh0UGFnZUF1dG9tYXRpYyB8fFxuICAgICAgIXRoaXMuY3VycmVudFBhZ2VcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPnRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lKTtcbiAgICBpZiAoXG4gICAgICAhcXVlc3Rpb24gfHxcbiAgICAgICghIXF1ZXN0aW9uICYmXG4gICAgICAgICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24uc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSkpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChxdWVzdGlvbi5oYXNFcnJvcnMoZmFsc2UpICYmICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUVycm9yKCkpIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucygpO1xuICAgIGlmIChxdWVzdGlvbnMuaW5kZXhPZihxdWVzdGlvbikgPCAwKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0uaGFzSW5wdXQgJiYgcXVlc3Rpb25zW2ldLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKGZhbHNlKSkge1xuICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZ29OZXh0UGFnZUF1dG9tYXRpYyA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIHRoaXMuYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpY1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tbWVudCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgQSBjb21tZW50J3MgbmFtZS5cbiAgICogQHNlZSBzZXRDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGFbbmFtZSArIHRoaXMuY29tbWVudFByZWZpeF07XG4gICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBcIlwiO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBjb21tZW50IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBBIGNvbW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIG5ld1ZhbHVlIEEgbmV3IGNvbW1lbnQgdmFsdWUuXG4gICAqIEBzZWUgZ2V0Q29tbWVudFxuICAgKi9cbiAgcHVibGljIHNldENvbW1lbnQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZVxuICApIHtcbiAgICBpZiAoIW5ld1ZhbHVlKSBuZXdWYWx1ZSA9IFwiXCI7XG4gICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy5nZXRDb21tZW50KG5hbWUpKSkgcmV0dXJuO1xuICAgIHZhciBjb21tZW50TmFtZSA9IG5hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXg7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5kZWxldGVEYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBjb21tZW50TmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZShuYW1lKTtcbiAgICBpZiAoISFxdWVzdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVlc3Rpb25zW2ldLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZChxdWVzdGlvbnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobG9jTm90aWZpY2F0aW9uICE9PSBcInRleHRcIikge1xuICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmIChxdWVzdGlvbikge1xuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgbmFtZTogY29tbWVudE5hbWUsXG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdmFsdWUgZnJvbSB0aGUgc3VydmV5IHJlc3VsdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZS4gVHlwaWNhbGx5IGl0IGlzIGEgcXVlc3Rpb24gbmFtZS5cbiAgICovXG4gIHB1YmxpYyBjbGVhclZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgbnVsbCk7XG4gICAgdGhpcy5zZXRDb21tZW50KG5hbWUsIG51bGwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBjbGVhciB2YWx1ZSBvbiBkaXNhYmxlIGl0ZW1zIGluIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMuXG4gICAqIEJ5IGRlZmF1bHQsIHZhbHVlcyBhcmUgbm90IGNsZWFyZWQgb24gZGlzYWJsZWQgdGhlIGNvcnJlc3BvbmRlZCBpdGVtcy4gVGhpcyBwcm9wZXJ0eSBpcyBub3QgcGVyc2lzdGVkIGluIHN1cnZleSBKU09OIGFuZCB5b3UgaGF2ZSB0byBzZXQgaXQgaW4gY29kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjbGVhclZhbHVlT25EaXNhYmxlSXRlbXNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNsZWFyVmFsdWVPbkRpc2FibGVJdGVtc1wiLCB2YWwpO1xuICB9XG4gIGdldCBpc0NsZWFyVmFsdWVPbkhpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlcyA9PSBcIm9uSGlkZGVuXCIgfHxcbiAgICAgIHRoaXMuaXNDbGVhclZhbHVlT25IaWRkZW5Db250YWluZXJcbiAgICApO1xuICB9XG4gIGdldCBpc0NsZWFyVmFsdWVPbkhpZGRlbkNvbnRhaW5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlcyA9PSBcIm9uSGlkZGVuQ29udGFpbmVyXCIgJiZcbiAgICAgICF0aGlzLmlzU2hvd2luZ1ByZXZpZXcgJiZcbiAgICAgICF0aGlzLnJ1bm5pbmdQYWdlc1xuICAgICk7XG4gIH1cbiAgcXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgdmlzaWJsZTogbmV3VmFsdWUsXG4gICAgfSk7XG4gIH1cbiAgcGFnZVZpc2liaWxpdHlDaGFuZ2VkKHBhZ2U6IElQYWdlLCBuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgaWYgKG5ld1ZhbHVlICYmICF0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUGFnZVZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgcGFnZTogcGFnZSxcbiAgICAgIHZpc2libGU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHBhbmVsVmlzaWJpbGl0eUNoYW5nZWQocGFuZWw6IElQYW5lbCwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhbmVsVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICB2aXNpYmxlOiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfVxuICBxdWVzdGlvbkNyZWF0ZWQocXVlc3Rpb246IElRdWVzdGlvbik6IGFueSB7XG4gICAgdGhpcy5vblF1ZXN0aW9uQ3JlYXRlZC5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHF1ZXN0aW9uIH0pO1xuICB9XG4gIHF1ZXN0aW9uQWRkZWQoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHBhcmVudFBhbmVsOiBhbnksXG4gICAgcm9vdFBhbmVsOiBhbnlcbiAgKSB7XG4gICAgaWYgKCFxdWVzdGlvbi5uYW1lKSB7XG4gICAgICBxdWVzdGlvbi5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUoXG4gICAgICAgIHRoaXMuZ2V0QWxsUXVlc3Rpb25zKGZhbHNlLCB0cnVlKSxcbiAgICAgICAgXCJxdWVzdGlvblwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISEoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5wYWdlKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQoPFF1ZXN0aW9uPnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25RdWVzdGlvbkFkZGVkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHBhcmVudFBhbmVsOiBwYXJlbnRQYW5lbCxcbiAgICAgIHJvb3RQYW5lbDogcm9vdFBhbmVsLFxuICAgIH0pO1xuICB9XG4gIHF1ZXN0aW9uUmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc1JlbW92ZWQoXG4gICAgICA8UXVlc3Rpb24+cXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5uYW1lLFxuICAgICAgcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKClcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUXVlc3Rpb25SZW1vdmVkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICB9KTtcbiAgfVxuICBxdWVzdGlvblJlbmFtZWQoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBvbGROYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWVOYW1lOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUmVtb3ZlZCg8UXVlc3Rpb24+cXVlc3Rpb24sIG9sZE5hbWUsIG9sZFZhbHVlTmFtZSk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKDxRdWVzdGlvbj5xdWVzdGlvbik7XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlcyA9IHtcbiAgICBuYW1lczoge30sXG4gICAgbmFtZXNJbnNlbnNpdGl2ZToge30sXG4gICAgdmFsdWVOYW1lczoge30sXG4gICAgdmFsdWVOYW1lc0luc2Vuc2l0aXZlOiB7fSxcbiAgfTtcbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc0NsZWFyKCkge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmUgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSA9IHt9O1xuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKHF1ZXN0aW9uc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoZXNBZGRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaEFkZGVkQ29yZShcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLm5hbWVcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc1JlbW92ZWQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoISFuYW1lKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsIHF1ZXN0aW9uLCBuYW1lKTtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhdmFsdWVOYW1lKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMsXG4gICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICB2YWx1ZU5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaEFkZGVkQ29yZShoYXNoOiBhbnksIHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgaWYgKCEhcmVzKSB7XG4gICAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICAgIGlmIChyZXMuaW5kZXhPZihxdWVzdGlvbikgPCAwKSB7XG4gICAgICAgIHJlcy5wdXNoKHF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFzaFtuYW1lXSA9IFtxdWVzdGlvbl07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoaGFzaDogYW55LCBxdWVzdGlvbjogUXVlc3Rpb24sIG5hbWU6IHN0cmluZykge1xuICAgIHZhciByZXMgPSBoYXNoW25hbWVdO1xuICAgIGlmICghcmVzKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gcmVzLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKHJlcy5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIGhhc2hbbmFtZV07XG4gICAgfVxuICB9XG4gIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xuICAgIGlmICghcGFuZWwubmFtZSkge1xuICAgICAgcGFuZWwubmFtZSA9IHRoaXMuZ2VuZXJhdGVOZXdOYW1lKFxuICAgICAgICB0aGlzLmdldEFsbFBhbmVscyhmYWxzZSwgdHJ1ZSksXG4gICAgICAgIFwicGFuZWxcIlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc1BhbmVsQWRkZWQoPFBhbmVsTW9kZWxCYXNlPig8YW55PnBhbmVsKSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25QYW5lbEFkZGVkLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgbmFtZTogcGFuZWwubmFtZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHBhcmVudFBhbmVsOiBwYXJlbnRQYW5lbCxcbiAgICAgIHJvb3RQYW5lbDogcm9vdFBhbmVsLFxuICAgIH0pO1xuICB9XG4gIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhbmVsUmVtb3ZlZC5maXJlKHRoaXMsIHsgcGFuZWw6IHBhbmVsLCBuYW1lOiBwYW5lbC5uYW1lIH0pO1xuICB9XG4gIHZhbGlkYXRlUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHZhbGlkYXRlUGFuZWwocGFuZWw6IElQYW5lbCk6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUGFuZWwuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVBhbmVsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IGh0bWw6IGh0bWwgfTtcbiAgICB0aGlzLm9uUHJvY2Vzc0h0bWwuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dChvcHRpb25zLmh0bWwsIHRydWUpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dEV4KHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZmFsc2UpLnRleHQ7XG4gIH1cbiAgcHJvY2Vzc1RleHRFeChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuLFxuICAgIGRvRW5jb2Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgdGV4dDogdGhpcy5wcm9jZXNzVGV4dENvcmUodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBkb0VuY29kaW5nKSxcbiAgICAgIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSxcbiAgICB9O1xuICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzVGV4dENvcmUoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbixcbiAgICBkb0VuY29kaW5nOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGRvRW5jb2RpbmcpO1xuICB9XG4gIGdldFN1cnZleU1hcmtkb3duSHRtbChlbGVtZW50OiBCYXNlLCB0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBodG1sOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICB0aGlzLm9uVGV4dE1hcmtkb3duLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuaHRtbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhbW91bnQgb2YgY29ycmVjdGVkIHF1aXogYW5zd2Vycy5cbiAgICovXG4gIHB1YmxpYyBnZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50Q29yZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWl6IHF1ZXN0aW9uIG51bWJlci4gSXQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIGBnZXRRdWl6UXVlc3Rpb25zLmxlbmd0aGAgYmVjYXVzZSBzb21lIHdpZGdldHMgbGlrZSBtYXRyaXggbWF5IGhhdmUgc2V2ZXJhbCBxdWVzdGlvbnMuXG4gICAqIEBzZWUgZ2V0UXVpelF1ZXN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldFF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgKz0gKDxRdWVzdGlvbj5xdWVzdGlvbnNbaV0pLnF1aXpRdWVzdGlvbkNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFtb3VudCBvZiBpbmNvcnJlY3QgcXVpeiBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudENvcmUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnRDb3JlKGlzQ29ycmVjdDogYm9vbGVhbik6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiA8SVF1ZXN0aW9uPm51bGwsXG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgY29ycmVjdEFuc3dlcnM6IDAsXG4gICAgICBpbmNvcnJlY3RBbnN3ZXJzOiAwLFxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPnF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBxdWl6UXVlc3Rpb25Db3VudCA9IHEucXVpelF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLnF1ZXN0aW9uID0gcTtcbiAgICAgIG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPSBxLmNvcnJlY3RBbnN3ZXJDb3VudDtcbiAgICAgIG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA9IHF1aXpRdWVzdGlvbkNvdW50IC0gb3B0aW9ucy5jb3JyZWN0QW5zd2VycztcbiAgICAgIG9wdGlvbnMucmVzdWx0ID0gb3B0aW9ucy5xdWVzdGlvbi5pc0Fuc3dlckNvcnJlY3QoKTtcbiAgICAgIHRoaXMub25Jc0Fuc3dlckNvcnJlY3QuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgIGlmIChpc0NvcnJlY3QpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPCBxdWl6UXVlc3Rpb25Db3VudCkge1xuICAgICAgICAgIHZhciBhZGRDb3VudCA9IG9wdGlvbnMuY29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgaWYgKGFkZENvdW50ID09IDAgJiYgb3B0aW9ucy5yZXN1bHQpIGFkZENvdW50ID0gMTtcbiAgICAgICAgICBjb3VudGVyICs9IGFkZENvdW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA8IHF1aXpRdWVzdGlvbkNvdW50KSB7XG4gICAgICAgICAgY291bnRlciArPSBvcHRpb25zLmluY29ycmVjdEFuc3dlcnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH1cbiAgZ2V0Q29ycmVjdGVkQW5zd2VycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gIH1cbiAgZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB0aW1lciBwYW5lbCBwb3NpdGlvbi4gVGhlIHRpbWVyIHBhbmVsIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IGhvdyBtdWNoIHRpbWUgYW4gZW5kIHVzZXIgc3BlbmRzIG9uIGEgc3VydmV5L3BhZ2UuXG4gICAqXG4gICAqIFRoZSBhdmFpbGFibGUgb3B0aW9uczpcbiAgICogLSBgdG9wYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIHRvcC5cbiAgICogLSBgYm90dG9tYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIGJvdHRvbS5cbiAgICogLSBgbm9uZWAgLSBkbyBub3QgZGlzcGxheSBhIHRpbWVyIHBhbmVsLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGVxdWFsIHRvICdub25lJywgdGhlIHN1cnZleSBjYWxscyB0aGUgYHN0YXJ0VGltZXIoKWAgbWV0aG9kIG9uIHN1cnZleSByZW5kZXJpbmcuXG4gICAqIEBzZWUgc2hvd1RpbWVyUGFuZWxNb2RlXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHN0b3BUaW1lclxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGltZXJQYW5lbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbFwiLCBcIm5vbmVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaW1lclBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1RpbWVyUGFuZWxTaG93aW5nT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaW1lclN0YXJ0ZWQgJiYgdGhpcy5zaG93VGltZXJQYW5lbCA9PSBcInRvcFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmlzVGltZXJTdGFydGVkICYmIHRoaXMuc2hvd1RpbWVyUGFuZWwgPT0gXCJib3R0b21cIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXQgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciBkaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2Ugb3IgZm9yIHRoZSBlbnRpcmUgc3VydmV5LlxuICAgKlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHBhZ2VgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3IgcGFnZVxuICAgKiAtIGBzdXJ2ZXlgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3Igc3VydmV5XG4gICAqXG4gICAqIFVzZSB0aGUgYG9uVGltZXJQYW5lbEluZm9UZXh0YCBldmVudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogQHNlZSBzaG93VGltZXJQYW5lbFxuICAgKiBAc2VlIG9uVGltZXJQYW5lbEluZm9UZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaW1lclBhbmVsTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgXCJhbGxcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbE1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpbWVySW5mb1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgdGV4dDogdGhpcy5nZXRUaW1lckluZm9UZXh0KCkgfTtcbiAgICB0aGlzLm9uVGltZXJQYW5lbEluZm9UZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGxvYyA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLCB0cnVlKTtcbiAgICBsb2MudGV4dCA9IG9wdGlvbnMudGV4dDtcbiAgICByZXR1cm4gbG9jLnRleHRPckh0bWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUaW1lckluZm9UZXh0KCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIlwiO1xuICAgIHZhciBwYWdlU3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2UudGltZVNwZW50KTtcbiAgICB2YXIgc3VydmV5U3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHRoaXMudGltZVNwZW50KTtcbiAgICB2YXIgcGFnZUxpbWl0U2VjID0gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpO1xuICAgIHZhciBwYWdlTGltaXQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2VMaW1pdFNlYyk7XG4gICAgdmFyIHN1cnZleUxpbWl0ID0gdGhpcy5nZXREaXNwbGF5VGltZSh0aGlzLm1heFRpbWVUb0ZpbmlzaCk7XG4gICAgaWYgKHRoaXMuc2hvd1RpbWVyUGFuZWxNb2RlID09IFwicGFnZVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvUGFnZVRleHQocGFnZSwgcGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcInN1cnZleVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcImFsbFwiKSB7XG4gICAgICBpZiAocGFnZUxpbWl0U2VjIDw9IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPD0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lclNwZW50QWxsXCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICAgIHBhZ2VTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHBhZ2VMaW1pdFNlYyA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyTGltaXRBbGxcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgICAgcGFnZVNwZW50LFxuICAgICAgICAgIHBhZ2VMaW1pdCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHBhZ2VUZXh0ID0gdGhpcy5nZXRUaW1lckluZm9QYWdlVGV4dChwYWdlLCBwYWdlU3BlbnQsIHBhZ2VMaW1pdCk7XG4gICAgICBsZXQgc3VydmV5VGV4dCA9IHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgICAgcmV0dXJuIHBhZ2VUZXh0ICsgXCIgXCIgKyBzdXJ2ZXlUZXh0O1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGdldFRpbWVySW5mb1BhZ2VUZXh0KFxuICAgIHBhZ2U6IFBhZ2VNb2RlbCxcbiAgICBwYWdlU3BlbnQ6IHN0cmluZyxcbiAgICBwYWdlTGltaXQ6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICB9XG4gIHByaXZhdGUgZ2V0VGltZXJJbmZvU3VydmV5VGV4dChcbiAgICBzdXJ2ZXlTcGVudDogc3RyaW5nLFxuICAgIHN1cnZleUxpbWl0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzcGxheVRpbWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHZhciBtaW4gPSBNYXRoLmZsb29yKHZhbCAvIDYwKTtcbiAgICB2YXIgc2VjID0gdmFsICUgNjA7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1pbiA+IDApIHtcbiAgICAgIHJlcyArPSBtaW4gKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJNaW5cIik7XG4gICAgfVxuICAgIGlmIChyZXMgJiYgc2VjID09IDApIHJldHVybiByZXM7XG4gICAgaWYgKHJlcykgcmVzICs9IFwiIFwiO1xuICAgIHJldHVybiByZXMgKyBzZWMgKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTZWNcIik7XG4gIH1cbiAgcHJpdmF0ZSB0aW1lckZ1bmM6IGFueSA9IG51bGw7XG4gIC8qKlxuICAgKiBTdGFydHMgYSB0aW1lciB0aGF0IHdpbGwgY2FsY3VsYXRlIGhvdyBtdWNoIHRpbWUgZW5kLXVzZXIgc3BlbmRzIG9uIHRoZSBzdXJ2ZXkgb3Igb24gcGFnZXMuXG4gICAqIEBzZWUgc3RvcFRpbWVyXG4gICAqIEBzZWUgdGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgc3RhcnRUaW1lcigpIHtcbiAgICBpZiAodGhpcy5pc1RpbWVyU3RhcnRlZCB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRpbWVyRnVuYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5kb1RpbWVyKCk7XG4gICAgfTtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gdHJ1ZTtcbiAgICBTdXJ2ZXlUaW1lci5pbnN0YW5jZS5zdGFydCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgc3RhcnRUaW1lckZyb21VSSgpIHtcbiAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbCAhPSBcIm5vbmVcIiAmJiB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgdGltZXIuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIHN0b3BUaW1lcigpIHtcbiAgICBpZiAoIXRoaXMuaXNUaW1lclN0YXJ0ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gZmFsc2U7XG4gICAgU3VydmV5VGltZXIuaW5zdGFuY2Uuc3RvcCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcyBhbiBlbmQgdXNlciBzcGVuZHMgb24gdGhlIHN1cnZleVxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSBQYWdlTW9kZWwudGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgdGltZVNwZW50ID0gMDtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0IHRvIGZpbmlzaCBhIHN1cnZleS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgbWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBwYWdlIGluIHRoZSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0LlxuICAgKlxuICAgKiBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgdmFsdWUgZm9yIGV2ZXJ5IHBhZ2UuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFxuICAgKiBAc2VlIFBhZ2VNb2RlbC5tYXhUaW1lVG9GaW5pc2hcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGltZVRvRmluaXNoUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoUGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFBhZ2VcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlIHx8IHBhZ2UubWF4VGltZVRvRmluaXNoIDwgMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHBhZ2UubWF4VGltZVRvRmluaXNoID4gMFxuICAgICAgPyBwYWdlLm1heFRpbWVUb0ZpbmlzaFxuICAgICAgOiB0aGlzLm1heFRpbWVUb0ZpbmlzaFBhZ2U7XG4gIH1cbiAgcHJvdGVjdGVkIGRvVGltZXIoKSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmIChwYWdlKSB7XG4gICAgICBwYWdlLnRpbWVTcGVudCA9IHBhZ2UudGltZVNwZW50ICsgMTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSB0aGlzLnRpbWVTcGVudCArIDE7XG4gICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgIGlmICh0aGlzLm1heFRpbWVUb0ZpbmlzaCA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPT0gdGhpcy50aW1lU3BlbnQpIHtcbiAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgIH1cbiAgICBpZiAocGFnZSkge1xuICAgICAgdmFyIHBhZ2VMaW1pdCA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICAgIGlmIChwYWdlTGltaXQgPiAwICYmIHBhZ2VMaW1pdCA9PSBwYWdlLnRpbWVTcGVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaW5TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy9JU3VydmV5SW1wbGVtZW50b3JcbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vSVN1cnZleVRyaWdnZXJPd25lclxuICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICB2YXIgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRQYWdlc0J5TmFtZXMocGFnZXMpKTtcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBpZiAoaXNWYXJpYWJsZSkge1xuICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3Nvci5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICAgIGlmIChmaXJzdE5hbWUgPT0gbmFtZSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpKSByZXR1cm47XG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSk7XG4gICAgICAgICAgcHJvY2Vzc29yLnNldFZhbHVlKGRhdGEsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGZpcnN0TmFtZSwgZGF0YVtmaXJzdE5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb3B5VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgZnJvbU5hbWU6IHN0cmluZykge1xuICAgIGlmICghbmFtZSB8fCAhZnJvbU5hbWUpIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIHZhciB2YWx1ZSA9IHByb2Nlc3Nvci5nZXRWYWx1ZShmcm9tTmFtZSwgdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpKTtcbiAgICB0aGlzLnNldFRyaWdnZXJWYWx1ZShuYW1lLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG4gIGZvY3VzUXVlc3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lLCB0cnVlKTtcbiAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi5pc1Zpc2libGUgfHwgIXF1ZXN0aW9uLnBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gPFBhZ2VNb2RlbD5xdWVzdGlvbi5wYWdlO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBxdWVzdGlvbi5mb2N1cygpLCAxO1xuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRSb3dXcmFwcGVyQ29tcG9uZW50TmFtZShyb3c6IFF1ZXN0aW9uUm93TW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93V3JhcHBlckNvbXBvbmVudERhdGEocm93OiBRdWVzdGlvblJvd01vZGVsKTogYW55IHtcbiAgICByZXR1cm4gcm93O1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoZWxlbWVudDogYW55LCByZWFzb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGVsZW1lbnQ6IGFueSwgcmVhc29uPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHVibGljIGdldE1hdHJpeENlbGxUZW1wbGF0ZURhdGEoY2VsbDogYW55KSB7XG4gICAgcmV0dXJuIGNlbGwucXVlc3Rpb247XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nKTogQXJyYXk8SUZpbmRFbGVtZW50PiB7XG4gICAgaWYgKCEhdGV4dCkgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzOiBBcnJheTxJRmluZEVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnNlYXJjaFRleHQodGV4dCwgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIGRpc3Bvc2Ugc3VydmV5IG1vZGVsIHByb3Blcmx5LlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuZWRpdGluZ09iaiA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW1xuICB7XG4gICAgbmFtZTogXCJsb2NhbGVcIixcbiAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXModHJ1ZSk7XG4gICAgfSxcbiAgICBvbkdldFZhbHVlOiAob2JqOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIG9iai5sb2NhbGUgPT0gc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGUgPyBudWxsIDogb2JqLmxvY2FsZTtcbiAgICB9LFxuICB9LFxuICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIsIGRlcGVuZHNPbjogXCJsb2NhbGVcIiB9LFxuICB7XG4gICAgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIsXG4gICAgZGVwZW5kc09uOiBcImxvY2FsZVwiLFxuICB9LFxuICB7IG5hbWU6IFwibG9nb1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTG9nb1wiIH0sXG4gIHsgbmFtZTogXCJsb2dvV2lkdGhcIiwgZGVmYXVsdDogXCIzMDBweFwiLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibG9nb0hlaWdodFwiLCBkZWZhdWx0OiBcIjIwMHB4XCIsIG1pblZhbHVlOiAwIH0sXG4gIHtcbiAgICBuYW1lOiBcImxvZ29GaXRcIixcbiAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiY29udGFpblwiLCBcImNvdmVyXCIsIFwiZmlsbFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwibG9nb1Bvc2l0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJsZWZ0XCIsXG4gICAgY2hvaWNlczogW1wibm9uZVwiLCBcImxlZnRcIiwgXCJyaWdodFwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSxcbiAgfSxcbiAgeyBuYW1lOiBcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcImZvY3VzT25GaXJzdEVycm9yOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwiY29tcGxldGVkSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRIdG1sXCIgfSxcbiAge1xuICAgIG5hbWU6IFwiY29tcGxldGVkQmVmb3JlSHRtbDpodG1sXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlZEJlZm9yZUh0bWxcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uOmh0bWxjb25kaXRpb25zXCIsXG4gICAgY2xhc3NOYW1lOiBcImh0bWxjb25kaXRpb25pdGVtXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJsb2FkaW5nSHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMb2FkaW5nSHRtbFwiIH0sXG4gIHsgbmFtZTogXCJwYWdlczpzdXJ2ZXlwYWdlc1wiLCBjbGFzc05hbWU6IFwicGFnZVwiIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgIGFsdGVybmF0aXZlTmFtZTogXCJlbGVtZW50c1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBvbkdldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIG9uU2V0VmFsdWU6IGZ1bmN0aW9uKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udmVydGVyOiBhbnkpIHtcbiAgICAgIHZhciBwYWdlID0gb2JqLmFkZE5ld1BhZ2UoXCJcIik7XG4gICAgICBqc29uQ29udmVydGVyLnRvT2JqZWN0KHsgcXVlc3Rpb25zOiB2YWx1ZSB9LCBwYWdlKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJ0cmlnZ2Vyczp0cmlnZ2Vyc1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dHJpZ2dlclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidHJpZ2dlclwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJjYWxjdWxhdGVkVmFsdWVzOmNhbGN1bGF0ZWR2YWx1ZXNcIixcbiAgICBjbGFzc05hbWU6IFwiY2FsY3VsYXRlZHZhbHVlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJzdXJ2ZXlJZFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICB7IG5hbWU6IFwic3VydmV5UG9zdElkXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIHsgbmFtZTogXCJzdXJ2ZXlTaG93RGF0YVNhdmluZzpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIFwiY29va2llTmFtZVwiLFxuICBcInNlbmRSZXN1bHRPblBhZ2VOZXh0OmJvb2xlYW5cIixcbiAge1xuICAgIG5hbWU6IFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIsXG4gICAgZGVmYXVsdDogXCJib3R0b21cIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwiYm90aFwiXSxcbiAgfSxcbiAgeyBuYW1lOiBcInNob3dQcmV2QnV0dG9uOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd1RpdGxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd1BhZ2VUaXRsZXM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJzaG93Q29tcGxldGVkUGFnZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgXCJuYXZpZ2F0ZVRvVXJsXCIsXG4gIHtcbiAgICBuYW1lOiBcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbjp1cmxjb25kaXRpb25zXCIsXG4gICAgY2xhc3NOYW1lOiBcInVybGNvbmRpdGlvbml0ZW1cIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIixcbiAgICBkZWZhdWx0OiBcImluaXRpYWxcIixcbiAgICBjaG9pY2VzOiBbXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICB9LFxuICBcInNob3dQYWdlTnVtYmVyczpib29sZWFuXCIsXG4gIHtcbiAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICBkZWZhdWx0OiBcIm9uXCIsXG4gICAgY2hvaWNlczogW1wib25cIiwgXCJvblBhZ2VcIiwgXCJvZmZcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwidG9wXCIsXG4gICAgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJ1bmRlclRpdGxlXCIsXG4gICAgY2hvaWNlczogW1widW5kZXJJbnB1dFwiLCBcInVuZGVyVGl0bGVcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIiwgZGVmYXVsdDogXCJ0b3BcIiwgY2hvaWNlczogW1widG9wXCIsIFwiYm90dG9tXCJdIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgIGRlZmF1bHQ6IFwib2ZmXCIsXG4gICAgY2hvaWNlczogW1wib2ZmXCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwiYm90aFwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgZGVmYXVsdDogXCJwYWdlc1wiLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIFwicGFnZXNcIixcbiAgICAgIFwicXVlc3Rpb25zXCIsXG4gICAgICBcInJlcXVpcmVkUXVlc3Rpb25zXCIsXG4gICAgICBcImNvcnJlY3RRdWVzdGlvbnNcIixcbiAgICAgIFwiYnV0dG9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxuICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJtYXhUZXh0TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibWF4T3RoZXJzTGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICBcImdvTmV4dFBhZ2VBdXRvbWF0aWM6Ym9vbGVhblwiLFxuICB7XG4gICAgbmFtZTogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIGRlZmF1bHQ6IFwib25Db21wbGV0ZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJvbkNvbXBsZXRlXCIsIFwib25IaWRkZW5cIiwgXCJvbkhpZGRlbkNvbnRhaW5lclwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY2hlY2tFcnJvcnNNb2RlXCIsXG4gICAgZGVmYXVsdDogXCJvbk5leHRQYWdlXCIsXG4gICAgY2hvaWNlczogW1wib25OZXh0UGFnZVwiLCBcIm9uVmFsdWVDaGFuZ2VkXCIsIFwib25WYWx1ZUNoYW5naW5nXCIsIFwib25Db21wbGV0ZVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwidGV4dFVwZGF0ZU1vZGVcIixcbiAgICBkZWZhdWx0OiBcIm9uQmx1clwiLFxuICAgIGNob2ljZXM6IFtcIm9uQmx1clwiLCBcIm9uVHlwaW5nXCJdLFxuICB9LFxuICB7IG5hbWU6IFwic3RhcnRTdXJ2ZXlUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NTdGFydFN1cnZleVRleHRcIiB9LFxuICB7IG5hbWU6IFwicGFnZVByZXZUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlUHJldlRleHRcIiB9LFxuICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYWdlTmV4dFRleHRcIiB9LFxuICB7IG5hbWU6IFwiY29tcGxldGVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZVRleHRcIiB9LFxuICB7IG5hbWU6IFwicHJldmlld1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1ByZXZpZXdUZXh0XCIgfSxcbiAgeyBuYW1lOiBcImVkaXRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NFZGl0VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJyZXF1aXJlZFRleHRcIiwgZGVmYXVsdDogXCIqXCIgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25TdGFydEluZGV4XCIsXG4gICAgZGVwZW5kc09uOiBbXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24oc3VydmV5OiBhbnkpIHtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsXG4gICAgZGVmYXVsdDogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICBkZXBlbmRzT246IFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiXSxcbiAgICBjaG9pY2VzOiAob2JqOiBhbnkpID0+IHtcbiAgICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gb2JqLmdldFF1ZXN0aW9uVGl0bGVQYXR0ZXJuT3B0aW9ucygpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICB7XG4gICAgbmFtZTogXCJpc1NpbmdsZVBhZ2U6Ym9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwic3RhbmRhcmRcIixcbiAgICBjaG9pY2VzOiBbXCJzaW5nbGVQYWdlXCIsIFwic3RhbmRhcmRcIiwgXCJxdWVzdGlvblBlclBhZ2VcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIixcbiAgICBkZWZhdWx0OiBcIm5vUHJldmlld1wiLFxuICAgIGNob2ljZXM6IFtcIm5vUHJldmlld1wiLCBcInNob3dBbGxRdWVzdGlvbnNcIiwgXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2hQYWdlOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93VGltZXJQYW5lbFwiLFxuICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwiYWxsXCIsXG4gICAgY2hvaWNlczogW1wiYWxsXCIsIFwicGFnZVwiLCBcInN1cnZleVwiXSxcbiAgfSxcbl0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tICcuL3N1cnZleSc7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5OiBTdXJ2ZXlNb2RlbCkge1xuICB9XG4gIHB1YmxpYyBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgfHxcbiAgICAgIHRoaXMuc3VydmV5Lm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuaXNFbXB0eSB8fFxuICAgICAgdGhpcy5zdXJ2ZXkuY2hlY2tFcnJvcnNNb2RlID09PSBcIm9uQ29tcGxldGVcIikge1xuICAgICAgcmV0dXJuIHRydWU7ICAgIFxuICAgIH1cbiAgICByZXR1cm4gaW5kZXggPD0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyArIDE7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgbGV0IGVsZW1lbnRDc3M6IHN0cmluZyA9IHRoaXMuc3VydmV5LnZpc2libGVQYWdlc1tpbmRleF0ucGFzc2VkID9cbiAgICAgIHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZCA6IFwiXCI7XG4gICAgaWYgKHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8gPT09IGluZGV4KSB7XG4gICAgICBlbGVtZW50Q3NzICs9IGVsZW1lbnRDc3MgIT09IFwiXCIgPyBcIiBcIiA6IFwiXCI7XG4gICAgICBlbGVtZW50Q3NzICs9IHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KSkge1xuICAgICAgZWxlbWVudENzcyArPSBlbGVtZW50Q3NzICE9PSBcIlwiID8gXCIgXCIgOiBcIlwiO1xuICAgICAgZWxlbWVudENzcyArPSB0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50Q3NzO1xuICB9XG4gIHB1YmxpYyBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKGluZGV4IDwgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyA9IGluZGV4O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA+IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8pIHtcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm87IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkubmV4dFBhZ2UoKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBlbmdsaXNoU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5cbmV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xuICBjdXJyZW50TG9jYWxlVmFsdWU6IFwiXCIsXG4gIGRlZmF1bHRMb2NhbGVWYWx1ZTogXCJlblwiLFxuICBsb2NhbGVzOiA8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9Pnt9LFxuICBsb2NhbGVOYW1lczogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgc3VwcG9ydGVkTG9jYWxlczogPEFycmF5PGFueT4+W10sXG4gIGdldCBjdXJyZW50TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9PT0gdGhpcy5kZWZhdWx0TG9jYWxlVmFsdWVcbiAgICAgID8gXCJcIlxuICAgICAgOiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZTtcbiAgfSxcbiAgc2V0IGN1cnJlbnRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsID09PSBcImN6XCIpIHZhbCA9IFwiY3NcIjtcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgfSxcbiAgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlO1xuICB9LFxuICBzZXQgZGVmYXVsdExvY2FsZSh2YWw6IHN0cmluZykge1xuICAgIGlmICh2YWwgPT09IFwiY3pcIikgdmFsID0gXCJjc1wiO1xuICAgIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlID0gdmFsO1xuICB9LFxuICBnZXRMb2NhbGVTdHJpbmdzKGxvYzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVzW2xvY107XG4gIH0sXG4gIGdldEN1cnJlbnRTdHJpbmdzKCk6IGFueSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZVxuICAgICAgPyB0aGlzLmxvY2FsZXNbdGhpcy5jdXJyZW50TG9jYWxlXVxuICAgICAgOiB0aGlzLmxvY2FsZXNbdGhpcy5kZWZhdWx0TG9jYWxlXTtcbiAgICBpZiAoIWxvYykgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgcmV0dXJuIGxvYztcbiAgfSxcbiAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q3VycmVudFN0cmluZ3MoKTtcbiAgICBpZiAoIWxvY1tzdHJOYW1lXSkgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgdmFyIHJlc3VsdCA9IGxvY1tzdHJOYW1lXTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubG9jYWxlc1tcImVuXCJdW3N0ck5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICBnZXRMb2NhbGVzOiBmdW5jdGlvbiAocmVtb3ZlRGVmYXVsdExvYzogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHJlcy5wdXNoKFwiXCIpO1xuICAgIHZhciBsb2NzID0gdGhpcy5sb2NhbGVzO1xuICAgIGlmICh0aGlzLnN1cHBvcnRlZExvY2FsZXMgJiYgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvY3MgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxvY3NbdGhpcy5zdXBwb3J0ZWRMb2NhbGVzW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBsb2NzKSB7XG4gICAgICBpZiAocmVtb3ZlRGVmYXVsdExvYyAmJiBrZXkgPT0gdGhpcy5kZWZhdWx0TG9jYWxlKSBjb250aW51ZTtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHZhciBsb2NOYW1lID0gKGxvYzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghbG9jKSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciByZXMgPSAoPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW2xvY107XG4gICAgICBpZiAoIXJlcykgcmVzID0gbG9jO1xuICAgICAgcmV0dXJuIHJlcy50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgcmVzLnNvcnQoKGEsIGIpOiBudW1iZXIgPT4ge1xuICAgICAgdmFyIHN0cjEgPSBsb2NOYW1lKGEpO1xuICAgICAgdmFyIHN0cjIgPSBsb2NOYW1lKGIpO1xuICAgICAgaWYgKHN0cjEgPT09IHN0cjIpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHN0cjEgPCBzdHIyID8gLTEgOiAxO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG59O1xuXG5leHBvcnQgdmFyIHN1cnZleVN0cmluZ3MgPSBlbmdsaXNoU3RyaW5ncztcbig8YW55PnN1cnZleUxvY2FsaXphdGlvbikubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4oPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW1wiZW5cIl0gPSBcImVuZ2xpc2hcIjtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgc3VydmV5IHJ1bm5pbmcgaW4gdGhlIFdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvd01vZGVsIGV4dGVuZHMgQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgc3VydmV5RWxlbWVudE5hbWUgPSBcIndpbmRvd1N1cnZleUpTXCI7XG4gIHN1cnZleVZhbHVlOiBTdXJ2ZXlNb2RlbDtcbiAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG5cbiAgdGVtcGxhdGVWYWx1ZTogc3RyaW5nO1xuICBleHBhbmRlZENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgc2hvd2luZ0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY2xvc2VXaW5kb3dPbkNvbXBsZXRlQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55LCBpbml0aWFsTW9kZWw6IFN1cnZleU1vZGVsID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGluaXRpYWxNb2RlbCkge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IGluaXRpYWxNb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgc2VsZi5vblN1cnZleUNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ3aW5kb3dcIjtcbiAgfVxuICAvKipcbiAgICogQSBzdXJ2ZXkgb2JqZWN0LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHZhbHVlIHRvIG5lZ2F0aXZlIHZhbHVlLCBmb3IgZXhhbXBsZSAtMSwgdG8gYXZvaWQgY2xvc2luZyB0aGUgd2luZG93IG9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleS4gTGVhdmUgaXQgZXF1YWxzIHRvIDAgKGRlZmF1bHQgdmFsdWUpIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW1tZWRpYXRlbHksIG9yIHNldCBpdCB0byAzLCA1LCAxMCwgLi4uIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW4gMywgNSwgMTAgc2Vjb25kcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZU9uQ29tcGxldGVUaW1lb3V0OiBudW1iZXIgPSAwO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IHNob3dpbmcuIFNldCBpdCB0byB0cnVlIHRvIHNob3cgdGhlIHdpbmRvdyBhbmQgZmFsc2UgdG8gaGlkZSBpdC5cbiAgICogQHNlZSBzaG93XG4gICAqIEBzZWUgaGlkZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1Nob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1Nob3dpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLnNob3dpbmdDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc2hvd2luZ0NoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IHRoZSB3aW5kb3dcbiAgICogQHNlZSBoaWRlXG4gICAqIEBzZWUgaXNTaG93aW5nXG4gICAqL1xuICBwdWJsaWMgc2hvdygpIHtcbiAgICB0aGlzLmlzU2hvd2luZyA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEhpZGUgdGhlIHdpbmRvd1xuICAgKiBAc2VlIHNob3dcbiAgICogQHNlZSBpc1Nob3dpbmdcbiAgICovXG4gIHB1YmxpYyBoaWRlKCkge1xuICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIGV4cGFuZGVkLiBTZXQgaXQgdG8gdHJ1ZSB0byBleHBhbmQgdGhlIHdpbmRvdyBvciBmYWxzZSB0byBjb2xsYXBzZSBpdC5cbiAgICogQHNlZSBleHBhbmRcbiAgICogQHNlZSBjb2xsYXBzZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0V4cGFuZGVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNFeHBhbmRlZFwiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy5leHBhbmRlZENoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgd2luZG93IGFuZCBzdXJ2ZXkgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc3VydmV5LnRpdGxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgd2luZG93IHRvIHNob3cgdGhlIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIHdpbmRvdyBhbmQgc2hvdyBzdXJ2ZXkgdGl0bGUgb25seS5cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KGpzb25PYmo6IGFueSk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleU1vZGVsKGpzb25PYmopO1xuICB9XG4gIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9IHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBvblN1cnZleUNvbXBsZXRlKCkge1xuICAgIGlmICh0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPCAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgdGltZXJJZDogYW55ID0gbnVsbDtcbiAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGltZXJJZCA9XG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jLCB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgKiAxMDAwKVxuICAgICAgICAgIDogMDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNsb3NlV2luZG93T25Db21wbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcblxuZXhwb3J0IHZhciBzdXJ2ZXlUaW1lckZ1bmN0aW9ucyA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24gKGZ1bmM6ICgpID0+IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiAwO1xuICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jLCAxMDAwKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAodGltZXJJZDogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VWYWx1ZTogU3VydmV5VGltZXIgPSBudWxsO1xuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpIHtcbiAgICBpZiAoIVN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUgPSBuZXcgU3VydmV5VGltZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBsaXN0ZW5lckNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHRpbWVySWQgPSAtMTtcbiAgcHVibGljIG9uVGltZXI6IEV2ZW50PCgpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoKSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIHN0YXJ0KGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLmFkZChmdW5jKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHtcbiAgICAgIHRoaXMudGltZXJJZCA9IHN1cnZleVRpbWVyRnVuY3Rpb25zLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmxpc3RlbmVyQ291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBzdG9wKGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLnJlbW92ZShmdW5jKTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lckNvdW50ZXItLTtcbiAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50ZXIgPT0gMCAmJiB0aGlzLnRpbWVySWQgPiAtMSkge1xuICAgICAgc3VydmV5VGltZXJGdW5jdGlvbnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGRvVGltZXIoKSB7XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHJldHVybjtcbiAgICB0aGlzLm9uVGltZXIuZmlyZSh0aGlzLCB7fSk7XG4gICAgdGhpcy50aW1lcklkID0gc3VydmV5VGltZXJGdW5jdGlvbnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVRleHRQcm9jZXNzb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcblxuZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3JJdGVtIHtcbiAgcHVibGljIHN0YXJ0OiBudW1iZXI7XG4gIHB1YmxpYyBlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzRXhpc3RzID0gZmFsc2U7XG4gICAgdGhpcy5jYW5Qcm9jZXNzID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdmFsdWU6IGFueTtcbiAgcHVibGljIGlzRXhpc3RzOiBib29sZWFuO1xuICBwdWJsaWMgY2FuUHJvY2VzczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRleHRQcmVQcm9jZXNzb3Ige1xuICBwcml2YXRlIGhhc0FsbFZhbHVlc09uTGFzdFJ1blZhbHVlOiBib29sZWFuO1xuICBwdWJsaWMgb25Qcm9jZXNzOiAodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgcHVibGljIHByb2Nlc3MoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGRvRW5jb2Rpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBzdHJpbmcge1xuICAgIHRoaXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWUgPSB0cnVlO1xuICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG4gICAgaWYgKCF0aGlzLm9uUHJvY2VzcykgcmV0dXJuIHRleHQ7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5nZXRJdGVtcyh0ZXh0KTtcbiAgICBmb3IgKHZhciBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZSh0ZXh0LnN1YnN0cmluZyhpdGVtLnN0YXJ0ICsgMSwgaXRlbS5lbmQpKTtcbiAgICAgIGlmICghbmFtZSkgY29udGludWU7XG4gICAgICB2YXIgdGV4dFZhbHVlID0gbmV3IFRleHRQcmVQcm9jZXNzb3JWYWx1ZShuYW1lLCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgICAgdGhpcy5vblByb2Nlc3ModGV4dFZhbHVlKTtcbiAgICAgIGlmICghdGV4dFZhbHVlLmlzRXhpc3RzKSB7XG4gICAgICAgIGlmICh0ZXh0VmFsdWUuY2FuUHJvY2Vzcykge1xuICAgICAgICAgIHRoaXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciByZXBsYWNlZFZhbHVlID0gIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSlcbiAgICAgICAgPyB0ZXh0VmFsdWUudmFsdWVcbiAgICAgICAgOiBcIlwiO1xuICAgICAgaWYgKGRvRW5jb2RpbmcpIHtcbiAgICAgICAgcmVwbGFjZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChyZXBsYWNlZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRleHQgPVxuICAgICAgICB0ZXh0LnN1YnN0cigwLCBpdGVtLnN0YXJ0KSArIHJlcGxhY2VkVmFsdWUgKyB0ZXh0LnN1YnN0cihpdGVtLmVuZCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICBwdWJsaWMgcHJvY2Vzc1ZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW5cbiAgKTogVGV4dFByZVByb2Nlc3NvclZhbHVlIHtcbiAgICB2YXIgdGV4dFZhbHVlID0gbmV3IFRleHRQcmVQcm9jZXNzb3JWYWx1ZShuYW1lLCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIGlmICghIXRoaXMub25Qcm9jZXNzKSB7XG4gICAgICB0aGlzLm9uUHJvY2Vzcyh0ZXh0VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQWxsVmFsdWVzT25MYXN0UnVuKCkge1xuICAgIHJldHVybiAhIXRoaXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJdGVtcyh0ZXh0OiBzdHJpbmcpOiBBcnJheTxUZXh0UHJlUHJvY2Vzc29ySXRlbT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICB2YXIgc3RhcnQgPSAtMTtcbiAgICB2YXIgY2ggPSBcIlwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoID0gdGV4dFtpXTtcbiAgICAgIGlmIChjaCA9PSBcIntcIikgc3RhcnQgPSBpO1xuICAgICAgaWYgKGNoID09IFwifVwiKSB7XG4gICAgICAgIGlmIChzdGFydCA+IC0xKSB7XG4gICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgVGV4dFByZVByb2Nlc3Nvckl0ZW0oKTtcbiAgICAgICAgICBpdGVtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgaXRlbS5lbmQgPSBpO1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByaXZhdGUgZ2V0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuO1xuICAgIHJldHVybiBuYW1lLnRyaW0oKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0UHJvY2Vzc29yIGltcGxlbWVudHMgSVRleHRQcm9jZXNzb3Ige1xuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2YXJpYWJsZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yKCk7XG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uUHJvY2VzcyA9ICh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5nZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlKTtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBwcm9jZXNzVmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhblxuICApOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzc1ZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuZ2V0VmFsdWUoKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsXG4gICAgICA/IDxRdWVzdGlvbj50aGlzLnBhbmVsLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUobmFtZSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25DdXN0b21Qcm9jZXNzVGV4dCh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL0lUZXh0UHJvY2Vzc29yXG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSB7XG4gICAgaWYgKCF0ZXh0VmFsdWUpIHJldHVybjtcbiAgICBpZiAodGhpcy5vbkN1c3RvbVByb2Nlc3NUZXh0KHRleHRWYWx1ZSkpIHJldHVybjtcbiAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gZmlyc3ROYW1lID09IHRoaXMudmFyaWFibGVOYW1lO1xuICAgIHRleHRWYWx1ZS5jYW5Qcm9jZXNzID0gdGV4dFZhbHVlLmlzRXhpc3RzO1xuICAgIGlmICghdGV4dFZhbHVlLmNhblByb2Nlc3MpIHJldHVybjtcbiAgICAvL25hbWUgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHZhcmlhYmxlIG5hbWVcbiAgICB0ZXh0VmFsdWUubmFtZSA9IHRleHRWYWx1ZS5uYW1lLnJlcGxhY2UodGhpcy52YXJpYWJsZU5hbWUgKyBcIi5cIiwgXCJcIik7XG4gICAgdmFyIGZpcnN0TmFtZSA9IG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRGaXJzdE5hbWUodGV4dFZhbHVlLm5hbWUpO1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoZmlyc3ROYW1lKTtcbiAgICB2YXIgdmFsdWVzID0ge307XG4gICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICAoPGFueT52YWx1ZXMpW2ZpcnN0TmFtZV0gPSB0ZXh0VmFsdWUucmV0dXJuRGlzcGxheVZhbHVlXG4gICAgICAgID8gcXVlc3Rpb24uZGlzcGxheVZhbHVlXG4gICAgICAgIDogcXVlc3Rpb24udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbGxWYWx1ZXMgPSAhIXRoaXMucGFuZWwgPyB0aGlzLmdldFZhbHVlcygpIDogbnVsbDtcbiAgICAgIGlmIChhbGxWYWx1ZXMpIHtcbiAgICAgICAgKDxhbnk+dmFsdWVzKVtmaXJzdE5hbWVdID0gYWxsVmFsdWVzW2ZpcnN0TmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIHRleHRWYWx1ZS52YWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZSh0ZXh0VmFsdWUubmFtZSwgdmFsdWVzKTtcbiAgfVxuICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcsIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgdGV4dCA9IHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzKHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuc3VydmV5O1xuICAgIHJldHVybiBzdXJ2ZXkgPyBzdXJ2ZXkucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKSA6IHRleHQ7XG4gIH1cbiAgcHJvY2Vzc1RleHRFeCh0ZXh0OiBzdHJpbmcsIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbik6IGFueSB7XG4gICAgdGV4dCA9IHRoaXMucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB2YXIgaGFzQWxsVmFsdWVzT25MYXN0UnVuID0gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLmhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICB2YXIgcmVzID0geyBoYXNBbGxWYWx1ZXNPbkxhc3RSdW46IHRydWUsIHRleHQ6IHRleHQgfTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHJlcyA9IHRoaXMuc3VydmV5LnByb2Nlc3NUZXh0RXgodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBmYWxzZSk7XG4gICAgfVxuICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPVxuICAgICAgcmVzLmhhc0FsbFZhbHVlc09uTGFzdFJ1biAmJiBoYXNBbGxWYWx1ZXNPbkxhc3RSdW47XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQmFzZSwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIsIEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBPcGVyYW5kTWFrZXIgfSBmcm9tIFwiLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhbGwgdHJpZ2dlcnMuXG4gKiBBIHRyaWdnZXIgY2FsbHMgYSBtZXRob2Qgd2hlbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2UgdGhlIHJlc3VsdDogZnJvbSBmYWxzZSB0byB0cnVlIG9yIGZyb20gdHJ1ZSB0byBmYWxzZS5cbiAqIFBsZWFzZSBub3RlLCBpdCBydW5zIG9ubHkgb25lIGNoYW5naW5nIHRoZSBleHByZXNzaW9uIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyaWdnZXIgZXh0ZW5kcyBCYXNlIHtcbiAgc3RhdGljIG9wZXJhdG9yc1ZhbHVlOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0gbnVsbDtcbiAgc3RhdGljIGdldCBvcGVyYXRvcnMoKSB7XG4gICAgaWYgKFRyaWdnZXIub3BlcmF0b3JzVmFsdWUgIT0gbnVsbCkgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XG4gICAgVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZSA9IHtcbiAgICAgIGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBub3RlbXB0eTogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuICAgICAgfSxcbiAgICAgIGVxdWFsOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgICAgbm90ZXF1YWw6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBjb250YWluczogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtcImluZGV4T2ZcIl0gJiYgdmFsdWUuaW5kZXhPZihleHBlY3RlZFZhbHVlKSA+IC0xO1xuICAgICAgfSxcbiAgICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhdmFsdWUgfHwgIXZhbHVlW1wiaW5kZXhPZlwiXSB8fCB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID09IC0xXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZ3JlYXRlcjogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgICAgbGVzczogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgICAgZ3JlYXRlcm9yZXF1YWw6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPj0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBsZXNzb3JlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8PSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xuICB9XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgdXNlZE5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIGhhc0Z1bmN0aW9uOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXNlZE5hbWVzID0gW107XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcIm9wZXJhdG9yXCIsIFwidmFsdWVcIiwgXCJuYW1lXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub2xkUHJvcGVydGllc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJleHByZXNzaW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5vbkV4cHJlc3Npb25DaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ0cmlnZ2VyYmFzZVwiO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLmdldFR5cGUoKS5yZXBsYWNlKFwidHJpZ2dlclwiLCBcIlwiKTtcbiAgICB2YXIgZXhwID0gISF0aGlzLmV4cHJlc3Npb24gPyB0aGlzLmV4cHJlc3Npb24gOiB0aGlzLmJ1aWxkRXhwcmVzc2lvbigpO1xuICAgIGlmIChleHApIHtcbiAgICAgIHJlcyArPSBcIiwgXCIgKyBleHA7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJvcGVyYXRvclwiLCBcImVxdWFsXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFUcmlnZ2VyLm9wZXJhdG9yc1t2YWx1ZV0pIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJvcGVyYXRvclwiLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGNoZWNrRXhwcmVzc2lvbihcbiAgICBrZXlzOiBhbnksXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmlzQ2hlY2tSZXF1aXJlZChrZXlzKSkgcmV0dXJuO1xuICAgIGlmICghIXRoaXMuY29uZGl0aW9uUnVubmVyKSB7XG4gICAgICB0aGlzLnBlcmZvcm0odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNoZWNrKHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgdHJpZ2dlclJlc3VsdCA9IFRyaWdnZXIub3BlcmF0b3JzW3RoaXMub3BlcmF0b3JdKHZhbHVlLCB0aGlzLnZhbHVlKTtcbiAgICBpZiAodHJpZ2dlclJlc3VsdCkge1xuICAgICAgdGhpcy5vblN1Y2Nlc3Moe30sIG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uRmFpbHVyZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHBlcmZvcm0odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyUmVzdWx0KHJlcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgdHJpZ2dlclJlc3VsdChcbiAgICByZXM6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLm9uU3VjY2Vzcyh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uRmFpbHVyZSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25TdWNjZXNzKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7fVxuICBwcm90ZWN0ZWQgb25GYWlsdXJlKCkge31cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMub2xkUHJvcGVydGllc0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIG9sZFByb3BlcnRpZXNDaGFuZ2VkKCkge1xuICAgIHRoaXMub25FeHByZXNzaW9uQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgb25FeHByZXNzaW9uQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnVzZWROYW1lcyA9IFtdO1xuICAgIHRoaXMuaGFzRnVuY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG51bGw7XG4gIH1cbiAgcHVibGljIGJ1aWxkRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5uYW1lKSByZXR1cm4gXCJcIjtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSkgJiYgdGhpcy5pc1JlcXVpcmVWYWx1ZSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIFwie1wiICtcbiAgICAgIHRoaXMubmFtZSArXG4gICAgICBcIn0gXCIgK1xuICAgICAgdGhpcy5vcGVyYXRvciArXG4gICAgICBcIiBcIiArXG4gICAgICBPcGVyYW5kTWFrZXIudG9PcGVyYW5kU3RyaW5nKHRoaXMudmFsdWUpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGlzQ2hlY2tSZXF1aXJlZChrZXlzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWtleXMpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmJ1aWxkVXNlZE5hbWVzKCk7XG4gICAgaWYgKHRoaXMuaGFzRnVuY3Rpb24gPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgIHZhciBwcm9jZXNzVmFsdWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVzZWROYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSB0aGlzLnVzZWROYW1lc1tpXTtcbiAgICAgIGlmIChrZXlzLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBmaXJzdE5hbWUgPSBwcm9jZXNzVmFsdWUuZ2V0Rmlyc3ROYW1lKG5hbWUpO1xuICAgICAgaWYgKCFrZXlzLmhhc093blByb3BlcnR5KGZpcnN0TmFtZSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKG5hbWUgPT0gZmlyc3ROYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBrZXlWYWx1ZSA9IGtleXNbZmlyc3ROYW1lXTtcbiAgICAgIGlmIChcbiAgICAgICAgIWtleVZhbHVlLmhhc093blByb3BlcnR5KFwib2xkVmFsdWVcIikgfHxcbiAgICAgICAgIWtleVZhbHVlLmhhc093blByb3BlcnR5KFwibmV3VmFsdWVcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgdjogYW55ID0ge307XG4gICAgICB2W2ZpcnN0TmFtZV0gPSBrZXlWYWx1ZVtcIm9sZFZhbHVlXCJdO1xuICAgICAgdmFyIG9sZFZhbHVlID0gcHJvY2Vzc1ZhbHVlLmdldFZhbHVlKG5hbWUsIHYpO1xuICAgICAgdltmaXJzdE5hbWVdID0ga2V5VmFsdWVbXCJuZXdWYWx1ZVwiXTtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB2KTtcbiAgICAgIHJldHVybiAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkVXNlZE5hbWVzKCkge1xuICAgIGlmICghIXRoaXMuY29uZGl0aW9uUnVubmVyKSByZXR1cm47XG4gICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgaWYgKCFleHByZXNzaW9uKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5idWlsZEV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm47XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuaGFzRnVuY3Rpb24gPSB0aGlzLmNvbmRpdGlvblJ1bm5lci5oYXNGdW5jdGlvbigpO1xuICAgIHRoaXMudXNlZE5hbWVzID0gdGhpcy5jb25kaXRpb25SdW5uZXIuZ2V0VmFyaWFibGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNSZXF1aXJlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgIT09IFwiZW1wdHlcIiAmJiB0aGlzLm9wZXJhdG9yICE9IFwibm90ZW1wdHlcIjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlUcmlnZ2VyT3duZXIge1xuICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtdO1xuICBzZXRDb21wbGV0ZWQoKTogYW55O1xuICBzZXRUcmlnZ2VyVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc1ZhcmlhYmxlOiBib29sZWFuKTogYW55O1xuICBjb3B5VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgZnJvbU5hbWU6IHN0cmluZyk6IGFueTtcbiAgZm9jdXNRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEl0IGV4dGVuZHMgdGhlIFRyaWdnZXIgYmFzZSBjbGFzcyBhbmQgYWRkIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIFN1cnZleUpTIGNsYXNzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyIGV4dGVuZHMgVHJpZ2dlciB7XG4gIHByb3RlY3RlZCBvd25lclZhbHVlOiBJU3VydmV5VHJpZ2dlck93bmVyID0gbnVsbDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG93bmVyKCk6IElTdXJ2ZXlUcmlnZ2VyT3duZXIge1xuICAgIHJldHVybiB0aGlzLm93bmVyVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldE93bmVyKG93bmVyOiBJU3VydmV5VHJpZ2dlck93bmVyKSB7XG4gICAgdGhpcy5vd25lclZhbHVlID0gb3duZXI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLm93bmVyICYmICEhKDxhbnk+dGhpcy5vd25lcilbXCJnZXRTdXJ2ZXlcIl1cbiAgICAgID8gKDxhbnk+dGhpcy5vd25lcikuZ2V0U3VydmV5KClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzT25OZXh0UGFnZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIGl0IG1ha2VzIHF1ZXN0aW9ucy9wYWdlcyB2aXNpYmxlLlxuICogT2h0ZXJ3aXNlIGl0IG1ha2VzIHRoZW0gaW52aXNpYmxlLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclZpc2libGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgcHVibGljIHBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgcXVlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidmlzaWJsZXRyaWdnZXJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25TdWNjZXNzKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1TdWNjZXNzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25GYWlsdXJlKCkge1xuICAgIHRoaXMub25UcmlnZ2VyKHRoaXMub25JdGVtRmFpbHVyZSk7XG4gIH1cbiAgcHJpdmF0ZSBvblRyaWdnZXIoZnVuYzogRnVuY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB2YXIgb2JqZWN0cyA9IHRoaXMub3duZXIuZ2V0T2JqZWN0cyh0aGlzLnBhZ2VzLCB0aGlzLnF1ZXN0aW9ucyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmdW5jKG9iamVjdHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtU3VjY2VzcyhpdGVtOiBhbnkpIHtcbiAgICBpdGVtLnZpc2libGUgPSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBvbkl0ZW1GYWlsdXJlKGl0ZW06IGFueSkge1xuICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCBpdCBjb21wbGV0ZXMgdGhlIHN1cnZleS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJDb21wbGV0ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tcGxldGV0cmlnZ2VyXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7XG4gICAgcmV0dXJuICFzZXR0aW5ncy5leGVjdXRlQ29tcGxldGVUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICh0aGlzLm93bmVyKSB0aGlzLm93bmVyLnNldENvbXBsZXRlZCgpO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgZnJvbSBwcm9wZXJ0eSAqKnNldFZhbHVlKiogd2lsbCBiZSBzZXQgdG8gKipzZXRUb05hbWUqKlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlclNldFZhbHVlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzZXR2YWx1ZXRyaWdnZXJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHNldFRvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRUb05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNldFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2V0VmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZXRWYWx1ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNWYXJpYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNWYXJpYWJsZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1ZhcmlhYmxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmFyaWFibGVcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TdWNjZXNzKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKCF0aGlzLnNldFRvTmFtZSB8fCAhdGhpcy5vd25lcikgcmV0dXJuO1xuICAgIHRoaXMub3duZXIuc2V0VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCB0aGlzLnNldFZhbHVlLCB0aGlzLmlzVmFyaWFibGUpO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgc3VydmV5IGdvIHRvIHF1ZXN0aW9uICoqZ290b05hbWUqKiBhbmQgZm9jdXMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyU2tpcCBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2tpcHRyaWdnZXJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGdvdG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImdvdG9OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZ290b05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJnb3RvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNPbk5leHRQYWdlKCkge1xuICAgIHJldHVybiAhc2V0dGluZ3MuZXhlY3V0ZVNraXBUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5nb3RvTmFtZSB8fCAhdGhpcy5vd25lcikgcmV0dXJuO1xuICAgIHRoaXMub3duZXIuZm9jdXNRdWVzdGlvbih0aGlzLmdvdG9OYW1lKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlICoqcnVuRXhwcmVzc2lvbioqIHdpbGwgYmUgcnVuLiBJZiAqKnNldFRvTmFtZSoqIHByb3BlcnR5IGlzIG5vdCBlbXB0eSB0aGVuIHRoZSByZXN1bHQgb2YgKipydW5FeHByZXNzaW9uKiogd2lsbCBiZSBzZXQgdG8gaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbiBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicnVuZXhwcmVzc2lvbnRyaWdnZXJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHNldFRvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRUb05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJ1bkV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicnVuRXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJ1bkV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJydW5FeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5vd25lciB8fCAhdGhpcy5ydW5FeHByZXNzaW9uKSByZXR1cm47XG4gICAgdmFyIGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLnJ1bkV4cHJlc3Npb24pO1xuICAgIGlmIChleHByZXNzaW9uLmNhblJ1bikge1xuICAgICAgZXhwcmVzc2lvbi5vblJ1bkNvbXBsZXRlID0gcmVzID0+IHtcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlUnVuRXhwcmVzc2lvbihyZXMpO1xuICAgICAgfTtcbiAgICAgIGV4cHJlc3Npb24ucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25Db21wbGV0ZVJ1bkV4cHJlc3Npb24obmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuc2V0VG9OYW1lICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3duZXIuc2V0VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgZnJvbSBxdWVzdGlvbiAqKmZyb21OYW1lKiogd2lsbCBiZSBzZXQgaW50byAqKnNldFRvTmFtZSoqLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFRvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZnJvbU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZnJvbU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBmcm9tTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZyb21OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb3B5dmFsdWV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5zZXRUb05hbWUgfHwgIXRoaXMub3duZXIpIHJldHVybjtcbiAgICB0aGlzLm93bmVyLmNvcHlUcmlnZ2VyVmFsdWUodGhpcy5zZXRUb05hbWUsIHRoaXMuZnJvbU5hbWUpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJ0cmlnZ2VyXCIsIFtcbiAgeyBuYW1lOiBcIm9wZXJhdG9yXCIsIGRlZmF1bHQ6IFwiZXF1YWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgeyBuYW1lOiBcInZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIFwiZXhwcmVzc2lvbjpjb25kaXRpb25cIixcbl0pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwibmFtZVwiLCB2aXNpYmxlOiBmYWxzZSB9XSxcbiAgbnVsbCxcbiAgXCJ0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInZpc2libGV0cmlnZ2VyXCIsXG4gIFtcInBhZ2VzOnBhZ2VzXCIsIFwicXVlc3Rpb25zOnF1ZXN0aW9uc1wiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY29tcGxldGV0cmlnZ2VyXCIsXG4gIFtdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb21wbGV0ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic2V0dmFsdWV0cmlnZ2VyXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIXNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInNldFZhbHVlOnRyaWdnZXJ2YWx1ZVwiLFxuICAgICAgZGVwZW5kc09uOiBcInNldFRvTmFtZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgISFvYmpbXCJzZXRUb05hbWVcIl07XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImlzVmFyaWFibGU6Ym9vbGVhblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTZXRWYWx1ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY29weXZhbHVldHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcIiFzZXRUb05hbWU6cXVlc3Rpb252YWx1ZVwiIH0sIHsgbmFtZTogXCIhZnJvbU5hbWU6cXVlc3Rpb252YWx1ZVwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb3B5VmFsdWUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNraXB0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwiIWdvdG9OYW1lOnF1ZXN0aW9uXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclNraXAoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwic2V0VG9OYW1lOnF1ZXN0aW9udmFsdWVcIiB9LCBcInJ1bkV4cHJlc3Npb246ZXhwcmVzc2lvblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbigpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcbiIsImxldCBfaXNNb2JpbGUgPSBmYWxzZTtcbmxldCB2ZW5kb3IgPSBudWxsO1xuXG5pZiAoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBuYXZpZ2F0b3IgJiZcbiAgd2luZG93XG4pIHtcbiAgdmVuZG9yID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8ICg8YW55PndpbmRvdykub3BlcmE7XG59XG5cbihmdW5jdGlvbiAoYTogYW55KSB7XG4gIGlmICghYSkgcmV0dXJuO1xuICBpZiAoXG4gICAgLyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLnRlc3QoXG4gICAgICBhXG4gICAgKSB8fFxuICAgIC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLnRlc3QoXG4gICAgICBhLnN1YnN0cigwLCA0KVxuICAgIClcbiAgKVxuICAgIF9pc01vYmlsZSA9IHRydWU7XG59KSh2ZW5kb3IpO1xuXG5leHBvcnQgY29uc3QgSXNNb2JpbGUgPSBfaXNNb2JpbGU7XG4iLCJleHBvcnQgdHlwZSBWZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcIm1pZGRsZVwiO1xuZXhwb3J0IHR5cGUgSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcImNlbnRlclwiO1xuZXhwb3J0IGludGVyZmFjZSBJUG9zaXRpb24ge1xuICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xuICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU51bWJlclBvc2l0aW9uIGV4dGVuZHMgSVBvc2l0aW9uIHtcbiAgbGVmdD86IG51bWJlcjtcbiAgdG9wPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wdXBVdGlscyB7XG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlUG9zaXRpb24oXG4gICAgdGFyZ2V0UmVjdDogQ2xpZW50UmVjdCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb24sXG4gICAgaG9yaXpvbnRhbFBvc2l0aW9uOiBIb3Jpem9udGFsUG9zaXRpb24sXG4gICAgc2hvd1BvaW50ZXI6IGJvb2xlYW5cbiAgKTogSU51bWJlclBvc2l0aW9uIHtcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09IFwiY2VudGVyXCIpXG4gICAgICB2YXIgbGVmdCA9ICh0YXJnZXRSZWN0LmxlZnQgKyB0YXJnZXRSZWN0LnJpZ2h0IC0gd2lkdGgpIC8gMjtcbiAgICBlbHNlIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJsZWZ0XCIpIGxlZnQgPSB0YXJnZXRSZWN0LmxlZnQgLSB3aWR0aDtcbiAgICBlbHNlIGxlZnQgPSB0YXJnZXRSZWN0LnJpZ2h0O1xuXG4gICAgaWYgKHZlcnRpY2FsUG9zaXRpb24gPT0gXCJtaWRkbGVcIilcbiAgICAgIHZhciB0b3AgPSAodGFyZ2V0UmVjdC50b3AgKyB0YXJnZXRSZWN0LmJvdHRvbSAtIGhlaWdodCkgLyAyO1xuICAgIGVsc2UgaWYgKHZlcnRpY2FsUG9zaXRpb24gPT0gXCJ0b3BcIikgdG9wID0gdGFyZ2V0UmVjdC50b3AgLSBoZWlnaHQ7XG4gICAgZWxzZSB0b3AgPSB0YXJnZXRSZWN0LmJvdHRvbTtcblxuICAgIGlmIChzaG93UG9pbnRlcikge1xuICAgICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiICYmIHZlcnRpY2FsUG9zaXRpb24gIT0gXCJtaWRkbGVcIikge1xuICAgICAgICBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcInRvcFwiKSB7XG4gICAgICAgICAgdG9wID0gdG9wICsgdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdG9wIC0gdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBsZWZ0OiBNYXRoLnJvdW5kKGxlZnQpLCB0b3A6IE1hdGgucm91bmQodG9wKSB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3B1cERpcmVjdGlvbihcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uLFxuICAgIGhvcml6b250YWxQb3NpdGlvbjogSG9yaXpvbnRhbFBvc2l0aW9uXG4gICkge1xuICAgIHZhciBwb3B1cERpcmVjdGlvbjogc3RyaW5nO1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIiAmJiB2ZXJ0aWNhbFBvc2l0aW9uICE9IFwibWlkZGxlXCIpIHtcbiAgICAgIHBvcHVwRGlyZWN0aW9uID0gdmVydGljYWxQb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiKSB7XG4gICAgICBwb3B1cERpcmVjdGlvbiA9IGhvcml6b250YWxQb3NpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHBvcHVwRGlyZWN0aW9uO1xuICB9XG5cbiAgLy9jYWxsZWQgd2hlbiBzaG93UG9pbnRlciAgaXMgdHJ1ZVxuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZVBvaW50ZXJUYXJnZXQoXG4gICAgdGFyZ2V0UmVjdDogQ2xpZW50UmVjdCxcbiAgICB0b3A6IG51bWJlcixcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvblxuICApIHtcbiAgICB2YXIgdGFyZ2V0UG9zOiBJTnVtYmVyUG9zaXRpb24gPSB7fTtcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIpIHtcbiAgICAgIHRhcmdldFBvcy50b3AgPSB0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdFtob3Jpem9udGFsUG9zaXRpb25dO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICB0YXJnZXRQb3MudG9wID0gdGFyZ2V0UmVjdFt2ZXJ0aWNhbFBvc2l0aW9uXTtcbiAgICAgIHRhcmdldFBvcy5sZWZ0ID0gdGFyZ2V0UmVjdC5sZWZ0ICsgdGFyZ2V0UmVjdC53aWR0aCAvIDI7XG4gICAgfVxuICAgIHRhcmdldFBvcy5sZWZ0ID0gTWF0aC5yb3VuZCh0YXJnZXRQb3MubGVmdCAtIGxlZnQpO1xuICAgIHRhcmdldFBvcy50b3AgPSBNYXRoLnJvdW5kKHRhcmdldFBvcy50b3AgLSB0b3ApO1xuICAgIHJldHVybiB0YXJnZXRQb3M7XG4gIH1cbn1cbiIsImltcG9ydCB7IEFkYXB0aXZlRWxlbWVudCB9IGZyb20gXCIuLi9hY3Rpb24tYmFyXCI7XG5cbmludGVyZmFjZSBJRGltZW5zaW9ucyB7XG4gICAgc2Nyb2xsOiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBwcml2YXRlIElHTk9SRV9TSFJJTktfTElNSVRfUFg6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgcHJldmlvdXNQYXJlbnRPZmZzZXQgPSAwO1xuICBwcml2YXRlIHByZXZpb3VzVmlzaWJsZUl0ZW1zQ291bnQ6IG51bWJlciA9IE51bWJlci5NQVhfVkFMVUU7XG4gIHByaXZhdGUgX2l0ZW1zU2l6ZXM6IG51bWJlcltdID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGU6IChlbHQ6IEVsZW1lbnQpID0+IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZS5iaW5kKHdpbmRvdyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBtb2RlbDogQWRhcHRpdmVFbGVtZW50LFxuICAgIHByaXZhdGUgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgZG90c0l0ZW1TaXplOiBudW1iZXIgPSA0OFxuICApIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKF8gPT4gdGhpcy5wcm9jZXNzKCkpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSURpbWVuc2lvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGw6IGVsZW1lbnQuc2Nyb2xsV2lkdGgsXG4gICAgICBvZmZzZXQ6IGVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoIC0gdGhpcy5kb3RzSXRlbVNpemU7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzaXplczogbnVtYmVyW10gPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICBzaXplcy5wdXNoKHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBzaXplcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXRlbXNTaXplcygpOiBudW1iZXJbXSAge1xuICAgIGlmICh0eXBlb2YgdGhpcy5faXRlbXNTaXplcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuX2l0ZW1zU2l6ZXMgPSB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pdGVtc1NpemVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlSXRlbXNDb3VudChzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGl0ZW1zU2l6ZXM6IG51bWJlcltdID0gdGhpcy5pdGVtc1NpemVzO1xuICAgIGxldCBjdXJyU2l6ZTogbnVtYmVyID0gaXRlbXNTaXplc1swXTtcbiAgICBsZXQgaSA9IDE7XG4gICAgZm9yICg7IGkgPCBpdGVtc1NpemVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3VyclNpemUgKyBpdGVtc1NpemVzW2ldID4gc2l6ZSkgcmV0dXJuIGk7XG4gICAgICBjdXJyU2l6ZSArPSBpdGVtc1NpemVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxPZmZzZXQ6IElEaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgaGlkZGVuV2lkdGg6IG51bWJlciA9IHNjcm9sbE9mZnNldC5zY3JvbGwgLSBzY3JvbGxPZmZzZXQub2Zmc2V0O1xuICAgIGlmICh0aGlzLnByZXZpb3VzVmlzaWJsZUl0ZW1zQ291bnQgPCBOdW1iZXIuTUFYX1ZBTFVFKSB7XG4gICAgICBoaWRkZW5XaWR0aCAtPSB0aGlzLmRvdHNJdGVtU2l6ZTtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50T2Zmc2V0V2lkdGg6IG51bWJlciA9IHRoaXMuZ2V0RGltZW5zaW9ucyh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KS5vZmZzZXQ7XG4gICAgaWYgKHBhcmVudE9mZnNldFdpZHRoID09PSB0aGlzLnByZXZpb3VzUGFyZW50T2Zmc2V0KSByZXR1cm47XG4gICAgaWYgKGhpZGRlbldpZHRoID4gdGhpcy5JR05PUkVfU0hSSU5LX0xJTUlUX1BYKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5jYW5TaHJpbmspIHtcbiAgICAgICAgdGhpcy5faXRlbXNTaXplcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5tb2RlbC5zaHJpbmsoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvdW50OiBudW1iZXIgPSB0aGlzLmdldFZpc2libGVJdGVtc0NvdW50KHRoaXMuZ2V0QXZhaWxhYmxlU3BhY2UoKSk7XG4gICAgICBpZiAodGhpcy5wcmV2aW91c1Zpc2libGVJdGVtc0NvdW50ICE9PSBjb3VudCkge1xuICAgICAgICB0aGlzLm1vZGVsLnNob3dGaXJzdE4oY291bnQpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlzaWJsZUl0ZW1zQ291bnQgPSBjb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubW9kZWwuY2FuR3JvdyAmJiBoaWRkZW5XaWR0aCA8PSAwLjAgJiZcbiAgICAgICAgcGFyZW50T2Zmc2V0V2lkdGggLSB0aGlzLnByZXZpb3VzUGFyZW50T2Zmc2V0ID4gdGhpcy5kb3RzSXRlbVNpemVcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9pdGVtc1NpemVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1vZGVsLmdyb3coKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZWwuc2hvd0ZpcnN0TihOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgIHRoaXMucHJldmlvdXNWaXNpYmxlSXRlbXNDb3VudCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNQYXJlbnRPZmZzZXQgPSBwYXJlbnRPZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgZXh0ZW5kcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCwgbW9kZWw6IEFkYXB0aXZlRWxlbWVudCxcbiAgICBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsIGRvdHNJdGVtU2l6ZT86IG51bWJlcikge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucygpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2U6IG51bWJlciA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRIZWlnaHQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vLi4vc2V0dGluZ3NcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICB2YXIgaSwgZGlmZjtcbiAgdmFyIHJlZ0V4U3RyaXAwID0gLyhcXC4wKykrJC87XG4gIHZhciBzZWdtZW50c0EgPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgdmFyIHNlZ21lbnRzQiA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICB2YXIgbCA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBkaWZmID0gcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIHZhciBvbGRJZSA9IHVhLmluZGV4T2YoXCJNU0lFIFwiKTtcbiAgdmFyIGVsZXZlbkllID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuXG4gIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgdmFyIG1zaWUgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgdmFyIHRyaWRlbnQgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gICAgdmFyIGVkZ2UgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgdmFyIGJ5dGVTdHJpbmcgPSBhdG9iKGI2NERhdGEuc3BsaXQoXCIsXCIpWzFdKTtcblxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICB2YXIgbWltZVN0cmluZyA9IGI2NERhdGEuc3BsaXQoXCIsXCIpWzBdLnNwbGl0KFwiOlwiKVsxXS5zcGxpdChcIjtcIilbMF07XG5cbiAgICAvLyB3cml0ZSB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlclxuICAgIHZhciBhYiA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgdmFyIGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIC8vIHdyaXRlIHRoZSBBcnJheUJ1ZmZlciB0byBhIGJsb2IsIGFuZCB5b3UncmUgZG9uZVxuICAgIHZhciBiYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2JcbiAgICApIHtcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7fVxufVxuZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm9yaWVudGF0aW9uICE9PSBcInVuZGVmaW5lZFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0aHJlc2hvbGQ6IG51bWJlciA9IDBcbik6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qgdmlld0hlaWdodCA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbiA9IC10aHJlc2hvbGQ7XG4gIGNvbnN0IGJvdHRvbVdpbiA9IHZpZXdIZWlnaHQgKyB0aHJlc2hvbGQ7XG4gIGNvbnN0IHRvcEVsID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbCA9IGVsZW1lbnRSZWN0LmJvdHRvbTtcblxuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heCh0b3BXaW4sIHRvcEVsKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlcixcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueVxuKSB7XG4gIHN2Z0VsZW0uc3R5bGUud2lkdGggPSAoc2l6ZSB8fCB3aWR0aCB8fCAxNikgKyBcInB4XCI7XG4gIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gKHNpemUgfHwgaGVpZ2h0IHx8IDE2KSArIFwicHhcIjtcbiAgdmFyIG5vZGU6IGFueSA9IHN2Z0VsZW0uY2hpbGROb2Rlc1swXTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIGljb25OYW1lXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgY29tcGFyZVZlcnNpb25zLFxuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgZGV0ZWN0SUVCcm93c2VyLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGlzTW9iaWxlLFxuICBpc0VsZW1lbnRWaXNpYmxlLFxuICBmaW5kU2Nyb2xsYWJsZVBhcmVudCxcbiAgY3JlYXRlU3ZnLFxufTtcbiIsImltcG9ydCB7IEJhc2UsIFN1cnZleUVycm9yLCBJU3VydmV5RXJyb3JPd25lciwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IEN1c3RvbUVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUmVzdWx0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBhbnksIHB1YmxpYyBlcnJvcjogU3VydmV5RXJyb3IgPSBudWxsKSB7fVxufVxuLyoqXG4gKiBCYXNlIFN1cnZleUpTIHZhbGlkYXRvciBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVZhbGlkYXRvciBleHRlbmRzIEJhc2Uge1xuICBwdWJsaWMgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXI7XG4gIHB1YmxpYyBvbkFzeW5jQ29tcGxldGVkOiAocmVzdWx0OiBWYWxpZGF0b3JSZXN1bHQpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShsaXZlOiBib29sZWFuID0gZmFsc2UpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgJiYgISEoPGFueT50aGlzLmVycm9yT3duZXIpW1wiZ2V0U3VydmV5XCJdXG4gICAgICA/ICg8YW55PnRoaXMuZXJyb3JPd25lcikuZ2V0U3VydmV5KClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0ZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0ZXh0XCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGVBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRleHRcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEVycm9yVGV4dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRleHQpIHJldHVybiB0aGlzLnRleHQ7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUnVubmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBpc0FzeW5jKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyXG4gICAgICA/IHRoaXMuZXJyb3JPd25lci5nZXRNYXJrZG93bkh0bWwodGV4dCwgbmFtZSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lciA/IHRoaXMuZXJyb3JPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lciA/IHRoaXMuZXJyb3JPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ3VzdG9tRXJyb3IobmFtZTogc3RyaW5nKTogU3VydmV5RXJyb3Ige1xuICAgIHJldHVybiBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSksIHRoaXMuZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ2YWxpZGF0b3JcIiwgXCJcIik7XG4gICAgaWYgKCEhdGhpcy50ZXh0KSB7XG4gICAgICByZXMgKz0gXCIsIFwiICsgdGhpcy50ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0b3JPd25lciB7XG4gIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPjtcbiAgdmFsaWRhdGVkVmFsdWU6IGFueTtcbiAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nO1xuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55O1xuICBnZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueTtcbn1cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSdW5uZXIge1xuICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPjtcbiAgcHVibGljIG9uQXN5bmNDb21wbGV0ZWQ6IChlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikgPT4gdm9pZDtcbiAgcHVibGljIHJ1bihvd25lcjogSVZhbGlkYXRvck93bmVyKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IG51bGw7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMucHJlcGFyZUFzeW5jVmFsaWRhdG9ycygpO1xuICAgIHZhciBhc3luY1Jlc3VsdHM6IEFycmF5PFN1cnZleUVycm9yPiA9IFtdO1xuICAgIHZhciB2YWxpZGF0b3JzID0gb3duZXIuZ2V0VmFsaWRhdG9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbGlkYXRvciA9IHZhbGlkYXRvcnNbaV07XG4gICAgICBpZiAoIXZhbHVlcyAmJiB2YWxpZGF0b3IuaXNWYWxpZGF0ZUFsbFZhbHVlcykge1xuICAgICAgICB2YWx1ZXMgPSBvd25lci5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTtcbiAgICAgICAgcHJvcGVydGllcyA9IG93bmVyLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWxpZGF0b3IuaXNBc3luYykge1xuICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICAgIHZhbGlkYXRvci5vbkFzeW5jQ29tcGxldGVkID0gKHJlc3VsdDogVmFsaWRhdG9yUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKCEhcmVzdWx0ICYmICEhcmVzdWx0LmVycm9yKSBhc3luY1Jlc3VsdHMucHVzaChyZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIGlmICghdGhpcy5vbkFzeW5jQ29tcGxldGVkKSByZXR1cm47XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmNWYWxpZGF0b3JzW2ldLmlzUnVubmluZykgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uQXN5bmNDb21wbGV0ZWQoYXN5bmNSZXN1bHRzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdG9ycyA9IG93bmVyLmdldFZhbGlkYXRvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW2ldO1xuXG4gICAgICB2YXIgdmFsaWRhdG9yUmVzdWx0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKFxuICAgICAgICBvd25lci52YWxpZGF0ZWRWYWx1ZSxcbiAgICAgICAgb3duZXIuZ2V0VmFsaWRhdG9yVGl0bGUoKSxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgICAgaWYgKCEhdmFsaWRhdG9yUmVzdWx0ICYmICEhdmFsaWRhdG9yUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHJlcy5wdXNoKHZhbGlkYXRvclJlc3VsdC5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGggPT0gMCAmJiAhIXRoaXMub25Bc3luY0NvbXBsZXRlZClcbiAgICAgIHRoaXMub25Bc3luY0NvbXBsZXRlZChbXSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHByZXBhcmVBc3luY1ZhbGlkYXRvcnMoKSB7XG4gICAgaWYgKCEhdGhpcy5hc3luY1ZhbGlkYXRvcnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRvcnNbaV0ub25Bc3luY0NvbXBsZXRlZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzID0gW107XG4gIH1cbn1cbi8qKlxuICogVmFsaWRhdGUgbnVtZXJpYyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdW1lcmljVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWluVmFsdWU6IG51bWJlciA9IG51bGwsIG1heFZhbHVlOiBudW1iZXIgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1pblZhbHVlID0gbWluVmFsdWU7XG4gICAgdGhpcy5tYXhWYWx1ZSA9IG1heFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibnVtZXJpY3ZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIUhlbHBlcnMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbmV3IFJlcXVyZU51bWVyaWNFcnJvcihudWxsLCB0aGlzLmVycm9yT3duZXIpXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbmV3IFZhbGlkYXRvclJlc3VsdChwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgaWYgKHRoaXMubWluVmFsdWUgIT09IG51bGwgJiYgdGhpcy5taW5WYWx1ZSA+IHJlc3VsdC52YWx1ZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heFZhbHVlICE9PSBudWxsICYmIHRoaXMubWF4VmFsdWUgPCByZXN1bHQudmFsdWUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgdk5hbWUgPSBuYW1lID8gbmFtZSA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ2YWx1ZVwiKTtcbiAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLm1heFZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJudW1lcmljTWluTWF4XCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm1pblZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgICAuZ2V0U3RyaW5nKFwibnVtZXJpY01pblwiKVxuICAgICAgICAgIFtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJudW1lcmljTWF4XCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluVmFsdWUgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluVmFsdWUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5WYWx1ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4VmFsdWUgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhWYWx1ZVwiLCB2YWwpO1xuICB9XG59XG4vKipcbiAqIFZhbGlkYXRlIHRleHQgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1pbkxlbmd0aDogbnVtYmVyID0gMCxcbiAgICBtYXhMZW5ndGg6IG51bWJlciA9IDAsXG4gICAgYWxsb3dEaWdpdHMgPSB0cnVlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XG4gICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgdGhpcy5hbGxvd0RpZ2l0cyA9IGFsbG93RGlnaXRzO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAodmFsdWUgIT09IFwiXCIgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMuYWxsb3dEaWdpdHMpIHtcbiAgICAgIHZhciByZWcgPSAvXltBLVphLXpcXHNdKiQvO1xuICAgICAgaWYgKCFyZWcudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoIDwgdGhpcy5taW5MZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB0aGlzLm1heExlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJ0ZXh0TWluTWF4TGVuZ3RoXCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCwgdGhpcy5tYXhMZW5ndGgpO1xuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJ0ZXh0TWluTGVuZ3RoXCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCk7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInRleHRNYXhMZW5ndGhcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1heExlbmd0aCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5MZW5ndGggcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbkxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5MZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5MZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5MZW5ndGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heExlbmd0aCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heExlbmd0aFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heExlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heExlbmd0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYWxsb3dEaWdpdHMgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93RGlnaXRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0RpZ2l0c1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93RGlnaXRzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93RGlnaXRzXCIsIHZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFuc3dlckNvdW50VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWluQ291bnQ6IG51bWJlciA9IG51bGwsIG1heENvdW50OiBudW1iZXIgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1pbkNvdW50ID0gbWluQ291bnQ7XG4gICAgdGhpcy5tYXhDb3VudCA9IG1heENvdW50O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuY29uc3RydWN0b3IgIT0gQXJyYXkpIHJldHVybiBudWxsO1xuICAgIHZhciBjb3VudCA9IHZhbHVlLmxlbmd0aDtcbiAgICBpZiAodGhpcy5taW5Db3VudCAmJiBjb3VudCA8IHRoaXMubWluQ291bnQpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKFxuICAgICAgICAgIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAgICAgLmdldFN0cmluZyhcIm1pblNlbGVjdEVycm9yXCIpXG4gICAgICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5taW5Db3VudClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4Q291bnQgJiYgY291bnQgPiB0aGlzLm1heENvdW50KSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihcbiAgICAgICAgICBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgICAgIC5nZXRTdHJpbmcoXCJtYXhTZWxlY3RFcnJvclwiKVxuICAgICAgICAgICAgW1wiZm9ybWF0XCJdKHRoaXMubWF4Q291bnQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluQ291bnQgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbkNvdW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5Db3VudFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4Q291bnQgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heENvdW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4Q291bnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhDb3VudFwiLCB2YWwpO1xuICB9XG59XG4vKipcbiAqIFVzZSBpdCB0byB2YWxpZGF0ZSB0aGUgdGV4dCBieSByZWd1bGFyIGV4cHJlc3Npb25zLlxuICovXG5leHBvcnQgY2xhc3MgUmVnZXhWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihyZWdleDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5yZWdleCA9IHJlZ2V4O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVnZXh2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnJlZ2V4IHx8IHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlID0gbmV3IFJlZ0V4cCh0aGlzLnJlZ2V4KTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuaGFzRXJyb3IocmUsIHZhbHVlW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzRXJyb3IocmUsIHZhbHVlLCBuYW1lKTtcbiAgfVxuICBwcml2YXRlIGhhc0Vycm9yKHJlOiBSZWdFeHAsIHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHJlLnRlc3QodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdCh2YWx1ZSwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZWdleCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVnZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVnZXhcIik7XG4gIH1cbiAgcHVibGljIHNldCByZWdleCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlZ2V4XCIsIHZhbCk7XG4gIH1cbn1cbi8qKlxuICogVmFsaWRhdGUgZS1tYWlsIGFkZHJlc3MgaW4gdGhlIHRleHQgaW5wdXRcbiAqL1xuZXhwb3J0IGNsYXNzIEVtYWlsVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSByZSA9IC9eKChbXjw+KClcXFtcXF1cXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKT1bXFxdXFwuLDs6XFxzQFxcXCJdK1xcLikrW148PigpPVtcXF1cXC4sOzpcXHNAXFxcIl17Mix9KSQvaTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImVtYWlsdmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnJlLnRlc3QodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdCh2YWx1ZSwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJpbnZhbGlkRW1haWxcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93IGVycm9yIGlmIGV4cHJlc3Npb24gcmV0dXJucyBmYWxzZVxuICovXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyOiBDb25kaXRpb25SdW5uZXIgPSBudWxsO1xuICBwcml2YXRlIGlzUnVubmluZ1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJleHByZXNzaW9udmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhbGlkYXRlQWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBc3luYygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZW5zdXJlQ29uZGl0aW9uUnVubmVyKCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25SdW5uZXIuaXNBc3luYztcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUnVubmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1J1bm5pbmdWYWx1ZTtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLmVuc3VyZUNvbmRpdGlvblJ1bm5lcigpKSByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gcmVzID0+IHtcbiAgICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgIGlmICghIXRoaXMub25Bc3luY0NvbXBsZXRlZCkge1xuICAgICAgICB0aGlzLm9uQXN5bmNDb21wbGV0ZWQodGhpcy5nZW5lcmF0ZUVycm9yKHJlcywgdmFsdWUsIG5hbWUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciByZXMgPSB0aGlzLmNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAodGhpcy5jb25kaXRpb25SdW5uZXIuaXNBc3luYykgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRXJyb3IocmVzLCB2YWx1ZSwgbmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlRXJyb3IocmVzOiBib29sZWFuLCB2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiaW52YWxpZEV4cHJlc3Npb25cIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG4gIHByb3RlY3RlZCBlbnN1cmVDb25kaXRpb25SdW5uZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmV4cHJlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGV4cHJlc3Npb24gcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcInN1cnZleXZhbGlkYXRvclwiLCBbXG4gIHsgbmFtZTogXCJ0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZXh0XCIgfSxcbl0pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJudW1lcmljdmFsaWRhdG9yXCIsXG4gIFtcIm1pblZhbHVlOm51bWJlclwiLCBcIm1heFZhbHVlOm51bWJlclwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1lcmljVmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInRleHR2YWxpZGF0b3JcIixcbiAgW1wibWluTGVuZ3RoOm51bWJlclwiLCBcIm1heExlbmd0aDpudW1iZXJcIiwgXCJhbGxvd0RpZ2l0czpib29sZWFuXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFRleHRWYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIixcbiAgW1wibWluQ291bnQ6bnVtYmVyXCIsIFwibWF4Q291bnQ6bnVtYmVyXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEFuc3dlckNvdW50VmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJlZ2V4dmFsaWRhdG9yXCIsXG4gIFtcInJlZ2V4XCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlZ2V4VmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImVtYWlsdmFsaWRhdG9yXCIsXG4gIFtdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEVtYWlsVmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvbnZhbGlkYXRvclwiLFxuICBbXCJleHByZXNzaW9uOmNvbmRpdGlvblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uVmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG4iLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQmFzZVZ1ZSBleHRlbmRzIFZ1ZSB7XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIHNldElzUmVuZGVyaW5nKHZhbDogYm9vbGVhbikge1xuICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZiAoISFtb2RlbCkge1xuICAgICAgKDxhbnk+bW9kZWwpLmlzUmVuZGVyaW5nID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldElzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICByZXR1cm4gISFtb2RlbCAmJiAhISg8YW55Pm1vZGVsKS5pc1JlbmRlcmluZztcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge31cbiAgcHJvdGVjdGVkIG9uVXBkYXRlZCgpIHt9XG4gIHByb3RlY3RlZCBvbkRlc3Ryb3llZCgpIHt9XG4gIHByb3RlY3RlZCBvbkNyZWF0ZWQoKSB7XG4gICAgdmFyIG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIGlmICghbW9kZWwpIHJldHVybjtcbiAgICBtb2RlbC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2g6IGFueSwga2V5OiBhbnkpID0+IHtcbiAgICAgIFZ1ZS5zZXQoaGFzaCwga2V5LCBoYXNoW2tleV0pO1xuICAgIH0pO1xuICAgIG1vZGVsLnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IChcbiAgICAgIHByb3BlcnRpZXNIYXNoOiBhbnksXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICB2YWw6IGFueVxuICAgICkgPT4ge1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzSGFzaC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhdGhpcy5nZXRJc1JlbmRlcmluZygpKVxuICAgICAgICBWdWUuc2V0KHByb3BlcnRpZXNIYXNoLCBuYW1lLCB2YWwpO1xuICAgICAgZWxzZSBwcm9wZXJ0aWVzSGFzaFtuYW1lXSA9IHZhbDtcbiAgICB9O1xuICB9XG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5vbkNyZWF0ZWQoKTtcbiAgfVxuICBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKHRydWUpO1xuICB9XG4gIGJlZm9yZVVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKHRydWUpO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgdGhpcy5vbk1vdW50ZWQoKTtcbiAgfVxuICB1cGRhdGVkKCkge1xuICAgIHRoaXMuc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMub25EZXN0cm95ZWQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXNlVnVlO1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWNjZDM0MGEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWNjZDM0MGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWNjZDM0MGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjY2QzNDBhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzVjY2QzNDBhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzcwZTRhZWJiJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzcwZTRhZWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzcwZTRhZWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzBlNGFlYmImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzBlNGFlYmInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MGU0YWViYiZcIiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhbk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBCb29sZWFuIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Cb29sZWFuTW9kZWw+IHtcbiAgZ2V0IGl0ZW1DbGFzcygpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBsZXQgaXNDaGVja2VkID0gcXVlc3Rpb24uY2hlY2tlZFZhbHVlO1xuICAgIGxldCBpc0Rpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seTtcbiAgICBsZXQgaXRlbUNsYXNzID0gY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmIChpc0Rpc2FibGVkKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcbiAgICBpZiAoaXNDaGVja2VkKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuICAgIGVsc2UgaWYgKGlzQ2hlY2tlZCA9PT0gbnVsbClcbiAgICAgIGl0ZW1DbGFzcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuaXRlbUluZGV0ZXJtaW5hdGU7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuICBnZXRMYWJlbENsYXNzKGNoZWNrZWQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIGNzc0NsYXNzZXMubGFiZWwgK1xuICAgICAgXCIgXCIgK1xuICAgICAgKHF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gIWNoZWNrZWQgfHwgcXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICA/IHF1ZXN0aW9uLmNzc0NsYXNzZXMuZGlzYWJsZWRMYWJlbFxuICAgICAgICA6IFwiXCIpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHByZXZlbnREZWZhdWx0cyhldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuICBwdWJsaWMgb25Td2l0Y2hDbGljayhldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlKSB7XG4gICAgICB0aGlzLnByZXZlbnREZWZhdWx0cyhldmVudCk7XG4gICAgICB2YXIgaXNSaWdodENsaWNrID0gZXZlbnQub2Zmc2V0WCAvIGV2ZW50LnRhcmdldC5vZmZzZXRXaWR0aCA+IDAuNTtcbiAgICAgIHZhciBpc1J0bCA9XG4gICAgICAgIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZXZlbnQudGFyZ2V0KS5kaXJlY3Rpb24gPT0gXCJydGxcIjtcbiAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID0gaXNSdGwgPyAhaXNSaWdodENsaWNrIDogaXNSaWdodENsaWNrO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgb25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlKSB7XG4gICAgICB0aGlzLnByZXZlbnREZWZhdWx0cyhldmVudCk7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmJkYzdhYmImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNmJkYzdhYmInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNmJkYzdhYmInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNmJkYzdhYmInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YmRjN2FiYiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2YmRjN2FiYicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9idXR0b25ncm91cC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiZGM3YWJiJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYWQ2YWNlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGJhZDZhY2UnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGJhZDZhY2UnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGJhZDZhY2UnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGJhZDZhY2UnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYnV0dG9uZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9idXR0b25ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2J1dHRvbmdyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGJhZDZhY2UmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYWQyNzZmNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjYWQyNzZmNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjYWQyNzZmNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjYWQyNzZmNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhZDI3NmY2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2NhZDI3NmY2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NoZWNrYm94LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2FkMjc2ZjYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzU4YzgwZDAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjNThjODBkMCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjNThjODBkMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjNThjODBkMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNThjODBkMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjNThjODBkMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jaGVja2JveGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NoZWNrYm94aXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2hlY2tib3hpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jNThjODBkMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA5OWMyYzhkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA5OWMyYzhkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA5OWMyYzhkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jb21tZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wOTljMmM4ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwOTljMmM4ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21tZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDk5YzJjOGQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc0Y2E0ZjI3NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0Y2E0ZjI3NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0Y2E0ZjI3NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00Y2E0ZjI3NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0Y2E0ZjI3NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGNhNGYyNzYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBhMDU2ZjgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc0MGEwNTZmOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0MGEwNTZmOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0MGEwNTZmOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MGEwNTZmOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0MGEwNTZmOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBhMDU2ZjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYWFiNjg1MCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYWFiNjg1MCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYWFiNjg1MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYWFiNjg1MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFhYWI2ODUwJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFhYWI2ODUwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24tYmFyLXNlcGFyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFhYWI2ODUwJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMTNiZjIxMCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9hY3Rpb24tYmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMzEzYmYyMTAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMzEzYmYyMTAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMzEzYmYyMTAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FjdGlvbi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMxM2JmMjEwJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzMxM2JmMjEwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLWJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2RlZmF1bHQtdGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmNjExN2RjJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2RlZmF1bHQtdGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3ZjYxMTdkYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3ZjYxMTdkYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3ZjYxMTdkYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y2MTE3ZGMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignN2Y2MTE3ZGMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9kZWZhdWx0LXRpdGxlL2RlZmF1bHQtdGl0bGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZjYxMTdkYyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2MxN2EwMTAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbGlzdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2NjMTdhMDEwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2NjMTdhMDEwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2NjMTdhMDEwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdjYzE3YTAxMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWI0ZTY5YjYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWI0ZTY5YjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWI0ZTY5YjYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViNGU2OWI2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzViNGU2OWI2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4YTdhYTYwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjOGE3YWE2MCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzhhN2FhNjAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2MxOGRmZDc0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWMxOGRmZDc0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2MxOGRmZDc0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdlZjExMjY1YycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmMTEyNjVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2VmMTEyNjVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzY4NDc3NmY4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzY4NDc3NmY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzY4NDc3NmY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjg0Nzc2ZjgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NDc3NmY4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNzI4ODZlYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYjcyODg2ZWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYjcyODg2ZWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYjcyODg2ZWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWI3Mjg4NmVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2I3Mjg4NmVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUtYWN0aW9ucy90aXRsZS1hY3Rpb25zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YjcyODg2ZWMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYTllMjE5NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYTllMjE5NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb3NpdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2Q0YWFlMDlhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2Q0YWFlMDlhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2N1c3RvbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlNjFhN2I3JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWU2MWE3YjcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWU2MWE3YjcnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2RyYWctZHJvcC10ZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmI5MjI1MzcmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZHJhZy1kcm9wLXRkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZHJhZy1kcm9wLXRkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2YjkyMjUzNycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2YjkyMjUzNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2YjkyMjUzNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZHJhZy1kcm9wLXRkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjkyMjUzNyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2YjkyMjUzNycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9kcmFnLWRyb3AtdGQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcmFnLWRyb3AtdGQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RyYWctZHJvcC10ZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJhZy1kcm9wLXRkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjkyMjUzNyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzZiMzIxNWQzJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzZiMzIxNWQzJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzZiMzIxNWQzJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmIzMjE1ZDMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNmIzMjE1ZDMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZHJvcGRvd24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzk3MzQ3MmFjJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzk3MzQ3MmFjJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzk3MzQ3MmFjJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NzM0NzJhYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5NzM0NzJhYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9lbGVtZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyN2FkYzUzNycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyN2FkYzUzNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyN2FkYzUzNycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdhZGM1MzcmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMjdhZGM1MzcnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZWxlbWVudGhlYWRlci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMDUwNTJjMGEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMDUwNTJjMGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMDUwNTJjMGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTA1MmMwYSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNTA1MmMwYScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9lbXB0eS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNTY4MmU2YWQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNTY4MmU2YWQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNTY4MmU2YWQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTY4MmU2YWQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNTY4MmU2YWQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZXJyb3JzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTY4MmU2YWQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkMjA4NjVhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxZDIwODY1YScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxZDIwODY1YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxZDIwODY1YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWQyMDg2NWEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWQyMDg2NWEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZXhwcmVzc2lvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkMjA4NjVhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9maWxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGY3MDI4NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9maWxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjBmNzAyODQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjBmNzAyODQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjBmNzAyODQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2ZpbGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwZjcwMjg0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzIwZjcwMjg0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ZpbGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9maWxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGY3MDI4NCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzk2YWUxYTc4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzk2YWUxYTc4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzk2YWUxYTc4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk2YWUxYTc4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzk2YWUxYTc4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Zsb3dwYW5lbC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk2YWUxYTc4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOWQ5OTJjMzAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOWQ5OTJjMzAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOWQ5OTJjMzAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkOTkyYzMwJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzlkOTkyYzMwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzY5Y2ZmOGNmJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzY5Y2ZmOGNmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzY5Y2ZmOGNmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzY5Y2ZmOGNmJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2hlYWRlci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2ZmOGNmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMDc0MmUxNmQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMDc0MmUxNmQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMDc0MmUxNmQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2h0bWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA3NDJlMTZkJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzA3NDJlMTZkJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2h0bWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9odG1sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzFkYzhkNzA5JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFkYzhkNzA5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFkYzhkNzA5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWRjOGQ3MDknLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaW1hZ2UudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZGM4ZDcwOSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1M2ZlMDUyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzE1M2ZlMDUyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzE1M2ZlMDUyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzE1M2ZlMDUyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMTUzZmUwNTInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaW1hZ2VwaWNrZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzdmYTJmNDAzJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzdmYTJmNDAzJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzdmYTJmNDAzJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTJmNDAzJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzdmYTJmNDAzJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmYTJmNDAzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnM2NhNTRlZTUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnM2NhNTRlZTUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnM2NhNTRlZTUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNjYTU0ZWU1JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzNjYTU0ZWU1Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGNlbGwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBiNGRhNmQ4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBiNGRhNmQ4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBiNGRhNmQ4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBiNGRhNmQ4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGI0ZGE2ZDgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMGI0ZGE2ZDgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlhMGI4OGU4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlhMGI4OGU4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlhMGI4OGU4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05YTBiODhlOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5YTBiODhlOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdmYTE5N2U0YScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdmYTE5N2U0YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdmYTE5N2U0YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2ZhMTk3ZTRhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmExOTdlNGEmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5M2ZlNGMwMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5M2ZlNGMwMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5M2ZlNGMwMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05M2ZlNGMwMiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5M2ZlNGMwMicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tdWx0aXBsZXRleHQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05M2ZlNGMwMiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzVlYWRmZDYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzc1ZWFkZmQ2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzc1ZWFkZmQ2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzc1ZWFkZmQ2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NWVhZGZkNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3NWVhZGZkNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzVlYWRmZDYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZWQ3NzZmZiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyZWQ3NzZmZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyZWQ3NzZmZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyZWQ3NzZmZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJlZDc3NmZmJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzJlZDc3NmZmJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmVkNzc2ZmYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc0ZTk2MmE1MScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0ZTk2MmE1MScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0ZTk2MmE1MScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcGFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGU5NjJhNTEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNGU5NjJhNTEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFnZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMGM3ODg5OWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMGM3ODg5OWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMGM3ODg5OWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzc4ODk5YyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwYzc4ODk5YycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOWRkYTVkMDYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOWRkYTVkMDYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOWRkYTVkMDYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWRkYTVkMDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOWRkYTVkMDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWRkYTVkMDYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3NDJiZmZhYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3NDJiZmZhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3NDJiZmZhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0MmJmZmFjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzc0MmJmZmFjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzQyYmZmYWMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZGI2YjJmN2UmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdkYjZiMmY3ZScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdkYjZiMmY3ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdkYjZiMmY3ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYjZiMmY3ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdkYjZiMmY3ZScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYjZiMmY3ZSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzI3ZTMyNWVmJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzI3ZTMyNWVmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzI3ZTMyNWVmJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdlMzI1ZWYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMjdlMzI1ZWYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcHJvZ3Jlc3MudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYWU3ZGU0MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzJhZTdkZTQyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzJhZTdkZTQyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzJhZTdkZTQyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhZTdkZTQyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzJhZTdkZTQyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhZTdkZTQyJlwiIiwiaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25WdWU8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIEJhc2VWdWUge1xuICBwdWJsaWMgaW5uZXJWYWx1ZTogYW55ID0gbnVsbDtcblxuICBAUHJvcCgpIHF1ZXN0aW9uOiBUO1xuICAvLyBjc3MgcHJvcCBuZWVkIG9ubHkgZm9yIHBhbmVsLiBXaGVuIHBhbmVsIHdpbGwgaGF2ZSBjc3NDbGFzc2VzIHByb3BlcnR5IHRoaXMgcHJvcCB3aWxsIG5lZWQgdG8gcmVtb3ZlXG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAgQFdhdGNoKFwicXVlc3Rpb25cIilcbiAgY2hhbmdlUXVlc3Rpb24obmV3X3ZhbDogVCwgb2xkX3ZhbDogVCkge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWVzdGlvblZ1ZTtcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhZGlvZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA2YzZkNTI2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA2YzZkNTI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA2YzZkNTI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9yYWRpb2dyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmM2ZDUyNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNmM2ZDUyNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFkaW9ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDZjNmQ1MjYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmJlOTdiOSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc1YmJlOTdiOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1YmJlOTdiOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1YmJlOTdiOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViYmU5N2I5JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzViYmU5N2I5Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFkaW9ncm91cGl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhZGlvZ3JvdXBpdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYWRpb2dyb3VwaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJiZTk3YjkmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZhZGVkNzYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyZmFkZWQ3NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyZmFkZWQ3NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyZmFkZWQ3NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmFkZWQ3NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyZmFkZWQ3NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmctaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmFua2luZy1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYW5raW5nLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmYWRlZDc2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xOTA3NGVlYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9yYW5raW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcmFua2luZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMTkwNzRlZWEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMTkwNzRlZWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMTkwNzRlZWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE5MDc0ZWVhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzE5MDc0ZWVhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhbmtpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE5MDc0ZWVhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwOTJiZmRmJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JhdGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzA5MmJmZGYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzA5MmJmZGYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzA5MmJmZGYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3JhdGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzA5MmJmZGYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzA5MmJmZGYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmF0aW5nLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcmF0aW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yYXRpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3JhdGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzA5MmJmZGYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3Jvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjMGJkODgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcm93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3Y2MwYmQ4OCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3Y2MwYmQ4OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3Y2MwYmQ4OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcm93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2MwYmQ4OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3Y2MwYmQ4OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yb3cudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Jvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcm93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Y2MwYmQ4OCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNDYyMzQ5ZCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA0NjIzNDlkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA0NjIzNDlkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA0NjIzNDlkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA0NjIzNDlkJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzA0NjIzNDlkJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3NpZ25hdHVyZXBhZC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NpZ25hdHVyZXBhZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2lnbmF0dXJlcGFkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zaWduYXR1cmVwYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA0NjIzNDlkJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3RyaW5nLWVkaXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOTYzOWYxNTInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOTYzOWYxNTInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOTYzOWYxNTInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3N0cmluZy1lZGl0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk2MzlmMTUyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzk2MzlmMTUyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmctZWRpdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NjM5ZjE1MiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmluZy12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzdkOTE4NTA4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzdkOTE4NTA4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzdkOTE4NTA4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdHJpbmctdmlld2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZDkxODUwOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3ZDkxODUwOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLXZpZXdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Q5MTg1MDgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3N0cmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDNhM2Q3NWEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3RyaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3RyaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdkM2EzZDc1YScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdkM2EzZDc1YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdkM2EzZDc1YScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdkM2EzZDc1YScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9zdHJpbmcudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdHJpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N0cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3RyaW5nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kM2EzZDc1YSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc3VydmV5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODc0ZTFjOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzY4NzRlMWM4JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzY4NzRlMWM4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzY4NzRlMWM4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NzRlMWM4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzY4NzRlMWM4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3N1cnZleS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N1cnZleS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3VydmV5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdXJ2ZXkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY4NzRlMWM4JlwiIiwiaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVnVlU3VydmV5TW9kZWwgZXh0ZW5kcyBTdXJ2ZXlNb2RlbCB7XG4gIHJlbmRlckNhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnJlbmRlckNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnJlbmRlckNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuIHN1cnZleUNzcy5nZXRDc3MoKTtcbiAgfVxuICBzZXQgY3NzKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XG4gIH1cbiAgcHVibGljIHNldERhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIFZ1ZS5zZXQodmFsdWVzSGFzaCwga2V5LCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZURhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZykge1xuICAgIFZ1ZS5kZWxldGUodmFsdWVzSGFzaCwga2V5KTtcbiAgfVxuICBwdWJsaWMgZG9BZnRlclJlbmRlclN1cnZleShlbDogYW55KSB7XG4gICAgdGhpcy5hZnRlclJlbmRlclN1cnZleShlbCk7XG4gIH1cbiAgcHVibGljIGRvQWZ0ZXJSZW5kZXJIZWFkZXIoZWw6IGFueSkge1xuICAgIHRoaXMuYWZ0ZXJSZW5kZXJIZWFkZXIoZWwpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWdWVTdXJ2ZXlXaW5kb3dNb2RlbCBleHRlbmRzIFN1cnZleVdpbmRvd01vZGVsIHtcbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55LCBpbml0aWFsTW9kZWw6IFN1cnZleU1vZGVsID0gbnVsbCkge1xuICAgIHN1cGVyKGpzb25PYmosIGluaXRpYWxNb2RlbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShqc29uT2JqOiBhbnkpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBWdWVTdXJ2ZXlNb2RlbChqc29uT2JqKTtcbiAgfVxufVxuXG5TdXJ2ZXlNb2RlbC5wbGF0Zm9ybSA9IFwidnVlXCI7XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZWNlNDIyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3RleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi90ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc0MGVjZTQyMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0MGVjZTQyMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0MGVjZTQyMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vdGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDBlY2U0MjImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNDBlY2U0MjInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvdGV4dC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQwZWNlNDIyJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZDJhYmUyMSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vdGltZXJwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMGQyYWJlMjEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMGQyYWJlMjEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMGQyYWJlMjEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkMmFiZTIxJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBkMmFiZTIxJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3RpbWVycGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZDJhYmUyMSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDQ5YjgzYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi90aXRsZWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi90aXRsZWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2NkNDliODNhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2NkNDliODNhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2NkNDliODNhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi90aXRsZWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNkNDliODNhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2NkNDliODNhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3RpdGxlY29udGVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3RpdGxlY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGVjb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aXRsZWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNkNDliODNhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3dpbmRvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3dpbmRvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNjJmNTg4YjInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNjJmNTg4YjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNjJmNTg4YjInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3dpbmRvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjJmNTg4YjImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjJmNTg4YjInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvd2luZG93LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vd2luZG93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3dpbmRvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjJmNTg4YjImXCIiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfdnVlX187Il0sInNvdXJjZVJvb3QiOiIifQ==","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","/*!\n * dist/inputmask\n * https://github.com/RobinHerbots/Inputmask\n * Copyright (c) 2010 - 2021 Robin Herbots\n * Licensed under the MIT license\n * Version: 5.0.6\n */\n!function(e, t) {\n if (\"object\" == typeof exports && \"object\" == typeof module) module.exports = t(); else if (\"function\" == typeof define && define.amd) define([], t); else {\n var a = t();\n for (var i in a) (\"object\" == typeof exports ? exports : e)[i] = a[i];\n }\n}(this, (function() {\n return function() {\n \"use strict\";\n var e = {\n 4528: function(e) {\n e.exports = JSON.parse('{\"BACKSPACE\":8,\"BACKSPACE_SAFARI\":127,\"DELETE\":46,\"DOWN\":40,\"END\":35,\"ENTER\":13,\"ESCAPE\":27,\"HOME\":36,\"INSERT\":45,\"LEFT\":37,\"PAGE_DOWN\":34,\"PAGE_UP\":33,\"RIGHT\":39,\"SPACE\":32,\"TAB\":9,\"UP\":38,\"X\":88,\"Z\":90,\"CONTROL\":17,\"PAUSE/BREAK\":19,\"WINDOWS_LEFT\":91,\"WINDOWS_RIGHT\":92,\"KEY_229\":229}');\n },\n 8741: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var a = !(\"undefined\" == typeof window || !window.document || !window.document.createElement);\n t.default = a;\n },\n 3976: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var i, n = (i = a(4528)) && i.__esModule ? i : {\n default: i\n };\n var r = {\n _maxTestPos: 500,\n placeholder: \"_\",\n optionalmarker: [ \"[\", \"]\" ],\n quantifiermarker: [ \"{\", \"}\" ],\n groupmarker: [ \"(\", \")\" ],\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n regex: null,\n oncomplete: function() {},\n onincomplete: function() {},\n oncleared: function() {},\n repeat: 0,\n greedy: !1,\n autoUnmask: !1,\n removeMaskOnSubmit: !1,\n clearMaskOnLostFocus: !0,\n insertMode: !0,\n insertModeVisual: !0,\n clearIncomplete: !1,\n alias: null,\n onKeyDown: function() {},\n onBeforeMask: null,\n onBeforePaste: function(e, t) {\n return \"function\" == typeof t.onBeforeMask ? t.onBeforeMask.call(this, e, t) : e;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: !0,\n showMaskOnHover: !0,\n onKeyValidation: function() {},\n skipOptionalPartCharacter: \" \",\n numericInput: !1,\n rightAlign: !1,\n undoOnEscape: !0,\n radixPoint: \"\",\n _radixDance: !1,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: !0,\n tabThrough: !1,\n supportsInputType: [ \"text\", \"tel\", \"url\", \"password\", \"search\" ],\n ignorables: [ n.default.BACKSPACE, n.default.TAB, n.default[\"PAUSE/BREAK\"], n.default.ESCAPE, n.default.PAGE_UP, n.default.PAGE_DOWN, n.default.END, n.default.HOME, n.default.LEFT, n.default.UP, n.default.RIGHT, n.default.DOWN, n.default.INSERT, n.default.DELETE, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],\n isComplete: null,\n preValidation: null,\n postValidation: null,\n staticDefinitionSymbol: void 0,\n jitMasking: !1,\n nullable: !0,\n inputEventOnly: !1,\n noValuePatching: !1,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"text\",\n importDataAttributes: !0,\n shiftPositions: !0,\n usePrototypeDefinitions: !0,\n validationEventTimeOut: 3e3\n };\n t.default = r;\n },\n 7392: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n t.default = {\n 9: {\n validator: \"[0-9\\uff10-\\uff19]\",\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9\\uff10-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\n }\n };\n },\n 253: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e, t, a) {\n if (void 0 === a) return e.__data ? e.__data[t] : null;\n e.__data = e.__data || {}, e.__data[t] = a;\n };\n },\n 3776: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.on = function(e, t) {\n function a(e, a) {\n n.addEventListener ? n.addEventListener(e, t, !1) : n.attachEvent && n.attachEvent(\"on\" + e, t), \n i[e] = i[e] || {}, i[e][a] = i[e][a] || [], i[e][a].push(t);\n }\n if (u(this[0])) for (var i = this[0].eventRegistry, n = this[0], r = e.split(\" \"), o = 0; o < r.length; o++) {\n var s = r[o].split(\".\"), l = s[0], c = s[1] || \"global\";\n a(l, c);\n }\n return this;\n }, t.off = function(e, t) {\n var a, i;\n function n(e, t, n) {\n if (e in a == !0) if (i.removeEventListener ? i.removeEventListener(e, n, !1) : i.detachEvent && i.detachEvent(\"on\" + e, n), \n \"global\" === t) for (var r in a[e]) a[e][r].splice(a[e][r].indexOf(n), 1); else a[e][t].splice(a[e][t].indexOf(n), 1);\n }\n function r(e, i) {\n var n, r, o = [];\n if (e.length > 0) if (void 0 === t) for (n = 0, r = a[e][i].length; n < r; n++) o.push({\n ev: e,\n namespace: i && i.length > 0 ? i : \"global\",\n handler: a[e][i][n]\n }); else o.push({\n ev: e,\n namespace: i && i.length > 0 ? i : \"global\",\n handler: t\n }); else if (i.length > 0) for (var s in a) for (var l in a[s]) if (l === i) if (void 0 === t) for (n = 0, \n r = a[s][l].length; n < r; n++) o.push({\n ev: s,\n namespace: l,\n handler: a[s][l][n]\n }); else o.push({\n ev: s,\n namespace: l,\n handler: t\n });\n return o;\n }\n if (u(this[0]) && e) {\n a = this[0].eventRegistry, i = this[0];\n for (var o = e.split(\" \"), s = 0; s < o.length; s++) for (var l = o[s].split(\".\"), c = r(l[0], l[1]), f = 0, d = c.length; f < d; f++) n(c[f].ev, c[f].namespace, c[f].handler);\n }\n return this;\n }, t.trigger = function(e) {\n if (u(this[0])) for (var t = this[0].eventRegistry, a = this[0], i = \"string\" == typeof e ? e.split(\" \") : [ e.type ], r = 0; r < i.length; r++) {\n var s = i[r].split(\".\"), l = s[0], c = s[1] || \"global\";\n if (void 0 !== document && \"global\" === c) {\n var f, d, p = {\n bubbles: !0,\n cancelable: !0,\n detail: arguments[1]\n };\n if (document.createEvent) {\n try {\n switch (l) {\n case \"input\":\n p.inputType = \"insertText\", f = new InputEvent(l, p);\n break;\n\n default:\n f = new CustomEvent(l, p);\n }\n } catch (e) {\n (f = document.createEvent(\"CustomEvent\")).initCustomEvent(l, p.bubbles, p.cancelable, p.detail);\n }\n e.type && (0, n.default)(f, e), a.dispatchEvent(f);\n } else (f = document.createEventObject()).eventType = l, f.detail = arguments[1], \n e.type && (0, n.default)(f, e), a.fireEvent(\"on\" + f.eventType, f);\n } else if (void 0 !== t[l]) if (arguments[0] = arguments[0].type ? arguments[0] : o.default.Event(arguments[0]), \n arguments[0].detail = arguments.slice(1), \"global\" === c) for (var h in t[l]) for (d = 0; d < t[l][h].length; d++) t[l][h][d].apply(a, arguments); else for (d = 0; d < t[l][c].length; d++) t[l][c][d].apply(a, arguments);\n }\n return this;\n }, t.Event = void 0;\n var i, n = l(a(600)), r = l(a(9380)), o = l(a(4963)), s = l(a(8741));\n function l(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n function u(e) {\n return e instanceof Element;\n }\n t.Event = i, \"function\" == typeof r.default.CustomEvent ? t.Event = i = r.default.CustomEvent : s.default && (t.Event = i = function(e, t) {\n t = t || {\n bubbles: !1,\n cancelable: !1,\n detail: void 0\n };\n var a = document.createEvent(\"CustomEvent\");\n return a.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), a;\n }, i.prototype = r.default.Event.prototype);\n },\n 600: function(e, t) {\n function a(e) {\n return (a = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function e() {\n var t, i, n, r, o, s, l = arguments[0] || {}, u = 1, c = arguments.length, f = !1;\n \"boolean\" == typeof l && (f = l, l = arguments[u] || {}, u++);\n \"object\" !== a(l) && \"function\" != typeof l && (l = {});\n for (;u < c; u++) if (null != (t = arguments[u])) for (i in t) n = l[i], r = t[i], \n l !== r && (f && r && (\"[object Object]\" === Object.prototype.toString.call(r) || (o = Array.isArray(r))) ? (o ? (o = !1, \n s = n && Array.isArray(n) ? n : []) : s = n && \"[object Object]\" === Object.prototype.toString.call(n) ? n : {}, \n l[i] = e(f, s, r)) : void 0 !== r && (l[i] = r));\n return l;\n };\n },\n 4963: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var i = s(a(600)), n = s(a(9380)), r = s(a(253)), o = a(3776);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = n.default.document;\n function u(e) {\n return e instanceof u ? e : this instanceof u ? void (null != e && e !== n.default && (this[0] = e.nodeName ? e : void 0 !== e[0] && e[0].nodeName ? e[0] : l.querySelector(e), \n void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new u(e);\n }\n u.prototype = {\n on: o.on,\n off: o.off,\n trigger: o.trigger\n }, u.extend = i.default, u.data = r.default, u.Event = o.Event;\n var c = u;\n t.default = c;\n },\n 9845: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.iphone = t.iemobile = t.mobile = t.ie = t.ua = void 0;\n var i, n = (i = a(9380)) && i.__esModule ? i : {\n default: i\n };\n var r = n.default.navigator && n.default.navigator.userAgent || \"\", o = r.indexOf(\"MSIE \") > 0 || r.indexOf(\"Trident/\") > 0, s = \"ontouchstart\" in n.default, l = /iemobile/i.test(r), u = /iphone/i.test(r) && !l;\n t.iphone = u, t.iemobile = l, t.mobile = s, t.ie = o, t.ua = r;\n },\n 7184: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e) {\n return e.replace(a, \"\\\\$1\");\n };\n var a = new RegExp(\"(\\\\\" + [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ].join(\"|\\\\\") + \")\", \"gim\");\n },\n 6030: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.EventHandlers = void 0;\n var i, n = a(8711), r = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, o = a(9845), s = a(7215), l = a(7760), u = a(4713);\n var c = {\n keydownEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = t.dependencyLib, c = t.maskset, f = this, d = i(f), p = e.keyCode, h = n.caret.call(t, f), v = a.onKeyDown.call(this, e, n.getBuffer.call(t), h, a);\n if (void 0 !== v) return v;\n if (p === r.default.BACKSPACE || p === r.default.DELETE || o.iphone && p === r.default.BACKSPACE_SAFARI || e.ctrlKey && p === r.default.X && !(\"oncut\" in f)) e.preventDefault(), \n s.handleRemove.call(t, f, p, h), (0, l.writeBuffer)(f, n.getBuffer.call(t, !0), c.p, e, f.inputmask._valueGet() !== n.getBuffer.call(t).join(\"\")); else if (p === r.default.END || p === r.default.PAGE_DOWN) {\n e.preventDefault();\n var m = n.seekNext.call(t, n.getLastValidPosition.call(t));\n n.caret.call(t, f, e.shiftKey ? h.begin : m, m, !0);\n } else p === r.default.HOME && !e.shiftKey || p === r.default.PAGE_UP ? (e.preventDefault(), \n n.caret.call(t, f, 0, e.shiftKey ? h.begin : 0, !0)) : a.undoOnEscape && p === r.default.ESCAPE && !0 !== e.altKey ? ((0, \n l.checkVal)(f, !0, !1, t.undoValue.split(\"\")), d.trigger(\"click\")) : !0 === a.tabThrough && p === r.default.TAB ? !0 === e.shiftKey ? (h.end = n.seekPrevious.call(t, h.end, !0), \n !0 === u.getTest.call(t, h.end - 1).match.static && h.end--, h.begin = n.seekPrevious.call(t, h.end, !0), \n h.begin >= 0 && h.end > 0 && (e.preventDefault(), n.caret.call(t, f, h.begin, h.end))) : (h.begin = n.seekNext.call(t, h.begin, !0), \n h.end = n.seekNext.call(t, h.begin, !0), h.end < c.maskLength && h.end--, h.begin <= c.maskLength && (e.preventDefault(), \n n.caret.call(t, f, h.begin, h.end))) : e.shiftKey || a.insertModeVisual && !1 === a.insertMode && (p === r.default.RIGHT ? setTimeout((function() {\n var e = n.caret.call(t, f);\n n.caret.call(t, f, e.begin);\n }), 0) : p === r.default.LEFT && setTimeout((function() {\n var e = n.translatePosition.call(t, f.inputmask.caretPos.begin);\n n.translatePosition.call(t, f.inputmask.caretPos.end);\n t.isRTL ? n.caret.call(t, f, e + (e === c.maskLength ? 0 : 1)) : n.caret.call(t, f, e - (0 === e ? 0 : 1));\n }), 0));\n t.ignorable = a.ignorables.includes(p);\n },\n keypressEvent: function(e, t, a, i, o) {\n var u = this.inputmask || this, c = u.opts, f = u.dependencyLib, d = u.maskset, p = u.el, h = f(p), v = e.which || e.charCode || e.keyCode;\n if (!(!0 === t || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || u.ignorable)) return v === r.default.ENTER && u.undoValue !== u._valueGet(!0) && (u.undoValue = u._valueGet(!0), \n setTimeout((function() {\n h.trigger(\"change\");\n }), 0)), u.skipInputEvent = !0, !0;\n if (v) {\n 44 !== v && 46 !== v || 3 !== e.location || \"\" === c.radixPoint || (v = c.radixPoint.charCodeAt(0));\n var m, g = t ? {\n begin: o,\n end: o\n } : n.caret.call(u, p), k = String.fromCharCode(v);\n d.writeOutBuffer = !0;\n var y = s.isValid.call(u, g, k, i, void 0, void 0, void 0, t);\n if (!1 !== y && (n.resetMaskSet.call(u, !0), m = void 0 !== y.caret ? y.caret : n.seekNext.call(u, y.pos.begin ? y.pos.begin : y.pos), \n d.p = m), m = c.numericInput && void 0 === y.caret ? n.seekPrevious.call(u, m) : m, \n !1 !== a && (setTimeout((function() {\n c.onKeyValidation.call(p, v, y);\n }), 0), d.writeOutBuffer && !1 !== y)) {\n var b = n.getBuffer.call(u);\n (0, l.writeBuffer)(p, b, m, e, !0 !== t);\n }\n if (e.preventDefault(), t) return !1 !== y && (y.forwardPosition = m), y;\n }\n },\n keyupEvent: function(e) {\n var t = this.inputmask;\n !t.isComposing || e.keyCode !== r.default.KEY_229 && e.keyCode !== r.default.ENTER || t.$el.trigger(\"input\");\n },\n pasteEvent: function(e) {\n var t, a = this.inputmask, i = a.opts, r = a._valueGet(!0), o = n.caret.call(a, this);\n a.isRTL && (t = o.end, o.end = o.begin, o.begin = t);\n var s = r.substr(0, o.begin), u = r.substr(o.end, r.length);\n if (s == (a.isRTL ? n.getBufferTemplate.call(a).slice().reverse() : n.getBufferTemplate.call(a)).slice(0, o.begin).join(\"\") && (s = \"\"), \n u == (a.isRTL ? n.getBufferTemplate.call(a).slice().reverse() : n.getBufferTemplate.call(a)).slice(o.end).join(\"\") && (u = \"\"), \n window.clipboardData && window.clipboardData.getData) r = s + window.clipboardData.getData(\"Text\") + u; else {\n if (!e.clipboardData || !e.clipboardData.getData) return !0;\n r = s + e.clipboardData.getData(\"text/plain\") + u;\n }\n var c = r;\n if (\"function\" == typeof i.onBeforePaste) {\n if (!1 === (c = i.onBeforePaste.call(a, r, i))) return e.preventDefault();\n c || (c = r);\n }\n return (0, l.checkVal)(this, !0, !1, c.toString().split(\"\"), e), e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = t.dependencyLib;\n var s = this, f = s.inputmask._valueGet(!0), d = (t.isRTL ? n.getBuffer.call(t).slice().reverse() : n.getBuffer.call(t)).join(\"\"), p = n.caret.call(t, s, void 0, void 0, !0);\n if (d !== f) {\n var h = function(e, i, r) {\n for (var o, s, l, c = e.substr(0, r.begin).split(\"\"), f = e.substr(r.begin).split(\"\"), d = i.substr(0, r.begin).split(\"\"), p = i.substr(r.begin).split(\"\"), h = c.length >= d.length ? c.length : d.length, v = f.length >= p.length ? f.length : p.length, m = \"\", g = [], k = \"~\"; c.length < h; ) c.push(k);\n for (;d.length < h; ) d.push(k);\n for (;f.length < v; ) f.unshift(k);\n for (;p.length < v; ) p.unshift(k);\n var y = c.concat(f), b = d.concat(p);\n for (s = 0, o = y.length; s < o; s++) switch (l = u.getPlaceholder.call(t, n.translatePosition.call(t, s)), \n m) {\n case \"insertText\":\n b[s - 1] === y[s] && r.begin == y.length - 1 && g.push(y[s]), s = o;\n break;\n\n case \"insertReplacementText\":\n case \"deleteContentBackward\":\n y[s] === k ? r.end++ : s = o;\n break;\n\n default:\n y[s] !== b[s] && (y[s + 1] !== k && y[s + 1] !== l && void 0 !== y[s + 1] || (b[s] !== l || b[s + 1] !== k) && b[s] !== k ? b[s + 1] === k && b[s] === y[s + 1] ? (m = \"insertText\", \n g.push(y[s]), r.begin--, r.end--) : y[s] !== l && y[s] !== k && (y[s + 1] === k || b[s] !== y[s] && b[s + 1] === y[s + 1]) ? (m = \"insertReplacementText\", \n g.push(y[s]), r.begin--) : y[s] === k ? (m = \"deleteContentBackward\", (n.isMask.call(t, n.translatePosition.call(t, s), !0) || b[s] === a.radixPoint) && r.end++) : s = o : (m = \"insertText\", \n g.push(y[s]), r.begin--, r.end--));\n }\n return {\n action: m,\n data: g,\n caret: r\n };\n }(f = function(e, a, i) {\n if (o.iemobile) {\n var r = a.replace(n.getBuffer.call(t).join(\"\"), \"\");\n if (1 === r.length) {\n var s = a.split(\"\");\n s.splice(i.begin, 0, r), a = s.join(\"\");\n }\n }\n return a;\n }(0, f, p), d, p);\n switch ((s.inputmask.shadowRoot || s.ownerDocument).activeElement !== s && s.focus(), \n (0, l.writeBuffer)(s, n.getBuffer.call(t)), n.caret.call(t, s, p.begin, p.end, !0), \n h.action) {\n case \"insertText\":\n case \"insertReplacementText\":\n h.data.forEach((function(e, a) {\n var n = new i.Event(\"keypress\");\n n.which = e.charCodeAt(0), t.ignorable = !1, c.keypressEvent.call(s, n);\n })), setTimeout((function() {\n t.$el.trigger(\"keyup\");\n }), 0);\n break;\n\n case \"deleteContentBackward\":\n var v = new i.Event(\"keydown\");\n v.keyCode = r.default.BACKSPACE, c.keydownEvent.call(s, v);\n break;\n\n default:\n (0, l.applyInputValue)(s, f);\n }\n e.preventDefault();\n }\n },\n compositionendEvent: function(e) {\n var t = this.inputmask;\n t.isComposing = !1, t.$el.trigger(\"input\");\n },\n setValueEvent: function(e) {\n var t = this.inputmask, a = this, i = e && e.detail ? e.detail[0] : arguments[1];\n void 0 === i && (i = a.inputmask._valueGet(!0)), (0, l.applyInputValue)(a, i), (e.detail && void 0 !== e.detail[1] || void 0 !== arguments[2]) && n.caret.call(t, a, e.detail ? e.detail[1] : arguments[2]);\n },\n focusEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = this, r = i.inputmask._valueGet();\n a.showMaskOnFocus && r !== n.getBuffer.call(t).join(\"\") && (0, l.writeBuffer)(i, n.getBuffer.call(t), n.seekNext.call(t, n.getLastValidPosition.call(t))), \n !0 !== a.positionCaretOnTab || !1 !== t.mouseEnter || s.isComplete.call(t, n.getBuffer.call(t)) && -1 !== n.getLastValidPosition.call(t) || c.clickEvent.apply(i, [ e, !0 ]), \n t.undoValue = t._valueGet(!0);\n },\n invalidEvent: function(e) {\n this.inputmask.validationEvent = !0;\n },\n mouseleaveEvent: function() {\n var e = this.inputmask, t = e.opts, a = this;\n e.mouseEnter = !1, t.clearMaskOnLostFocus && (a.inputmask.shadowRoot || a.ownerDocument).activeElement !== a && (0, \n l.HandleNativePlaceholder)(a, e.originalPlaceholder);\n },\n clickEvent: function(e, t) {\n var a = this.inputmask, i = this;\n if ((i.inputmask.shadowRoot || i.ownerDocument).activeElement === i) {\n var r = n.determineNewCaretPosition.call(a, n.caret.call(a, i), t);\n void 0 !== r && n.caret.call(a, i, r);\n }\n },\n cutEvent: function(e) {\n var t = this.inputmask, a = t.maskset, i = this, o = n.caret.call(t, i), u = window.clipboardData || e.clipboardData, c = t.isRTL ? n.getBuffer.call(t).slice(o.end, o.begin) : n.getBuffer.call(t).slice(o.begin, o.end);\n u.setData(\"text\", t.isRTL ? c.reverse().join(\"\") : c.join(\"\")), document.execCommand && document.execCommand(\"copy\"), \n s.handleRemove.call(t, i, r.default.DELETE, o), (0, l.writeBuffer)(i, n.getBuffer.call(t), a.p, e, t.undoValue !== t._valueGet(!0));\n },\n blurEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = (0, t.dependencyLib)(this), r = this;\n if (r.inputmask) {\n (0, l.HandleNativePlaceholder)(r, t.originalPlaceholder);\n var o = r.inputmask._valueGet(), u = n.getBuffer.call(t).slice();\n \"\" !== o && (a.clearMaskOnLostFocus && (-1 === n.getLastValidPosition.call(t) && o === n.getBufferTemplate.call(t).join(\"\") ? u = [] : l.clearOptionalTail.call(t, u)), \n !1 === s.isComplete.call(t, u) && (setTimeout((function() {\n i.trigger(\"incomplete\");\n }), 0), a.clearIncomplete && (n.resetMaskSet.call(t), u = a.clearMaskOnLostFocus ? [] : n.getBufferTemplate.call(t).slice())), \n (0, l.writeBuffer)(r, u, void 0, e)), t.undoValue !== t._valueGet(!0) && (t.undoValue = t._valueGet(!0), \n i.trigger(\"change\"));\n }\n },\n mouseenterEvent: function() {\n var e = this.inputmask, t = e.opts, a = this;\n if (e.mouseEnter = !0, (a.inputmask.shadowRoot || a.ownerDocument).activeElement !== a) {\n var i = (e.isRTL ? n.getBufferTemplate.call(e).slice().reverse() : n.getBufferTemplate.call(e)).join(\"\");\n e.placeholder !== i && a.placeholder !== e.originalPlaceholder && (e.originalPlaceholder = a.placeholder), \n t.showMaskOnHover && (0, l.HandleNativePlaceholder)(a, i);\n }\n },\n submitEvent: function() {\n var e = this.inputmask, t = e.opts;\n e.undoValue !== e._valueGet(!0) && e.$el.trigger(\"change\"), t.clearMaskOnLostFocus && -1 === n.getLastValidPosition.call(e) && e._valueGet && e._valueGet() === n.getBufferTemplate.call(e).join(\"\") && e._valueSet(\"\"), \n t.clearIncomplete && !1 === s.isComplete.call(e, n.getBuffer.call(e)) && e._valueSet(\"\"), \n t.removeMaskOnSubmit && (e._valueSet(e.unmaskedvalue(), !0), setTimeout((function() {\n (0, l.writeBuffer)(e.el, n.getBuffer.call(e));\n }), 0));\n },\n resetEvent: function() {\n var e = this.inputmask;\n e.refreshValue = !0, setTimeout((function() {\n (0, l.applyInputValue)(e.el, e._valueGet(!0));\n }), 0);\n }\n };\n t.EventHandlers = c;\n },\n 9716: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.EventRuler = void 0;\n var i = s(a(2394)), n = s(a(4528)), r = a(8711), o = a(7760);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = {\n on: function(e, t, a) {\n var s = e.inputmask.dependencyLib, l = function(t) {\n t.originalEvent && (t = t.originalEvent || t, arguments[0] = t);\n var l, u = this, c = u.inputmask, f = c ? c.opts : void 0;\n if (void 0 === c && \"FORM\" !== this.nodeName) {\n var d = s.data(u, \"_inputmask_opts\");\n s(u).off(), d && new i.default(d).mask(u);\n } else {\n if ([ \"submit\", \"reset\", \"setvalue\" ].includes(t.type) || \"FORM\" === this.nodeName || !(u.disabled || u.readOnly && !(\"keydown\" === t.type && t.ctrlKey && 67 === t.keyCode || !1 === f.tabThrough && t.keyCode === n.default.TAB))) {\n switch (t.type) {\n case \"input\":\n if (!0 === c.skipInputEvent || t.inputType && \"insertCompositionText\" === t.inputType) return c.skipInputEvent = !1, \n t.preventDefault();\n break;\n\n case \"keydown\":\n c.skipKeyPressEvent = !1, c.skipInputEvent = c.isComposing = t.keyCode === n.default.KEY_229;\n break;\n\n case \"keyup\":\n case \"compositionend\":\n c.isComposing && (c.skipInputEvent = !1);\n break;\n\n case \"keypress\":\n if (!0 === c.skipKeyPressEvent) return t.preventDefault();\n c.skipKeyPressEvent = !0;\n break;\n\n case \"click\":\n case \"focus\":\n return c.validationEvent ? (c.validationEvent = !1, e.blur(), (0, o.HandleNativePlaceholder)(e, (c.isRTL ? r.getBufferTemplate.call(c).slice().reverse() : r.getBufferTemplate.call(c)).join(\"\")), \n setTimeout((function() {\n e.focus();\n }), f.validationEventTimeOut), !1) : (l = arguments, setTimeout((function() {\n e.inputmask && a.apply(u, l);\n }), 0), !1);\n }\n var p = a.apply(u, arguments);\n return !1 === p && (t.preventDefault(), t.stopPropagation()), p;\n }\n t.preventDefault();\n }\n };\n [ \"submit\", \"reset\" ].includes(t) ? (l = l.bind(e), null !== e.form && s(e.form).on(t, l)) : s(e).on(t, l), \n e.inputmask.events[t] = e.inputmask.events[t] || [], e.inputmask.events[t].push(l);\n },\n off: function(e, t) {\n if (e.inputmask && e.inputmask.events) {\n var a = e.inputmask.dependencyLib, i = e.inputmask.events;\n for (var n in t && ((i = [])[t] = e.inputmask.events[t]), i) {\n for (var r = i[n]; r.length > 0; ) {\n var o = r.pop();\n [ \"submit\", \"reset\" ].includes(n) ? null !== e.form && a(e.form).off(n, o) : a(e).off(n, o);\n }\n delete e.inputmask.events[n];\n }\n }\n }\n };\n t.EventRuler = l;\n },\n 219: function(e, t, a) {\n var i = l(a(2394)), n = l(a(4528)), r = l(a(7184)), o = a(8711);\n function s(e) {\n return (s = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function l(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var u = i.default.dependencyLib, c = (new Date).getFullYear(), f = {\n d: [ \"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate ],\n dd: [ \"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\n return y(Date.prototype.getDate.call(this), 2);\n } ],\n ddd: [ \"\" ],\n dddd: [ \"\" ],\n m: [ \"[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n return Date.prototype.getMonth.call(this) + 1;\n } ],\n mm: [ \"0[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n return y(Date.prototype.getMonth.call(this) + 1, 2);\n } ],\n mmm: [ \"\" ],\n mmmm: [ \"\" ],\n yy: [ \"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\n return y(Date.prototype.getFullYear.call(this), 2);\n } ],\n yyyy: [ \"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\n return y(Date.prototype.getFullYear.call(this), 4);\n } ],\n h: [ \"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n hh: [ \"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\n return y(Date.prototype.getHours.call(this), 2);\n } ],\n hx: [ function(e) {\n return \"[0-9]{\".concat(e, \"}\");\n }, Date.prototype.setHours, \"hours\", function(e) {\n return Date.prototype.getHours;\n } ],\n H: [ \"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n HH: [ \"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\n return y(Date.prototype.getHours.call(this), 2);\n } ],\n Hx: [ function(e) {\n return \"[0-9]{\".concat(e, \"}\");\n }, Date.prototype.setHours, \"hours\", function(e) {\n return function() {\n return y(Date.prototype.getHours.call(this), e);\n };\n } ],\n M: [ \"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes ],\n MM: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\n return y(Date.prototype.getMinutes.call(this), 2);\n } ],\n s: [ \"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds ],\n ss: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\n return y(Date.prototype.getSeconds.call(this), 2);\n } ],\n l: [ \"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return y(Date.prototype.getMilliseconds.call(this), 3);\n } ],\n L: [ \"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return y(Date.prototype.getMilliseconds.call(this), 2);\n } ],\n t: [ \"[ap]\", p, \"ampm\", h, 1 ],\n tt: [ \"[ap]m\", p, \"ampm\", h, 2 ],\n T: [ \"[AP]\", p, \"ampm\", h, 1 ],\n TT: [ \"[AP]M\", p, \"ampm\", h, 2 ],\n Z: [ \"\" ],\n o: [ \"\" ],\n S: [ \"\" ]\n }, d = {\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n };\n function p(e) {\n e.toLowerCase().includes(\"p\") && this.setHours(this.getHours() + 12);\n }\n function h() {}\n function v(e) {\n var t = new RegExp(\"\\\\d+$\").exec(e[0]);\n if (t && void 0 !== t[0]) {\n var a = f[e[0][0] + \"x\"].slice(\"\");\n return a[0] = a[0](t[0]), a[3] = a[3](t[0]), a;\n }\n if (f[e[0]]) return f[e[0]];\n }\n function m(e) {\n if (!e.tokenizer) {\n var t = [], a = [];\n for (var i in f) if (/\\.*x$/.test(i)) {\n var n = i[0] + \"\\\\d+\";\n -1 === a.indexOf(n) && a.push(n);\n } else -1 === t.indexOf(i[0]) && t.push(i[0]);\n e.tokenizer = \"(\" + (a.length > 0 ? a.join(\"|\") + \"|\" : \"\") + t.join(\"+|\") + \")+?|.\", \n e.tokenizer = new RegExp(e.tokenizer, \"g\");\n }\n return e.tokenizer;\n }\n function g(e, t, a) {\n if (void 0 === e.rawday || !isFinite(e.rawday) && new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day || \"29\" == e.day && !Number.isFinite(e.rawyear) || new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day) return t;\n if (\"29\" == e.day) {\n var i = P(t.pos, a);\n if (\"yyyy\" === i.targetMatch[0] && t.pos - i.targetMatchIndex == 2) return t.remove = t.pos + 1, \n t;\n } else if (\"02\" == e.month && \"30\" == e.day && void 0 !== t.c) return e.day = \"03\", \n e.date.setDate(3), e.date.setMonth(1), t.insert = [ {\n pos: t.pos,\n c: \"0\"\n }, {\n pos: t.pos + 1,\n c: t.c\n } ], t.caret = o.seekNext.call(this, t.pos + 1), t;\n return !1;\n }\n function k(e, t, a, i) {\n var n, o, s = \"\";\n for (m(a).lastIndex = 0; n = m(a).exec(e); ) {\n if (void 0 === t) if (o = v(n)) s += \"(\" + o[0] + \")\"; else switch (n[0]) {\n case \"[\":\n s += \"(\";\n break;\n\n case \"]\":\n s += \")?\";\n break;\n\n default:\n s += (0, r.default)(n[0]);\n } else if (o = v(n)) if (!0 !== i && o[3]) s += o[3].call(t.date); else o[2] ? s += t[\"raw\" + o[2]] : s += n[0]; else s += n[0];\n }\n return s;\n }\n function y(e, t, a) {\n for (e = String(e), t = t || 2; e.length < t; ) e = a ? e + \"0\" : \"0\" + e;\n return e;\n }\n function b(e, t, a) {\n var i, n, r, o = {\n date: new Date(1, 0, 1)\n }, l = e;\n function u(e, t, a) {\n if (e[i] = \"ampm\" === i ? t : t.replace(/[^0-9]/g, \"0\"), e[\"raw\" + i] = t, void 0 !== r) {\n var n = e[i];\n (\"day\" === i && 29 === parseInt(n) || \"month\" === i && 2 === parseInt(n)) && (29 !== parseInt(e.day) || 2 !== parseInt(e.month) || \"\" !== e.year && void 0 !== e.year || e.date.setFullYear(2012, 1, 29)), \n \"day\" === i && 0 === parseInt(n) && (n = 1), \"month\" === i && (n = parseInt(n)) > 0 && (n -= 1), \n \"year\" === i && n.length < 4 && (n = y(n, 4, !0)), \"\" === n || isNaN(n) || r.call(e.date, n), \n \"ampm\" === i && r.call(e.date, n);\n }\n }\n if (\"string\" == typeof l) {\n for (m(a).lastIndex = 0; n = m(a).exec(t); ) {\n var c = new RegExp(\"\\\\d+$\").exec(n[0]), d = c ? n[0][0] + \"x\" : n[0], p = void 0;\n if (c) {\n var h = m(a).lastIndex, v = P(n.index, a);\n m(a).lastIndex = h, p = l.slice(0, l.indexOf(v.nextMatch[0]));\n } else p = l.slice(0, d.length);\n Object.prototype.hasOwnProperty.call(f, d) && (i = f[d][2], r = f[d][1], u(o, p)), \n l = l.slice(p.length);\n }\n return o;\n }\n if (l && \"object\" === s(l) && Object.prototype.hasOwnProperty.call(l, \"date\")) return l;\n }\n function x(e, t) {\n return k(t.inputFormat, {\n date: e\n }, t);\n }\n function P(e, t) {\n var a, i, n = 0, r = 0;\n for (m(t).lastIndex = 0; i = m(t).exec(t.inputFormat); ) {\n var o = new RegExp(\"\\\\d+$\").exec(i[0]);\n if ((n += r = o ? parseInt(o[0]) : i[0].length) >= e) {\n a = i, i = m(t).exec(t.inputFormat);\n break;\n }\n }\n return {\n targetMatchIndex: n - r,\n nextMatch: i,\n targetMatch: a\n };\n }\n i.default.extendAliases({\n datetime: {\n mask: function(e) {\n return e.numericInput = !1, f.S = e.i18n.ordinalSuffix.join(\"|\"), e.inputFormat = d[e.inputFormat] || e.inputFormat, \n e.displayFormat = d[e.displayFormat] || e.displayFormat || e.inputFormat, e.outputFormat = d[e.outputFormat] || e.outputFormat || e.inputFormat, \n e.placeholder = \"\" !== e.placeholder ? e.placeholder : e.inputFormat.replace(/[[\\]]/, \"\"), \n e.regex = k(e.inputFormat, void 0, e), e.min = b(e.min, e.inputFormat, e), e.max = b(e.max, e.inputFormat, e), \n null;\n },\n placeholder: \"\",\n inputFormat: \"isoDateTime\",\n displayFormat: void 0,\n outputFormat: void 0,\n min: null,\n max: null,\n skipOptionalPartCharacter: \"\",\n i18n: {\n dayNames: [ \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ],\n monthNames: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n ordinalSuffix: [ \"st\", \"nd\", \"rd\", \"th\" ]\n },\n preValidation: function(e, t, a, i, n, r, o, s) {\n if (s) return !0;\n if (isNaN(a) && e[t] !== a) {\n var l = P(t, n);\n if (l.nextMatch && l.nextMatch[0] === a && l.targetMatch[0].length > 1) {\n var u = f[l.targetMatch[0]][0];\n if (new RegExp(u).test(\"0\" + e[t - 1])) return e[t] = e[t - 1], e[t - 1] = \"0\", \n {\n fuzzy: !0,\n buffer: e,\n refreshFromBuffer: {\n start: t - 1,\n end: t + 1\n },\n pos: t + 1\n };\n }\n }\n return !0;\n },\n postValidation: function(e, t, a, i, n, r, o, s) {\n var l, u;\n if (o) return !0;\n if (!1 === i && (((l = P(t + 1, n)).targetMatch && l.targetMatchIndex === t && l.targetMatch[0].length > 1 && void 0 !== f[l.targetMatch[0]] || (l = P(t + 2, n)).targetMatch && l.targetMatchIndex === t + 1 && l.targetMatch[0].length > 1 && void 0 !== f[l.targetMatch[0]]) && (u = f[l.targetMatch[0]][0]), \n void 0 !== u && (void 0 !== r.validPositions[t + 1] && new RegExp(u).test(a + \"0\") ? (e[t] = a, \n e[t + 1] = \"0\", i = {\n pos: t + 2,\n caret: t\n }) : new RegExp(u).test(\"0\" + a) && (e[t] = \"0\", e[t + 1] = a, i = {\n pos: t + 2\n })), !1 === i)) return i;\n if (i.fuzzy && (e = i.buffer, t = i.pos), (l = P(t, n)).targetMatch && l.targetMatch[0] && void 0 !== f[l.targetMatch[0]]) {\n u = f[l.targetMatch[0]][0];\n var d = e.slice(l.targetMatchIndex, l.targetMatchIndex + l.targetMatch[0].length);\n !1 === new RegExp(u).test(d.join(\"\")) && 2 === l.targetMatch[0].length && r.validPositions[l.targetMatchIndex] && r.validPositions[l.targetMatchIndex + 1] && (r.validPositions[l.targetMatchIndex + 1].input = \"0\");\n }\n var p = i, h = b(e.join(\"\"), n.inputFormat, n);\n return p && h.date.getTime() == h.date.getTime() && (n.prefillYear && (p = function(e, t, a) {\n if (e.year !== e.rawyear) {\n var i = c.toString(), n = e.rawyear.replace(/[^0-9]/g, \"\"), r = i.slice(0, n.length), o = i.slice(n.length);\n if (2 === n.length && n === r) {\n var s = new Date(c, e.month - 1, e.day);\n e.day == s.getDate() && (!a.max || a.max.date.getTime() >= s.getTime()) && (e.date.setFullYear(c), \n e.year = i, t.insert = [ {\n pos: t.pos + 1,\n c: o[0]\n }, {\n pos: t.pos + 2,\n c: o[1]\n } ]);\n }\n }\n return t;\n }(h, p, n)), p = function(e, t, a, i, n) {\n if (!t) return t;\n if (a.min) {\n if (e.rawyear) {\n var r, o = e.rawyear.replace(/[^0-9]/g, \"\"), s = a.min.year.substr(0, o.length);\n if (o < s) {\n var l = P(t.pos, a);\n if (o = e.rawyear.substr(0, t.pos - l.targetMatchIndex + 1).replace(/[^0-9]/g, \"0\"), \n (s = a.min.year.substr(0, o.length)) <= o) return t.remove = l.targetMatchIndex + o.length, \n t;\n if (o = \"yyyy\" === l.targetMatch[0] ? e.rawyear.substr(1, 1) : e.rawyear.substr(0, 1), \n s = a.min.year.substr(2, 1), r = a.max ? a.max.year.substr(2, 1) : o, 1 === o.length && s <= o && o <= r && !0 !== n) return \"yyyy\" === l.targetMatch[0] ? (t.insert = [ {\n pos: t.pos + 1,\n c: o,\n strict: !0\n } ], t.caret = t.pos + 2, i.validPositions[t.pos].input = a.min.year[1]) : (t.insert = [ {\n pos: t.pos + 1,\n c: a.min.year[1],\n strict: !0\n }, {\n pos: t.pos + 2,\n c: o,\n strict: !0\n } ], t.caret = t.pos + 3, i.validPositions[t.pos].input = a.min.year[0]), t;\n t = !1;\n }\n }\n for (var u in e) -1 === u.indexOf(\"raw\") && e[\"raw\".concat(u)] && (e[u], e[\"raw\".concat(u)]);\n t && e.year && e.year === e.rawyear && a.min.date.getTime() == a.min.date.getTime() && (t = a.min.date.getTime() <= e.date.getTime());\n }\n return t && a.max && a.max.date.getTime() == a.max.date.getTime() && (t = a.max.date.getTime() >= e.date.getTime()), \n t;\n }(h, p = g.call(this, h, p, n), n, r, s)), void 0 !== t && p && i.pos !== t ? {\n buffer: k(n.inputFormat, h, n).split(\"\"),\n refreshFromBuffer: {\n start: t,\n end: i.pos\n },\n pos: i.caret || i.pos\n } : p;\n },\n onKeyDown: function(e, t, a, i) {\n e.ctrlKey && e.keyCode === n.default.RIGHT && (this.inputmask._valueSet(x(new Date, i)), \n u(this).trigger(\"setvalue\"));\n },\n onUnMask: function(e, t, a) {\n return t ? k(a.outputFormat, b(e, a.inputFormat, a), a, !0) : t;\n },\n casing: function(e, t, a, i) {\n return 0 == t.nativeDef.indexOf(\"[ap]\") ? e.toLowerCase() : 0 == t.nativeDef.indexOf(\"[AP]\") ? e.toUpperCase() : e;\n },\n onBeforeMask: function(e, t) {\n return \"[object Date]\" === Object.prototype.toString.call(e) && (e = x(e, t)), e;\n },\n insertMode: !1,\n shiftPositions: !1,\n keepStatic: !1,\n inputmode: \"numeric\",\n prefillYear: !0\n }\n });\n },\n 3851: function(e, t, a) {\n var i, n = (i = a(2394)) && i.__esModule ? i : {\n default: i\n }, r = a(8711), o = a(4713);\n n.default.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n casing: \"upper\"\n }\n });\n var s = new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\");\n function l(e, t, a, i, n) {\n return a - 1 > -1 && \".\" !== t.buffer[a - 1] ? (e = t.buffer[a - 1] + e, e = a - 2 > -1 && \".\" !== t.buffer[a - 2] ? t.buffer[a - 2] + e : \"0\" + e) : e = \"00\" + e, \n s.test(e);\n }\n n.default.extendAliases({\n cssunit: {\n regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\n },\n url: {\n regex: \"(https?|ftp)://.*\",\n autoUnmask: !1,\n keepStatic: !1,\n tabThrough: !0\n },\n ip: {\n mask: \"i[i[i]].j[j[j]].k[k[k]].l[l[l]]\",\n definitions: {\n i: {\n validator: l\n },\n j: {\n validator: l\n },\n k: {\n validator: l\n },\n l: {\n validator: l\n }\n },\n onUnMask: function(e, t, a) {\n return e;\n },\n inputmode: \"numeric\"\n },\n email: {\n mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n greedy: !1,\n casing: \"lower\",\n onBeforePaste: function(e, t) {\n return (e = e.toLowerCase()).replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\"\n }\n },\n onUnMask: function(e, t, a) {\n return e;\n },\n inputmode: \"email\"\n },\n mac: {\n mask: \"##:##:##:##:##:##\"\n },\n vin: {\n mask: \"V{13}9{4}\",\n definitions: {\n V: {\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n casing: \"upper\"\n }\n },\n clearIncomplete: !0,\n autoUnmask: !0\n },\n ssn: {\n mask: \"999-99-9999\",\n postValidation: function(e, t, a, i, n, s, l) {\n var u = o.getMaskTemplate.call(this, !0, r.getLastValidPosition.call(this), !0, !0);\n return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(u.join(\"\"));\n }\n }\n });\n },\n 207: function(e, t, a) {\n var i = s(a(2394)), n = s(a(4528)), r = s(a(7184)), o = a(8711);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = i.default.dependencyLib;\n function u(e, t) {\n for (var a = \"\", n = 0; n < e.length; n++) i.default.prototype.definitions[e.charAt(n)] || t.definitions[e.charAt(n)] || t.optionalmarker[0] === e.charAt(n) || t.optionalmarker[1] === e.charAt(n) || t.quantifiermarker[0] === e.charAt(n) || t.quantifiermarker[1] === e.charAt(n) || t.groupmarker[0] === e.charAt(n) || t.groupmarker[1] === e.charAt(n) || t.alternatormarker === e.charAt(n) ? a += \"\\\\\" + e.charAt(n) : a += e.charAt(n);\n return a;\n }\n function c(e, t, a, i) {\n if (e.length > 0 && t > 0 && (!a.digitsOptional || i)) {\n var n = e.indexOf(a.radixPoint), r = !1;\n a.negationSymbol.back === e[e.length - 1] && (r = !0, e.length--), -1 === n && (e.push(a.radixPoint), \n n = e.length - 1);\n for (var o = 1; o <= t; o++) isFinite(e[n + o]) || (e[n + o] = \"0\");\n }\n return r && e.push(a.negationSymbol.back), e;\n }\n function f(e, t) {\n var a = 0;\n if (\"+\" === e) {\n for (a in t.validPositions) ;\n a = o.seekNext.call(this, parseInt(a));\n }\n for (var i in t.tests) if ((i = parseInt(i)) >= a) for (var n = 0, r = t.tests[i].length; n < r; n++) if ((void 0 === t.validPositions[i] || \"-\" === e) && t.tests[i][n].match.def === e) return i + (void 0 !== t.validPositions[i] && \"-\" !== e ? 1 : 0);\n return a;\n }\n function d(e, t) {\n var a = -1;\n for (var i in t.validPositions) {\n var n = t.validPositions[i];\n if (n && n.match.def === e) {\n a = parseInt(i);\n break;\n }\n }\n return a;\n }\n function p(e, t, a, i, n) {\n var r = t.buffer ? t.buffer.indexOf(n.radixPoint) : -1, o = (-1 !== r || i && n.jitMasking) && new RegExp(n.definitions[9].validator).test(e);\n return n._radixDance && -1 !== r && o && null == t.validPositions[r] ? {\n insert: {\n pos: r === a ? r + 1 : r,\n c: n.radixPoint\n },\n pos: a\n } : o;\n }\n i.default.extendAliases({\n numeric: {\n mask: function(e) {\n e.repeat = 0, e.groupSeparator === e.radixPoint && e.digits && \"0\" !== e.digits && (\".\" === e.radixPoint ? e.groupSeparator = \",\" : \",\" === e.radixPoint ? e.groupSeparator = \".\" : e.groupSeparator = \"\"), \n \" \" === e.groupSeparator && (e.skipOptionalPartCharacter = void 0), e.placeholder.length > 1 && (e.placeholder = e.placeholder.charAt(0)), \n \"radixFocus\" === e.positionCaretOnClick && \"\" === e.placeholder && (e.positionCaretOnClick = \"lvp\");\n var t = \"0\", a = e.radixPoint;\n !0 === e.numericInput && void 0 === e.__financeInput ? (t = \"1\", e.positionCaretOnClick = \"radixFocus\" === e.positionCaretOnClick ? \"lvp\" : e.positionCaretOnClick, \n e.digitsOptional = !1, isNaN(e.digits) && (e.digits = 2), e._radixDance = !1, a = \",\" === e.radixPoint ? \"?\" : \"!\", \n \"\" !== e.radixPoint && void 0 === e.definitions[a] && (e.definitions[a] = {}, e.definitions[a].validator = \"[\" + e.radixPoint + \"]\", \n e.definitions[a].placeholder = e.radixPoint, e.definitions[a].static = !0, e.definitions[a].generated = !0)) : (e.__financeInput = !1, \n e.numericInput = !0);\n var i, n = \"[+]\";\n if (n += u(e.prefix, e), \"\" !== e.groupSeparator ? (void 0 === e.definitions[e.groupSeparator] && (e.definitions[e.groupSeparator] = {}, \n e.definitions[e.groupSeparator].validator = \"[\" + e.groupSeparator + \"]\", e.definitions[e.groupSeparator].placeholder = e.groupSeparator, \n e.definitions[e.groupSeparator].static = !0, e.definitions[e.groupSeparator].generated = !0), \n n += e._mask(e)) : n += \"9{+}\", void 0 !== e.digits && 0 !== e.digits) {\n var o = e.digits.toString().split(\",\");\n isFinite(o[0]) && o[1] && isFinite(o[1]) ? n += a + t + \"{\" + e.digits + \"}\" : (isNaN(e.digits) || parseInt(e.digits) > 0) && (e.digitsOptional || e.jitMasking ? (i = n + a + t + \"{0,\" + e.digits + \"}\", \n e.keepStatic = !0) : n += a + t + \"{\" + e.digits + \"}\");\n } else e.inputmode = \"numeric\";\n return n += u(e.suffix, e), n += \"[-]\", i && (n = [ i + u(e.suffix, e) + \"[-]\", n ]), \n e.greedy = !1, function(e) {\n void 0 === e.parseMinMaxOptions && (null !== e.min && (e.min = e.min.toString().replace(new RegExp((0, \n r.default)(e.groupSeparator), \"g\"), \"\"), \",\" === e.radixPoint && (e.min = e.min.replace(e.radixPoint, \".\")), \n e.min = isFinite(e.min) ? parseFloat(e.min) : NaN, isNaN(e.min) && (e.min = Number.MIN_VALUE)), \n null !== e.max && (e.max = e.max.toString().replace(new RegExp((0, r.default)(e.groupSeparator), \"g\"), \"\"), \n \",\" === e.radixPoint && (e.max = e.max.replace(e.radixPoint, \".\")), e.max = isFinite(e.max) ? parseFloat(e.max) : NaN, \n isNaN(e.max) && (e.max = Number.MAX_VALUE)), e.parseMinMaxOptions = \"done\");\n }(e), n;\n },\n _mask: function(e) {\n return \"(\" + e.groupSeparator + \"999){+|1}\";\n },\n digits: \"*\",\n digitsOptional: !0,\n enforceDigitsOnBlur: !1,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n _radixDance: !0,\n groupSeparator: \"\",\n allowMinus: !0,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n prefix: \"\",\n suffix: \"\",\n min: null,\n max: null,\n SetMaxOnOverflow: !1,\n step: 1,\n inputType: \"text\",\n unmaskAsNumber: !1,\n roundingFN: Math.round,\n inputmode: \"decimal\",\n shortcuts: {\n k: \"000\",\n m: \"000000\"\n },\n placeholder: \"0\",\n greedy: !1,\n rightAlign: !0,\n insertMode: !0,\n autoUnmask: !1,\n skipOptionalPartCharacter: \"\",\n usePrototypeDefinitions: !1,\n definitions: {\n 0: {\n validator: p\n },\n 1: {\n validator: p,\n definitionSymbol: \"9\"\n },\n 9: {\n validator: \"[0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9]\",\n definitionSymbol: \"*\"\n },\n \"+\": {\n validator: function(e, t, a, i, n) {\n return n.allowMinus && (\"-\" === e || e === n.negationSymbol.front);\n }\n },\n \"-\": {\n validator: function(e, t, a, i, n) {\n return n.allowMinus && e === n.negationSymbol.back;\n }\n }\n },\n preValidation: function(e, t, a, i, n, r, o, s) {\n var l;\n if (!1 !== n.__financeInput && a === n.radixPoint) return !1;\n if (l = n.shortcuts && n.shortcuts[a]) {\n if (l.length > 1) for (var u = [], c = 0; c < l.length; c++) u.push({\n pos: t + c,\n c: l[c],\n strict: !1\n });\n return {\n insert: u\n };\n }\n var p = e.indexOf(n.radixPoint), h = t;\n if (t = function(e, t, a, i, n) {\n return n._radixDance && n.numericInput && t !== n.negationSymbol.back && e <= a && (a > 0 || t == n.radixPoint) && (void 0 === i.validPositions[e - 1] || i.validPositions[e - 1].input !== n.negationSymbol.back) && (e -= 1), \n e;\n }(t, a, p, r, n), \"-\" === a || a === n.negationSymbol.front) {\n if (!0 !== n.allowMinus) return !1;\n var v = !1, m = d(\"+\", r), g = d(\"-\", r);\n return -1 !== m && (v = [ m, g ]), !1 !== v ? {\n remove: v,\n caret: h - n.negationSymbol.back.length\n } : {\n insert: [ {\n pos: f.call(this, \"+\", r),\n c: n.negationSymbol.front,\n fromIsValid: !0\n }, {\n pos: f.call(this, \"-\", r),\n c: n.negationSymbol.back,\n fromIsValid: void 0\n } ],\n caret: h + n.negationSymbol.back.length\n };\n }\n if (a === n.groupSeparator) return {\n caret: h\n };\n if (s) return !0;\n if (-1 !== p && !0 === n._radixDance && !1 === i && a === n.radixPoint && void 0 !== n.digits && (isNaN(n.digits) || parseInt(n.digits) > 0) && p !== t) return {\n caret: n._radixDance && t === p - 1 ? p + 1 : p\n };\n if (!1 === n.__financeInput) if (i) {\n if (n.digitsOptional) return {\n rewritePosition: o.end\n };\n if (!n.digitsOptional) {\n if (o.begin > p && o.end <= p) return a === n.radixPoint ? {\n insert: {\n pos: p + 1,\n c: \"0\",\n fromIsValid: !0\n },\n rewritePosition: p\n } : {\n rewritePosition: p + 1\n };\n if (o.begin < p) return {\n rewritePosition: o.begin - 1\n };\n }\n } else if (!n.showMaskOnHover && !n.showMaskOnFocus && !n.digitsOptional && n.digits > 0 && \"\" === this.__valueGet.call(this.el)) return {\n rewritePosition: p\n };\n return {\n rewritePosition: t\n };\n },\n postValidation: function(e, t, a, i, n, r, o) {\n if (!1 === i) return i;\n if (o) return !0;\n if (null !== n.min || null !== n.max) {\n var s = n.onUnMask(e.slice().reverse().join(\"\"), void 0, l.extend({}, n, {\n unmaskAsNumber: !0\n }));\n if (null !== n.min && s < n.min && (s.toString().length > n.min.toString().length || s < 0)) return !1;\n if (null !== n.max && s > n.max) return !!n.SetMaxOnOverflow && {\n refreshFromBuffer: !0,\n buffer: c(n.max.toString().replace(\".\", n.radixPoint).split(\"\"), n.digits, n).reverse()\n };\n }\n return i;\n },\n onUnMask: function(e, t, a) {\n if (\"\" === t && !0 === a.nullable) return t;\n var i = e.replace(a.prefix, \"\");\n return i = (i = i.replace(a.suffix, \"\")).replace(new RegExp((0, r.default)(a.groupSeparator), \"g\"), \"\"), \n \"\" !== a.placeholder.charAt(0) && (i = i.replace(new RegExp(a.placeholder.charAt(0), \"g\"), \"0\")), \n a.unmaskAsNumber ? (\"\" !== a.radixPoint && -1 !== i.indexOf(a.radixPoint) && (i = i.replace(r.default.call(this, a.radixPoint), \".\")), \n i = (i = i.replace(new RegExp(\"^\" + (0, r.default)(a.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n r.default)(a.negationSymbol.back) + \"$\"), \"\"), Number(i)) : i;\n },\n isComplete: function(e, t) {\n var a = (t.numericInput ? e.slice().reverse() : e).join(\"\");\n return a = (a = (a = (a = (a = a.replace(new RegExp(\"^\" + (0, r.default)(t.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n r.default)(t.negationSymbol.back) + \"$\"), \"\")).replace(t.prefix, \"\")).replace(t.suffix, \"\")).replace(new RegExp((0, \n r.default)(t.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"), \",\" === t.radixPoint && (a = a.replace((0, \n r.default)(t.radixPoint), \".\")), isFinite(a);\n },\n onBeforeMask: function(e, t) {\n var a = t.radixPoint || \",\";\n isFinite(t.digits) && (t.digits = parseInt(t.digits)), \"number\" != typeof e && \"number\" !== t.inputType || \"\" === a || (e = e.toString().replace(\".\", a));\n var i = \"-\" === e.charAt(0) || e.charAt(0) === t.negationSymbol.front, n = e.split(a), o = n[0].replace(/[^\\-0-9]/g, \"\"), s = n.length > 1 ? n[1].replace(/[^0-9]/g, \"\") : \"\", l = n.length > 1;\n e = o + (\"\" !== s ? a + s : s);\n var u = 0;\n if (\"\" !== a && (u = t.digitsOptional ? t.digits < s.length ? t.digits : s.length : t.digits, \n \"\" !== s || !t.digitsOptional)) {\n var f = Math.pow(10, u || 1);\n e = e.replace((0, r.default)(a), \".\"), isNaN(parseFloat(e)) || (e = (t.roundingFN(parseFloat(e) * f) / f).toFixed(u)), \n e = e.toString().replace(\".\", a);\n }\n if (0 === t.digits && -1 !== e.indexOf(a) && (e = e.substring(0, e.indexOf(a))), \n null !== t.min || null !== t.max) {\n var d = e.toString().replace(a, \".\");\n null !== t.min && d < t.min ? e = t.min.toString().replace(\".\", a) : null !== t.max && d > t.max && (e = t.max.toString().replace(\".\", a));\n }\n return i && \"-\" !== e.charAt(0) && (e = \"-\" + e), c(e.toString().split(\"\"), u, t, l).join(\"\");\n },\n onBeforeWrite: function(e, t, a, i) {\n function n(e, t) {\n if (!1 !== i.__financeInput || t) {\n var a = e.indexOf(i.radixPoint);\n -1 !== a && e.splice(a, 1);\n }\n if (\"\" !== i.groupSeparator) for (;-1 !== (a = e.indexOf(i.groupSeparator)); ) e.splice(a, 1);\n return e;\n }\n var o, s = function(e, t) {\n var a = new RegExp(\"(^\" + (\"\" !== t.negationSymbol.front ? (0, r.default)(t.negationSymbol.front) + \"?\" : \"\") + (0, \n r.default)(t.prefix) + \")(.*)(\" + (0, r.default)(t.suffix) + (\"\" != t.negationSymbol.back ? (0, \n r.default)(t.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(e.slice().reverse().join(\"\")), i = a ? a[2] : \"\", n = !1;\n return i && (i = i.split(t.radixPoint.charAt(0))[0], n = new RegExp(\"^[0\" + t.groupSeparator + \"]*\").exec(i)), \n !(!n || !(n[0].length > 1 || n[0].length > 0 && n[0].length < i.length)) && n;\n }(t, i);\n if (s) for (var u = t.join(\"\").lastIndexOf(s[0].split(\"\").reverse().join(\"\")) - (s[0] == s.input ? 0 : 1), f = s[0] == s.input ? 1 : 0, d = s[0].length - f; d > 0; d--) delete this.maskset.validPositions[u + d], \n delete t[u + d];\n if (e) switch (e.type) {\n case \"blur\":\n case \"checkval\":\n if (null !== i.min) {\n var p = i.onUnMask(t.slice().reverse().join(\"\"), void 0, l.extend({}, i, {\n unmaskAsNumber: !0\n }));\n if (null !== i.min && p < i.min) return {\n refreshFromBuffer: !0,\n buffer: c(i.min.toString().replace(\".\", i.radixPoint).split(\"\"), i.digits, i).reverse()\n };\n }\n if (t[t.length - 1] === i.negationSymbol.front) {\n var h = new RegExp(\"(^\" + (\"\" != i.negationSymbol.front ? (0, r.default)(i.negationSymbol.front) + \"?\" : \"\") + (0, \n r.default)(i.prefix) + \")(.*)(\" + (0, r.default)(i.suffix) + (\"\" != i.negationSymbol.back ? (0, \n r.default)(i.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(n(t.slice(), !0).reverse().join(\"\"));\n 0 == (h ? h[2] : \"\") && (o = {\n refreshFromBuffer: !0,\n buffer: [ 0 ]\n });\n } else \"\" !== i.radixPoint && t[0] === i.radixPoint && (o && o.buffer ? o.buffer.shift() : (t.shift(), \n o = {\n refreshFromBuffer: !0,\n buffer: n(t)\n }));\n if (i.enforceDigitsOnBlur) {\n var v = (o = o || {}) && o.buffer || t.slice().reverse();\n o.refreshFromBuffer = !0, o.buffer = c(v, i.digits, i, !0).reverse();\n }\n }\n return o;\n },\n onKeyDown: function(e, t, a, i) {\n var r, o = l(this);\n if (e.ctrlKey) switch (e.keyCode) {\n case n.default.UP:\n return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(i.step)), \n o.trigger(\"setvalue\"), !1;\n\n case n.default.DOWN:\n return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(i.step)), \n o.trigger(\"setvalue\"), !1;\n }\n if (!e.shiftKey && (e.keyCode === n.default.DELETE || e.keyCode === n.default.BACKSPACE || e.keyCode === n.default.BACKSPACE_SAFARI) && a.begin !== t.length) {\n if (t[e.keyCode === n.default.DELETE ? a.begin - 1 : a.end] === i.negationSymbol.front) return r = t.slice().reverse(), \n \"\" !== i.negationSymbol.front && r.shift(), \"\" !== i.negationSymbol.back && r.pop(), \n o.trigger(\"setvalue\", [ r.join(\"\"), a.begin ]), !1;\n if (!0 === i._radixDance) {\n var s = t.indexOf(i.radixPoint);\n if (i.digitsOptional) {\n if (0 === s) return (r = t.slice().reverse()).pop(), o.trigger(\"setvalue\", [ r.join(\"\"), a.begin >= r.length ? r.length : a.begin ]), \n !1;\n } else if (-1 !== s && (a.begin < s || a.end < s || e.keyCode === n.default.DELETE && a.begin === s)) return a.begin !== a.end || e.keyCode !== n.default.BACKSPACE && e.keyCode !== n.default.BACKSPACE_SAFARI || a.begin++, \n (r = t.slice().reverse()).splice(r.length - a.begin, a.begin - a.end + 1), r = c(r, i.digits, i).join(\"\"), \n o.trigger(\"setvalue\", [ r, a.begin >= r.length ? s + 1 : a.begin ]), !1;\n }\n }\n }\n },\n currency: {\n prefix: \"\",\n groupSeparator: \",\",\n alias: \"numeric\",\n digits: 2,\n digitsOptional: !1\n },\n decimal: {\n alias: \"numeric\"\n },\n integer: {\n alias: \"numeric\",\n inputmode: \"numeric\",\n digits: 0\n },\n percentage: {\n alias: \"numeric\",\n min: 0,\n max: 100,\n suffix: \" %\",\n digits: 0,\n allowMinus: !1\n },\n indianns: {\n alias: \"numeric\",\n _mask: function(e) {\n return \"(\" + e.groupSeparator + \"99){*|1}(\" + e.groupSeparator + \"999){1|1}\";\n },\n groupSeparator: \",\",\n radixPoint: \".\",\n placeholder: \"0\",\n digits: 2,\n digitsOptional: !1\n }\n });\n },\n 9380: function(e, t, a) {\n var i;\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var n = ((i = a(8741)) && i.__esModule ? i : {\n default: i\n }).default ? window : {};\n t.default = n;\n },\n 7760: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.applyInputValue = c, t.clearOptionalTail = f, t.checkVal = d, t.HandleNativePlaceholder = function(e, t) {\n var a = e ? e.inputmask : this;\n if (l.ie) {\n if (e.inputmask._valueGet() !== t && (e.placeholder !== t || \"\" === e.placeholder)) {\n var i = o.getBuffer.call(a).slice(), n = e.inputmask._valueGet();\n if (n !== t) {\n var r = o.getLastValidPosition.call(a);\n -1 === r && n === o.getBufferTemplate.call(a).join(\"\") ? i = [] : -1 !== r && f.call(a, i), \n p(e, i);\n }\n }\n } else e.placeholder !== t && (e.placeholder = t, \"\" === e.placeholder && e.removeAttribute(\"placeholder\"));\n }, t.unmaskedvalue = function(e) {\n var t = e ? e.inputmask : this, a = t.opts, i = t.maskset;\n if (e) {\n if (void 0 === e.inputmask) return e.value;\n e.inputmask && e.inputmask.refreshValue && c(e, e.inputmask._valueGet(!0));\n }\n var n = [], r = i.validPositions;\n for (var s in r) r[s] && r[s].match && (1 != r[s].match.static || Array.isArray(i.metadata) && !0 !== r[s].generatedInput) && n.push(r[s].input);\n var l = 0 === n.length ? \"\" : (t.isRTL ? n.reverse() : n).join(\"\");\n if (\"function\" == typeof a.onUnMask) {\n var u = (t.isRTL ? o.getBuffer.call(t).slice().reverse() : o.getBuffer.call(t)).join(\"\");\n l = a.onUnMask.call(t, u, l, a);\n }\n return l;\n }, t.writeBuffer = p;\n var i, n = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, r = a(4713), o = a(8711), s = a(7215), l = a(9845), u = a(6030);\n function c(e, t) {\n var a = e ? e.inputmask : this, i = a.opts;\n e.inputmask.refreshValue = !1, \"function\" == typeof i.onBeforeMask && (t = i.onBeforeMask.call(a, t, i) || t), \n d(e, !0, !1, t = t.toString().split(\"\")), a.undoValue = a._valueGet(!0), (i.clearMaskOnLostFocus || i.clearIncomplete) && e.inputmask._valueGet() === o.getBufferTemplate.call(a).join(\"\") && -1 === o.getLastValidPosition.call(a) && e.inputmask._valueSet(\"\");\n }\n function f(e) {\n e.length = 0;\n for (var t, a = r.getMaskTemplate.call(this, !0, 0, !0, void 0, !0); void 0 !== (t = a.shift()); ) e.push(t);\n return e;\n }\n function d(e, t, a, i, n) {\n var l = e ? e.inputmask : this, c = l.maskset, f = l.opts, d = l.dependencyLib, h = i.slice(), v = \"\", m = -1, g = void 0, k = f.skipOptionalPartCharacter;\n f.skipOptionalPartCharacter = \"\", o.resetMaskSet.call(l), c.tests = {}, m = f.radixPoint ? o.determineNewCaretPosition.call(l, {\n begin: 0,\n end: 0\n }, !1, !1 === f.__financeInput ? \"radixFocus\" : void 0).begin : 0, c.p = m, l.caretPos = {\n begin: m\n };\n var y = [], b = l.caretPos;\n if (h.forEach((function(e, t) {\n if (void 0 !== e) {\n var i = new d.Event(\"_checkval\");\n i.which = e.toString().charCodeAt(0), v += e;\n var n = o.getLastValidPosition.call(l, void 0, !0);\n !function(e, t) {\n for (var a = r.getMaskTemplate.call(l, !0, 0).slice(e, o.seekNext.call(l, e, !1, !1)).join(\"\").replace(/'/g, \"\"), i = a.indexOf(t); i > 0 && \" \" === a[i - 1]; ) i--;\n var n = 0 === i && !o.isMask.call(l, e) && (r.getTest.call(l, e).match.nativeDef === t.charAt(0) || !0 === r.getTest.call(l, e).match.static && r.getTest.call(l, e).match.nativeDef === \"'\" + t.charAt(0) || \" \" === r.getTest.call(l, e).match.nativeDef && (r.getTest.call(l, e + 1).match.nativeDef === t.charAt(0) || !0 === r.getTest.call(l, e + 1).match.static && r.getTest.call(l, e + 1).match.nativeDef === \"'\" + t.charAt(0)));\n if (!n && i > 0 && !o.isMask.call(l, e, !1, !0)) {\n var s = o.seekNext.call(l, e);\n l.caretPos.begin < s && (l.caretPos = {\n begin: s\n });\n }\n return n;\n }(m, v) ? (g = u.EventHandlers.keypressEvent.call(l, i, !0, !1, a, l.caretPos.begin)) && (m = l.caretPos.begin + 1, \n v = \"\") : g = u.EventHandlers.keypressEvent.call(l, i, !0, !1, a, n + 1), g ? (void 0 !== g.pos && c.validPositions[g.pos] && !0 === c.validPositions[g.pos].match.static && void 0 === c.validPositions[g.pos].alternation && (y.push(g.pos), \n l.isRTL || (g.forwardPosition = g.pos + 1)), p.call(l, void 0, o.getBuffer.call(l), g.forwardPosition, i, !1), \n l.caretPos = {\n begin: g.forwardPosition,\n end: g.forwardPosition\n }, b = l.caretPos) : void 0 === c.validPositions[t] && h[t] === r.getPlaceholder.call(l, t) && o.isMask.call(l, t, !0) ? l.caretPos.begin++ : l.caretPos = b;\n }\n })), y.length > 0) {\n var x, P, E = o.seekNext.call(l, -1, void 0, !1);\n if (!s.isComplete.call(l, o.getBuffer.call(l)) && y.length <= E || s.isComplete.call(l, o.getBuffer.call(l)) && y.length > 0 && y.length !== E && 0 === y[0]) for (var S = E; void 0 !== (x = y.shift()); ) {\n var _ = new d.Event(\"_checkval\");\n if ((P = c.validPositions[x]).generatedInput = !0, _.which = P.input.charCodeAt(0), \n (g = u.EventHandlers.keypressEvent.call(l, _, !0, !1, a, S)) && void 0 !== g.pos && g.pos !== x && c.validPositions[g.pos] && !0 === c.validPositions[g.pos].match.static) y.push(g.pos); else if (!g) break;\n S++;\n }\n }\n t && p.call(l, e, o.getBuffer.call(l), g ? g.forwardPosition : l.caretPos.begin, n || new d.Event(\"checkval\"), n && \"input\" === n.type && l.undoValue !== l._valueGet(!0)), \n f.skipOptionalPartCharacter = k;\n }\n function p(e, t, a, i, r) {\n var l = e ? e.inputmask : this, u = l.opts, c = l.dependencyLib;\n if (i && \"function\" == typeof u.onBeforeWrite) {\n var f = u.onBeforeWrite.call(l, i, t, a, u);\n if (f) {\n if (f.refreshFromBuffer) {\n var d = f.refreshFromBuffer;\n s.refreshFromBuffer.call(l, !0 === d ? d : d.start, d.end, f.buffer || t), t = o.getBuffer.call(l, !0);\n }\n void 0 !== a && (a = void 0 !== f.caret ? f.caret : a);\n }\n }\n if (void 0 !== e && (e.inputmask._valueSet(t.join(\"\")), void 0 === a || void 0 !== i && \"blur\" === i.type || o.caret.call(l, e, a, void 0, void 0, void 0 !== i && \"keydown\" === i.type && (i.keyCode === n.default.DELETE || i.keyCode === n.default.BACKSPACE)), \n !0 === r)) {\n var p = c(e), h = e.inputmask._valueGet();\n e.inputmask.skipInputEvent = !0, p.trigger(\"input\"), setTimeout((function() {\n h === o.getBufferTemplate.call(l).join(\"\") ? p.trigger(\"cleared\") : !0 === s.isComplete.call(l, t) && p.trigger(\"complete\");\n }), 0);\n }\n }\n },\n 2394: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0, a(7149), a(3194);\n var i = a(157), n = m(a(4963)), r = m(a(9380)), o = a(2391), s = a(4713), l = a(8711), u = a(7215), c = a(7760), f = a(9716), d = m(a(7392)), p = m(a(3976)), h = m(a(8741));\n function v(e) {\n return (v = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function m(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var g = r.default.document, k = \"_inputmask_opts\";\n function y(e, t, a) {\n if (h.default) {\n if (!(this instanceof y)) return new y(e, t, a);\n this.dependencyLib = n.default, this.el = void 0, this.events = {}, this.maskset = void 0, \n !0 !== a && (\"[object Object]\" === Object.prototype.toString.call(e) ? t = e : (t = t || {}, \n e && (t.alias = e)), this.opts = n.default.extend(!0, {}, this.defaults, t), this.noMasksCache = t && void 0 !== t.definitions, \n this.userOptions = t || {}, b(this.opts.alias, t, this.opts)), this.refreshValue = !1, \n this.undoValue = void 0, this.$el = void 0, this.skipKeyPressEvent = !1, this.skipInputEvent = !1, \n this.validationEvent = !1, this.ignorable = !1, this.maxLength, this.mouseEnter = !1, \n this.originalPlaceholder = void 0, this.isComposing = !1;\n }\n }\n function b(e, t, a) {\n var i = y.prototype.aliases[e];\n return i ? (i.alias && b(i.alias, void 0, a), n.default.extend(!0, a, i), n.default.extend(!0, a, t), \n !0) : (null === a.mask && (a.mask = e), !1);\n }\n y.prototype = {\n dataAttribute: \"data-inputmask\",\n defaults: p.default,\n definitions: d.default,\n aliases: {},\n masksCache: {},\n get isRTL() {\n return this.opts.isRTL || this.opts.numericInput;\n },\n mask: function(e) {\n var t = this;\n return \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), \n (e = e.nodeName ? [ e ] : Array.isArray(e) ? e : Array.from(e)).forEach((function(e, a) {\n var s = n.default.extend(!0, {}, t.opts);\n if (function(e, t, a, i) {\n function o(t, n) {\n var o = \"\" === i ? t : i + \"-\" + t;\n null !== (n = void 0 !== n ? n : e.getAttribute(o)) && (\"string\" == typeof n && (0 === t.indexOf(\"on\") ? n = r.default[n] : \"false\" === n ? n = !1 : \"true\" === n && (n = !0)), \n a[t] = n);\n }\n if (!0 === t.importDataAttributes) {\n var s, l, u, c, f = e.getAttribute(i);\n if (f && \"\" !== f && (f = f.replace(/'/g, '\"'), l = JSON.parse(\"{\" + f + \"}\")), \n l) for (c in u = void 0, l) if (\"alias\" === c.toLowerCase()) {\n u = l[c];\n break;\n }\n for (s in o(\"alias\", u), a.alias && b(a.alias, a, t), t) {\n if (l) for (c in u = void 0, l) if (c.toLowerCase() === s.toLowerCase()) {\n u = l[c];\n break;\n }\n o(s, u);\n }\n }\n n.default.extend(!0, t, a), (\"rtl\" === e.dir || t.rightAlign) && (e.style.textAlign = \"right\");\n (\"rtl\" === e.dir || t.numericInput) && (e.dir = \"ltr\", e.removeAttribute(\"dir\"), \n t.isRTL = !0);\n return Object.keys(a).length;\n }(e, s, n.default.extend(!0, {}, t.userOptions), t.dataAttribute)) {\n var l = (0, o.generateMaskSet)(s, t.noMasksCache);\n void 0 !== l && (void 0 !== e.inputmask && (e.inputmask.opts.autoUnmask = !0, e.inputmask.remove()), \n e.inputmask = new y(void 0, void 0, !0), e.inputmask.opts = s, e.inputmask.noMasksCache = t.noMasksCache, \n e.inputmask.userOptions = n.default.extend(!0, {}, t.userOptions), e.inputmask.el = e, \n e.inputmask.$el = (0, n.default)(e), e.inputmask.maskset = l, n.default.data(e, k, t.userOptions), \n i.mask.call(e.inputmask));\n }\n })), e && e[0] && e[0].inputmask || this;\n },\n option: function(e, t) {\n return \"string\" == typeof e ? this.opts[e] : \"object\" === v(e) ? (n.default.extend(this.userOptions, e), \n this.el && !0 !== t && this.mask(this.el), this) : void 0;\n },\n unmaskedvalue: function(e) {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n void 0 === this.el || void 0 !== e) {\n var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n c.checkVal.call(this, void 0, !1, !1, t), \"function\" == typeof this.opts.onBeforeWrite && this.opts.onBeforeWrite.call(this, void 0, l.getBuffer.call(this), 0, this.opts);\n }\n return c.unmaskedvalue.call(this, this.el);\n },\n remove: function() {\n if (this.el) {\n n.default.data(this.el, k, null);\n var e = this.opts.autoUnmask ? (0, c.unmaskedvalue)(this.el) : this._valueGet(this.opts.autoUnmask);\n e !== l.getBufferTemplate.call(this).join(\"\") ? this._valueSet(e, this.opts.autoUnmask) : this._valueSet(\"\"), \n f.EventRuler.off(this.el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.el), \"value\") && this.__valueGet && Object.defineProperty(this.el, \"value\", {\n get: this.__valueGet,\n set: this.__valueSet,\n configurable: !0\n }) : g.__lookupGetter__ && this.el.__lookupGetter__(\"value\") && this.__valueGet && (this.el.__defineGetter__(\"value\", this.__valueGet), \n this.el.__defineSetter__(\"value\", this.__valueSet)), this.el.inputmask = void 0;\n }\n return this.el;\n },\n getemptymask: function() {\n return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n l.getBufferTemplate.call(this).join(\"\");\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n u.isComplete.call(this, l.getBuffer.call(this));\n },\n getmetadata: function() {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n Array.isArray(this.maskset.metadata)) {\n var e = s.getMaskTemplate.call(this, !0, 0, !1).join(\"\");\n return this.maskset.metadata.forEach((function(t) {\n return t.mask !== e || (e = t, !1);\n })), e;\n }\n return this.maskset.metadata;\n },\n isValid: function(e) {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n e) {\n var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n c.checkVal.call(this, void 0, !0, !1, t);\n } else e = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n for (var a = l.getBuffer.call(this), i = l.determineLastRequiredPosition.call(this), n = a.length - 1; n > i && !l.isMask.call(this, n); n--) ;\n return a.splice(i, n + 1 - i), u.isComplete.call(this, a) && e === (this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\"));\n },\n format: function(e, t) {\n this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache);\n var a = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n c.checkVal.call(this, void 0, !0, !1, a);\n var i = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n return t ? {\n value: i,\n metadata: this.getmetadata()\n } : i;\n },\n setValue: function(e) {\n this.el && (0, n.default)(this.el).trigger(\"setvalue\", [ e ]);\n },\n analyseMask: o.analyseMask\n }, y.extendDefaults = function(e) {\n n.default.extend(!0, y.prototype.defaults, e);\n }, y.extendDefinitions = function(e) {\n n.default.extend(!0, y.prototype.definitions, e);\n }, y.extendAliases = function(e) {\n n.default.extend(!0, y.prototype.aliases, e);\n }, y.format = function(e, t, a) {\n return y(t).format(e, a);\n }, y.unmask = function(e, t) {\n return y(t).unmaskedvalue(e);\n }, y.isValid = function(e, t) {\n return y(t).isValid(e);\n }, y.remove = function(e) {\n \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n e.inputmask && e.inputmask.remove();\n }));\n }, y.setValue = function(e, t) {\n \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n e.inputmask ? e.inputmask.setValue(t) : (0, n.default)(e).trigger(\"setvalue\", [ t ]);\n }));\n }, y.dependencyLib = n.default, r.default.Inputmask = y;\n var x = y;\n t.default = x;\n },\n 5296: function(e, t, a) {\n function i(e) {\n return (i = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n var n = p(a(9380)), r = p(a(2394)), o = p(a(8741));\n function s(e, t) {\n return !t || \"object\" !== i(t) && \"function\" != typeof t ? function(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n }(e) : t;\n }\n function l(e) {\n var t = \"function\" == typeof Map ? new Map : void 0;\n return (l = function(e) {\n if (null === e || (a = e, -1 === Function.toString.call(a).indexOf(\"[native code]\"))) return e;\n var a;\n if (\"function\" != typeof e) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== t) {\n if (t.has(e)) return t.get(e);\n t.set(e, i);\n }\n function i() {\n return u(e, arguments, d(this).constructor);\n }\n return i.prototype = Object.create(e.prototype, {\n constructor: {\n value: i,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), f(i, e);\n })(e);\n }\n function u(e, t, a) {\n return (u = c() ? Reflect.construct : function(e, t, a) {\n var i = [ null ];\n i.push.apply(i, t);\n var n = new (Function.bind.apply(e, i));\n return a && f(n, a.prototype), n;\n }).apply(null, arguments);\n }\n function c() {\n if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n if (Reflect.construct.sham) return !1;\n if (\"function\" == typeof Proxy) return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), \n !0;\n } catch (e) {\n return !1;\n }\n }\n function f(e, t) {\n return (f = Object.setPrototypeOf || function(e, t) {\n return e.__proto__ = t, e;\n })(e, t);\n }\n function d(e) {\n return (d = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) {\n return e.__proto__ || Object.getPrototypeOf(e);\n })(e);\n }\n function p(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var h = n.default.document;\n if (o.default && h && h.head && h.head.attachShadow && n.default.customElements && void 0 === n.default.customElements.get(\"input-mask\")) {\n var v = function(e) {\n !function(e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\");\n e.prototype = Object.create(t && t.prototype, {\n constructor: {\n value: e,\n writable: !0,\n configurable: !0\n }\n }), t && f(e, t);\n }(n, e);\n var t, a, i = (t = n, a = c(), function() {\n var e, i = d(t);\n if (a) {\n var n = d(this).constructor;\n e = Reflect.construct(i, arguments, n);\n } else e = i.apply(this, arguments);\n return s(this, e);\n });\n function n() {\n var e;\n !function(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, n);\n var t = (e = i.call(this)).getAttributeNames(), a = e.attachShadow({\n mode: \"closed\"\n }), o = h.createElement(\"input\");\n for (var s in o.type = \"text\", a.appendChild(o), t) Object.prototype.hasOwnProperty.call(t, s) && o.setAttribute(t[s], e.getAttribute(t[s]));\n var l = new r.default;\n return l.dataAttribute = \"\", l.mask(o), o.inputmask.shadowRoot = a, e;\n }\n return n;\n }(l(HTMLElement));\n n.default.customElements.define(\"input-mask\", v);\n }\n },\n 2391: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.generateMaskSet = function(e, t) {\n var a;\n function n(e, a, n) {\n var r, o, s = !1;\n if (null !== e && \"\" !== e || ((s = null !== n.regex) ? e = (e = n.regex).replace(/^(\\^)(.*)(\\$)$/, \"$2\") : (s = !0, \n e = \".*\")), 1 === e.length && !1 === n.greedy && 0 !== n.repeat && (n.placeholder = \"\"), \n n.repeat > 0 || \"*\" === n.repeat || \"+\" === n.repeat) {\n var l = \"*\" === n.repeat ? 0 : \"+\" === n.repeat ? 1 : n.repeat;\n e = n.groupmarker[0] + e + n.groupmarker[1] + n.quantifiermarker[0] + l + \",\" + n.repeat + n.quantifiermarker[1];\n }\n return o = s ? \"regex_\" + n.regex : n.numericInput ? e.split(\"\").reverse().join(\"\") : e, \n !1 !== n.keepStatic && (o = \"ks_\" + o), void 0 === Inputmask.prototype.masksCache[o] || !0 === t ? (r = {\n mask: e,\n maskToken: Inputmask.prototype.analyseMask(e, s, n),\n validPositions: {},\n _buffer: void 0,\n buffer: void 0,\n tests: {},\n excludes: {},\n metadata: a,\n maskLength: void 0,\n jitOffset: {}\n }, !0 !== t && (Inputmask.prototype.masksCache[o] = r, r = i.default.extend(!0, {}, Inputmask.prototype.masksCache[o]))) : r = i.default.extend(!0, {}, Inputmask.prototype.masksCache[o]), \n r;\n }\n \"function\" == typeof e.mask && (e.mask = e.mask(e));\n if (Array.isArray(e.mask)) {\n if (e.mask.length > 1) {\n null === e.keepStatic && (e.keepStatic = !0);\n var r = e.groupmarker[0];\n return (e.isRTL ? e.mask.reverse() : e.mask).forEach((function(t) {\n r.length > 1 && (r += e.groupmarker[1] + e.alternatormarker + e.groupmarker[0]), \n void 0 !== t.mask && \"function\" != typeof t.mask ? r += t.mask : r += t;\n })), n(r += e.groupmarker[1], e.mask, e);\n }\n e.mask = e.mask.pop();\n }\n null === e.keepStatic && (e.keepStatic = !1);\n a = e.mask && void 0 !== e.mask.mask && \"function\" != typeof e.mask.mask ? n(e.mask.mask, e.mask, e) : n(e.mask, e.mask, e);\n return a;\n }, t.analyseMask = function(e, t, a) {\n var i, r, o, s, l, u, c = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, f = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g, d = !1, p = new n.default, h = [], v = [], m = !1;\n function g(e, i, n) {\n n = void 0 !== n ? n : e.matches.length;\n var r = e.matches[n - 1];\n if (t) 0 === i.indexOf(\"[\") || d && /\\\\d|\\\\s|\\\\w]/i.test(i) || \".\" === i ? e.matches.splice(n++, 0, {\n fn: new RegExp(i, a.casing ? \"i\" : \"\"),\n static: !1,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== i,\n casing: null,\n def: i,\n placeholder: void 0,\n nativeDef: i\n }) : (d && (i = i[i.length - 1]), i.split(\"\").forEach((function(t, i) {\n r = e.matches[n - 1], e.matches.splice(n++, 0, {\n fn: /[a-z]/i.test(a.staticDefinitionSymbol || t) ? new RegExp(\"[\" + (a.staticDefinitionSymbol || t) + \"]\", a.casing ? \"i\" : \"\") : null,\n static: !0,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== t && !0 !== r.static,\n casing: null,\n def: a.staticDefinitionSymbol || t,\n placeholder: void 0 !== a.staticDefinitionSymbol ? t : void 0,\n nativeDef: (d ? \"'\" : \"\") + t\n });\n }))), d = !1; else {\n var o = a.definitions && a.definitions[i] || a.usePrototypeDefinitions && Inputmask.prototype.definitions[i];\n o && !d ? e.matches.splice(n++, 0, {\n fn: o.validator ? \"string\" == typeof o.validator ? new RegExp(o.validator, a.casing ? \"i\" : \"\") : new function() {\n this.test = o.validator;\n } : new RegExp(\".\"),\n static: o.static || !1,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== (o.definitionSymbol || i),\n casing: o.casing,\n def: o.definitionSymbol || i,\n placeholder: o.placeholder,\n nativeDef: i,\n generated: o.generated\n }) : (e.matches.splice(n++, 0, {\n fn: /[a-z]/i.test(a.staticDefinitionSymbol || i) ? new RegExp(\"[\" + (a.staticDefinitionSymbol || i) + \"]\", a.casing ? \"i\" : \"\") : null,\n static: !0,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== i && !0 !== r.static,\n casing: null,\n def: a.staticDefinitionSymbol || i,\n placeholder: void 0 !== a.staticDefinitionSymbol ? i : void 0,\n nativeDef: (d ? \"'\" : \"\") + i\n }), d = !1);\n }\n }\n function k() {\n if (h.length > 0) {\n if (g(s = h[h.length - 1], r), s.isAlternator) {\n l = h.pop();\n for (var e = 0; e < l.matches.length; e++) l.matches[e].isGroup && (l.matches[e].isGroup = !1);\n h.length > 0 ? (s = h[h.length - 1]).matches.push(l) : p.matches.push(l);\n }\n } else g(p, r);\n }\n function y(e) {\n var t = new n.default(!0);\n return t.openGroup = !1, t.matches = e, t;\n }\n function b() {\n if ((o = h.pop()).openGroup = !1, void 0 !== o) if (h.length > 0) {\n if ((s = h[h.length - 1]).matches.push(o), s.isAlternator) {\n l = h.pop();\n for (var e = 0; e < l.matches.length; e++) l.matches[e].isGroup = !1, l.matches[e].alternatorGroup = !1;\n h.length > 0 ? (s = h[h.length - 1]).matches.push(l) : p.matches.push(l);\n }\n } else p.matches.push(o); else k();\n }\n function x(e) {\n var t = e.pop();\n return t.isQuantifier && (t = y([ e.pop(), t ])), t;\n }\n t && (a.optionalmarker[0] = void 0, a.optionalmarker[1] = void 0);\n for (;i = t ? f.exec(e) : c.exec(e); ) {\n if (r = i[0], t) switch (r.charAt(0)) {\n case \"?\":\n r = \"{0,1}\";\n break;\n\n case \"+\":\n case \"*\":\n r = \"{\" + r + \"}\";\n break;\n\n case \"|\":\n if (0 === h.length) {\n var P = y(p.matches);\n P.openGroup = !0, h.push(P), p.matches = [], m = !0;\n }\n }\n if (d) k(); else switch (r.charAt(0)) {\n case \"$\":\n case \"^\":\n t || k();\n break;\n\n case \"(?=\":\n case \"(?!\":\n case \"(?<=\":\n case \"(? 0 ? h[h.length - 1].matches : p.matches;\n if ((i = T.pop()).isAlternator) {\n T.push(i), T = i.matches;\n var C = new n.default(!0), A = T.pop();\n T.push(C), T = C.matches, i = A;\n }\n i.isGroup || (i = y([ i ])), T.push(i), T.push(E);\n break;\n\n case a.alternatormarker:\n if (h.length > 0) {\n var D = (s = h[h.length - 1]).matches[s.matches.length - 1];\n u = s.openGroup && (void 0 === D.matches || !1 === D.isGroup && !1 === D.isAlternator) ? h.pop() : x(s.matches);\n } else u = x(p.matches);\n if (u.isAlternator) h.push(u); else if (u.alternatorGroup ? (l = h.pop(), u.alternatorGroup = !1) : l = new n.default(!1, !1, !1, !0), \n l.matches.push(u), h.push(l), u.openGroup) {\n u.openGroup = !1;\n var B = new n.default(!0);\n B.alternatorGroup = !0, h.push(B);\n }\n break;\n\n default:\n k();\n }\n }\n m && b();\n for (;h.length > 0; ) o = h.pop(), p.matches.push(o);\n p.matches.length > 0 && (!function e(i) {\n i && i.matches && i.matches.forEach((function(n, r) {\n var o = i.matches[r + 1];\n (void 0 === o || void 0 === o.matches || !1 === o.isQuantifier) && n && n.isGroup && (n.isGroup = !1, \n t || (g(n, a.groupmarker[0], 0), !0 !== n.openGroup && g(n, a.groupmarker[1]))), \n e(n);\n }));\n }(p), v.push(p));\n (a.numericInput || a.isRTL) && function e(t) {\n for (var i in t.matches = t.matches.reverse(), t.matches) if (Object.prototype.hasOwnProperty.call(t.matches, i)) {\n var n = parseInt(i);\n if (t.matches[i].isQuantifier && t.matches[n + 1] && t.matches[n + 1].isGroup) {\n var r = t.matches[i];\n t.matches.splice(i, 1), t.matches.splice(n + 1, 0, r);\n }\n void 0 !== t.matches[i].matches ? t.matches[i] = e(t.matches[i]) : t.matches[i] = ((o = t.matches[i]) === a.optionalmarker[0] ? o = a.optionalmarker[1] : o === a.optionalmarker[1] ? o = a.optionalmarker[0] : o === a.groupmarker[0] ? o = a.groupmarker[1] : o === a.groupmarker[1] && (o = a.groupmarker[0]), \n o);\n }\n var o;\n return t;\n }(v[0]);\n return v;\n };\n var i = r(a(4963)), n = r(a(9695));\n function r(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n },\n 157: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.mask = function() {\n var e = this, t = this.opts, a = this.el, i = this.dependencyLib;\n s.EventRuler.off(a);\n var f = function(t, a) {\n \"textarea\" !== t.tagName.toLowerCase() && a.ignorables.push(n.default.ENTER);\n var l = t.getAttribute(\"type\"), u = \"input\" === t.tagName.toLowerCase() && a.supportsInputType.includes(l) || t.isContentEditable || \"textarea\" === t.tagName.toLowerCase();\n if (!u) if (\"input\" === t.tagName.toLowerCase()) {\n var c = document.createElement(\"input\");\n c.setAttribute(\"type\", l), u = \"text\" === c.type, c = null;\n } else u = \"partial\";\n return !1 !== u ? function(t) {\n var n, l;\n function u() {\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== r.getLastValidPosition.call(e) || !0 !== a.nullable ? (this.inputmask.shadowRoot || this.ownerDocument).activeElement === this && a.clearMaskOnLostFocus ? (e.isRTL ? o.clearOptionalTail.call(e, r.getBuffer.call(e).slice()).reverse() : o.clearOptionalTail.call(e, r.getBuffer.call(e).slice())).join(\"\") : n.call(this) : \"\" : n.call(this);\n }\n function c(e) {\n l.call(this, e), this.inputmask && (0, o.applyInputValue)(this, e);\n }\n if (!t.inputmask.__valueGet) {\n if (!0 !== a.noValuePatching) {\n if (Object.getOwnPropertyDescriptor) {\n var f = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t), \"value\") : void 0;\n f && f.get && f.set ? (n = f.get, l = f.set, Object.defineProperty(t, \"value\", {\n get: u,\n set: c,\n configurable: !0\n })) : \"input\" !== t.tagName.toLowerCase() && (n = function() {\n return this.textContent;\n }, l = function(e) {\n this.textContent = e;\n }, Object.defineProperty(t, \"value\", {\n get: u,\n set: c,\n configurable: !0\n }));\n } else document.__lookupGetter__ && t.__lookupGetter__(\"value\") && (n = t.__lookupGetter__(\"value\"), \n l = t.__lookupSetter__(\"value\"), t.__defineGetter__(\"value\", u), t.__defineSetter__(\"value\", c));\n t.inputmask.__valueGet = n, t.inputmask.__valueSet = l;\n }\n t.inputmask._valueGet = function(t) {\n return e.isRTL && !0 !== t ? n.call(this.el).split(\"\").reverse().join(\"\") : n.call(this.el);\n }, t.inputmask._valueSet = function(t, a) {\n l.call(this.el, null == t ? \"\" : !0 !== a && e.isRTL ? t.split(\"\").reverse().join(\"\") : t);\n }, void 0 === n && (n = function() {\n return this.value;\n }, l = function(e) {\n this.value = e;\n }, function(t) {\n if (i.valHooks && (void 0 === i.valHooks[t] || !0 !== i.valHooks[t].inputmaskpatch)) {\n var n = i.valHooks[t] && i.valHooks[t].get ? i.valHooks[t].get : function(e) {\n return e.value;\n }, s = i.valHooks[t] && i.valHooks[t].set ? i.valHooks[t].set : function(e, t) {\n return e.value = t, e;\n };\n i.valHooks[t] = {\n get: function(t) {\n if (t.inputmask) {\n if (t.inputmask.opts.autoUnmask) return t.inputmask.unmaskedvalue();\n var i = n(t);\n return -1 !== r.getLastValidPosition.call(e, void 0, void 0, t.inputmask.maskset.validPositions) || !0 !== a.nullable ? i : \"\";\n }\n return n(t);\n },\n set: function(e, t) {\n var a = s(e, t);\n return e.inputmask && (0, o.applyInputValue)(e, t), a;\n },\n inputmaskpatch: !0\n };\n }\n }(t.type), function(t) {\n s.EventRuler.on(t, \"mouseenter\", (function() {\n var t = this.inputmask._valueGet(!0);\n t !== (e.isRTL ? r.getBuffer.call(e).reverse() : r.getBuffer.call(e)).join(\"\") && (0, \n o.applyInputValue)(this, t);\n }));\n }(t));\n }\n }(t) : t.inputmask = void 0, u;\n }(a, t);\n if (!1 !== f) {\n e.originalPlaceholder = a.placeholder, e.maxLength = void 0 !== a ? a.maxLength : void 0, \n -1 === e.maxLength && (e.maxLength = void 0), \"inputMode\" in a && null === a.getAttribute(\"inputmode\") && (a.inputMode = t.inputmode, \n a.setAttribute(\"inputmode\", t.inputmode)), !0 === f && (t.showMaskOnFocus = t.showMaskOnFocus && -1 === [ \"cc-number\", \"cc-exp\" ].indexOf(a.autocomplete), \n l.iphone && (t.insertModeVisual = !1), s.EventRuler.on(a, \"submit\", c.EventHandlers.submitEvent), \n s.EventRuler.on(a, \"reset\", c.EventHandlers.resetEvent), s.EventRuler.on(a, \"blur\", c.EventHandlers.blurEvent), \n s.EventRuler.on(a, \"focus\", c.EventHandlers.focusEvent), s.EventRuler.on(a, \"invalid\", c.EventHandlers.invalidEvent), \n s.EventRuler.on(a, \"click\", c.EventHandlers.clickEvent), s.EventRuler.on(a, \"mouseleave\", c.EventHandlers.mouseleaveEvent), \n s.EventRuler.on(a, \"mouseenter\", c.EventHandlers.mouseenterEvent), s.EventRuler.on(a, \"paste\", c.EventHandlers.pasteEvent), \n s.EventRuler.on(a, \"cut\", c.EventHandlers.cutEvent), s.EventRuler.on(a, \"complete\", t.oncomplete), \n s.EventRuler.on(a, \"incomplete\", t.onincomplete), s.EventRuler.on(a, \"cleared\", t.oncleared), \n !0 !== t.inputEventOnly && (s.EventRuler.on(a, \"keydown\", c.EventHandlers.keydownEvent), \n s.EventRuler.on(a, \"keypress\", c.EventHandlers.keypressEvent), s.EventRuler.on(a, \"keyup\", c.EventHandlers.keyupEvent)), \n (l.mobile || t.inputEventOnly) && a.removeAttribute(\"maxLength\"), s.EventRuler.on(a, \"input\", c.EventHandlers.inputFallBackEvent), \n s.EventRuler.on(a, \"compositionend\", c.EventHandlers.compositionendEvent)), s.EventRuler.on(a, \"setvalue\", c.EventHandlers.setValueEvent), \n r.getBufferTemplate.call(e).join(\"\"), e.undoValue = e._valueGet(!0);\n var d = (a.inputmask.shadowRoot || a.ownerDocument).activeElement;\n if (\"\" !== a.inputmask._valueGet(!0) || !1 === t.clearMaskOnLostFocus || d === a) {\n (0, o.applyInputValue)(a, a.inputmask._valueGet(!0), t);\n var p = r.getBuffer.call(e).slice();\n !1 === u.isComplete.call(e, p) && t.clearIncomplete && r.resetMaskSet.call(e), t.clearMaskOnLostFocus && d !== a && (-1 === r.getLastValidPosition.call(e) ? p = [] : o.clearOptionalTail.call(e, p)), \n (!1 === t.clearMaskOnLostFocus || t.showMaskOnFocus && d === a || \"\" !== a.inputmask._valueGet(!0)) && (0, \n o.writeBuffer)(a, p), d === a && r.caret.call(e, a, r.seekNext.call(e, r.getLastValidPosition.call(e)));\n }\n }\n };\n var i, n = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, r = a(8711), o = a(7760), s = a(9716), l = a(9845), u = a(7215), c = a(6030);\n },\n 9695: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e, t, a, i) {\n this.matches = [], this.openGroup = e || !1, this.alternatorGroup = !1, this.isGroup = e || !1, \n this.isOptional = t || !1, this.isQuantifier = a || !1, this.isAlternator = i || !1, \n this.quantifier = {\n min: 1,\n max: 1\n };\n };\n },\n 3194: function() {\n Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", {\n value: function(e, t) {\n if (null == this) throw new TypeError('\"this\" is null or not defined');\n var a = Object(this), i = a.length >>> 0;\n if (0 === i) return !1;\n for (var n = 0 | t, r = Math.max(n >= 0 ? n : i - Math.abs(n), 0); r < i; ) {\n if (a[r] === e) return !0;\n r++;\n }\n return !1;\n }\n });\n },\n 7149: function() {\n function e(t) {\n return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(t);\n }\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === e(\"test\".__proto__) ? function(e) {\n return e.__proto__;\n } : function(e) {\n return e.constructor.prototype;\n });\n },\n 8711: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.caret = function(e, t, a, i, n) {\n var r, o = this, s = this.opts;\n if (void 0 === t) return \"selectionStart\" in e && \"selectionEnd\" in e ? (t = e.selectionStart, \n a = e.selectionEnd) : window.getSelection ? (r = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== e && r.commonAncestorContainer !== e || (t = r.startOffset, \n a = r.endOffset) : document.selection && document.selection.createRange && (r = document.selection.createRange(), \n t = 0 - r.duplicate().moveStart(\"character\", -e.inputmask._valueGet().length), a = t + r.text.length), \n {\n begin: i ? t : u.call(o, t),\n end: i ? a : u.call(o, a)\n };\n if (Array.isArray(t) && (a = o.isRTL ? t[0] : t[1], t = o.isRTL ? t[1] : t[0]), \n void 0 !== t.begin && (a = o.isRTL ? t.begin : t.end, t = o.isRTL ? t.end : t.begin), \n \"number\" == typeof t) {\n t = i ? t : u.call(o, t), a = \"number\" == typeof (a = i ? a : u.call(o, a)) ? a : t;\n var l = parseInt(((e.ownerDocument.defaultView || window).getComputedStyle ? (e.ownerDocument.defaultView || window).getComputedStyle(e, null) : e.currentStyle).fontSize) * a;\n if (e.scrollLeft = l > e.scrollWidth ? l : 0, e.inputmask.caretPos = {\n begin: t,\n end: a\n }, s.insertModeVisual && !1 === s.insertMode && t === a && (n || a++), e === (e.inputmask.shadowRoot || e.ownerDocument).activeElement) if (\"setSelectionRange\" in e) e.setSelectionRange(t, a); else if (window.getSelection) {\n if (r = document.createRange(), void 0 === e.firstChild || null === e.firstChild) {\n var c = document.createTextNode(\"\");\n e.appendChild(c);\n }\n r.setStart(e.firstChild, t < e.inputmask._valueGet().length ? t : e.inputmask._valueGet().length), \n r.setEnd(e.firstChild, a < e.inputmask._valueGet().length ? a : e.inputmask._valueGet().length), \n r.collapse(!0);\n var f = window.getSelection();\n f.removeAllRanges(), f.addRange(r);\n } else e.createTextRange && ((r = e.createTextRange()).collapse(!0), r.moveEnd(\"character\", a), \n r.moveStart(\"character\", t), r.select());\n }\n }, t.determineLastRequiredPosition = function(e) {\n var t, a, r = this, s = this.maskset, l = this.dependencyLib, u = i.getMaskTemplate.call(r, !0, o.call(r), !0, !0), c = u.length, f = o.call(r), d = {}, p = s.validPositions[f], h = void 0 !== p ? p.locator.slice() : void 0;\n for (t = f + 1; t < u.length; t++) a = i.getTestTemplate.call(r, t, h, t - 1), h = a.locator.slice(), \n d[t] = l.extend(!0, {}, a);\n var v = p && void 0 !== p.alternation ? p.locator[p.alternation] : void 0;\n for (t = c - 1; t > f && (((a = d[t]).match.optionality || a.match.optionalQuantifier && a.match.newBlockMarker || v && (v !== d[t].locator[p.alternation] && 1 != a.match.static || !0 === a.match.static && a.locator[p.alternation] && n.checkAlternationMatch.call(r, a.locator[p.alternation].toString().split(\",\"), v.toString().split(\",\")) && \"\" !== i.getTests.call(r, t)[0].def)) && u[t] === i.getPlaceholder.call(r, t, a.match)); t--) c--;\n return e ? {\n l: c,\n def: d[c] ? d[c].match : void 0\n } : c;\n }, t.determineNewCaretPosition = function(e, t, a) {\n var n = this, u = this.maskset, c = this.opts;\n t && (n.isRTL ? e.end = e.begin : e.begin = e.end);\n if (e.begin === e.end) {\n switch (a = a || c.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"select\":\n e = {\n begin: 0,\n end: r.call(n).length\n };\n break;\n\n case \"ignore\":\n e.end = e.begin = l.call(n, o.call(n));\n break;\n\n case \"radixFocus\":\n if (function(e) {\n if (\"\" !== c.radixPoint && 0 !== c.digits) {\n var t = u.validPositions;\n if (void 0 === t[e] || t[e].input === i.getPlaceholder.call(n, e)) {\n if (e < l.call(n, -1)) return !0;\n var a = r.call(n).indexOf(c.radixPoint);\n if (-1 !== a) {\n for (var o in t) if (t[o] && a < o && t[o].input !== i.getPlaceholder.call(n, o)) return !1;\n return !0;\n }\n }\n }\n return !1;\n }(e.begin)) {\n var f = r.call(n).join(\"\").indexOf(c.radixPoint);\n e.end = e.begin = c.numericInput ? l.call(n, f) : f;\n break;\n }\n\n default:\n var d = e.begin, p = o.call(n, d, !0), h = l.call(n, -1 !== p || s.call(n, 0) ? p : -1);\n if (d <= h) e.end = e.begin = s.call(n, d, !1, !0) ? d : l.call(n, d); else {\n var v = u.validPositions[p], m = i.getTestTemplate.call(n, h, v ? v.match.locator : void 0, v), g = i.getPlaceholder.call(n, h, m.match);\n if (\"\" !== g && r.call(n)[h] !== g && !0 !== m.match.optionalQuantifier && !0 !== m.match.newBlockMarker || !s.call(n, h, c.keepStatic, !0) && m.match.def === g) {\n var k = l.call(n, h);\n (d >= k || d === h) && (h = k);\n }\n e.end = e.begin = h;\n }\n }\n return e;\n }\n }, t.getBuffer = r, t.getBufferTemplate = function() {\n var e = this.maskset;\n void 0 === e._buffer && (e._buffer = i.getMaskTemplate.call(this, !1, 1), void 0 === e.buffer && (e.buffer = e._buffer.slice()));\n return e._buffer;\n }, t.getLastValidPosition = o, t.isMask = s, t.resetMaskSet = function(e) {\n var t = this.maskset;\n t.buffer = void 0, !0 !== e && (t.validPositions = {}, t.p = 0);\n }, t.seekNext = l, t.seekPrevious = function(e, t) {\n var a = this, n = e - 1;\n if (e <= 0) return 0;\n for (;n > 0 && (!0 === t && (!0 !== i.getTest.call(a, n).match.newBlockMarker || !s.call(a, n, void 0, !0)) || !0 !== t && !s.call(a, n, void 0, !0)); ) n--;\n return n;\n }, t.translatePosition = u;\n var i = a(4713), n = a(7215);\n function r(e) {\n var t = this.maskset;\n return void 0 !== t.buffer && !0 !== e || (t.buffer = i.getMaskTemplate.call(this, !0, o.call(this), !0), \n void 0 === t._buffer && (t._buffer = t.buffer.slice())), t.buffer;\n }\n function o(e, t, a) {\n var i = this.maskset, n = -1, r = -1, o = a || i.validPositions;\n for (var s in void 0 === e && (e = -1), o) {\n var l = parseInt(s);\n o[l] && (t || !0 !== o[l].generatedInput) && (l <= e && (n = l), l >= e && (r = l));\n }\n return -1 === n || n == e ? r : -1 == r || e - n < r - e ? n : r;\n }\n function s(e, t, a) {\n var n = this, r = this.maskset, o = i.getTestTemplate.call(n, e).match;\n if (\"\" === o.def && (o = i.getTest.call(n, e).match), !0 !== o.static) return o.fn;\n if (!0 === a && void 0 !== r.validPositions[e] && !0 !== r.validPositions[e].generatedInput) return !0;\n if (!0 !== t && e > -1) {\n if (a) {\n var s = i.getTests.call(n, e);\n return s.length > 1 + (\"\" === s[s.length - 1].match.def ? 1 : 0);\n }\n var l = i.determineTestTemplate.call(n, e, i.getTests.call(n, e)), u = i.getPlaceholder.call(n, e, l.match);\n return l.match.def !== u;\n }\n return !1;\n }\n function l(e, t, a) {\n var n = this;\n void 0 === a && (a = !0);\n for (var r = e + 1; \"\" !== i.getTest.call(n, r).match.def && (!0 === t && (!0 !== i.getTest.call(n, r).match.newBlockMarker || !s.call(n, r, void 0, !0)) || !0 !== t && !s.call(n, r, void 0, a)); ) r++;\n return r;\n }\n function u(e) {\n var t = this.opts, a = this.el;\n return !this.isRTL || \"number\" != typeof e || t.greedy && \"\" === t.placeholder || !a || (e = Math.abs(this._valueGet().length - e)), \n e;\n }\n },\n 4713: function(e, t) {\n function a(e, t) {\n var a = (null != e.alternation ? e.mloc[i(e)] : e.locator).join(\"\");\n if (\"\" !== a) for (;a.length < t; ) a += \"0\";\n return a;\n }\n function i(e) {\n var t = e.locator[e.alternation];\n return \"string\" == typeof t && t.length > 0 && (t = t.split(\",\")[0]), void 0 !== t ? t.toString() : \"\";\n }\n function n(e, t, a) {\n var i = this.opts, n = this.maskset;\n if (void 0 !== (t = t || s.call(this, e).match).placeholder || !0 === a) return \"function\" == typeof t.placeholder ? t.placeholder(i) : t.placeholder;\n if (!0 === t.static) {\n if (e > -1 && void 0 === n.validPositions[e]) {\n var r, o = u.call(this, e), l = [];\n if (o.length > 1 + (\"\" === o[o.length - 1].match.def ? 1 : 0)) for (var c = 0; c < o.length; c++) if (\"\" !== o[c].match.def && !0 !== o[c].match.optionality && !0 !== o[c].match.optionalQuantifier && (!0 === o[c].match.static || void 0 === r || !1 !== o[c].match.fn.test(r.match.def, n, e, !0, i)) && (l.push(o[c]), \n !0 === o[c].match.static && (r = o[c]), l.length > 1 && /[0-9a-bA-Z]/.test(l[0].match.def))) return i.placeholder.charAt(e % i.placeholder.length);\n }\n return t.def;\n }\n return i.placeholder.charAt(e % i.placeholder.length);\n }\n function r(e, t, a) {\n return this.maskset.validPositions[e] || o.call(this, e, u.call(this, e, t ? t.slice() : t, a));\n }\n function o(e, t) {\n var i = this.opts;\n e = e > 0 ? e - 1 : 0;\n for (var n, r, o, l = a(s.call(this, e)), u = 0; u < t.length; u++) {\n var c = t[u];\n n = a(c, l.length);\n var f = Math.abs(n - l);\n (void 0 === r || \"\" !== n && f < r || o && !i.greedy && o.match.optionality && \"master\" === o.match.newBlockMarker && (!c.match.optionality || !c.match.newBlockMarker) || o && o.match.optionalQuantifier && !c.match.optionalQuantifier) && (r = f, \n o = c);\n }\n return o;\n }\n function s(e, t) {\n var a = this.maskset;\n return a.validPositions[e] ? a.validPositions[e] : (t || u.call(this, e))[0];\n }\n function l(e, t, a) {\n function i(e) {\n for (var t, a = [], i = -1, n = 0, r = e.length; n < r; n++) if (\"-\" === e.charAt(n)) for (t = e.charCodeAt(n + 1); ++i < t; ) a.push(String.fromCharCode(i)); else i = e.charCodeAt(n), \n a.push(e.charAt(n));\n return a.join(\"\");\n }\n return e.match.def === t.match.nativeDef || !(!(a.regex || e.match.fn instanceof RegExp && t.match.fn instanceof RegExp) || !0 === e.match.static || !0 === t.match.static) && -1 !== i(t.match.fn.toString().replace(/[[\\]/]/g, \"\")).indexOf(i(e.match.fn.toString().replace(/[[\\]/]/g, \"\")));\n }\n function u(e, t, a) {\n var i, n = this, r = this.dependencyLib, s = this.maskset, u = this.opts, c = this.el, f = s.maskToken, d = t ? a : 0, p = t ? t.slice() : [ 0 ], h = [], v = !1, m = t ? t.join(\"\") : \"\";\n function g(t, a, n, r) {\n function o(n, r, f) {\n function p(e, t) {\n var a = 0 === t.matches.indexOf(e);\n return a || t.matches.every((function(i, n) {\n return !0 === i.isQuantifier ? a = p(e, t.matches[n - 1]) : Object.prototype.hasOwnProperty.call(i, \"matches\") && (a = p(e, i)), \n !a;\n })), a;\n }\n function k(e, t, a) {\n var i, n;\n if ((s.tests[e] || s.validPositions[e]) && (s.tests[e] || [ s.validPositions[e] ]).every((function(e, r) {\n if (e.mloc[t]) return i = e, !1;\n var o = void 0 !== a ? a : e.alternation, s = void 0 !== e.locator[o] ? e.locator[o].toString().indexOf(t) : -1;\n return (void 0 === n || s < n) && -1 !== s && (i = e, n = s), !0;\n })), i) {\n var r = i.locator[i.alternation];\n return (i.mloc[t] || i.mloc[r] || i.locator).slice((void 0 !== a ? a : i.alternation) + 1);\n }\n return void 0 !== a ? k(e, t) : void 0;\n }\n function y(e, t) {\n var a = e.alternation, i = void 0 === t || a === t.alternation && -1 === e.locator[a].toString().indexOf(t.locator[a]);\n if (!i && a > t.alternation) for (var n = t.alternation; n < a; n++) if (e.locator[n] !== t.locator[n]) {\n a = n, i = !0;\n break;\n }\n if (i) {\n e.mloc = e.mloc || {};\n var r = e.locator[a];\n if (void 0 !== r) {\n if (\"string\" == typeof r && (r = r.split(\",\")[0]), void 0 === e.mloc[r] && (e.mloc[r] = e.locator.slice()), \n void 0 !== t) {\n for (var o in t.mloc) \"string\" == typeof o && (o = o.split(\",\")[0]), void 0 === e.mloc[o] && (e.mloc[o] = t.mloc[o]);\n e.locator[a] = Object.keys(e.mloc).join(\",\");\n }\n return !0;\n }\n e.alternation = void 0;\n }\n return !1;\n }\n function b(e, t) {\n if (e.locator.length !== t.locator.length) return !1;\n for (var a = e.alternation + 1; a < e.locator.length; a++) if (e.locator[a] !== t.locator[a]) return !1;\n return !0;\n }\n if (d > e + u._maxTestPos) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + s.mask;\n if (d === e && void 0 === n.matches) return h.push({\n match: n,\n locator: r.reverse(),\n cd: m,\n mloc: {}\n }), !0;\n if (void 0 !== n.matches) {\n if (n.isGroup && f !== n) {\n if (n = o(t.matches[t.matches.indexOf(n) + 1], r, f)) return !0;\n } else if (n.isOptional) {\n var x = n, P = h.length;\n if (n = g(n, a, r, f)) {\n if (h.forEach((function(e, t) {\n t >= P && (e.match.optionality = !0);\n })), i = h[h.length - 1].match, void 0 !== f || !p(i, x)) return !0;\n v = !0, d = e;\n }\n } else if (n.isAlternator) {\n var E, S = n, _ = [], M = h.slice(), w = r.length, O = !1, T = a.length > 0 ? a.shift() : -1;\n if (-1 === T || \"string\" == typeof T) {\n var C, A = d, D = a.slice(), B = [];\n if (\"string\" == typeof T) B = T.split(\",\"); else for (C = 0; C < S.matches.length; C++) B.push(C.toString());\n if (void 0 !== s.excludes[e]) {\n for (var j = B.slice(), R = 0, L = s.excludes[e].length; R < L; R++) {\n var I = s.excludes[e][R].toString().split(\":\");\n r.length == I[1] && B.splice(B.indexOf(I[0]), 1);\n }\n 0 === B.length && (delete s.excludes[e], B = j);\n }\n (!0 === u.keepStatic || isFinite(parseInt(u.keepStatic)) && A >= u.keepStatic) && (B = B.slice(0, 1));\n for (var F = 0; F < B.length; F++) {\n C = parseInt(B[F]), h = [], a = \"string\" == typeof T && k(d, C, w) || D.slice();\n var N = S.matches[C];\n if (N && o(N, [ C ].concat(r), f)) n = !0; else if (0 === F && (O = !0), N && N.matches && N.matches.length > S.matches[0].matches.length) break;\n E = h.slice(), d = A, h = [];\n for (var V = 0; V < E.length; V++) {\n var G = E[V], H = !1;\n G.match.jit = G.match.jit || O, G.alternation = G.alternation || w, y(G);\n for (var K = 0; K < _.length; K++) {\n var U = _[K];\n if (\"string\" != typeof T || void 0 !== G.alternation && B.includes(G.locator[G.alternation].toString())) {\n if (G.match.nativeDef === U.match.nativeDef) {\n H = !0, y(U, G);\n break;\n }\n if (l(G, U, u)) {\n y(G, U) && (H = !0, _.splice(_.indexOf(U), 0, G));\n break;\n }\n if (l(U, G, u)) {\n y(U, G);\n break;\n }\n if (Q = U, !0 === (W = G).match.static && !0 !== Q.match.static && Q.match.fn.test(W.match.def, s, e, !1, u, !1)) {\n b(G, U) || void 0 !== c.inputmask.userOptions.keepStatic ? y(G, U) && (H = !0, _.splice(_.indexOf(U), 0, G)) : u.keepStatic = !0;\n break;\n }\n }\n }\n H || _.push(G);\n }\n }\n h = M.concat(_), d = e, v = h.length > 0, n = _.length > 0, a = D.slice();\n } else n = o(S.matches[T] || t.matches[T], [ T ].concat(r), f);\n if (n) return !0;\n } else if (n.isQuantifier && f !== t.matches[t.matches.indexOf(n) - 1]) for (var $ = n, z = a.length > 0 ? a.shift() : 0; z < (isNaN($.quantifier.max) ? z + 1 : $.quantifier.max) && d <= e; z++) {\n var q = t.matches[t.matches.indexOf($) - 1];\n if (n = o(q, [ z ].concat(r), q)) {\n if ((i = h[h.length - 1].match).optionalQuantifier = z >= $.quantifier.min, i.jit = (z + 1) * (q.matches.indexOf(i) + 1) > $.quantifier.jit, \n i.optionalQuantifier && p(i, q)) {\n v = !0, d = e;\n break;\n }\n return i.jit && (s.jitOffset[e] = q.matches.length - q.matches.indexOf(i)), !0;\n }\n } else if (n = g(n, a, r, f)) return !0;\n } else d++;\n var W, Q;\n }\n for (var f = a.length > 0 ? a.shift() : 0; f < t.matches.length; f++) if (!0 !== t.matches[f].isQuantifier) {\n var p = o(t.matches[f], [ f ].concat(n), r);\n if (p && d === e) return p;\n if (d > e) break;\n }\n }\n if (e > -1) {\n if (void 0 === t) {\n for (var k, y = e - 1; void 0 === (k = s.validPositions[y] || s.tests[y]) && y > -1; ) y--;\n void 0 !== k && y > -1 && (p = function(e, t) {\n var a, i = [];\n return Array.isArray(t) || (t = [ t ]), t.length > 0 && (void 0 === t[0].alternation || !0 === u.keepStatic ? 0 === (i = o.call(n, e, t.slice()).locator.slice()).length && (i = t[0].locator.slice()) : t.forEach((function(e) {\n \"\" !== e.def && (0 === i.length ? (a = e.alternation, i = e.locator.slice()) : e.locator[a] && -1 === i[a].toString().indexOf(e.locator[a]) && (i[a] += \",\" + e.locator[a]));\n }))), i;\n }(y, k), m = p.join(\"\"), d = y);\n }\n if (s.tests[e] && s.tests[e][0].cd === m) return s.tests[e];\n for (var b = p.shift(); b < f.length; b++) {\n if (g(f[b], p, [ b ]) && d === e || d > e) break;\n }\n }\n return (0 === h.length || v) && h.push({\n match: {\n fn: null,\n static: !0,\n optionality: !1,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n mloc: {},\n cd: m\n }), void 0 !== t && s.tests[e] ? r.extend(!0, [], h) : (s.tests[e] = r.extend(!0, [], h), \n s.tests[e]);\n }\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.determineTestTemplate = o, t.getDecisionTaker = i, t.getMaskTemplate = function(e, t, a, i, s) {\n var l = this, c = this.opts, f = this.maskset, d = c.greedy;\n s && (c.greedy = !1);\n t = t || 0;\n var p, h, v, m, g = [], k = 0;\n do {\n if (!0 === e && f.validPositions[k]) v = s && !0 === f.validPositions[k].match.optionality && void 0 === f.validPositions[k + 1] && (!0 === f.validPositions[k].generatedInput || f.validPositions[k].input == c.skipOptionalPartCharacter && k > 0) ? o.call(l, k, u.call(l, k, p, k - 1)) : f.validPositions[k], \n h = v.match, p = v.locator.slice(), g.push(!0 === a ? v.input : !1 === a ? h.nativeDef : n.call(l, k, h)); else {\n v = r.call(l, k, p, k - 1), h = v.match, p = v.locator.slice();\n var y = !0 !== i && (!1 !== c.jitMasking ? c.jitMasking : h.jit);\n (m = (m && h.static && h.def !== c.groupSeparator && null === h.fn || f.validPositions[k - 1] && h.static && h.def !== c.groupSeparator && null === h.fn) && f.tests[k] && 1 === f.tests[k].length) || !1 === y || void 0 === y || \"number\" == typeof y && isFinite(y) && y > k ? g.push(!1 === a ? h.nativeDef : n.call(l, k, h)) : m = !1;\n }\n k++;\n } while (!0 !== h.static || \"\" !== h.def || t > k);\n \"\" === g[g.length - 1] && g.pop();\n !1 === a && void 0 !== f.maskLength || (f.maskLength = k - 1);\n return c.greedy = d, g;\n }, t.getPlaceholder = n, t.getTest = s, t.getTests = u, t.getTestTemplate = r, t.isSubsetOf = l;\n },\n 7215: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.alternate = l, t.checkAlternationMatch = function(e, t, a) {\n for (var i, n = this.opts.greedy ? t : t.slice(0, 1), r = !1, o = void 0 !== a ? a.split(\",\") : [], s = 0; s < o.length; s++) -1 !== (i = e.indexOf(o[s])) && e.splice(i, 1);\n for (var l = 0; l < e.length; l++) if (n.includes(e[l])) {\n r = !0;\n break;\n }\n return r;\n }, t.isComplete = c, t.isValid = f, t.refreshFromBuffer = p, t.revalidateMask = v, \n t.handleRemove = function(e, t, a, i, s) {\n var u = this, c = this.maskset, f = this.opts;\n if ((f.numericInput || u.isRTL) && (t === r.default.BACKSPACE ? t = r.default.DELETE : t === r.default.DELETE && (t = r.default.BACKSPACE), \n u.isRTL)) {\n var d = a.end;\n a.end = a.begin, a.begin = d;\n }\n var p, h = o.getLastValidPosition.call(u, void 0, !0);\n a.end >= o.getBuffer.call(u).length && h >= a.end && (a.end = h + 1);\n t === r.default.BACKSPACE ? a.end - a.begin < 1 && (a.begin = o.seekPrevious.call(u, a.begin)) : t === r.default.DELETE && a.begin === a.end && (a.end = o.isMask.call(u, a.end, !0, !0) ? a.end + 1 : o.seekNext.call(u, a.end) + 1);\n if (!1 !== (p = v.call(u, a))) {\n if (!0 !== i && !1 !== f.keepStatic || null !== f.regex && -1 !== n.getTest.call(u, a.begin).match.def.indexOf(\"|\")) {\n var m = l.call(u, !0);\n if (m) {\n var g = void 0 !== m.caret ? m.caret : m.pos ? o.seekNext.call(u, m.pos.begin ? m.pos.begin : m.pos) : o.getLastValidPosition.call(u, -1, !0);\n (t !== r.default.DELETE || a.begin > g) && a.begin;\n }\n }\n !0 !== i && (c.p = t === r.default.DELETE ? a.begin + p : a.begin, c.p = o.determineNewCaretPosition.call(u, {\n begin: c.p,\n end: c.p\n }, !1).begin);\n }\n };\n var i, n = a(4713), r = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, o = a(8711), s = a(6030);\n function l(e, t, a, i, r, s) {\n var u, c, d, p, h, v, m, g, k, y, b, x = this, P = this.dependencyLib, E = this.opts, S = x.maskset, _ = P.extend(!0, {}, S.validPositions), M = P.extend(!0, {}, S.tests), w = !1, O = !1, T = void 0 !== r ? r : o.getLastValidPosition.call(x);\n if (s && (y = s.begin, b = s.end, s.begin > s.end && (y = s.end, b = s.begin)), \n -1 === T && void 0 === r) u = 0, c = (p = n.getTest.call(x, u)).alternation; else for (;T >= 0; T--) if ((d = S.validPositions[T]) && void 0 !== d.alternation) {\n if (p && p.locator[d.alternation] !== d.locator[d.alternation]) break;\n u = T, c = S.validPositions[u].alternation, p = d;\n }\n if (void 0 !== c) {\n m = parseInt(u), S.excludes[m] = S.excludes[m] || [], !0 !== e && S.excludes[m].push((0, \n n.getDecisionTaker)(p) + \":\" + p.alternation);\n var C = [], A = -1;\n for (h = m; h < o.getLastValidPosition.call(x, void 0, !0) + 1; h++) -1 === A && e <= h && void 0 !== t && (C.push(t), \n A = C.length - 1), (v = S.validPositions[h]) && !0 !== v.generatedInput && (void 0 === s || h < y || h >= b) && C.push(v.input), \n delete S.validPositions[h];\n for (-1 === A && void 0 !== t && (C.push(t), A = C.length - 1); void 0 !== S.excludes[m] && S.excludes[m].length < 10; ) {\n for (S.tests = {}, o.resetMaskSet.call(x, !0), w = !0, h = 0; h < C.length && (g = w.caret || o.getLastValidPosition.call(x, void 0, !0) + 1, \n k = C[h], w = f.call(x, g, k, !1, i, !0)); h++) h === A && (O = w), 1 == e && w && (O = {\n caretPos: h\n });\n if (w) break;\n if (o.resetMaskSet.call(x), p = n.getTest.call(x, m), S.validPositions = P.extend(!0, {}, _), \n S.tests = P.extend(!0, {}, M), !S.excludes[m]) {\n O = l.call(x, e, t, a, i, m - 1, s);\n break;\n }\n var D = (0, n.getDecisionTaker)(p);\n if (-1 !== S.excludes[m].indexOf(D + \":\" + p.alternation)) {\n O = l.call(x, e, t, a, i, m - 1, s);\n break;\n }\n for (S.excludes[m].push(D + \":\" + p.alternation), h = m; h < o.getLastValidPosition.call(x, void 0, !0) + 1; h++) delete S.validPositions[h];\n }\n }\n return O && !1 === E.keepStatic || delete S.excludes[m], O;\n }\n function u(e, t, a) {\n var i = this.opts, n = this.maskset;\n switch (i.casing || t.casing) {\n case \"upper\":\n e = e.toUpperCase();\n break;\n\n case \"lower\":\n e = e.toLowerCase();\n break;\n\n case \"title\":\n var o = n.validPositions[a - 1];\n e = 0 === a || o && o.input === String.fromCharCode(r.default.SPACE) ? e.toUpperCase() : e.toLowerCase();\n break;\n\n default:\n if (\"function\" == typeof i.casing) {\n var s = Array.prototype.slice.call(arguments);\n s.push(n.validPositions), e = i.casing.apply(this, s);\n }\n }\n return e;\n }\n function c(e) {\n var t = this, a = this.opts, i = this.maskset;\n if (\"function\" == typeof a.isComplete) return a.isComplete(e, a);\n if (\"*\" !== a.repeat) {\n var r = !1, s = o.determineLastRequiredPosition.call(t, !0), l = o.seekPrevious.call(t, s.l);\n if (void 0 === s.def || s.def.newBlockMarker || s.def.optionality || s.def.optionalQuantifier) {\n r = !0;\n for (var u = 0; u <= l; u++) {\n var c = n.getTestTemplate.call(t, u).match;\n if (!0 !== c.static && void 0 === i.validPositions[u] && !0 !== c.optionality && !0 !== c.optionalQuantifier || !0 === c.static && e[u] !== n.getPlaceholder.call(t, u, c)) {\n r = !1;\n break;\n }\n }\n }\n return r;\n }\n }\n function f(e, t, a, i, r, s, d) {\n var m = this, g = this.dependencyLib, k = this.opts, y = m.maskset;\n function b(e) {\n return m.isRTL ? e.begin - e.end > 1 || e.begin - e.end == 1 : e.end - e.begin > 1 || e.end - e.begin == 1;\n }\n a = !0 === a;\n var x = e;\n function P(e) {\n if (void 0 !== e) {\n if (void 0 !== e.remove && (Array.isArray(e.remove) || (e.remove = [ e.remove ]), \n e.remove.sort((function(e, t) {\n return t.pos - e.pos;\n })).forEach((function(e) {\n v.call(m, {\n begin: e,\n end: e + 1\n });\n })), e.remove = void 0), void 0 !== e.insert && (Array.isArray(e.insert) || (e.insert = [ e.insert ]), \n e.insert.sort((function(e, t) {\n return e.pos - t.pos;\n })).forEach((function(e) {\n \"\" !== e.c && f.call(m, e.pos, e.c, void 0 === e.strict || e.strict, void 0 !== e.fromIsValid ? e.fromIsValid : i);\n })), e.insert = void 0), e.refreshFromBuffer && e.buffer) {\n var t = e.refreshFromBuffer;\n p.call(m, !0 === t ? t : t.start, t.end, e.buffer), e.refreshFromBuffer = void 0;\n }\n void 0 !== e.rewritePosition && (x = e.rewritePosition, e = !0);\n }\n return e;\n }\n function E(t, a, r) {\n var s = !1;\n return n.getTests.call(m, t).every((function(l, c) {\n var f = l.match;\n if (o.getBuffer.call(m, !0), !1 !== (s = (!f.jit || void 0 !== y.validPositions[o.seekPrevious.call(m, t)]) && (null != f.fn ? f.fn.test(a, y, t, r, k, b(e)) : (a === f.def || a === k.skipOptionalPartCharacter) && \"\" !== f.def && {\n c: n.getPlaceholder.call(m, t, f, !0) || f.def,\n pos: t\n }))) {\n var d = void 0 !== s.c ? s.c : a, p = t;\n return d = d === k.skipOptionalPartCharacter && !0 === f.static ? n.getPlaceholder.call(m, t, f, !0) || f.def : d, \n !0 !== (s = P(s)) && void 0 !== s.pos && s.pos !== t && (p = s.pos), !0 !== s && void 0 === s.pos && void 0 === s.c ? !1 : (!1 === v.call(m, e, g.extend({}, l, {\n input: u.call(m, d, f, p)\n }), i, p) && (s = !1), !1);\n }\n return !0;\n })), s;\n }\n void 0 !== e.begin && (x = m.isRTL ? e.end : e.begin);\n var S = !0, _ = g.extend(!0, {}, y.validPositions);\n if (!1 === k.keepStatic && void 0 !== y.excludes[x] && !0 !== r && !0 !== i) for (var M = x; M < (m.isRTL ? e.begin : e.end); M++) void 0 !== y.excludes[M] && (y.excludes[M] = void 0, \n delete y.tests[M]);\n if (\"function\" == typeof k.preValidation && !0 !== i && !0 !== s && (S = P(S = k.preValidation.call(m, o.getBuffer.call(m), x, t, b(e), k, y, e, a || r))), \n !0 === S) {\n if (S = E(x, t, a), (!a || !0 === i) && !1 === S && !0 !== s) {\n var w = y.validPositions[x];\n if (!w || !0 !== w.match.static || w.match.def !== t && t !== k.skipOptionalPartCharacter) {\n if (k.insertMode || void 0 === y.validPositions[o.seekNext.call(m, x)] || e.end > x) {\n var O = !1;\n if (y.jitOffset[x] && void 0 === y.validPositions[o.seekNext.call(m, x)] && !1 !== (S = f.call(m, x + y.jitOffset[x], t, !0, !0)) && (!0 !== r && (S.caret = x), \n O = !0), e.end > x && (y.validPositions[x] = void 0), !O && !o.isMask.call(m, x, k.keepStatic && 0 === x)) for (var T = x + 1, C = o.seekNext.call(m, x, !1, 0 !== x); T <= C; T++) if (!1 !== (S = E(T, t, a))) {\n S = h.call(m, x, void 0 !== S.pos ? S.pos : T) || S, x = T;\n break;\n }\n }\n } else S = {\n caret: o.seekNext.call(m, x)\n };\n }\n !1 !== S || !k.keepStatic || !c.call(m, o.getBuffer.call(m)) && 0 !== x || a || !0 === r ? b(e) && y.tests[x] && y.tests[x].length > 1 && k.keepStatic && !a && !0 !== r && (S = l.call(m, !0)) : S = l.call(m, x, t, a, i, void 0, e), \n !0 === S && (S = {\n pos: x\n });\n }\n if (\"function\" == typeof k.postValidation && !0 !== i && !0 !== s) {\n var A = k.postValidation.call(m, o.getBuffer.call(m, !0), void 0 !== e.begin ? m.isRTL ? e.end : e.begin : e, t, S, k, y, a, d);\n void 0 !== A && (S = !0 === A ? S : A);\n }\n S && void 0 === S.pos && (S.pos = x), !1 === S || !0 === s ? (o.resetMaskSet.call(m, !0), \n y.validPositions = g.extend(!0, {}, _)) : h.call(m, void 0, x, !0);\n var D = P(S);\n void 0 !== m.maxLength && (o.getBuffer.call(m).length > m.maxLength && !i && (o.resetMaskSet.call(m, !0), \n y.validPositions = g.extend(!0, {}, _), D = !1));\n return D;\n }\n function d(e, t, a) {\n for (var i = this.maskset, r = !1, o = n.getTests.call(this, e), s = 0; s < o.length; s++) {\n if (o[s].match && (o[s].match.nativeDef === t.match[a.shiftPositions ? \"def\" : \"nativeDef\"] && (!a.shiftPositions || !t.match.static) || o[s].match.nativeDef === t.match.nativeDef || a.regex && !o[s].match.static && o[s].match.fn.test(t.input))) {\n r = !0;\n break;\n }\n if (o[s].match && o[s].match.def === t.match.nativeDef) {\n r = void 0;\n break;\n }\n }\n return !1 === r && void 0 !== i.jitOffset[e] && (r = d.call(this, e + i.jitOffset[e], t, a)), \n r;\n }\n function p(e, t, a) {\n var i, n, r = this, l = this.maskset, u = this.opts, c = this.dependencyLib, f = u.skipOptionalPartCharacter, d = r.isRTL ? a.slice().reverse() : a;\n if (u.skipOptionalPartCharacter = \"\", !0 === e) o.resetMaskSet.call(r), l.tests = {}, \n e = 0, t = a.length, n = o.determineNewCaretPosition.call(r, {\n begin: 0,\n end: 0\n }, !1).begin; else {\n for (i = e; i < t; i++) delete l.validPositions[i];\n n = e;\n }\n var p = new c.Event(\"keypress\");\n for (i = e; i < t; i++) {\n p.which = d[i].toString().charCodeAt(0), r.ignorable = !1;\n var h = s.EventHandlers.keypressEvent.call(r, p, !0, !1, !1, n);\n !1 !== h && void 0 !== h && (n = h.forwardPosition);\n }\n u.skipOptionalPartCharacter = f;\n }\n function h(e, t, a) {\n var i = this, r = this.maskset, s = this.dependencyLib;\n if (void 0 === e) for (e = t - 1; e > 0 && !r.validPositions[e]; e--) ;\n for (var l = e; l < t; l++) {\n if (void 0 === r.validPositions[l] && !o.isMask.call(i, l, !1)) if (0 == l ? n.getTest.call(i, l) : r.validPositions[l - 1]) {\n var u = n.getTests.call(i, l).slice();\n \"\" === u[u.length - 1].match.def && u.pop();\n var c, d = n.determineTestTemplate.call(i, l, u);\n if (d && (!0 !== d.match.jit || \"master\" === d.match.newBlockMarker && (c = r.validPositions[l + 1]) && !0 === c.match.optionalQuantifier) && ((d = s.extend({}, d, {\n input: n.getPlaceholder.call(i, l, d.match, !0) || d.match.def\n })).generatedInput = !0, v.call(i, l, d, !0), !0 !== a)) {\n var p = r.validPositions[t].input;\n return r.validPositions[t] = void 0, f.call(i, t, p, !0, !0);\n }\n }\n }\n }\n function v(e, t, a, i) {\n var r = this, s = this.maskset, l = this.opts, u = this.dependencyLib;\n function c(e, t, a) {\n var i = t[e];\n if (void 0 !== i && !0 === i.match.static && !0 !== i.match.optionality && (void 0 === t[0] || void 0 === t[0].alternation)) {\n var n = a.begin <= e - 1 ? t[e - 1] && !0 === t[e - 1].match.static && t[e - 1] : t[e - 1], r = a.end > e + 1 ? t[e + 1] && !0 === t[e + 1].match.static && t[e + 1] : t[e + 1];\n return n && r;\n }\n return !1;\n }\n var p = 0, h = void 0 !== e.begin ? e.begin : e, v = void 0 !== e.end ? e.end : e, m = !0;\n if (e.begin > e.end && (h = e.end, v = e.begin), i = void 0 !== i ? i : h, h !== v || l.insertMode && void 0 !== s.validPositions[i] && void 0 === a || void 0 === t) {\n var g, k = u.extend(!0, {}, s.validPositions), y = o.getLastValidPosition.call(r, void 0, !0);\n for (s.p = h, g = y; g >= h; g--) delete s.validPositions[g], void 0 === t && delete s.tests[g + 1];\n var b, x, P = i, E = P;\n for (t && (s.validPositions[i] = u.extend(!0, {}, t), E++, P++), g = t ? v : v - 1; g <= y; g++) {\n if (void 0 !== (b = k[g]) && !0 !== b.generatedInput && (g >= v || g >= h && c(g, k, {\n begin: h,\n end: v\n }))) {\n for (;\"\" !== n.getTest.call(r, E).match.def; ) {\n if (!1 !== (x = d.call(r, E, b, l)) || \"+\" === b.match.def) {\n \"+\" === b.match.def && o.getBuffer.call(r, !0);\n var S = f.call(r, E, b.input, \"+\" !== b.match.def, !0);\n if (m = !1 !== S, P = (S.pos || E) + 1, !m && x) break;\n } else m = !1;\n if (m) {\n void 0 === t && b.match.static && g === e.begin && p++;\n break;\n }\n if (!m && E > s.maskLength) break;\n E++;\n }\n \"\" == n.getTest.call(r, E).match.def && (m = !1), E = P;\n }\n if (!m) break;\n }\n if (!m) return s.validPositions = u.extend(!0, {}, k), o.resetMaskSet.call(r, !0), \n !1;\n } else t && n.getTest.call(r, i).match.cd === t.match.cd && (s.validPositions[i] = u.extend(!0, {}, t));\n return o.resetMaskSet.call(r, !0), p;\n }\n }\n }, t = {};\n function a(i) {\n var n = t[i];\n if (void 0 !== n) return n.exports;\n var r = t[i] = {\n exports: {}\n };\n return e[i](r, r.exports, a), r.exports;\n }\n var i = {};\n return function() {\n var e, t = i;\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0, a(3851), a(219), a(207), a(5296);\n var n = ((e = a(2394)) && e.__esModule ? e : {\n default: e\n }).default;\n t.default = n;\n }(), i;\n }();\n}));","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Survey.vue?vue&type=style&index=0&lang=css&\"","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","/*! =======================================================\n VERSION 10.6.2 \n========================================================= */\n\"use strict\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*! =========================================================\n * bootstrap-slider.js\n *\n * Maintainers:\n *\t\tKyle Kemp\n *\t\t\t- Twitter: @seiyria\n *\t\t\t- Github: seiyria\n *\t\tRohit Kalkur\n *\t\t\t- Twitter: @Rovolutionary\n *\t\t\t- Github: rovolution\n *\n * =========================================================\n *\n * bootstrap-slider is released under the MIT License\n * Copyright (c) 2019 Kyle Kemp, Rohit Kalkur, and contributors\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n *\n * ========================================================= */\n\n/**\n * Bridget makes jQuery widgets\n * v1.0.1\n * MIT license\n */\nvar windowIsDefined = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\";\n\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"jquery\"], factory);\n\t} else if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n\t\tvar jQuery;\n\t\ttry {\n\t\t\tjQuery = require(\"jquery\");\n\t\t} catch (err) {\n\t\t\tjQuery = null;\n\t\t}\n\t\tmodule.exports = factory(jQuery);\n\t} else if (window) {\n\t\twindow.Slider = factory(window.jQuery);\n\t}\n})(function ($) {\n\t// Constants\n\tvar NAMESPACE_MAIN = 'slider';\n\tvar NAMESPACE_ALTERNATE = 'bootstrapSlider';\n\n\t// Polyfill console methods\n\tif (windowIsDefined && !window.console) {\n\t\twindow.console = {};\n\t}\n\tif (windowIsDefined && !window.console.log) {\n\t\twindow.console.log = function () {};\n\t}\n\tif (windowIsDefined && !window.console.warn) {\n\t\twindow.console.warn = function () {};\n\t}\n\n\t// Reference to Slider constructor\n\tvar Slider;\n\n\t(function ($) {\n\n\t\t'use strict';\n\n\t\t// -------------------------- utils -------------------------- //\n\n\t\tvar slice = Array.prototype.slice;\n\n\t\tfunction noop() {}\n\n\t\t// -------------------------- definition -------------------------- //\n\n\t\tfunction defineBridget($) {\n\n\t\t\t// bail if no jQuery\n\t\t\tif (!$) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// -------------------------- addOptionMethod -------------------------- //\n\n\t\t\t/**\n * adds option method -> $().plugin('option', {...})\n * @param {Function} PluginClass - constructor class\n */\n\t\t\tfunction addOptionMethod(PluginClass) {\n\t\t\t\t// don't overwrite original option method\n\t\t\t\tif (PluginClass.prototype.option) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// option setter\n\t\t\t\tPluginClass.prototype.option = function (opts) {\n\t\t\t\t\t// bail out if not an object\n\t\t\t\t\tif (!$.isPlainObject(opts)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.options = $.extend(true, this.options, opts);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// -------------------------- plugin bridge -------------------------- //\n\n\t\t\t// helper function for logging errors\n\t\t\t// $.error breaks jQuery chaining\n\t\t\tvar logError = typeof console === 'undefined' ? noop : function (message) {\n\t\t\t\tconsole.error(message);\n\t\t\t};\n\n\t\t\t/**\n * jQuery plugin bridge, access methods like $elem.plugin('method')\n * @param {String} namespace - plugin name\n * @param {Function} PluginClass - constructor class\n */\n\t\t\tfunction bridge(namespace, PluginClass) {\n\t\t\t\t// add to jQuery fn namespace\n\t\t\t\t$.fn[namespace] = function (options) {\n\t\t\t\t\tif (typeof options === 'string') {\n\t\t\t\t\t\t// call plugin method when first argument is a string\n\t\t\t\t\t\t// get arguments for method\n\t\t\t\t\t\tvar args = slice.call(arguments, 1);\n\n\t\t\t\t\t\tfor (var i = 0, len = this.length; i < len; i++) {\n\t\t\t\t\t\t\tvar elem = this[i];\n\t\t\t\t\t\t\tvar instance = $.data(elem, namespace);\n\t\t\t\t\t\t\tif (!instance) {\n\t\t\t\t\t\t\t\tlogError(\"cannot call methods on \" + namespace + \" prior to initialization; \" + \"attempted to call '\" + options + \"'\");\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!$.isFunction(instance[options]) || options.charAt(0) === '_') {\n\t\t\t\t\t\t\t\tlogError(\"no such method '\" + options + \"' for \" + namespace + \" instance\");\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// trigger method with arguments\n\t\t\t\t\t\t\tvar returnValue = instance[options].apply(instance, args);\n\n\t\t\t\t\t\t\t// break look and return first value if provided\n\t\t\t\t\t\t\tif (returnValue !== undefined && returnValue !== instance) {\n\t\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// return this if no return value\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar objects = this.map(function () {\n\t\t\t\t\t\t\tvar instance = $.data(this, namespace);\n\t\t\t\t\t\t\tif (instance) {\n\t\t\t\t\t\t\t\t// apply options & init\n\t\t\t\t\t\t\t\tinstance.option(options);\n\t\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// initialize new instance\n\t\t\t\t\t\t\t\tinstance = new PluginClass(this, options);\n\t\t\t\t\t\t\t\t$.data(this, namespace, instance);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn $(this);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (objects.length === 1) {\n\t\t\t\t\t\t\treturn objects[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn objects;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// -------------------------- bridget -------------------------- //\n\n\t\t\t/**\n * converts a Prototypical class into a proper jQuery plugin\n * the class must have a ._init method\n * @param {String} namespace - plugin name, used in $().pluginName\n * @param {Function} PluginClass - constructor class\n */\n\t\t\t$.bridget = function (namespace, PluginClass) {\n\t\t\t\taddOptionMethod(PluginClass);\n\t\t\t\tbridge(namespace, PluginClass);\n\t\t\t};\n\n\t\t\treturn $.bridget;\n\t\t}\n\n\t\t// get jquery from browser global\n\t\tdefineBridget($);\n\t})($);\n\n\t/*************************************************\n \t\t\tBOOTSTRAP-SLIDER SOURCE CODE\n \t**************************************************/\n\n\t(function ($) {\n\t\tvar autoRegisterNamespace = void 0;\n\n\t\tvar ErrorMsgs = {\n\t\t\tformatInvalidInputErrorMsg: function formatInvalidInputErrorMsg(input) {\n\t\t\t\treturn \"Invalid input value '\" + input + \"' passed in\";\n\t\t\t},\n\t\t\tcallingContextNotSliderInstance: \"Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method\"\n\t\t};\n\n\t\tvar SliderScale = {\n\t\t\tlinear: {\n\t\t\t\tgetValue: function getValue(value, options) {\n\t\t\t\t\tif (value < options.min) {\n\t\t\t\t\t\treturn options.min;\n\t\t\t\t\t} else if (value > options.max) {\n\t\t\t\t\t\treturn options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttoValue: function toValue(percentage) {\n\t\t\t\t\tvar rawValue = percentage / 100 * (this.options.max - this.options.min);\n\t\t\t\t\tvar shouldAdjustWithBase = true;\n\t\t\t\t\tif (this.options.ticks_positions.length > 0) {\n\t\t\t\t\t\tvar minv,\n\t\t\t\t\t\t maxv,\n\t\t\t\t\t\t minp,\n\t\t\t\t\t\t maxp = 0;\n\t\t\t\t\t\tfor (var i = 1; i < this.options.ticks_positions.length; i++) {\n\t\t\t\t\t\t\tif (percentage <= this.options.ticks_positions[i]) {\n\t\t\t\t\t\t\t\tminv = this.options.ticks[i - 1];\n\t\t\t\t\t\t\t\tminp = this.options.ticks_positions[i - 1];\n\t\t\t\t\t\t\t\tmaxv = this.options.ticks[i];\n\t\t\t\t\t\t\t\tmaxp = this.options.ticks_positions[i];\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar partialPercentage = (percentage - minp) / (maxp - minp);\n\t\t\t\t\t\trawValue = minv + partialPercentage * (maxv - minv);\n\t\t\t\t\t\tshouldAdjustWithBase = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar adjustment = shouldAdjustWithBase ? this.options.min : 0;\n\t\t\t\t\tvar value = adjustment + Math.round(rawValue / this.options.step) * this.options.step;\n\t\t\t\t\treturn SliderScale.linear.getValue(value, this.options);\n\t\t\t\t},\n\t\t\t\ttoPercentage: function toPercentage(value) {\n\t\t\t\t\tif (this.options.max === this.options.min) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.options.ticks_positions.length > 0) {\n\t\t\t\t\t\tvar minv,\n\t\t\t\t\t\t maxv,\n\t\t\t\t\t\t minp,\n\t\t\t\t\t\t maxp = 0;\n\t\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\t\tif (value <= this.options.ticks[i]) {\n\t\t\t\t\t\t\t\tminv = i > 0 ? this.options.ticks[i - 1] : 0;\n\t\t\t\t\t\t\t\tminp = i > 0 ? this.options.ticks_positions[i - 1] : 0;\n\t\t\t\t\t\t\t\tmaxv = this.options.ticks[i];\n\t\t\t\t\t\t\t\tmaxp = this.options.ticks_positions[i];\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tvar partialPercentage = (value - minv) / (maxv - minv);\n\t\t\t\t\t\t\treturn minp + partialPercentage * (maxp - minp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 100 * (value - this.options.min) / (this.options.max - this.options.min);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tlogarithmic: {\n\t\t\t\t/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */\n\t\t\t\ttoValue: function toValue(percentage) {\n\t\t\t\t\tvar offset = 1 - this.options.min;\n\t\t\t\t\tvar min = Math.log(this.options.min + offset);\n\t\t\t\t\tvar max = Math.log(this.options.max + offset);\n\t\t\t\t\tvar value = Math.exp(min + (max - min) * percentage / 100) - offset;\n\t\t\t\t\tif (Math.round(value) === max) {\n\t\t\t\t\t\treturn max;\n\t\t\t\t\t}\n\t\t\t\t\tvalue = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step;\n\t\t\t\t\t/* Rounding to the nearest step could exceed the min or\n * max, so clip to those values. */\n\t\t\t\t\treturn SliderScale.linear.getValue(value, this.options);\n\t\t\t\t},\n\t\t\t\ttoPercentage: function toPercentage(value) {\n\t\t\t\t\tif (this.options.max === this.options.min) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar offset = 1 - this.options.min;\n\t\t\t\t\t\tvar max = Math.log(this.options.max + offset);\n\t\t\t\t\t\tvar min = Math.log(this.options.min + offset);\n\t\t\t\t\t\tvar v = Math.log(value + offset);\n\t\t\t\t\t\treturn 100 * (v - min) / (max - min);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/*************************************************\n \t\t\t\t\t\tCONSTRUCTOR\n \t**************************************************/\n\t\tSlider = function Slider(element, options) {\n\t\t\tcreateNewSlider.call(this, element, options);\n\t\t\treturn this;\n\t\t};\n\n\t\tfunction createNewSlider(element, options) {\n\n\t\t\t/*\n \tThe internal state object is used to store data about the current 'state' of slider.\n \tThis includes values such as the `value`, `enabled`, etc...\n */\n\t\t\tthis._state = {\n\t\t\t\tvalue: null,\n\t\t\t\tenabled: null,\n\t\t\t\toffset: null,\n\t\t\t\tsize: null,\n\t\t\t\tpercentage: null,\n\t\t\t\tinDrag: false,\n\t\t\t\tover: false,\n\t\t\t\ttickIndex: null\n\t\t\t};\n\n\t\t\t// The objects used to store the reference to the tick methods if ticks_tooltip is on\n\t\t\tthis.ticksCallbackMap = {};\n\t\t\tthis.handleCallbackMap = {};\n\n\t\t\tif (typeof element === \"string\") {\n\t\t\t\tthis.element = document.querySelector(element);\n\t\t\t} else if (element instanceof HTMLElement) {\n\t\t\t\tthis.element = element;\n\t\t\t}\n\n\t\t\t/*************************************************\n \t\t\t\t\tProcess Options\n \t**************************************************/\n\t\t\toptions = options ? options : {};\n\t\t\tvar optionTypes = Object.keys(this.defaultOptions);\n\n\t\t\tvar isMinSet = options.hasOwnProperty('min');\n\t\t\tvar isMaxSet = options.hasOwnProperty('max');\n\n\t\t\tfor (var i = 0; i < optionTypes.length; i++) {\n\t\t\t\tvar optName = optionTypes[i];\n\n\t\t\t\t// First check if an option was passed in via the constructor\n\t\t\t\tvar val = options[optName];\n\t\t\t\t// If no data attrib, then check data atrributes\n\t\t\t\tval = typeof val !== 'undefined' ? val : getDataAttrib(this.element, optName);\n\t\t\t\t// Finally, if nothing was specified, use the defaults\n\t\t\t\tval = val !== null ? val : this.defaultOptions[optName];\n\n\t\t\t\t// Set all options on the instance of the Slider\n\t\t\t\tif (!this.options) {\n\t\t\t\t\tthis.options = {};\n\t\t\t\t}\n\t\t\t\tthis.options[optName] = val;\n\t\t\t}\n\n\t\t\tthis.ticksAreValid = Array.isArray(this.options.ticks) && this.options.ticks.length > 0;\n\n\t\t\t// Lock to ticks only when ticks[] is defined and set\n\t\t\tif (!this.ticksAreValid) {\n\t\t\t\tthis.options.lock_to_ticks = false;\n\t\t\t}\n\n\t\t\t// Check options.rtl\n\t\t\tif (this.options.rtl === 'auto') {\n\t\t\t\tvar computedStyle = window.getComputedStyle(this.element);\n\t\t\t\tif (computedStyle != null) {\n\t\t\t\t\tthis.options.rtl = computedStyle.direction === 'rtl';\n\t\t\t\t} else {\n\t\t\t\t\t// Fix for Firefox bug in versions less than 62:\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1467722\n\t\t\t\t\tthis.options.rtl = this.element.style.direction === 'rtl';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n \tValidate `tooltip_position` against 'orientation`\n \t- if `tooltip_position` is incompatible with orientation, swith it to a default compatible with specified `orientation`\n \t\t-- default for \"vertical\" -> \"right\", \"left\" if rtl\n \t\t-- default for \"horizontal\" -> \"top\"\n */\n\t\t\tif (this.options.orientation === \"vertical\" && (this.options.tooltip_position === \"top\" || this.options.tooltip_position === \"bottom\")) {\n\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\tthis.options.tooltip_position = \"left\";\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.tooltip_position = \"right\";\n\t\t\t\t}\n\t\t\t} else if (this.options.orientation === \"horizontal\" && (this.options.tooltip_position === \"left\" || this.options.tooltip_position === \"right\")) {\n\n\t\t\t\tthis.options.tooltip_position = \"top\";\n\t\t\t}\n\n\t\t\tfunction getDataAttrib(element, optName) {\n\t\t\t\tvar dataName = \"data-slider-\" + optName.replace(/_/g, '-');\n\t\t\t\tvar dataValString = element.getAttribute(dataName);\n\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(dataValString);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn dataValString;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*************************************************\n \t\t\t\t\tCreate Markup\n \t**************************************************/\n\n\t\t\tvar origWidth = this.element.style.width;\n\t\t\tvar updateSlider = false;\n\t\t\tvar parent = this.element.parentNode;\n\t\t\tvar sliderTrackSelection;\n\t\t\tvar sliderTrackLow, sliderTrackHigh;\n\t\t\tvar sliderMinHandle;\n\t\t\tvar sliderMaxHandle;\n\n\t\t\tif (this.sliderElem) {\n\t\t\t\tupdateSlider = true;\n\t\t\t} else {\n\t\t\t\t/* Create elements needed for slider */\n\t\t\t\tthis.sliderElem = document.createElement(\"div\");\n\t\t\t\tthis.sliderElem.className = \"slider\";\n\n\t\t\t\t/* Create slider track elements */\n\t\t\t\tvar sliderTrack = document.createElement(\"div\");\n\t\t\t\tsliderTrack.className = \"slider-track\";\n\n\t\t\t\tsliderTrackLow = document.createElement(\"div\");\n\t\t\t\tsliderTrackLow.className = \"slider-track-low\";\n\n\t\t\t\tsliderTrackSelection = document.createElement(\"div\");\n\t\t\t\tsliderTrackSelection.className = \"slider-selection\";\n\n\t\t\t\tsliderTrackHigh = document.createElement(\"div\");\n\t\t\t\tsliderTrackHigh.className = \"slider-track-high\";\n\n\t\t\t\tsliderMinHandle = document.createElement(\"div\");\n\t\t\t\tsliderMinHandle.className = \"slider-handle min-slider-handle\";\n\t\t\t\tsliderMinHandle.setAttribute('role', 'slider');\n\t\t\t\tsliderMinHandle.setAttribute('aria-valuemin', this.options.min);\n\t\t\t\tsliderMinHandle.setAttribute('aria-valuemax', this.options.max);\n\n\t\t\t\tsliderMaxHandle = document.createElement(\"div\");\n\t\t\t\tsliderMaxHandle.className = \"slider-handle max-slider-handle\";\n\t\t\t\tsliderMaxHandle.setAttribute('role', 'slider');\n\t\t\t\tsliderMaxHandle.setAttribute('aria-valuemin', this.options.min);\n\t\t\t\tsliderMaxHandle.setAttribute('aria-valuemax', this.options.max);\n\n\t\t\t\tsliderTrack.appendChild(sliderTrackLow);\n\t\t\t\tsliderTrack.appendChild(sliderTrackSelection);\n\t\t\t\tsliderTrack.appendChild(sliderTrackHigh);\n\n\t\t\t\t/* Create highlight range elements */\n\t\t\t\tthis.rangeHighlightElements = [];\n\t\t\t\tvar rangeHighlightsOpts = this.options.rangeHighlights;\n\t\t\t\tif (Array.isArray(rangeHighlightsOpts) && rangeHighlightsOpts.length > 0) {\n\t\t\t\t\tfor (var j = 0; j < rangeHighlightsOpts.length; j++) {\n\t\t\t\t\t\tvar rangeHighlightElement = document.createElement(\"div\");\n\t\t\t\t\t\tvar customClassString = rangeHighlightsOpts[j].class || \"\";\n\t\t\t\t\t\trangeHighlightElement.className = \"slider-rangeHighlight slider-selection \" + customClassString;\n\t\t\t\t\t\tthis.rangeHighlightElements.push(rangeHighlightElement);\n\t\t\t\t\t\tsliderTrack.appendChild(rangeHighlightElement);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Add aria-labelledby to handle's */\n\t\t\t\tvar isLabelledbyArray = Array.isArray(this.options.labelledby);\n\t\t\t\tif (isLabelledbyArray && this.options.labelledby[0]) {\n\t\t\t\t\tsliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]);\n\t\t\t\t}\n\t\t\t\tif (isLabelledbyArray && this.options.labelledby[1]) {\n\t\t\t\t\tsliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]);\n\t\t\t\t}\n\t\t\t\tif (!isLabelledbyArray && this.options.labelledby) {\n\t\t\t\t\tsliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby);\n\t\t\t\t\tsliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby);\n\t\t\t\t}\n\n\t\t\t\t/* Create ticks */\n\t\t\t\tthis.ticks = [];\n\t\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\t\t\t\t\tthis.ticksContainer = document.createElement('div');\n\t\t\t\t\tthis.ticksContainer.className = 'slider-tick-container';\n\n\t\t\t\t\tfor (i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\t\tvar tick = document.createElement('div');\n\t\t\t\t\t\ttick.className = 'slider-tick';\n\t\t\t\t\t\tif (this.options.ticks_tooltip) {\n\t\t\t\t\t\t\tvar tickListenerReference = this._addTickListener();\n\t\t\t\t\t\t\tvar enterCallback = tickListenerReference.addMouseEnter(this, tick, i);\n\t\t\t\t\t\t\tvar leaveCallback = tickListenerReference.addMouseLeave(this, tick);\n\n\t\t\t\t\t\t\tthis.ticksCallbackMap[i] = {\n\t\t\t\t\t\t\t\tmouseEnter: enterCallback,\n\t\t\t\t\t\t\t\tmouseLeave: leaveCallback\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.ticks.push(tick);\n\t\t\t\t\t\tthis.ticksContainer.appendChild(tick);\n\t\t\t\t\t}\n\n\t\t\t\t\tsliderTrackSelection.className += \" tick-slider-selection\";\n\t\t\t\t}\n\n\t\t\t\tthis.tickLabels = [];\n\t\t\t\tif (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) {\n\t\t\t\t\tthis.tickLabelContainer = document.createElement('div');\n\t\t\t\t\tthis.tickLabelContainer.className = 'slider-tick-label-container';\n\n\t\t\t\t\tfor (i = 0; i < this.options.ticks_labels.length; i++) {\n\t\t\t\t\t\tvar label = document.createElement('div');\n\t\t\t\t\t\tvar noTickPositionsSpecified = this.options.ticks_positions.length === 0;\n\t\t\t\t\t\tvar tickLabelsIndex = this.options.reversed && noTickPositionsSpecified ? this.options.ticks_labels.length - (i + 1) : i;\n\t\t\t\t\t\tlabel.className = 'slider-tick-label';\n\t\t\t\t\t\tlabel.innerHTML = this.options.ticks_labels[tickLabelsIndex];\n\n\t\t\t\t\t\tthis.tickLabels.push(label);\n\t\t\t\t\t\tthis.tickLabelContainer.appendChild(label);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar createAndAppendTooltipSubElements = function createAndAppendTooltipSubElements(tooltipElem) {\n\t\t\t\t\tvar arrow = document.createElement(\"div\");\n\t\t\t\t\tarrow.className = \"tooltip-arrow\";\n\n\t\t\t\t\tvar inner = document.createElement(\"div\");\n\t\t\t\t\tinner.className = \"tooltip-inner\";\n\n\t\t\t\t\ttooltipElem.appendChild(arrow);\n\t\t\t\t\ttooltipElem.appendChild(inner);\n\t\t\t\t};\n\n\t\t\t\t/* Create tooltip elements */\n\t\t\t\tvar sliderTooltip = document.createElement(\"div\");\n\t\t\t\tsliderTooltip.className = \"tooltip tooltip-main\";\n\t\t\t\tsliderTooltip.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltip);\n\n\t\t\t\tvar sliderTooltipMin = document.createElement(\"div\");\n\t\t\t\tsliderTooltipMin.className = \"tooltip tooltip-min\";\n\t\t\t\tsliderTooltipMin.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltipMin);\n\n\t\t\t\tvar sliderTooltipMax = document.createElement(\"div\");\n\t\t\t\tsliderTooltipMax.className = \"tooltip tooltip-max\";\n\t\t\t\tsliderTooltipMax.setAttribute('role', 'presentation');\n\t\t\t\tcreateAndAppendTooltipSubElements(sliderTooltipMax);\n\n\t\t\t\t/* Append components to sliderElem */\n\t\t\t\tthis.sliderElem.appendChild(sliderTrack);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltip);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltipMin);\n\t\t\t\tthis.sliderElem.appendChild(sliderTooltipMax);\n\n\t\t\t\tif (this.tickLabelContainer) {\n\t\t\t\t\tthis.sliderElem.appendChild(this.tickLabelContainer);\n\t\t\t\t}\n\t\t\t\tif (this.ticksContainer) {\n\t\t\t\t\tthis.sliderElem.appendChild(this.ticksContainer);\n\t\t\t\t}\n\n\t\t\t\tthis.sliderElem.appendChild(sliderMinHandle);\n\t\t\t\tthis.sliderElem.appendChild(sliderMaxHandle);\n\n\t\t\t\t/* Append slider element to parent container, right before the original element */\n\t\t\t\tparent.insertBefore(this.sliderElem, this.element);\n\n\t\t\t\t/* Hide original element */\n\t\t\t\tthis.element.style.display = \"none\";\n\t\t\t}\n\t\t\t/* If JQuery exists, cache JQ references */\n\t\t\tif ($) {\n\t\t\t\tthis.$element = $(this.element);\n\t\t\t\tthis.$sliderElem = $(this.sliderElem);\n\t\t\t}\n\n\t\t\t/*************************************************\n \t\t\t\t\t\tSetup\n \t**************************************************/\n\t\t\tthis.eventToCallbackMap = {};\n\t\t\tthis.sliderElem.id = this.options.id;\n\n\t\t\tthis.touchCapable = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;\n\n\t\t\tthis.touchX = 0;\n\t\t\tthis.touchY = 0;\n\n\t\t\tthis.tooltip = this.sliderElem.querySelector('.tooltip-main');\n\t\t\tthis.tooltipInner = this.tooltip.querySelector('.tooltip-inner');\n\n\t\t\tthis.tooltip_min = this.sliderElem.querySelector('.tooltip-min');\n\t\t\tthis.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner');\n\n\t\t\tthis.tooltip_max = this.sliderElem.querySelector('.tooltip-max');\n\t\t\tthis.tooltipInner_max = this.tooltip_max.querySelector('.tooltip-inner');\n\n\t\t\tif (SliderScale[this.options.scale]) {\n\t\t\t\tthis.options.scale = SliderScale[this.options.scale];\n\t\t\t}\n\n\t\t\tif (updateSlider === true) {\n\t\t\t\t// Reset classes\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-horizontal');\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-vertical');\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-rtl');\n\t\t\t\tthis._removeClass(this.tooltip, 'hide');\n\t\t\t\tthis._removeClass(this.tooltip_min, 'hide');\n\t\t\t\tthis._removeClass(this.tooltip_max, 'hide');\n\n\t\t\t\t// Undo existing inline styles for track\n\t\t\t\t[\"left\", \"right\", \"top\", \"width\", \"height\"].forEach(function (prop) {\n\t\t\t\t\tthis._removeProperty(this.trackLow, prop);\n\t\t\t\t\tthis._removeProperty(this.trackSelection, prop);\n\t\t\t\t\tthis._removeProperty(this.trackHigh, prop);\n\t\t\t\t}, this);\n\n\t\t\t\t// Undo inline styles on handles\n\t\t\t\t[this.handle1, this.handle2].forEach(function (handle) {\n\t\t\t\t\tthis._removeProperty(handle, 'left');\n\t\t\t\t\tthis._removeProperty(handle, 'right');\n\t\t\t\t\tthis._removeProperty(handle, 'top');\n\t\t\t\t}, this);\n\n\t\t\t\t// Undo inline styles and classes on tooltips\n\t\t\t\t[this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function (tooltip) {\n\t\t\t\t\tthis._removeProperty(tooltip, 'left');\n\t\t\t\t\tthis._removeProperty(tooltip, 'right');\n\t\t\t\t\tthis._removeProperty(tooltip, 'top');\n\n\t\t\t\t\tthis._removeClass(tooltip, 'right');\n\t\t\t\t\tthis._removeClass(tooltip, 'left');\n\t\t\t\t\tthis._removeClass(tooltip, 'top');\n\t\t\t\t}, this);\n\t\t\t}\n\n\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-vertical');\n\t\t\t\tthis.stylePos = 'top';\n\t\t\t\tthis.mousePos = 'pageY';\n\t\t\t\tthis.sizePos = 'offsetHeight';\n\t\t\t} else {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-horizontal');\n\t\t\t\tthis.sliderElem.style.width = origWidth;\n\t\t\t\tthis.options.orientation = 'horizontal';\n\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\tthis.stylePos = 'right';\n\t\t\t\t} else {\n\t\t\t\t\tthis.stylePos = 'left';\n\t\t\t\t}\n\t\t\t\tthis.mousePos = 'clientX';\n\t\t\t\tthis.sizePos = 'offsetWidth';\n\t\t\t}\n\t\t\t// specific rtl class\n\t\t\tif (this.options.rtl) {\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-rtl');\n\t\t\t}\n\t\t\tthis._setTooltipPosition();\n\t\t\t/* In case ticks are specified, overwrite the min and max bounds */\n\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\t\t\t\tif (!isMaxSet) {\n\t\t\t\t\tthis.options.max = Math.max.apply(Math, this.options.ticks);\n\t\t\t\t}\n\t\t\t\tif (!isMinSet) {\n\t\t\t\t\tthis.options.min = Math.min.apply(Math, this.options.ticks);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Array.isArray(this.options.value)) {\n\t\t\t\tthis.options.range = true;\n\t\t\t\tthis._state.value = this.options.value;\n\t\t\t} else if (this.options.range) {\n\t\t\t\t// User wants a range, but value is not an array\n\t\t\t\tthis._state.value = [this.options.value, this.options.max];\n\t\t\t} else {\n\t\t\t\tthis._state.value = this.options.value;\n\t\t\t}\n\n\t\t\tthis.trackLow = sliderTrackLow || this.trackLow;\n\t\t\tthis.trackSelection = sliderTrackSelection || this.trackSelection;\n\t\t\tthis.trackHigh = sliderTrackHigh || this.trackHigh;\n\n\t\t\tif (this.options.selection === 'none') {\n\t\t\t\tthis._addClass(this.trackLow, 'hide');\n\t\t\t\tthis._addClass(this.trackSelection, 'hide');\n\t\t\t\tthis._addClass(this.trackHigh, 'hide');\n\t\t\t} else if (this.options.selection === 'after' || this.options.selection === 'before') {\n\t\t\t\tthis._removeClass(this.trackLow, 'hide');\n\t\t\t\tthis._removeClass(this.trackSelection, 'hide');\n\t\t\t\tthis._removeClass(this.trackHigh, 'hide');\n\t\t\t}\n\n\t\t\tthis.handle1 = sliderMinHandle || this.handle1;\n\t\t\tthis.handle2 = sliderMaxHandle || this.handle2;\n\n\t\t\tif (updateSlider === true) {\n\t\t\t\t// Reset classes\n\t\t\t\tthis._removeClass(this.handle1, 'round triangle');\n\t\t\t\tthis._removeClass(this.handle2, 'round triangle hide');\n\n\t\t\t\tfor (i = 0; i < this.ticks.length; i++) {\n\t\t\t\t\tthis._removeClass(this.ticks[i], 'round triangle hide');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar availableHandleModifiers = ['round', 'triangle', 'custom'];\n\t\t\tvar isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1;\n\t\t\tif (isValidHandleType) {\n\t\t\t\tthis._addClass(this.handle1, this.options.handle);\n\t\t\t\tthis._addClass(this.handle2, this.options.handle);\n\n\t\t\t\tfor (i = 0; i < this.ticks.length; i++) {\n\t\t\t\t\tthis._addClass(this.ticks[i], this.options.handle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\t\t\tthis.setValue(this._state.value);\n\n\t\t\t/******************************************\n \t\t\t\tBind Event Listeners\n \t******************************************/\n\n\t\t\t// Bind keyboard handlers\n\t\t\tthis.handle1Keydown = this._keydown.bind(this, 0);\n\t\t\tthis.handle1.addEventListener(\"keydown\", this.handle1Keydown, false);\n\n\t\t\tthis.handle2Keydown = this._keydown.bind(this, 1);\n\t\t\tthis.handle2.addEventListener(\"keydown\", this.handle2Keydown, false);\n\n\t\t\tthis.mousedown = this._mousedown.bind(this);\n\t\t\tthis.touchstart = this._touchstart.bind(this);\n\t\t\tthis.touchmove = this._touchmove.bind(this);\n\n\t\t\tif (this.touchCapable) {\n\t\t\t\tthis.sliderElem.addEventListener(\"touchstart\", this.touchstart, false);\n\t\t\t\tthis.sliderElem.addEventListener(\"touchmove\", this.touchmove, false);\n\t\t\t}\n\n\t\t\tthis.sliderElem.addEventListener(\"mousedown\", this.mousedown, false);\n\n\t\t\t// Bind window handlers\n\t\t\tthis.resize = this._resize.bind(this);\n\t\t\twindow.addEventListener(\"resize\", this.resize, false);\n\n\t\t\t// Bind tooltip-related handlers\n\t\t\tif (this.options.tooltip === 'hide') {\n\t\t\t\tthis._addClass(this.tooltip, 'hide');\n\t\t\t\tthis._addClass(this.tooltip_min, 'hide');\n\t\t\t\tthis._addClass(this.tooltip_max, 'hide');\n\t\t\t} else if (this.options.tooltip === 'always') {\n\t\t\t\tthis._showTooltip();\n\t\t\t\tthis._alwaysShowTooltip = true;\n\t\t\t} else {\n\t\t\t\tthis.showTooltip = this._showTooltip.bind(this);\n\t\t\t\tthis.hideTooltip = this._hideTooltip.bind(this);\n\n\t\t\t\tif (this.options.ticks_tooltip) {\n\t\t\t\t\tvar callbackHandle = this._addTickListener();\n\t\t\t\t\t//create handle1 listeners and store references in map\n\t\t\t\t\tvar mouseEnter = callbackHandle.addMouseEnter(this, this.handle1);\n\t\t\t\t\tvar mouseLeave = callbackHandle.addMouseLeave(this, this.handle1);\n\t\t\t\t\tthis.handleCallbackMap.handle1 = {\n\t\t\t\t\t\tmouseEnter: mouseEnter,\n\t\t\t\t\t\tmouseLeave: mouseLeave\n\t\t\t\t\t};\n\t\t\t\t\t//create handle2 listeners and store references in map\n\t\t\t\t\tmouseEnter = callbackHandle.addMouseEnter(this, this.handle2);\n\t\t\t\t\tmouseLeave = callbackHandle.addMouseLeave(this, this.handle2);\n\t\t\t\t\tthis.handleCallbackMap.handle2 = {\n\t\t\t\t\t\tmouseEnter: mouseEnter,\n\t\t\t\t\t\tmouseLeave: mouseLeave\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.sliderElem.addEventListener(\"mouseenter\", this.showTooltip, false);\n\t\t\t\t\tthis.sliderElem.addEventListener(\"mouseleave\", this.hideTooltip, false);\n\n\t\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t\tthis.sliderElem.addEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.sliderElem.addEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t\tthis.sliderElem.addEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.handle1.addEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\tthis.handle1.addEventListener(\"blur\", this.hideTooltip, false);\n\n\t\t\t\tthis.handle2.addEventListener(\"focus\", this.showTooltip, false);\n\t\t\t\tthis.handle2.addEventListener(\"blur\", this.hideTooltip, false);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\tthis.handle1.addEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\tthis.handle1.addEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\tthis.handle1.addEventListener(\"touchend\", this.hideTooltip, false);\n\n\t\t\t\t\tthis.handle2.addEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\tthis.handle2.addEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\tthis.handle2.addEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.options.enabled) {\n\t\t\t\tthis.enable();\n\t\t\t} else {\n\t\t\t\tthis.disable();\n\t\t\t}\n\t\t}\n\n\t\t/*************************************************\n \t\t\t\tINSTANCE PROPERTIES/METHODS\n \t- Any methods bound to the prototype are considered\n part of the plugin's `public` interface\n \t**************************************************/\n\t\tSlider.prototype = {\n\t\t\t_init: function _init() {}, // NOTE: Must exist to support bridget\n\n\t\t\tconstructor: Slider,\n\n\t\t\tdefaultOptions: {\n\t\t\t\tid: \"\",\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 10,\n\t\t\t\tstep: 1,\n\t\t\t\tprecision: 0,\n\t\t\t\torientation: 'horizontal',\n\t\t\t\tvalue: 5,\n\t\t\t\trange: false,\n\t\t\t\tselection: 'before',\n\t\t\t\ttooltip: 'show',\n\t\t\t\ttooltip_split: false,\n\t\t\t\tlock_to_ticks: false,\n\t\t\t\thandle: 'round',\n\t\t\t\treversed: false,\n\t\t\t\trtl: 'auto',\n\t\t\t\tenabled: true,\n\t\t\t\tformatter: function formatter(val) {\n\t\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\t\treturn val[0] + \" : \" + val[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnatural_arrow_keys: false,\n\t\t\t\tticks: [],\n\t\t\t\tticks_positions: [],\n\t\t\t\tticks_labels: [],\n\t\t\t\tticks_snap_bounds: 0,\n\t\t\t\tticks_tooltip: false,\n\t\t\t\tscale: 'linear',\n\t\t\t\tfocus: false,\n\t\t\t\ttooltip_position: null,\n\t\t\t\tlabelledby: null,\n\t\t\t\trangeHighlights: []\n\t\t\t},\n\n\t\t\tgetElement: function getElement() {\n\t\t\t\treturn this.sliderElem;\n\t\t\t},\n\n\t\t\tgetValue: function getValue() {\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\treturn this._state.value;\n\t\t\t\t} else {\n\t\t\t\t\treturn this._state.value[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetValue: function setValue(val, triggerSlideEvent, triggerChangeEvent) {\n\t\t\t\tif (!val) {\n\t\t\t\t\tval = 0;\n\t\t\t\t}\n\t\t\t\tvar oldValue = this.getValue();\n\t\t\t\tthis._state.value = this._validateInputValue(val);\n\t\t\t\tvar applyPrecision = this._applyPrecision.bind(this);\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tthis._state.value[0] = applyPrecision(this._state.value[0]);\n\t\t\t\t\tthis._state.value[1] = applyPrecision(this._state.value[1]);\n\n\t\t\t\t\tif (this.ticksAreValid && this.options.lock_to_ticks) {\n\t\t\t\t\t\tthis._state.value[0] = this.options.ticks[this._getClosestTickIndex(this._state.value[0])];\n\t\t\t\t\t\tthis._state.value[1] = this.options.ticks[this._getClosestTickIndex(this._state.value[1])];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0]));\n\t\t\t\t\tthis._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1]));\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.value = applyPrecision(this._state.value);\n\n\t\t\t\t\tif (this.ticksAreValid && this.options.lock_to_ticks) {\n\t\t\t\t\t\tthis._state.value = this.options.ticks[this._getClosestTickIndex(this._state.value)];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._state.value = [Math.max(this.options.min, Math.min(this.options.max, this._state.value))];\n\t\t\t\t\tthis._addClass(this.handle2, 'hide');\n\t\t\t\t\tif (this.options.selection === 'after') {\n\t\t\t\t\t\tthis._state.value[1] = this.options.max;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._state.value[1] = this.options.min;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Determine which ticks the handle(s) are set at (if applicable)\n\t\t\t\tthis._setTickIndex();\n\n\t\t\t\tif (this.options.max > this.options.min) {\n\t\t\t\t\tthis._state.percentage = [this._toPercentage(this._state.value[0]), this._toPercentage(this._state.value[1]), this.options.step * 100 / (this.options.max - this.options.min)];\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.percentage = [0, 0, 100];\n\t\t\t\t}\n\n\t\t\t\tthis._layout();\n\t\t\t\tvar newValue = this.options.range ? this._state.value : this._state.value[0];\n\n\t\t\t\tthis._setDataVal(newValue);\n\t\t\t\tif (triggerSlideEvent === true) {\n\t\t\t\t\tthis._trigger('slide', newValue);\n\t\t\t\t}\n\n\t\t\t\tvar hasChanged = false;\n\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\thasChanged = oldValue[0] !== newValue[0] || oldValue[1] !== newValue[1];\n\t\t\t\t} else {\n\t\t\t\t\thasChanged = oldValue !== newValue;\n\t\t\t\t}\n\n\t\t\t\tif (hasChanged && triggerChangeEvent === true) {\n\t\t\t\t\tthis._trigger('change', {\n\t\t\t\t\t\toldValue: oldValue,\n\t\t\t\t\t\tnewValue: newValue\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tdestroy: function destroy() {\n\t\t\t\t// Remove event handlers on slider elements\n\t\t\t\tthis._removeSliderEventHandlers();\n\n\t\t\t\t// Remove the slider from the DOM\n\t\t\t\tthis.sliderElem.parentNode.removeChild(this.sliderElem);\n\t\t\t\t/* Show original element */\n\t\t\t\tthis.element.style.display = \"\";\n\n\t\t\t\t// Clear out custom event bindings\n\t\t\t\tthis._cleanUpEventCallbacksMap();\n\n\t\t\t\t// Remove data values\n\t\t\t\tthis.element.removeAttribute(\"data\");\n\n\t\t\t\t// Remove JQuery handlers/data\n\t\t\t\tif ($) {\n\t\t\t\t\tthis._unbindJQueryEventHandlers();\n\t\t\t\t\tif (autoRegisterNamespace === NAMESPACE_MAIN) {\n\t\t\t\t\t\tthis.$element.removeData(autoRegisterNamespace);\n\t\t\t\t\t}\n\t\t\t\t\tthis.$element.removeData(NAMESPACE_ALTERNATE);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdisable: function disable() {\n\t\t\t\tthis._state.enabled = false;\n\t\t\t\tthis.handle1.removeAttribute(\"tabindex\");\n\t\t\t\tthis.handle2.removeAttribute(\"tabindex\");\n\t\t\t\tthis._addClass(this.sliderElem, 'slider-disabled');\n\t\t\t\tthis._trigger('slideDisabled');\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tenable: function enable() {\n\t\t\t\tthis._state.enabled = true;\n\t\t\t\tthis.handle1.setAttribute(\"tabindex\", 0);\n\t\t\t\tthis.handle2.setAttribute(\"tabindex\", 0);\n\t\t\t\tthis._removeClass(this.sliderElem, 'slider-disabled');\n\t\t\t\tthis._trigger('slideEnabled');\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\ttoggle: function toggle() {\n\t\t\t\tif (this._state.enabled) {\n\t\t\t\t\tthis.disable();\n\t\t\t\t} else {\n\t\t\t\t\tthis.enable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\tisEnabled: function isEnabled() {\n\t\t\t\treturn this._state.enabled;\n\t\t\t},\n\n\t\t\ton: function on(evt, callback) {\n\t\t\t\tthis._bindNonQueryEventHandler(evt, callback);\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\toff: function off(evt, callback) {\n\t\t\t\tif ($) {\n\t\t\t\t\tthis.$element.off(evt, callback);\n\t\t\t\t\tthis.$sliderElem.off(evt, callback);\n\t\t\t\t} else {\n\t\t\t\t\tthis._unbindNonQueryEventHandler(evt, callback);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tgetAttribute: function getAttribute(attribute) {\n\t\t\t\tif (attribute) {\n\t\t\t\t\treturn this.options[attribute];\n\t\t\t\t} else {\n\t\t\t\t\treturn this.options;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetAttribute: function setAttribute(attribute, value) {\n\t\t\t\tthis.options[attribute] = value;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\trefresh: function refresh(options) {\n\t\t\t\tvar currentValue = this.getValue();\n\t\t\t\tthis._removeSliderEventHandlers();\n\t\t\t\tcreateNewSlider.call(this, this.element, this.options);\n\t\t\t\t// Don't reset slider's value on refresh if `useCurrentValue` is true\n\t\t\t\tif (options && options.useCurrentValue === true) {\n\t\t\t\t\tthis.setValue(currentValue);\n\t\t\t\t}\n\t\t\t\tif ($) {\n\t\t\t\t\t// Bind new instance of slider to the element\n\t\t\t\t\tif (autoRegisterNamespace === NAMESPACE_MAIN) {\n\t\t\t\t\t\t$.data(this.element, NAMESPACE_MAIN, this);\n\t\t\t\t\t\t$.data(this.element, NAMESPACE_ALTERNATE, this);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$.data(this.element, NAMESPACE_ALTERNATE, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\trelayout: function relayout() {\n\t\t\t\tthis._resize();\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t/******************************+\n \t\t\t\tHELPERS\n \t- Any method that is not part of the public interface.\n - Place it underneath this comment block and write its signature like so:\n \t\t_fnName : function() {...}\n \t********************************/\n\t\t\t_removeTooltipListener: function _removeTooltipListener(event, handler) {\n\t\t\t\tthis.handle1.removeEventListener(event, handler, false);\n\t\t\t\tthis.handle2.removeEventListener(event, handler, false);\n\t\t\t},\n\t\t\t_removeSliderEventHandlers: function _removeSliderEventHandlers() {\n\t\t\t\t// Remove keydown event listeners\n\t\t\t\tthis.handle1.removeEventListener(\"keydown\", this.handle1Keydown, false);\n\t\t\t\tthis.handle2.removeEventListener(\"keydown\", this.handle2Keydown, false);\n\n\t\t\t\t//remove the listeners from the ticks and handles if they had their own listeners\n\t\t\t\tif (this.options.ticks_tooltip) {\n\t\t\t\t\tvar ticks = this.ticksContainer.getElementsByClassName('slider-tick');\n\t\t\t\t\tfor (var i = 0; i < ticks.length; i++) {\n\t\t\t\t\t\tticks[i].removeEventListener('mouseenter', this.ticksCallbackMap[i].mouseEnter, false);\n\t\t\t\t\t\tticks[i].removeEventListener('mouseleave', this.ticksCallbackMap[i].mouseLeave, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.handleCallbackMap.handle1 && this.handleCallbackMap.handle2) {\n\t\t\t\t\t\tthis.handle1.removeEventListener('mouseenter', this.handleCallbackMap.handle1.mouseEnter, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener('mouseenter', this.handleCallbackMap.handle2.mouseEnter, false);\n\t\t\t\t\t\tthis.handle1.removeEventListener('mouseleave', this.handleCallbackMap.handle1.mouseLeave, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener('mouseleave', this.handleCallbackMap.handle2.mouseLeave, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.handleCallbackMap = null;\n\t\t\t\tthis.ticksCallbackMap = null;\n\n\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\tthis._removeTooltipListener(\"focus\", this.showTooltip);\n\t\t\t\t}\n\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\tthis._removeTooltipListener(\"blur\", this.hideTooltip);\n\t\t\t\t}\n\n\t\t\t\t// Remove event listeners from sliderElem\n\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"mouseenter\", this.showTooltip, false);\n\t\t\t\t}\n\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"mouseleave\", this.hideTooltip, false);\n\t\t\t\t}\n\n\t\t\t\tthis.sliderElem.removeEventListener(\"mousedown\", this.mousedown, false);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Remove touch event listeners from handles\n\t\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\t\tthis.handle1.removeEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.handle1.removeEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\t\tthis.handle1.removeEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t\tthis.handle2.removeEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove event listeners from sliderElem\n\t\t\t\t\tif (this.showTooltip) {\n\t\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchstart\", this.showTooltip, false);\n\t\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchmove\", this.showTooltip, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.hideTooltip) {\n\t\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchend\", this.hideTooltip, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchstart\", this.touchstart, false);\n\t\t\t\t\tthis.sliderElem.removeEventListener(\"touchmove\", this.touchmove, false);\n\t\t\t\t}\n\n\t\t\t\t// Remove window event listener\n\t\t\t\twindow.removeEventListener(\"resize\", this.resize, false);\n\t\t\t},\n\t\t\t_bindNonQueryEventHandler: function _bindNonQueryEventHandler(evt, callback) {\n\t\t\t\tif (this.eventToCallbackMap[evt] === undefined) {\n\t\t\t\t\tthis.eventToCallbackMap[evt] = [];\n\t\t\t\t}\n\t\t\t\tthis.eventToCallbackMap[evt].push(callback);\n\t\t\t},\n\t\t\t_unbindNonQueryEventHandler: function _unbindNonQueryEventHandler(evt, callback) {\n\t\t\t\tvar callbacks = this.eventToCallbackMap[evt];\n\t\t\t\tif (callbacks !== undefined) {\n\t\t\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\t\t\tif (callbacks[i] === callback) {\n\t\t\t\t\t\t\tcallbacks.splice(i, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_cleanUpEventCallbacksMap: function _cleanUpEventCallbacksMap() {\n\t\t\t\tvar eventNames = Object.keys(this.eventToCallbackMap);\n\t\t\t\tfor (var i = 0; i < eventNames.length; i++) {\n\t\t\t\t\tvar eventName = eventNames[i];\n\t\t\t\t\tdelete this.eventToCallbackMap[eventName];\n\t\t\t\t}\n\t\t\t},\n\t\t\t_showTooltip: function _showTooltip() {\n\t\t\t\tif (this.options.tooltip_split === false) {\n\t\t\t\t\tthis._addClass(this.tooltip, 'in');\n\t\t\t\t\tthis.tooltip_min.style.display = 'none';\n\t\t\t\t\tthis.tooltip_max.style.display = 'none';\n\t\t\t\t} else {\n\t\t\t\t\tthis._addClass(this.tooltip_min, 'in');\n\t\t\t\t\tthis._addClass(this.tooltip_max, 'in');\n\t\t\t\t\tthis.tooltip.style.display = 'none';\n\t\t\t\t}\n\t\t\t\tthis._state.over = true;\n\t\t\t},\n\t\t\t_hideTooltip: function _hideTooltip() {\n\t\t\t\tif (this._state.inDrag === false && this._alwaysShowTooltip !== true) {\n\t\t\t\t\tthis._removeClass(this.tooltip, 'in');\n\t\t\t\t\tthis._removeClass(this.tooltip_min, 'in');\n\t\t\t\t\tthis._removeClass(this.tooltip_max, 'in');\n\t\t\t\t}\n\t\t\t\tthis._state.over = false;\n\t\t\t},\n\t\t\t_setToolTipOnMouseOver: function _setToolTipOnMouseOver(tempState) {\n\t\t\t\tvar self = this;\n\t\t\t\tvar formattedTooltipVal = this.options.formatter(!tempState ? this._state.value[0] : tempState.value[0]);\n\t\t\t\tvar positionPercentages = !tempState ? getPositionPercentages(this._state, this.options.reversed) : getPositionPercentages(tempState, this.options.reversed);\n\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\n\t\t\t\tthis.tooltip.style[this.stylePos] = positionPercentages[0] + \"%\";\n\n\t\t\t\tfunction getPositionPercentages(state, reversed) {\n\t\t\t\t\tif (reversed) {\n\t\t\t\t\t\treturn [100 - state.percentage[0], self.options.range ? 100 - state.percentage[1] : state.percentage[1]];\n\t\t\t\t\t}\n\t\t\t\t\treturn [state.percentage[0], state.percentage[1]];\n\t\t\t\t}\n\t\t\t},\n\t\t\t_copyState: function _copyState() {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: [this._state.value[0], this._state.value[1]],\n\t\t\t\t\tenabled: this._state.enabled,\n\t\t\t\t\toffset: this._state.offset,\n\t\t\t\t\tsize: this._state.size,\n\t\t\t\t\tpercentage: [this._state.percentage[0], this._state.percentage[1], this._state.percentage[2]],\n\t\t\t\t\tinDrag: this._state.inDrag,\n\t\t\t\t\tover: this._state.over,\n\t\t\t\t\t// deleted or null'd keys\n\t\t\t\t\tdragged: this._state.dragged,\n\t\t\t\t\tkeyCtrl: this._state.keyCtrl\n\t\t\t\t};\n\t\t\t},\n\t\t\t_addTickListener: function _addTickListener() {\n\t\t\t\treturn {\n\t\t\t\t\taddMouseEnter: function addMouseEnter(reference, element, index) {\n\t\t\t\t\t\tvar enter = function enter() {\n\t\t\t\t\t\t\tvar tempState = reference._copyState();\n\t\t\t\t\t\t\t// Which handle is being hovered over?\n\t\t\t\t\t\t\tvar val = element === reference.handle1 ? tempState.value[0] : tempState.value[1];\n\t\t\t\t\t\t\tvar per = void 0;\n\n\t\t\t\t\t\t\t// Setup value and percentage for tick's 'mouseenter'\n\t\t\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\t\t\tval = reference.options.ticks[index];\n\t\t\t\t\t\t\t\tper = reference.options.ticks_positions.length > 0 && reference.options.ticks_positions[index] || reference._toPercentage(reference.options.ticks[index]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tper = reference._toPercentage(val);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttempState.value[0] = val;\n\t\t\t\t\t\t\ttempState.percentage[0] = per;\n\t\t\t\t\t\t\treference._setToolTipOnMouseOver(tempState);\n\t\t\t\t\t\t\treference._showTooltip();\n\t\t\t\t\t\t};\n\t\t\t\t\t\telement.addEventListener(\"mouseenter\", enter, false);\n\t\t\t\t\t\treturn enter;\n\t\t\t\t\t},\n\t\t\t\t\taddMouseLeave: function addMouseLeave(reference, element) {\n\t\t\t\t\t\tvar leave = function leave() {\n\t\t\t\t\t\t\treference._hideTooltip();\n\t\t\t\t\t\t};\n\t\t\t\t\t\telement.addEventListener(\"mouseleave\", leave, false);\n\t\t\t\t\t\treturn leave;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\t_layout: function _layout() {\n\t\t\t\tvar positionPercentages;\n\t\t\t\tvar formattedValue;\n\n\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\tpositionPercentages = [100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]];\n\t\t\t\t} else {\n\t\t\t\t\tpositionPercentages = [this._state.percentage[0], this._state.percentage[1]];\n\t\t\t\t}\n\n\t\t\t\tthis.handle1.style[this.stylePos] = positionPercentages[0] + \"%\";\n\t\t\t\tthis.handle1.setAttribute('aria-valuenow', this._state.value[0]);\n\t\t\t\tformattedValue = this.options.formatter(this._state.value[0]);\n\t\t\t\tif (isNaN(formattedValue)) {\n\t\t\t\t\tthis.handle1.setAttribute('aria-valuetext', formattedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.handle1.removeAttribute('aria-valuetext');\n\t\t\t\t}\n\n\t\t\t\tthis.handle2.style[this.stylePos] = positionPercentages[1] + \"%\";\n\t\t\t\tthis.handle2.setAttribute('aria-valuenow', this._state.value[1]);\n\t\t\t\tformattedValue = this.options.formatter(this._state.value[1]);\n\t\t\t\tif (isNaN(formattedValue)) {\n\t\t\t\t\tthis.handle2.setAttribute('aria-valuetext', formattedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.handle2.removeAttribute('aria-valuetext');\n\t\t\t\t}\n\n\t\t\t\t/* Position highlight range elements */\n\t\t\t\tif (this.rangeHighlightElements.length > 0 && Array.isArray(this.options.rangeHighlights) && this.options.rangeHighlights.length > 0) {\n\t\t\t\t\tfor (var _i = 0; _i < this.options.rangeHighlights.length; _i++) {\n\t\t\t\t\t\tvar startPercent = this._toPercentage(this.options.rangeHighlights[_i].start);\n\t\t\t\t\t\tvar endPercent = this._toPercentage(this.options.rangeHighlights[_i].end);\n\n\t\t\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\t\t\tvar sp = 100 - endPercent;\n\t\t\t\t\t\t\tendPercent = 100 - startPercent;\n\t\t\t\t\t\t\tstartPercent = sp;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar currentRange = this._createHighlightRange(startPercent, endPercent);\n\n\t\t\t\t\t\tif (currentRange) {\n\t\t\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.top = currentRange.start + \"%\";\n\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.height = currentRange.size + \"%\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.right = currentRange.start + \"%\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.left = currentRange.start + \"%\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.width = currentRange.size + \"%\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.rangeHighlightElements[_i].style.display = \"none\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Position ticks and labels */\n\t\t\t\tif (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {\n\n\t\t\t\t\tvar styleSize = this.options.orientation === 'vertical' ? 'height' : 'width';\n\t\t\t\t\tvar styleMargin;\n\t\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\t\tstyleMargin = 'marginTop';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\tstyleMargin = 'marginRight';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyleMargin = 'marginLeft';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar labelSize = this._state.size / (this.options.ticks.length - 1);\n\n\t\t\t\t\tif (this.tickLabelContainer) {\n\t\t\t\t\t\tvar extraMargin = 0;\n\t\t\t\t\t\tif (this.options.ticks_positions.length === 0) {\n\t\t\t\t\t\t\tif (this.options.orientation !== 'vertical') {\n\t\t\t\t\t\t\t\tthis.tickLabelContainer.style[styleMargin] = -labelSize / 2 + \"px\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\textraMargin = this.tickLabelContainer.offsetHeight;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t/* Chidren are position absolute, calculate height by finding the max offsetHeight of a child */\n\t\t\t\t\t\t\tfor (i = 0; i < this.tickLabelContainer.childNodes.length; i++) {\n\t\t\t\t\t\t\t\tif (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) {\n\t\t\t\t\t\t\t\t\textraMargin = this.tickLabelContainer.childNodes[i].offsetHeight;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.options.orientation === 'horizontal') {\n\t\t\t\t\t\t\tthis.sliderElem.style.marginBottom = extraMargin + \"px\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\n\t\t\t\t\t\tvar percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]);\n\n\t\t\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\t\t\tpercentage = 100 - percentage;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.ticks[i].style[this.stylePos] = percentage + \"%\";\n\n\t\t\t\t\t\t/* Set class labels to denote whether ticks are in the selection */\n\t\t\t\t\t\tthis._removeClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\tif (!this.options.range) {\n\t\t\t\t\t\t\tif (this.options.selection === 'after' && percentage >= positionPercentages[0]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t\t} else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {\n\t\t\t\t\t\t\tthis._addClass(this.ticks[i], 'in-selection');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.tickLabels[i]) {\n\t\t\t\t\t\t\tthis.tickLabels[i].style[styleSize] = labelSize + \"px\";\n\n\t\t\t\t\t\t\tif (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) {\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style.position = 'absolute';\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style[this.stylePos] = percentage + \"%\";\n\t\t\t\t\t\t\t\tthis.tickLabels[i].style[styleMargin] = -labelSize / 2 + 'px';\n\t\t\t\t\t\t\t} else if (this.options.orientation === 'vertical') {\n\t\t\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\t\t\tthis.tickLabels[i].style['marginRight'] = this.sliderElem.offsetWidth + \"px\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.tickLabels[i].style['marginLeft'] = this.sliderElem.offsetWidth + \"px\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.tickLabelContainer.style[styleMargin] = this.sliderElem.offsetWidth / 2 * -1 + 'px';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t/* Set class labels to indicate tick labels are in the selection or selected */\n\t\t\t\t\t\t\tthis._removeClass(this.tickLabels[i], 'label-in-selection label-is-selection');\n\t\t\t\t\t\t\tif (!this.options.range) {\n\t\t\t\t\t\t\t\tif (this.options.selection === 'after' && percentage >= positionPercentages[0]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-in-selection');\n\t\t\t\t\t\t\t\t} else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-in-selection');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (percentage === positionPercentages[0]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-is-selection');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {\n\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-in-selection');\n\t\t\t\t\t\t\t\tif (percentage === positionPercentages[0] || positionPercentages[1]) {\n\t\t\t\t\t\t\t\t\tthis._addClass(this.tickLabels[i], 'label-is-selection');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar formattedTooltipVal;\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tformattedTooltipVal = this.options.formatter(this._state.value);\n\t\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\t\t\t\t\tthis.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0]) / 2 + \"%\";\n\n\t\t\t\t\tvar innerTooltipMinText = this.options.formatter(this._state.value[0]);\n\t\t\t\t\tthis._setText(this.tooltipInner_min, innerTooltipMinText);\n\n\t\t\t\t\tvar innerTooltipMaxText = this.options.formatter(this._state.value[1]);\n\t\t\t\t\tthis._setText(this.tooltipInner_max, innerTooltipMaxText);\n\n\t\t\t\t\tthis.tooltip_min.style[this.stylePos] = positionPercentages[0] + \"%\";\n\n\t\t\t\t\tthis.tooltip_max.style[this.stylePos] = positionPercentages[1] + \"%\";\n\t\t\t\t} else {\n\t\t\t\t\tformattedTooltipVal = this.options.formatter(this._state.value[0]);\n\t\t\t\t\tthis._setText(this.tooltipInner, formattedTooltipVal);\n\n\t\t\t\t\tthis.tooltip.style[this.stylePos] = positionPercentages[0] + \"%\";\n\t\t\t\t}\n\n\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\tthis.trackLow.style.top = '0';\n\t\t\t\t\tthis.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\n\t\t\t\t\tthis.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\t\t\t\t\tthis.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\n\t\t\t\t\tthis.trackHigh.style.bottom = '0';\n\t\t\t\t\tthis.trackHigh.style.height = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\t\t\t\t} else {\n\t\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\t\tthis.trackLow.style.right = '0';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.trackLow.style.left = '0';\n\t\t\t\t\t}\n\t\t\t\t\tthis.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\n\t\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\t\tthis.trackSelection.style.right = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) + '%';\n\t\t\t\t\t}\n\t\t\t\t\tthis.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\n\t\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\t\tthis.trackHigh.style.left = '0';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.trackHigh.style.right = '0';\n\t\t\t\t\t}\n\t\t\t\t\tthis.trackHigh.style.width = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';\n\n\t\t\t\t\tvar offset_min = this.tooltip_min.getBoundingClientRect();\n\t\t\t\t\tvar offset_max = this.tooltip_max.getBoundingClientRect();\n\n\t\t\t\t\tif (this.options.tooltip_position === 'bottom') {\n\t\t\t\t\t\tif (offset_min.right > offset_max.left) {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'bottom');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'top');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = '';\n\t\t\t\t\t\t\tthis.tooltip_max.style.bottom = 22 + 'px';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'top');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'bottom');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = this.tooltip_min.style.top;\n\t\t\t\t\t\t\tthis.tooltip_max.style.bottom = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (offset_min.right > offset_max.left) {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'top');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'bottom');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = 18 + 'px';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._removeClass(this.tooltip_max, 'bottom');\n\t\t\t\t\t\t\tthis._addClass(this.tooltip_max, 'top');\n\t\t\t\t\t\t\tthis.tooltip_max.style.top = this.tooltip_min.style.top;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_createHighlightRange: function _createHighlightRange(start, end) {\n\t\t\t\tif (this._isHighlightRange(start, end)) {\n\t\t\t\t\tif (start > end) {\n\t\t\t\t\t\treturn { 'start': end, 'size': start - end };\n\t\t\t\t\t}\n\t\t\t\t\treturn { 'start': start, 'size': end - start };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t_isHighlightRange: function _isHighlightRange(start, end) {\n\t\t\t\tif (0 <= start && start <= 100 && 0 <= end && end <= 100) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_resize: function _resize(ev) {\n\t\t\t\t/*jshint unused:false*/\n\t\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\t\t\t\tthis._layout();\n\t\t\t},\n\t\t\t_removeProperty: function _removeProperty(element, prop) {\n\t\t\t\tif (element.style.removeProperty) {\n\t\t\t\t\telement.style.removeProperty(prop);\n\t\t\t\t} else {\n\t\t\t\t\telement.style.removeAttribute(prop);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mousedown: function _mousedown(ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (ev.preventDefault) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tthis._state.offset = this._offset(this.sliderElem);\n\t\t\t\tthis._state.size = this.sliderElem[this.sizePos];\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tvar diff1 = Math.abs(this._state.percentage[0] - percentage);\n\t\t\t\t\tvar diff2 = Math.abs(this._state.percentage[1] - percentage);\n\t\t\t\t\tthis._state.dragged = diff1 < diff2 ? 0 : 1;\n\t\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\t} else {\n\t\t\t\t\tthis._state.dragged = 0;\n\t\t\t\t}\n\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\tdocument.removeEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.removeEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\n\t\t\t\tif (this.mousemove) {\n\t\t\t\t\tdocument.removeEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\t}\n\t\t\t\tif (this.mouseup) {\n\t\t\t\t\tdocument.removeEventListener(\"mouseup\", this.mouseup, false);\n\t\t\t\t}\n\n\t\t\t\tthis.mousemove = this._mousemove.bind(this);\n\t\t\t\tthis.mouseup = this._mouseup.bind(this);\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Touch: Bind touch events:\n\t\t\t\t\tdocument.addEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.addEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\t\t\t\t// Bind mouse events:\n\t\t\t\tdocument.addEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\tdocument.addEventListener(\"mouseup\", this.mouseup, false);\n\n\t\t\t\tthis._state.inDrag = true;\n\t\t\t\tvar newValue = this._calculateValue();\n\n\t\t\t\tthis._trigger('slideStart', newValue);\n\n\t\t\t\tthis.setValue(newValue, false, true);\n\n\t\t\t\tev.returnValue = false;\n\n\t\t\t\tif (this.options.focus) {\n\t\t\t\t\tthis._triggerFocusOnHandle(this._state.dragged);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t_touchstart: function _touchstart(ev) {\n\t\t\t\tthis._mousedown(ev);\n\t\t\t},\n\t\t\t_triggerFocusOnHandle: function _triggerFocusOnHandle(handleIdx) {\n\t\t\t\tif (handleIdx === 0) {\n\t\t\t\t\tthis.handle1.focus();\n\t\t\t\t}\n\t\t\t\tif (handleIdx === 1) {\n\t\t\t\t\tthis.handle2.focus();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_keydown: function _keydown(handleIdx, ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar dir;\n\t\t\t\tswitch (ev.keyCode) {\n\t\t\t\t\tcase 37: // left\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\t// down\n\t\t\t\t\t\tdir = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 39: // right\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\t// up\n\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dir) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// use natural arrow keys instead of from min to max\n\t\t\t\tif (this.options.natural_arrow_keys) {\n\t\t\t\t\tvar isHorizontal = this.options.orientation === 'horizontal';\n\t\t\t\t\tvar isVertical = this.options.orientation === 'vertical';\n\t\t\t\t\tvar isRTL = this.options.rtl;\n\t\t\t\t\tvar isReversed = this.options.reversed;\n\n\t\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t\tif (isRTL) {\n\t\t\t\t\t\t\tif (!isReversed) {\n\t\t\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isReversed) {\n\t\t\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isVertical) {\n\t\t\t\t\t\tif (!isReversed) {\n\t\t\t\t\t\t\tdir = -dir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar val;\n\t\t\t\tif (this.ticksAreValid && this.options.lock_to_ticks) {\n\t\t\t\t\tvar index = void 0;\n\t\t\t\t\t// Find tick index that handle 1/2 is currently on\n\t\t\t\t\tindex = this.options.ticks.indexOf(this._state.value[handleIdx]);\n\t\t\t\t\tif (index === -1) {\n\t\t\t\t\t\t// Set default to first tick\n\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\twindow.console.warn('(lock_to_ticks) _keydown: index should not be -1');\n\t\t\t\t\t}\n\t\t\t\t\tindex += dir;\n\t\t\t\t\tindex = Math.max(0, Math.min(this.options.ticks.length - 1, index));\n\t\t\t\t\tval = this.options.ticks[index];\n\t\t\t\t} else {\n\t\t\t\t\tval = this._state.value[handleIdx] + dir * this.options.step;\n\t\t\t\t}\n\t\t\t\tvar percentage = this._toPercentage(val);\n\t\t\t\tthis._state.keyCtrl = handleIdx;\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\t\tvar val1 = !this._state.keyCtrl ? val : this._state.value[0];\n\t\t\t\t\tvar val2 = this._state.keyCtrl ? val : this._state.value[1];\n\t\t\t\t\t// Restrict values within limits\n\t\t\t\t\tval = [Math.max(this.options.min, Math.min(this.options.max, val1)), Math.max(this.options.min, Math.min(this.options.max, val2))];\n\t\t\t\t} else {\n\t\t\t\t\tval = Math.max(this.options.min, Math.min(this.options.max, val));\n\t\t\t\t}\n\n\t\t\t\tthis._trigger('slideStart', val);\n\n\t\t\t\tthis.setValue(val, true, true);\n\n\t\t\t\tthis._trigger('slideStop', val);\n\n\t\t\t\tthis._pauseEvent(ev);\n\t\t\t\tdelete this._state.keyCtrl;\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_pauseEvent: function _pauseEvent(ev) {\n\t\t\t\tif (ev.stopPropagation) {\n\t\t\t\t\tev.stopPropagation();\n\t\t\t\t}\n\t\t\t\tif (ev.preventDefault) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t\tev.cancelBubble = true;\n\t\t\t\tev.returnValue = false;\n\t\t\t},\n\t\t\t_mousemove: function _mousemove(ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\n\t\t\t\tvar val = this._calculateValue(true);\n\t\t\t\tthis.setValue(val, true, true);\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_touchmove: function _touchmove(ev) {\n\t\t\t\tif (ev.changedTouches === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent page from scrolling and only drag the slider\n\t\t\t\tif (ev.preventDefault) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_adjustPercentageForRangeSliders: function _adjustPercentageForRangeSliders(percentage) {\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tvar precision = this._getNumDigitsAfterDecimalPlace(percentage);\n\t\t\t\t\tprecision = precision ? precision - 1 : 0;\n\t\t\t\t\tvar percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision);\n\t\t\t\t\tif (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) {\n\t\t\t\t\t\tthis._state.percentage[0] = this._state.percentage[1];\n\t\t\t\t\t\tthis._state.dragged = 1;\n\t\t\t\t\t} else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) {\n\t\t\t\t\t\tthis._state.percentage[1] = this._state.percentage[0];\n\t\t\t\t\t\tthis._state.dragged = 0;\n\t\t\t\t\t} else if (this._state.keyCtrl === 0 && this._toPercentage(this._state.value[1]) < percentage) {\n\t\t\t\t\t\tthis._state.percentage[0] = this._state.percentage[1];\n\t\t\t\t\t\tthis._state.keyCtrl = 1;\n\t\t\t\t\t\tthis.handle2.focus();\n\t\t\t\t\t} else if (this._state.keyCtrl === 1 && this._toPercentage(this._state.value[0]) > percentage) {\n\t\t\t\t\t\tthis._state.percentage[1] = this._state.percentage[0];\n\t\t\t\t\t\tthis._state.keyCtrl = 0;\n\t\t\t\t\t\tthis.handle1.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mouseup: function _mouseup(ev) {\n\t\t\t\tif (!this._state.enabled) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar percentage = this._getPercentage(ev);\n\t\t\t\tthis._adjustPercentageForRangeSliders(percentage);\n\t\t\t\tthis._state.percentage[this._state.dragged] = percentage;\n\n\t\t\t\tif (this.touchCapable) {\n\t\t\t\t\t// Touch: Unbind touch event handlers:\n\t\t\t\t\tdocument.removeEventListener(\"touchmove\", this.mousemove, false);\n\t\t\t\t\tdocument.removeEventListener(\"touchend\", this.mouseup, false);\n\t\t\t\t}\n\t\t\t\t// Unbind mouse event handlers:\n\t\t\t\tdocument.removeEventListener(\"mousemove\", this.mousemove, false);\n\t\t\t\tdocument.removeEventListener(\"mouseup\", this.mouseup, false);\n\n\t\t\t\tthis._state.inDrag = false;\n\t\t\t\tif (this._state.over === false) {\n\t\t\t\t\tthis._hideTooltip();\n\t\t\t\t}\n\t\t\t\tvar val = this._calculateValue(true);\n\n\t\t\t\tthis.setValue(val, false, true);\n\t\t\t\tthis._trigger('slideStop', val);\n\n\t\t\t\t// No longer need 'dragged' after mouse up\n\t\t\t\tthis._state.dragged = null;\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_setValues: function _setValues(index, val) {\n\t\t\t\tvar comp = 0 === index ? 0 : 100;\n\t\t\t\tif (this._state.percentage[index] !== comp) {\n\t\t\t\t\tval.data[index] = this._toValue(this._state.percentage[index]);\n\t\t\t\t\tval.data[index] = this._applyPrecision(val.data[index]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_calculateValue: function _calculateValue(snapToClosestTick) {\n\t\t\t\tvar val = {};\n\t\t\t\tif (this.options.range) {\n\t\t\t\t\tval.data = [this.options.min, this.options.max];\n\t\t\t\t\tthis._setValues(0, val);\n\t\t\t\t\tthis._setValues(1, val);\n\t\t\t\t\tif (snapToClosestTick) {\n\t\t\t\t\t\tval.data[0] = this._snapToClosestTick(val.data[0]);\n\t\t\t\t\t\tval.data[1] = this._snapToClosestTick(val.data[1]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tval.data = this._toValue(this._state.percentage[0]);\n\t\t\t\t\tval.data = parseFloat(val.data);\n\t\t\t\t\tval.data = this._applyPrecision(val.data);\n\t\t\t\t\tif (snapToClosestTick) {\n\t\t\t\t\t\tval.data = this._snapToClosestTick(val.data);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn val.data;\n\t\t\t},\n\t\t\t_snapToClosestTick: function _snapToClosestTick(val) {\n\t\t\t\tvar min = [val, Infinity];\n\t\t\t\tfor (var i = 0; i < this.options.ticks.length; i++) {\n\t\t\t\t\tvar diff = Math.abs(this.options.ticks[i] - val);\n\t\t\t\t\tif (diff <= min[1]) {\n\t\t\t\t\t\tmin = [this.options.ticks[i], diff];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (min[1] <= this.options.ticks_snap_bounds) {\n\t\t\t\t\treturn min[0];\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t},\n\n\t\t\t_applyPrecision: function _applyPrecision(val) {\n\t\t\t\tvar precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step);\n\t\t\t\treturn this._applyToFixedAndParseFloat(val, precision);\n\t\t\t},\n\t\t\t_getNumDigitsAfterDecimalPlace: function _getNumDigitsAfterDecimalPlace(num) {\n\t\t\t\tvar match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\t\t\t\tif (!match) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n\t\t\t},\n\t\t\t_applyToFixedAndParseFloat: function _applyToFixedAndParseFloat(num, toFixedInput) {\n\t\t\t\tvar truncatedNum = num.toFixed(toFixedInput);\n\t\t\t\treturn parseFloat(truncatedNum);\n\t\t\t},\n\t\t\t/*\n \tCredits to Mike Samuel for the following method!\n \tSource: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number\n */\n\t\t\t_getPercentage: function _getPercentage(ev) {\n\t\t\t\tif (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove' || ev.type === 'touchend')) {\n\t\t\t\t\tev = ev.changedTouches[0];\n\t\t\t\t}\n\n\t\t\t\tvar eventPosition = ev[this.mousePos];\n\t\t\t\tvar sliderOffset = this._state.offset[this.stylePos];\n\t\t\t\tvar distanceToSlide = eventPosition - sliderOffset;\n\t\t\t\tif (this.stylePos === 'right') {\n\t\t\t\t\tdistanceToSlide = -distanceToSlide;\n\t\t\t\t}\n\t\t\t\t// Calculate what percent of the length the slider handle has slid\n\t\t\t\tvar percentage = distanceToSlide / this._state.size * 100;\n\t\t\t\tpercentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2];\n\t\t\t\tif (this.options.reversed) {\n\t\t\t\t\tpercentage = 100 - percentage;\n\t\t\t\t}\n\n\t\t\t\t// Make sure the percent is within the bounds of the slider.\n\t\t\t\t// 0% corresponds to the 'min' value of the slide\n\t\t\t\t// 100% corresponds to the 'max' value of the slide\n\t\t\t\treturn Math.max(0, Math.min(100, percentage));\n\t\t\t},\n\t\t\t_validateInputValue: function _validateInputValue(val) {\n\t\t\t\tif (!isNaN(+val)) {\n\t\t\t\t\treturn +val;\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tthis._validateArray(val);\n\t\t\t\t\treturn val;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(ErrorMsgs.formatInvalidInputErrorMsg(val));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_validateArray: function _validateArray(val) {\n\t\t\t\tfor (var i = 0; i < val.length; i++) {\n\t\t\t\t\tvar input = val[i];\n\t\t\t\t\tif (typeof input !== 'number') {\n\t\t\t\t\t\tthrow new Error(ErrorMsgs.formatInvalidInputErrorMsg(input));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setDataVal: function _setDataVal(val) {\n\t\t\t\tthis.element.setAttribute('data-value', val);\n\t\t\t\tthis.element.setAttribute('value', val);\n\t\t\t\tthis.element.value = val;\n\t\t\t},\n\t\t\t_trigger: function _trigger(evt, val) {\n\t\t\t\tval = val || val === 0 ? val : undefined;\n\n\t\t\t\tvar callbackFnArray = this.eventToCallbackMap[evt];\n\t\t\t\tif (callbackFnArray && callbackFnArray.length) {\n\t\t\t\t\tfor (var i = 0; i < callbackFnArray.length; i++) {\n\t\t\t\t\t\tvar callbackFn = callbackFnArray[i];\n\t\t\t\t\t\tcallbackFn(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* If JQuery exists, trigger JQuery events */\n\t\t\t\tif ($) {\n\t\t\t\t\tthis._triggerJQueryEvent(evt, val);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_triggerJQueryEvent: function _triggerJQueryEvent(evt, val) {\n\t\t\t\tvar eventData = {\n\t\t\t\t\ttype: evt,\n\t\t\t\t\tvalue: val\n\t\t\t\t};\n\t\t\t\tthis.$element.trigger(eventData);\n\t\t\t\tthis.$sliderElem.trigger(eventData);\n\t\t\t},\n\t\t\t_unbindJQueryEventHandlers: function _unbindJQueryEventHandlers() {\n\t\t\t\tthis.$element.off();\n\t\t\t\tthis.$sliderElem.off();\n\t\t\t},\n\t\t\t_setText: function _setText(element, text) {\n\t\t\t\tif (typeof element.textContent !== \"undefined\") {\n\t\t\t\t\telement.textContent = text;\n\t\t\t\t} else if (typeof element.innerText !== \"undefined\") {\n\t\t\t\t\telement.innerText = text;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_removeClass: function _removeClass(element, classString) {\n\t\t\t\tvar classes = classString.split(\" \");\n\t\t\t\tvar newClasses = element.className;\n\n\t\t\t\tfor (var i = 0; i < classes.length; i++) {\n\t\t\t\t\tvar classTag = classes[i];\n\t\t\t\t\tvar regex = new RegExp(\"(?:\\\\s|^)\" + classTag + \"(?:\\\\s|$)\");\n\t\t\t\t\tnewClasses = newClasses.replace(regex, \" \");\n\t\t\t\t}\n\n\t\t\t\telement.className = newClasses.trim();\n\t\t\t},\n\t\t\t_addClass: function _addClass(element, classString) {\n\t\t\t\tvar classes = classString.split(\" \");\n\t\t\t\tvar newClasses = element.className;\n\n\t\t\t\tfor (var i = 0; i < classes.length; i++) {\n\t\t\t\t\tvar classTag = classes[i];\n\t\t\t\t\tvar regex = new RegExp(\"(?:\\\\s|^)\" + classTag + \"(?:\\\\s|$)\");\n\t\t\t\t\tvar ifClassExists = regex.test(newClasses);\n\n\t\t\t\t\tif (!ifClassExists) {\n\t\t\t\t\t\tnewClasses += \" \" + classTag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telement.className = newClasses.trim();\n\t\t\t},\n\t\t\t_offsetLeft: function _offsetLeft(obj) {\n\t\t\t\treturn obj.getBoundingClientRect().left;\n\t\t\t},\n\t\t\t_offsetRight: function _offsetRight(obj) {\n\t\t\t\treturn obj.getBoundingClientRect().right;\n\t\t\t},\n\t\t\t_offsetTop: function _offsetTop(obj) {\n\t\t\t\tvar offsetTop = obj.offsetTop;\n\t\t\t\twhile ((obj = obj.offsetParent) && !isNaN(obj.offsetTop)) {\n\t\t\t\t\toffsetTop += obj.offsetTop;\n\t\t\t\t\tif (obj.tagName !== 'BODY') {\n\t\t\t\t\t\toffsetTop -= obj.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn offsetTop;\n\t\t\t},\n\t\t\t_offset: function _offset(obj) {\n\t\t\t\treturn {\n\t\t\t\t\tleft: this._offsetLeft(obj),\n\t\t\t\t\tright: this._offsetRight(obj),\n\t\t\t\t\ttop: this._offsetTop(obj)\n\t\t\t\t};\n\t\t\t},\n\t\t\t_css: function _css(elementRef, styleName, value) {\n\t\t\t\tif ($) {\n\t\t\t\t\t$.style(elementRef, styleName, value);\n\t\t\t\t} else {\n\t\t\t\t\tvar style = styleName.replace(/^-ms-/, \"ms-\").replace(/-([\\da-z])/gi, function (all, letter) {\n\t\t\t\t\t\treturn letter.toUpperCase();\n\t\t\t\t\t});\n\t\t\t\t\telementRef.style[style] = value;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_toValue: function _toValue(percentage) {\n\t\t\t\treturn this.options.scale.toValue.apply(this, [percentage]);\n\t\t\t},\n\t\t\t_toPercentage: function _toPercentage(value) {\n\t\t\t\treturn this.options.scale.toPercentage.apply(this, [value]);\n\t\t\t},\n\t\t\t_setTooltipPosition: function _setTooltipPosition() {\n\t\t\t\tvar tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max];\n\t\t\t\tif (this.options.orientation === 'vertical') {\n\t\t\t\t\tvar tooltipPos;\n\t\t\t\t\tif (this.options.tooltip_position) {\n\t\t\t\t\t\ttooltipPos = this.options.tooltip_position;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (this.options.rtl) {\n\t\t\t\t\t\t\ttooltipPos = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttooltipPos = 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar oppositeSide = tooltipPos === 'left' ? 'right' : 'left';\n\t\t\t\t\ttooltips.forEach(function (tooltip) {\n\t\t\t\t\t\tthis._addClass(tooltip, tooltipPos);\n\t\t\t\t\t\ttooltip.style[oppositeSide] = '100%';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t} else if (this.options.tooltip_position === 'bottom') {\n\t\t\t\t\ttooltips.forEach(function (tooltip) {\n\t\t\t\t\t\tthis._addClass(tooltip, 'bottom');\n\t\t\t\t\t\ttooltip.style.top = 22 + 'px';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t} else {\n\t\t\t\t\ttooltips.forEach(function (tooltip) {\n\t\t\t\t\t\tthis._addClass(tooltip, 'top');\n\t\t\t\t\t\ttooltip.style.top = -this.tooltip.outerHeight - 14 + 'px';\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_getClosestTickIndex: function _getClosestTickIndex(val) {\n\t\t\t\tvar difference = Math.abs(val - this.options.ticks[0]);\n\t\t\t\tvar index = 0;\n\t\t\t\tfor (var i = 0; i < this.options.ticks.length; ++i) {\n\t\t\t\t\tvar d = Math.abs(val - this.options.ticks[i]);\n\t\t\t\t\tif (d < difference) {\n\t\t\t\t\t\tdifference = d;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn index;\n\t\t\t},\n\t\t\t/**\n * Attempts to find the index in `ticks[]` the slider values are set at.\n * The indexes can be -1 to indicate the slider value is not set at a value in `ticks[]`.\n */\n\t\t\t_setTickIndex: function _setTickIndex() {\n\t\t\t\tif (this.ticksAreValid) {\n\t\t\t\t\tthis._state.tickIndex = [this.options.ticks.indexOf(this._state.value[0]), this.options.ticks.indexOf(this._state.value[1])];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/*********************************\n \t\tAttach to global namespace\n \t*********************************/\n\t\tif ($ && $.fn) {\n\t\t\tif (!$.fn.slider) {\n\t\t\t\t$.bridget(NAMESPACE_MAIN, Slider);\n\t\t\t\tautoRegisterNamespace = NAMESPACE_MAIN;\n\t\t\t} else {\n\t\t\t\tif (windowIsDefined) {\n\t\t\t\t\twindow.console.warn(\"bootstrap-slider.js - WARNING: $.fn.slider namespace is already bound. Use the $.fn.bootstrapSlider namespace instead.\");\n\t\t\t\t}\n\t\t\t\tautoRegisterNamespace = NAMESPACE_ALTERNATE;\n\t\t\t}\n\t\t\t$.bridget(NAMESPACE_ALTERNATE, Slider);\n\n\t\t\t// Auto-Register data-provide=\"slider\" Elements\n\t\t\t$(function () {\n\t\t\t\t$(\"input[data-provide=slider]\")[autoRegisterNamespace]();\n\t\t\t});\n\t\t}\n\t})($);\n\n\treturn Slider;\n});\n","exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('h2',[_vm._v(\"Survey - Swarmlab\")]),_c('survey',{attrs:{\"survey\":_vm.survey}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function init(Survey) {\r\n var widget = {\r\n //the widget name. It should be unique and written in lowcase.\r\n name: \"textwithbutton\",\r\n //the widget title. It is how it will appear on the toolbox of the SurveyJS Editor/Builder\r\n title: \"Text with button\",\r\n //the name of the icon on the toolbox. We will leave it empty to use the standard one\r\n iconName: \"\",\r\n //If the widgets depends on third-party library(s) then here you may check if this library(s) is loaded\r\n widgetIsLoaded: function () {\r\n //return typeof $ == \"function\" && !!$.fn.select2; //return true if jQuery and select2 widget are loaded on the page\r\n return true; //we do not require anything so we just return true. \r\n },\r\n //SurveyJS library calls this function for every question to check, if it should use this widget instead of default rendering/behavior\r\n isFit: function (question) {\r\n //we return true if the type of question is textwithbutton\r\n return question.getType() === 'textwithbutton';\r\n //the following code will activate the widget for a text question with inputType equals to date\r\n //return question.getType() === 'text' && question.inputType === \"date\";\r\n },\r\n //Use this function to create a new class or add new properties or remove unneeded properties from your widget\r\n //activatedBy tells how your widget has been activated by: property, type or customType\r\n //property - it means that it will activated if a property of the existing question type is set to particular value, for example inputType = \"date\" \r\n //type - you are changing the behaviour of entire question type. For example render radiogroup question differently, have a fancy radio buttons\r\n //customType - you are creating a new type, like in our example \"textwithbutton\"\r\n // eslint-disable-next-line\r\n activatedByChanged: function (activatedBy) {\r\n //we do not need to check acticatedBy parameter, since we will use our widget for customType only\r\n //We are creating a new class and derived it from text question type. It means that text model (properties and fuctions) will be available to us\r\n Survey.JsonObject.metaData.addClass(\"textwithbutton\", [], null, \"text\");\r\n //signaturepad is derived from \"empty\" class - basic question class\r\n //Survey.JsonObject.metaData.addClass(\"signaturepad\", [], null, \"empty\");\r\n \r\n //Add new property(s)\r\n //For more information go to https://surveyjs.io/Examples/Builder/?id=addproperties#content-docs\r\n Survey.JsonObject.metaData.addProperties(\"textwithbutton\", [\r\n { name: \"buttonText\", default: \"Click Me\" }\r\n ]);\r\n },\r\n //If you want to use the default question rendering then set this property to true. We do not need any default rendering, we will use our our htmlTemplate\r\n isDefaultRender: false,\r\n //You should use it if your set the isDefaultRender to false\r\n htmlTemplate: \"
\",\r\n //The main function, rendering and two-way binding\r\n afterRender: function (question, el) {\r\n //el is our root element in htmlTemplate, is \"div\" in our case\r\n //get the text element\r\n var text = el.getElementsByTagName(\"input\")[0];\r\n //set some properties\r\n text.inputType = question.inputType;\r\n text.placeholder = question.placeHolder;\r\n //get button and set some rpoeprties\r\n var button = el.getElementsByTagName(\"button\")[0];\r\n button.innerText = question.buttonText;\r\n button.onclick = function () {\r\n question.value = \"You have clicked me\";\r\n }\r\n \r\n //set the changed value into question value\r\n text.onchange = function () {\r\n question.value = text.value;\r\n }\r\n var onValueChangedCallback = function () {\r\n text.value = question.value ? question.value : \"\";\r\n }\r\n var onReadOnlyChangedCallback = function() {\r\n if (question.isReadOnly) {\r\n text.setAttribute('disabled', 'disabled');\r\n button.setAttribute('disabled', 'disabled');\r\n } else {\r\n text.removeAttribute(\"disabled\");\r\n button.removeAttribute(\"disabled\");\r\n }\r\n };\r\n //if question becomes readonly/enabled add/remove disabled attribute\r\n question.readOnlyChangedCallback = onReadOnlyChangedCallback;\r\n //if the question value changed in the code, for example you have changed it in JavaScript\r\n question.valueChangedCallback = onValueChangedCallback;\r\n //set initial value\r\n onValueChangedCallback();\r\n //make elements disabled if needed\r\n onReadOnlyChangedCallback();\r\n \r\n },\r\n //Use it to destroy the widget. It is typically needed by jQuery widgets\r\n // eslint-disable-next-line\r\n willUnmount: function (question, el) {\r\n //We do not need to clear anything in our simple example\r\n //Here is the example to destroy the image picker\r\n //var $el = $(el).find(\"select\");\r\n //$el.data('picker').destroy();\r\n }\r\n }\r\n \r\n //Register our widget in singleton custom widget collection\r\n Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, \"customtype\");\r\n \r\n}","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Survey.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Survey.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Survey.vue?vue&type=template&id=f73e6df6&\"\nimport script from \"./Survey.vue?vue&type=script&lang=js&\"\nexport * from \"./Survey.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Survey.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","/**!\n * Sortable 1.13.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.13.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","/*! nouislider - 10.1.0 - 2017-07-28 17:11:18 */\n\n(function (factory) {\n\n if ( typeof define === 'function' && define.amd ) {\n\n // AMD. Register as an anonymous module.\n define([], factory);\n\n } else if ( typeof exports === 'object' ) {\n\n // Node/CommonJS\n module.exports = factory();\n\n } else {\n\n // Browser globals\n window.noUiSlider = factory();\n }\n\n}(function( ){\n\n\t'use strict';\n\n\tvar VERSION = '10.1.0';\n\n\n\tfunction isValidFormatter ( entry ) {\n\t\treturn typeof entry === 'object' && typeof entry.to === 'function' && typeof entry.from === 'function';\n\t}\n\n\tfunction removeElement ( el ) {\n\t\tel.parentElement.removeChild(el);\n\t}\n\n\t// Bindable version\n\tfunction preventDefault ( e ) {\n\t\te.preventDefault();\n\t}\n\n\t// Removes duplicates from an array.\n\tfunction unique ( array ) {\n\t\treturn array.filter(function(a){\n\t\t\treturn !this[a] ? this[a] = true : false;\n\t\t}, {});\n\t}\n\n\t// Round a value to the closest 'to'.\n\tfunction closest ( value, to ) {\n\t\treturn Math.round(value / to) * to;\n\t}\n\n\t// Current position of an element relative to the document.\n\tfunction offset ( elem, orientation ) {\n\n\t\tvar rect = elem.getBoundingClientRect();\n\t\tvar doc = elem.ownerDocument;\n\t\tvar docElem = doc.documentElement;\n\t\tvar pageOffset = getPageOffset(doc);\n\n\t\t// getBoundingClientRect contains left scroll in Chrome on Android.\n\t\t// I haven't found a feature detection that proves this. Worst case\n\t\t// scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\n\t\tif ( /webkit.*Chrome.*Mobile/i.test(navigator.userAgent) ) {\n\t\t\tpageOffset.x = 0;\n\t\t}\n\n\t\treturn orientation ? (rect.top + pageOffset.y - docElem.clientTop) : (rect.left + pageOffset.x - docElem.clientLeft);\n\t}\n\n\t// Checks whether a value is numerical.\n\tfunction isNumeric ( a ) {\n\t\treturn typeof a === 'number' && !isNaN( a ) && isFinite( a );\n\t}\n\n\t// Sets a class and removes it after [duration] ms.\n\tfunction addClassFor ( element, className, duration ) {\n\t\tif (duration > 0) {\n\t\taddClass(element, className);\n\t\t\tsetTimeout(function(){\n\t\t\t\tremoveClass(element, className);\n\t\t\t}, duration);\n\t\t}\n\t}\n\n\t// Limits a value to 0 - 100\n\tfunction limit ( a ) {\n\t\treturn Math.max(Math.min(a, 100), 0);\n\t}\n\n\t// Wraps a variable as an array, if it isn't one yet.\n\t// Note that an input array is returned by reference!\n\tfunction asArray ( a ) {\n\t\treturn Array.isArray(a) ? a : [a];\n\t}\n\n\t// Counts decimals\n\tfunction countDecimals ( numStr ) {\n\t\tnumStr = String(numStr);\n\t\tvar pieces = numStr.split(\".\");\n\t\treturn pieces.length > 1 ? pieces[1].length : 0;\n\t}\n\n\t// http://youmightnotneedjquery.com/#add_class\n\tfunction addClass ( el, className ) {\n\t\tif ( el.classList ) {\n\t\t\tel.classList.add(className);\n\t\t} else {\n\t\t\tel.className += ' ' + className;\n\t\t}\n\t}\n\n\t// http://youmightnotneedjquery.com/#remove_class\n\tfunction removeClass ( el, className ) {\n\t\tif ( el.classList ) {\n\t\t\tel.classList.remove(className);\n\t\t} else {\n\t\t\tel.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n\t\t}\n\t}\n\n\t// https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/\n\tfunction hasClass ( el, className ) {\n\t\treturn el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\n\tfunction getPageOffset ( doc ) {\n\n\t\tvar supportPageOffset = window.pageXOffset !== undefined;\n\t\tvar isCSS1Compat = ((doc.compatMode || \"\") === \"CSS1Compat\");\n\t\tvar x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? doc.documentElement.scrollLeft : doc.body.scrollLeft;\n\t\tvar y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? doc.documentElement.scrollTop : doc.body.scrollTop;\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\t// we provide a function to compute constants instead\n\t// of accessing window.* as soon as the module needs it\n\t// so that we do not compute anything if not needed\n\tfunction getActions ( ) {\n\n\t\t// Determine the events to bind. IE11 implements pointerEvents without\n\t\t// a prefix, which breaks compatibility with the IE10 implementation.\n\t\treturn window.navigator.pointerEnabled ? {\n\t\t\tstart: 'pointerdown',\n\t\t\tmove: 'pointermove',\n\t\t\tend: 'pointerup'\n\t\t} : window.navigator.msPointerEnabled ? {\n\t\t\tstart: 'MSPointerDown',\n\t\t\tmove: 'MSPointerMove',\n\t\t\tend: 'MSPointerUp'\n\t\t} : {\n\t\t\tstart: 'mousedown touchstart',\n\t\t\tmove: 'mousemove touchmove',\n\t\t\tend: 'mouseup touchend'\n\t\t};\n\t}\n\n\t// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n\t// Issue #785\n\tfunction getSupportsPassive ( ) {\n\n\t\tvar supportsPassive = false;\n\n\t\ttry {\n\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\n\t\t\t\tget: function() {\n\t\t\t\t\tsupportsPassive = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\twindow.addEventListener('test', null, opts);\n\n\t\t} catch (e) {}\n\n\t\treturn supportsPassive;\n\t}\n\n\tfunction getSupportsTouchActionNone ( ) {\n\t\treturn window.CSS && CSS.supports && CSS.supports('touch-action', 'none');\n\t}\n\n\n// Value calculation\n\n\t// Determine the size of a sub-range in relation to a full range.\n\tfunction subRangeRatio ( pa, pb ) {\n\t\treturn (100 / (pb - pa));\n\t}\n\n\t// (percentage) How many percent is this value of this range?\n\tfunction fromPercentage ( range, value ) {\n\t\treturn (value * 100) / ( range[1] - range[0] );\n\t}\n\n\t// (percentage) Where is this value on this range?\n\tfunction toPercentage ( range, value ) {\n\t\treturn fromPercentage( range, range[0] < 0 ?\n\t\t\tvalue + Math.abs(range[0]) :\n\t\t\t\tvalue - range[0] );\n\t}\n\n\t// (value) How much is this percentage on this range?\n\tfunction isPercentage ( range, value ) {\n\t\treturn ((value * ( range[1] - range[0] )) / 100) + range[0];\n\t}\n\n\n// Range conversion\n\n\tfunction getJ ( value, arr ) {\n\n\t\tvar j = 1;\n\n\t\twhile ( value >= arr[j] ){\n\t\t\tj += 1;\n\t\t}\n\n\t\treturn j;\n\t}\n\n\t// (percentage) Input a value, find where, on a scale of 0-100, it applies.\n\tfunction toStepping ( xVal, xPct, value ) {\n\n\t\tif ( value >= xVal.slice(-1)[0] ){\n\t\t\treturn 100;\n\t\t}\n\n\t\tvar j = getJ( value, xVal ), va, vb, pa, pb;\n\n\t\tva = xVal[j-1];\n\t\tvb = xVal[j];\n\t\tpa = xPct[j-1];\n\t\tpb = xPct[j];\n\n\t\treturn pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb));\n\t}\n\n\t// (value) Input a percentage, find where it is on the specified range.\n\tfunction fromStepping ( xVal, xPct, value ) {\n\n\t\t// There is no range group that fits 100\n\t\tif ( value >= 100 ){\n\t\t\treturn xVal.slice(-1)[0];\n\t\t}\n\n\t\tvar j = getJ( value, xPct ), va, vb, pa, pb;\n\n\t\tva = xVal[j-1];\n\t\tvb = xVal[j];\n\t\tpa = xPct[j-1];\n\t\tpb = xPct[j];\n\n\t\treturn isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb));\n\t}\n\n\t// (percentage) Get the step that applies at a certain value.\n\tfunction getStep ( xPct, xSteps, snap, value ) {\n\n\t\tif ( value === 100 ) {\n\t\t\treturn value;\n\t\t}\n\n\t\tvar j = getJ( value, xPct ), a, b;\n\n\t\t// If 'snap' is set, steps are used as fixed points on the slider.\n\t\tif ( snap ) {\n\n\t\t\ta = xPct[j-1];\n\t\t\tb = xPct[j];\n\n\t\t\t// Find the closest position, a or b.\n\t\t\tif ((value - a) > ((b-a)/2)){\n\t\t\t\treturn b;\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\n\t\tif ( !xSteps[j-1] ){\n\t\t\treturn value;\n\t\t}\n\n\t\treturn xPct[j-1] + closest(\n\t\t\tvalue - xPct[j-1],\n\t\t\txSteps[j-1]\n\t\t);\n\t}\n\n\n// Entry parsing\n\n\tfunction handleEntryPoint ( index, value, that ) {\n\n\t\tvar percentage;\n\n\t\t// Wrap numerical input in an array.\n\t\tif ( typeof value === \"number\" ) {\n\t\t\tvalue = [value];\n\t\t}\n\n\t\t// Reject any invalid input, by testing whether value is an array.\n\t\tif ( Object.prototype.toString.call( value ) !== '[object Array]' ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' contains invalid value.\");\n\t\t}\n\n\t\t// Covert min/max syntax to 0 and 100.\n\t\tif ( index === 'min' ) {\n\t\t\tpercentage = 0;\n\t\t} else if ( index === 'max' ) {\n\t\t\tpercentage = 100;\n\t\t} else {\n\t\t\tpercentage = parseFloat( index );\n\t\t}\n\n\t\t// Check for correct input.\n\t\tif ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' value isn't numeric.\");\n\t\t}\n\n\t\t// Store values.\n\t\tthat.xPct.push( percentage );\n\t\tthat.xVal.push( value[0] );\n\n\t\t// NaN will evaluate to false too, but to keep\n\t\t// logging clear, set step explicitly. Make sure\n\t\t// not to override the 'step' setting with false.\n\t\tif ( !percentage ) {\n\t\t\tif ( !isNaN( value[1] ) ) {\n\t\t\t\tthat.xSteps[0] = value[1];\n\t\t\t}\n\t\t} else {\n\t\t\tthat.xSteps.push( isNaN(value[1]) ? false : value[1] );\n\t\t}\n\n\t\tthat.xHighestCompleteStep.push(0);\n\t}\n\n\tfunction handleStepPoint ( i, n, that ) {\n\n\t\t// Ignore 'false' stepping.\n\t\tif ( !n ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Factor to range ratio\n\t\tthat.xSteps[i] = fromPercentage([\n\t\t\t that.xVal[i]\n\t\t\t,that.xVal[i+1]\n\t\t], n) / subRangeRatio (\n\t\t\tthat.xPct[i],\n\t\t\tthat.xPct[i+1] );\n\n\t\tvar totalSteps = (that.xVal[i+1] - that.xVal[i]) / that.xNumSteps[i];\n\t\tvar highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\n\t\tvar step = that.xVal[i] + (that.xNumSteps[i] * highestStep);\n\n\t\tthat.xHighestCompleteStep[i] = step;\n\t}\n\n\n// Interface\n\n\tfunction Spectrum ( entry, snap, singleStep ) {\n\n\t\tthis.xPct = [];\n\t\tthis.xVal = [];\n\t\tthis.xSteps = [ singleStep || false ];\n\t\tthis.xNumSteps = [ false ];\n\t\tthis.xHighestCompleteStep = [];\n\n\t\tthis.snap = snap;\n\n\t\tvar index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */ ];\n\n\t\t// Map the object keys to an array.\n\t\tfor ( index in entry ) {\n\t\t\tif ( entry.hasOwnProperty(index) ) {\n\t\t\t\tordered.push([entry[index], index]);\n\t\t\t}\n\t\t}\n\n\t\t// Sort all entries by value (numeric sort).\n\t\tif ( ordered.length && typeof ordered[0][0] === \"object\" ) {\n\t\t\tordered.sort(function(a, b) { return a[0][0] - b[0][0]; });\n\t\t} else {\n\t\t\tordered.sort(function(a, b) { return a[0] - b[0]; });\n\t\t}\n\n\n\t\t// Convert all entries to subranges.\n\t\tfor ( index = 0; index < ordered.length; index++ ) {\n\t\t\thandleEntryPoint(ordered[index][1], ordered[index][0], this);\n\t\t}\n\n\t\t// Store the actual step values.\n\t\t// xSteps is sorted in the same order as xPct and xVal.\n\t\tthis.xNumSteps = this.xSteps.slice(0);\n\n\t\t// Convert all numeric steps to the percentage of the subrange they represent.\n\t\tfor ( index = 0; index < this.xNumSteps.length; index++ ) {\n\t\t\thandleStepPoint(index, this.xNumSteps[index], this);\n\t\t}\n\t}\n\n\tSpectrum.prototype.getMargin = function ( value ) {\n\n\t\tvar step = this.xNumSteps[0];\n\n\t\tif ( step && ((value / step) % 1) !== 0 ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'limit', 'margin' and 'padding' must be divisible by step.\");\n\t\t}\n\n\t\treturn this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;\n\t};\n\n\tSpectrum.prototype.toStepping = function ( value ) {\n\n\t\tvalue = toStepping( this.xVal, this.xPct, value );\n\n\t\treturn value;\n\t};\n\n\tSpectrum.prototype.fromStepping = function ( value ) {\n\n\t\treturn fromStepping( this.xVal, this.xPct, value );\n\t};\n\n\tSpectrum.prototype.getStep = function ( value ) {\n\n\t\tvalue = getStep(this.xPct, this.xSteps, this.snap, value );\n\n\t\treturn value;\n\t};\n\n\tSpectrum.prototype.getNearbySteps = function ( value ) {\n\n\t\tvar j = getJ(value, this.xPct);\n\n\t\treturn {\n\t\t\tstepBefore: { startValue: this.xVal[j-2], step: this.xNumSteps[j-2], highestStep: this.xHighestCompleteStep[j-2] },\n\t\t\tthisStep: { startValue: this.xVal[j-1], step: this.xNumSteps[j-1], highestStep: this.xHighestCompleteStep[j-1] },\n\t\t\tstepAfter: { startValue: this.xVal[j-0], step: this.xNumSteps[j-0], highestStep: this.xHighestCompleteStep[j-0] }\n\t\t};\n\t};\n\n\tSpectrum.prototype.countStepDecimals = function () {\n\t\tvar stepDecimals = this.xNumSteps.map(countDecimals);\n\t\treturn Math.max.apply(null, stepDecimals);\n \t};\n\n\t// Outside testing\n\tSpectrum.prototype.convert = function ( value ) {\n\t\treturn this.getStep(this.toStepping(value));\n\t};\n\n/*\tEvery input option is tested and parsed. This'll prevent\n\tendless validation in internal methods. These tests are\n\tstructured with an item for every option available. An\n\toption can be marked as required by setting the 'r' flag.\n\tThe testing function is provided with three arguments:\n\t\t- The provided value for the option;\n\t\t- A reference to the options object;\n\t\t- The name for the option;\n\n\tThe testing function returns false when an error is detected,\n\tor true when everything is OK. It can also modify the option\n\tobject, to make sure all values can be correctly looped elsewhere. */\n\n\tvar defaultFormatter = { 'to': function( value ){\n\t\treturn value !== undefined && value.toFixed(2);\n\t}, 'from': Number };\n\n\tfunction validateFormat ( entry ) {\n\n\t\t// Any object with a to and from method is supported.\n\t\tif ( isValidFormatter(entry) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'format' requires 'to' and 'from' methods.\");\n\t}\n\n\tfunction testStep ( parsed, entry ) {\n\n\t\tif ( !isNumeric( entry ) ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'step' is not numeric.\");\n\t\t}\n\n\t\t// The step option can still be used to set stepping\n\t\t// for linear sliders. Overwritten if set in 'range'.\n\t\tparsed.singleStep = entry;\n\t}\n\n\tfunction testRange ( parsed, entry ) {\n\n\t\t// Filter incorrect input.\n\t\tif ( typeof entry !== 'object' || Array.isArray(entry) ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' is not an object.\");\n\t\t}\n\n\t\t// Catch missing start or end.\n\t\tif ( entry.min === undefined || entry.max === undefined ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): Missing 'min' or 'max' in 'range'.\");\n\t\t}\n\n\t\t// Catch equal start or end.\n\t\tif ( entry.min === entry.max ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' 'min' and 'max' cannot be equal.\");\n\t\t}\n\n\t\tparsed.spectrum = new Spectrum(entry, parsed.snap, parsed.singleStep);\n\t}\n\n\tfunction testStart ( parsed, entry ) {\n\n\t\tentry = asArray(entry);\n\n\t\t// Validate input. Values aren't tested, as the public .val method\n\t\t// will always provide a valid location.\n\t\tif ( !Array.isArray( entry ) || !entry.length ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'start' option is incorrect.\");\n\t\t}\n\n\t\t// Store the number of handles.\n\t\tparsed.handles = entry.length;\n\n\t\t// When the slider is initialized, the .val method will\n\t\t// be called with the start options.\n\t\tparsed.start = entry;\n\t}\n\n\tfunction testSnap ( parsed, entry ) {\n\n\t\t// Enforce 100% stepping within subranges.\n\t\tparsed.snap = entry;\n\n\t\tif ( typeof entry !== 'boolean' ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'snap' option must be a boolean.\");\n\t\t}\n\t}\n\n\tfunction testAnimate ( parsed, entry ) {\n\n\t\t// Enforce 100% stepping within subranges.\n\t\tparsed.animate = entry;\n\n\t\tif ( typeof entry !== 'boolean' ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'animate' option must be a boolean.\");\n\t\t}\n\t}\n\n\tfunction testAnimationDuration ( parsed, entry ) {\n\n\t\tparsed.animationDuration = entry;\n\n\t\tif ( typeof entry !== 'number' ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'animationDuration' option must be a number.\");\n\t\t}\n\t}\n\n\tfunction testConnect ( parsed, entry ) {\n\n\t\tvar connect = [false];\n\t\tvar i;\n\n\t\t// Map legacy options\n\t\tif ( entry === 'lower' ) {\n\t\t\tentry = [true, false];\n\t\t}\n\n\t\telse if ( entry === 'upper' ) {\n\t\t\tentry = [false, true];\n\t\t}\n\n\t\t// Handle boolean options\n\t\tif ( entry === true || entry === false ) {\n\n\t\t\tfor ( i = 1; i < parsed.handles; i++ ) {\n\t\t\t\tconnect.push(entry);\n\t\t\t}\n\n\t\t\tconnect.push(false);\n\t\t}\n\n\t\t// Reject invalid input\n\t\telse if ( !Array.isArray( entry ) || !entry.length || entry.length !== parsed.handles + 1 ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'connect' option doesn't match handle count.\");\n\t\t}\n\n\t\telse {\n\t\t\tconnect = entry;\n\t\t}\n\n\t\tparsed.connect = connect;\n\t}\n\n\tfunction testOrientation ( parsed, entry ) {\n\n\t\t// Set orientation to an a numerical value for easy\n\t\t// array selection.\n\t\tswitch ( entry ){\n\t\t case 'horizontal':\n\t\t\tparsed.ort = 0;\n\t\t\tbreak;\n\t\t case 'vertical':\n\t\t\tparsed.ort = 1;\n\t\t\tbreak;\n\t\t default:\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'orientation' option is invalid.\");\n\t\t}\n\t}\n\n\tfunction testMargin ( parsed, entry ) {\n\n\t\tif ( !isNumeric(entry) ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option must be numeric.\");\n\t\t}\n\n\t\t// Issue #582\n\t\tif ( entry === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tparsed.margin = parsed.spectrum.getMargin(entry);\n\n\t\tif ( !parsed.margin ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option is only supported on linear sliders.\");\n\t\t}\n\t}\n\n\tfunction testLimit ( parsed, entry ) {\n\n\t\tif ( !isNumeric(entry) ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option must be numeric.\");\n\t\t}\n\n\t\tparsed.limit = parsed.spectrum.getMargin(entry);\n\n\t\tif ( !parsed.limit || parsed.handles < 2 ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option is only supported on linear sliders with 2 or more handles.\");\n\t\t}\n\t}\n\n\tfunction testPadding ( parsed, entry ) {\n\n\t\tif ( !isNumeric(entry) ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be numeric.\");\n\t\t}\n\n\t\tif ( entry === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tparsed.padding = parsed.spectrum.getMargin(entry);\n\n\t\tif ( !parsed.padding ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option is only supported on linear sliders.\");\n\t\t}\n\n\t\tif ( parsed.padding < 0 ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be a positive number.\");\n\t\t}\n\n\t\tif ( parsed.padding >= 50 ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be less than half the range.\");\n\t\t}\n\t}\n\n\tfunction testDirection ( parsed, entry ) {\n\n\t\t// Set direction as a numerical value for easy parsing.\n\t\t// Invert connection for RTL sliders, so that the proper\n\t\t// handles get the connect/background classes.\n\t\tswitch ( entry ) {\n\t\t case 'ltr':\n\t\t\tparsed.dir = 0;\n\t\t\tbreak;\n\t\t case 'rtl':\n\t\t\tparsed.dir = 1;\n\t\t\tbreak;\n\t\t default:\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'direction' option was not recognized.\");\n\t\t}\n\t}\n\n\tfunction testBehaviour ( parsed, entry ) {\n\n\t\t// Make sure the input is a string.\n\t\tif ( typeof entry !== 'string' ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'behaviour' must be a string containing options.\");\n\t\t}\n\n\t\t// Check if the string contains any keywords.\n\t\t// None are required.\n\t\tvar tap = entry.indexOf('tap') >= 0;\n\t\tvar drag = entry.indexOf('drag') >= 0;\n\t\tvar fixed = entry.indexOf('fixed') >= 0;\n\t\tvar snap = entry.indexOf('snap') >= 0;\n\t\tvar hover = entry.indexOf('hover') >= 0;\n\n\t\tif ( fixed ) {\n\n\t\t\tif ( parsed.handles !== 2 ) {\n\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'fixed' behaviour must be used with 2 handles\");\n\t\t\t}\n\n\t\t\t// Use margin to enforce fixed state\n\t\t\ttestMargin(parsed, parsed.start[1] - parsed.start[0]);\n\t\t}\n\n\t\tparsed.events = {\n\t\t\ttap: tap || snap,\n\t\t\tdrag: drag,\n\t\t\tfixed: fixed,\n\t\t\tsnap: snap,\n\t\t\thover: hover\n\t\t};\n\t}\n\n\tfunction testMultitouch ( parsed, entry ) {\n\t\tparsed.multitouch = entry;\n\n\t\tif ( typeof entry !== 'boolean' ){\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'multitouch' option must be a boolean.\");\n\t\t}\n\t}\n\n\tfunction testTooltips ( parsed, entry ) {\n\n\t\tif ( entry === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\telse if ( entry === true ) {\n\n\t\t\tparsed.tooltips = [];\n\n\t\t\tfor ( var i = 0; i < parsed.handles; i++ ) {\n\t\t\t\tparsed.tooltips.push(true);\n\t\t\t}\n\t\t}\n\n\t\telse {\n\n\t\t\tparsed.tooltips = asArray(entry);\n\n\t\t\tif ( parsed.tooltips.length !== parsed.handles ) {\n\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): must pass a formatter for all handles.\");\n\t\t\t}\n\n\t\t\tparsed.tooltips.forEach(function(formatter){\n\t\t\t\tif ( typeof formatter !== 'boolean' && (typeof formatter !== 'object' || typeof formatter.to !== 'function') ) {\n\t\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'tooltips' must be passed a formatter or 'false'.\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction testAriaFormat ( parsed, entry ) {\n\t\tparsed.ariaFormat = entry;\n\t\tvalidateFormat(entry);\n\t}\n\n\tfunction testFormat ( parsed, entry ) {\n\t\tparsed.format = entry;\n\t\tvalidateFormat(entry);\n\t}\n\n\tfunction testCssPrefix ( parsed, entry ) {\n\n\t\tif ( entry !== undefined && typeof entry !== 'string' && entry !== false ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'cssPrefix' must be a string or `false`.\");\n\t\t}\n\n\t\tparsed.cssPrefix = entry;\n\t}\n\n\tfunction testCssClasses ( parsed, entry ) {\n\n\t\tif ( entry !== undefined && typeof entry !== 'object' ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'cssClasses' must be an object.\");\n\t\t}\n\n\t\tif ( typeof parsed.cssPrefix === 'string' ) {\n\t\t\tparsed.cssClasses = {};\n\n\t\t\tfor ( var key in entry ) {\n\t\t\t\tif ( !entry.hasOwnProperty(key) ) { continue; }\n\n\t\t\t\tparsed.cssClasses[key] = parsed.cssPrefix + entry[key];\n\t\t\t}\n\t\t} else {\n\t\t\tparsed.cssClasses = entry;\n\t\t}\n\t}\n\n\tfunction testUseRaf ( parsed, entry ) {\n\t\tif ( entry === true || entry === false ) {\n\t\t\tparsed.useRequestAnimationFrame = entry;\n\t\t} else {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'useRequestAnimationFrame' option should be true (default) or false.\");\n\t\t}\n\t}\n\n\t// Test all developer settings and parse to assumption-safe values.\n\tfunction testOptions ( options ) {\n\n\t\t// To prove a fix for #537, freeze options here.\n\t\t// If the object is modified, an error will be thrown.\n\t\t// Object.freeze(options);\n\n\t\tvar parsed = {\n\t\t\tmargin: 0,\n\t\t\tlimit: 0,\n\t\t\tpadding: 0,\n\t\t\tanimate: true,\n\t\t\tanimationDuration: 300,\n\t\t\tariaFormat: defaultFormatter,\n\t\t\tformat: defaultFormatter\n\t\t};\n\n\t\t// Tests are executed in the order they are presented here.\n\t\tvar tests = {\n\t\t\t'step': { r: false, t: testStep },\n\t\t\t'start': { r: true, t: testStart },\n\t\t\t'connect': { r: true, t: testConnect },\n\t\t\t'direction': { r: true, t: testDirection },\n\t\t\t'snap': { r: false, t: testSnap },\n\t\t\t'animate': { r: false, t: testAnimate },\n\t\t\t'animationDuration': { r: false, t: testAnimationDuration },\n\t\t\t'range': { r: true, t: testRange },\n\t\t\t'orientation': { r: false, t: testOrientation },\n\t\t\t'margin': { r: false, t: testMargin },\n\t\t\t'limit': { r: false, t: testLimit },\n\t\t\t'padding': { r: false, t: testPadding },\n\t\t\t'behaviour': { r: true, t: testBehaviour },\n\t\t\t'multitouch': { r: true, t: testMultitouch },\n\t\t\t'ariaFormat': { r: false, t: testAriaFormat },\n\t\t\t'format': { r: false, t: testFormat },\n\t\t\t'tooltips': { r: false, t: testTooltips },\n\t\t\t'cssPrefix': { r: false, t: testCssPrefix },\n\t\t\t'cssClasses': { r: false, t: testCssClasses },\n\t\t\t'useRequestAnimationFrame': { r: false, t: testUseRaf }\n\t\t};\n\n\t\tvar defaults = {\n\t\t\t'connect': false,\n\t\t\t'direction': 'ltr',\n\t\t\t'behaviour': 'tap',\n\t\t\t'multitouch': false,\n\t\t\t'orientation': 'horizontal',\n\t\t\t'cssPrefix' : 'noUi-',\n\t\t\t'cssClasses': {\n\t\t\t\ttarget: 'target',\n\t\t\t\tbase: 'base',\n\t\t\t\torigin: 'origin',\n\t\t\t\thandle: 'handle',\n\t\t\t\thandleLower: 'handle-lower',\n\t\t\t\thandleUpper: 'handle-upper',\n\t\t\t\thorizontal: 'horizontal',\n\t\t\t\tvertical: 'vertical',\n\t\t\t\tbackground: 'background',\n\t\t\t\tconnect: 'connect',\n\t\t\t\tltr: 'ltr',\n\t\t\t\trtl: 'rtl',\n\t\t\t\tdraggable: 'draggable',\n\t\t\t\tdrag: 'state-drag',\n\t\t\t\ttap: 'state-tap',\n\t\t\t\tactive: 'active',\n\t\t\t\ttooltip: 'tooltip',\n\t\t\t\tpips: 'pips',\n\t\t\t\tpipsHorizontal: 'pips-horizontal',\n\t\t\t\tpipsVertical: 'pips-vertical',\n\t\t\t\tmarker: 'marker',\n\t\t\t\tmarkerHorizontal: 'marker-horizontal',\n\t\t\t\tmarkerVertical: 'marker-vertical',\n\t\t\t\tmarkerNormal: 'marker-normal',\n\t\t\t\tmarkerLarge: 'marker-large',\n\t\t\t\tmarkerSub: 'marker-sub',\n\t\t\t\tvalue: 'value',\n\t\t\t\tvalueHorizontal: 'value-horizontal',\n\t\t\t\tvalueVertical: 'value-vertical',\n\t\t\t\tvalueNormal: 'value-normal',\n\t\t\t\tvalueLarge: 'value-large',\n\t\t\t\tvalueSub: 'value-sub'\n\t\t\t},\n\t\t\t'useRequestAnimationFrame': true\n\t\t};\n\n\t\t// AriaFormat defaults to regular format, if any.\n\t\tif ( options.format && !options.ariaFormat ) {\n\t\t\toptions.ariaFormat = options.format;\n\t\t}\n\n\t\t// Run all options through a testing mechanism to ensure correct\n\t\t// input. It should be noted that options might get modified to\n\t\t// be handled properly. E.g. wrapping integers in arrays.\n\t\tObject.keys(tests).forEach(function( name ){\n\n\t\t\t// If the option isn't set, but it is required, throw an error.\n\t\t\tif ( options[name] === undefined && defaults[name] === undefined ) {\n\n\t\t\t\tif ( tests[name].r ) {\n\t\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): '\" + name + \"' is required.\");\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\ttests[name].t( parsed, options[name] === undefined ? defaults[name] : options[name] );\n\t\t});\n\n\t\t// Forward pips options\n\t\tparsed.pips = options.pips;\n\n\t\tvar styles = [['left', 'top'], ['right', 'bottom']];\n\n\t\t// Pre-define the styles.\n\t\tparsed.style = styles[parsed.dir][parsed.ort];\n\t\tparsed.styleOposite = styles[parsed.dir?0:1][parsed.ort];\n\n\t\treturn parsed;\n\t}\n\n\nfunction closure ( target, options, originalOptions ){\n\n\tvar actions = getActions();\n\tvar supportsTouchActionNone = getSupportsTouchActionNone();\n\tvar supportsPassive = supportsTouchActionNone && getSupportsPassive();\n\n\t// All variables local to 'closure' are prefixed with 'scope_'\n\tvar scope_Target = target;\n\tvar scope_Locations = [];\n\tvar scope_Base;\n\tvar scope_Handles;\n\tvar scope_HandleNumbers = [];\n\tvar scope_ActiveHandlesCount = 0;\n\tvar scope_Connects;\n\tvar scope_Spectrum = options.spectrum;\n\tvar scope_Values = [];\n\tvar scope_Events = {};\n\tvar scope_Self;\n\tvar scope_Pips;\n\tvar scope_Document = target.ownerDocument;\n\tvar scope_DocumentElement = scope_Document.documentElement;\n\tvar scope_Body = scope_Document.body;\n\n\n\t// Creates a node, adds it to target, returns the new node.\n\tfunction addNodeTo ( target, className ) {\n\n\t\tvar div = scope_Document.createElement('div');\n\n\t\tif ( className ) {\n\t\t\taddClass(div, className);\n\t\t}\n\n\t\ttarget.appendChild(div);\n\n\t\treturn div;\n\t}\n\n\t// Append a origin to the base\n\tfunction addOrigin ( base, handleNumber ) {\n\n\t\tvar origin = addNodeTo(base, options.cssClasses.origin);\n\t\tvar handle = addNodeTo(origin, options.cssClasses.handle);\n\n\t\thandle.setAttribute('data-handle', handleNumber);\n\n\t\t// https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n\t\t// 0 = focusable and reachable\n\t\thandle.setAttribute('tabindex', '0');\n\t\thandle.setAttribute('role', 'slider');\n\t\thandle.setAttribute('aria-orientation', options.ort ? 'vertical' : 'horizontal');\n\n\t\tif ( handleNumber === 0 ) {\n\t\t\taddClass(handle, options.cssClasses.handleLower);\n\t\t}\n\n\t\telse if ( handleNumber === options.handles - 1 ) {\n\t\t\taddClass(handle, options.cssClasses.handleUpper);\n\t\t}\n\n\t\treturn origin;\n\t}\n\n\t// Insert nodes for connect elements\n\tfunction addConnect ( base, add ) {\n\n\t\tif ( !add ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn addNodeTo(base, options.cssClasses.connect);\n\t}\n\n\t// Add handles to the slider base.\n\tfunction addElements ( connectOptions, base ) {\n\n\t\tscope_Handles = [];\n\t\tscope_Connects = [];\n\n\t\tscope_Connects.push(addConnect(base, connectOptions[0]));\n\n\t\t// [::::O====O====O====]\n\t\t// connectOptions = [0, 1, 1, 1]\n\n\t\tfor ( var i = 0; i < options.handles; i++ ) {\n\t\t\t// Keep a list of all added handles.\n\t\t\tscope_Handles.push(addOrigin(base, i));\n\t\t\tscope_HandleNumbers[i] = i;\n\t\t\tscope_Connects.push(addConnect(base, connectOptions[i + 1]));\n\t\t}\n\t}\n\n\t// Initialize a single slider.\n\tfunction addSlider ( target ) {\n\n\t\t// Apply classes and data to the target.\n\t\taddClass(target, options.cssClasses.target);\n\n\t\tif ( options.dir === 0 ) {\n\t\t\taddClass(target, options.cssClasses.ltr);\n\t\t} else {\n\t\t\taddClass(target, options.cssClasses.rtl);\n\t\t}\n\n\t\tif ( options.ort === 0 ) {\n\t\t\taddClass(target, options.cssClasses.horizontal);\n\t\t} else {\n\t\t\taddClass(target, options.cssClasses.vertical);\n\t\t}\n\n\t\tscope_Base = addNodeTo(target, options.cssClasses.base);\n\t}\n\n\n\tfunction addTooltip ( handle, handleNumber ) {\n\n\t\tif ( !options.tooltips[handleNumber] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn addNodeTo(handle.firstChild, options.cssClasses.tooltip);\n\t}\n\n\t// The tooltips option is a shorthand for using the 'update' event.\n\tfunction tooltips ( ) {\n\n\t\t// Tooltips are added with options.tooltips in original order.\n\t\tvar tips = scope_Handles.map(addTooltip);\n\n\t\tbindEvent('update', function(values, handleNumber, unencoded) {\n\n\t\t\tif ( !tips[handleNumber] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar formattedValue = values[handleNumber];\n\n\t\t\tif ( options.tooltips[handleNumber] !== true ) {\n\t\t\t\tformattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\n\t\t\t}\n\n\t\t\ttips[handleNumber].innerHTML = formattedValue;\n\t\t});\n\t}\n\n\n\tfunction aria ( ) {\n\n\t\tbindEvent('update', function ( values, handleNumber, unencoded, tap, positions ) {\n\n\t\t\t// Update Aria Values for all handles, as a change in one changes min and max values for the next.\n\t\t\tscope_HandleNumbers.forEach(function( handleNumber ){\n\n\t\t\t\tvar handle = scope_Handles[handleNumber];\n\n\t\t\t\tvar min = checkHandlePosition(scope_Locations, handleNumber, 0, true, true, true);\n\t\t\t\tvar max = checkHandlePosition(scope_Locations, handleNumber, 100, true, true, true);\n\n\t\t\t\tvar now = positions[handleNumber];\n\t\t\t\tvar text = options.ariaFormat.to(unencoded[handleNumber]);\n\n\t\t\t\thandle.children[0].setAttribute('aria-valuemin', min.toFixed(1));\n\t\t\t\thandle.children[0].setAttribute('aria-valuemax', max.toFixed(1));\n\t\t\t\thandle.children[0].setAttribute('aria-valuenow', now.toFixed(1));\n\t\t\t\thandle.children[0].setAttribute('aria-valuetext', text);\n\t\t\t});\n\t\t});\n\t}\n\n\n\tfunction getGroup ( mode, values, stepped ) {\n\n\t\t// Use the range.\n\t\tif ( mode === 'range' || mode === 'steps' ) {\n\t\t\treturn scope_Spectrum.xVal;\n\t\t}\n\n\t\tif ( mode === 'count' ) {\n\n\t\t\tif ( !values ) {\n\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'values' required for mode 'count'.\");\n\t\t\t}\n\n\t\t\t// Divide 0 - 100 in 'count' parts.\n\t\t\tvar spread = ( 100 / (values - 1) );\n\t\t\tvar v;\n\t\t\tvar i = 0;\n\n\t\t\tvalues = [];\n\n\t\t\t// List these parts and have them handled as 'positions'.\n\t\t\twhile ( (v = i++ * spread) <= 100 ) {\n\t\t\t\tvalues.push(v);\n\t\t\t}\n\n\t\t\tmode = 'positions';\n\t\t}\n\n\t\tif ( mode === 'positions' ) {\n\n\t\t\t// Map all percentages to on-range values.\n\t\t\treturn values.map(function( value ){\n\t\t\t\treturn scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value );\n\t\t\t});\n\t\t}\n\n\t\tif ( mode === 'values' ) {\n\n\t\t\t// If the value must be stepped, it needs to be converted to a percentage first.\n\t\t\tif ( stepped ) {\n\n\t\t\t\treturn values.map(function( value ){\n\n\t\t\t\t\t// Convert to percentage, apply step, return to value.\n\t\t\t\t\treturn scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) );\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\t// Otherwise, we can simply use the values.\n\t\t\treturn values;\n\t\t}\n\t}\n\n\tfunction generateSpread ( density, mode, group ) {\n\n\t\tfunction safeIncrement(value, increment) {\n\t\t\t// Avoid floating point variance by dropping the smallest decimal places.\n\t\t\treturn (value + increment).toFixed(7) / 1;\n\t\t}\n\n\t\tvar indexes = {};\n\t\tvar firstInRange = scope_Spectrum.xVal[0];\n\t\tvar lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1];\n\t\tvar ignoreFirst = false;\n\t\tvar ignoreLast = false;\n\t\tvar prevPct = 0;\n\n\t\t// Create a copy of the group, sort it and filter away all duplicates.\n\t\tgroup = unique(group.slice().sort(function(a, b){ return a - b; }));\n\n\t\t// Make sure the range starts with the first element.\n\t\tif ( group[0] !== firstInRange ) {\n\t\t\tgroup.unshift(firstInRange);\n\t\t\tignoreFirst = true;\n\t\t}\n\n\t\t// Likewise for the last one.\n\t\tif ( group[group.length - 1] !== lastInRange ) {\n\t\t\tgroup.push(lastInRange);\n\t\t\tignoreLast = true;\n\t\t}\n\n\t\tgroup.forEach(function ( current, index ) {\n\n\t\t\t// Get the current step and the lower + upper positions.\n\t\t\tvar step;\n\t\t\tvar i;\n\t\t\tvar q;\n\t\t\tvar low = current;\n\t\t\tvar high = group[index+1];\n\t\t\tvar newPct;\n\t\t\tvar pctDifference;\n\t\t\tvar pctPos;\n\t\t\tvar type;\n\t\t\tvar steps;\n\t\t\tvar realSteps;\n\t\t\tvar stepsize;\n\n\t\t\t// When using 'steps' mode, use the provided steps.\n\t\t\t// Otherwise, we'll step on to the next subrange.\n\t\t\tif ( mode === 'steps' ) {\n\t\t\t\tstep = scope_Spectrum.xNumSteps[ index ];\n\t\t\t}\n\n\t\t\t// Default to a 'full' step.\n\t\t\tif ( !step ) {\n\t\t\t\tstep = high-low;\n\t\t\t}\n\n\t\t\t// Low can be 0, so test for false. If high is undefined,\n\t\t\t// we are at the last subrange. Index 0 is already handled.\n\t\t\tif ( low === false || high === undefined ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure step isn't 0, which would cause an infinite loop (#654)\n\t\t\tstep = Math.max(step, 0.0000001);\n\n\t\t\t// Find all steps in the subrange.\n\t\t\tfor ( i = low; i <= high; i = safeIncrement(i, step) ) {\n\n\t\t\t\t// Get the percentage value for the current step,\n\t\t\t\t// calculate the size for the subrange.\n\t\t\t\tnewPct = scope_Spectrum.toStepping( i );\n\t\t\t\tpctDifference = newPct - prevPct;\n\n\t\t\t\tsteps = pctDifference / density;\n\t\t\t\trealSteps = Math.round(steps);\n\n\t\t\t\t// This ratio represents the ammount of percentage-space a point indicates.\n\t\t\t\t// For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided.\n\t\t\t\t// Round the percentage offset to an even number, then divide by two\n\t\t\t\t// to spread the offset on both sides of the range.\n\t\t\t\tstepsize = pctDifference/realSteps;\n\n\t\t\t\t// Divide all points evenly, adding the correct number to this subrange.\n\t\t\t\t// Run up to <= so that 100% gets a point, event if ignoreLast is set.\n\t\t\t\tfor ( q = 1; q <= realSteps; q += 1 ) {\n\n\t\t\t\t\t// The ratio between the rounded value and the actual size might be ~1% off.\n\t\t\t\t\t// Correct the percentage offset by the number of points\n\t\t\t\t\t// per subrange. density = 1 will result in 100 points on the\n\t\t\t\t\t// full range, 2 for 50, 4 for 25, etc.\n\t\t\t\t\tpctPos = prevPct + ( q * stepsize );\n\t\t\t\t\tindexes[pctPos.toFixed(5)] = ['x', 0];\n\t\t\t\t}\n\n\t\t\t\t// Determine the point type.\n\t\t\t\ttype = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 );\n\n\t\t\t\t// Enforce the 'ignoreFirst' option by overwriting the type for 0.\n\t\t\t\tif ( !index && ignoreFirst ) {\n\t\t\t\t\ttype = 0;\n\t\t\t\t}\n\n\t\t\t\tif ( !(i === high && ignoreLast)) {\n\t\t\t\t\t// Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.\n\t\t\t\t\tindexes[newPct.toFixed(5)] = [i, type];\n\t\t\t\t}\n\n\t\t\t\t// Update the percentage count.\n\t\t\t\tprevPct = newPct;\n\t\t\t}\n\t\t});\n\n\t\treturn indexes;\n\t}\n\n\tfunction addMarking ( spread, filterFunc, formatter ) {\n\n\t\tvar element = scope_Document.createElement('div');\n\n\t\tvar valueSizeClasses = [\n\t\t\toptions.cssClasses.valueNormal,\n\t\t\toptions.cssClasses.valueLarge,\n\t\t\toptions.cssClasses.valueSub\n\t\t];\n\t\tvar markerSizeClasses = [\n\t\t\toptions.cssClasses.markerNormal,\n\t\t\toptions.cssClasses.markerLarge,\n\t\t\toptions.cssClasses.markerSub\n\t\t];\n\t\tvar valueOrientationClasses = [\n\t\t\toptions.cssClasses.valueHorizontal,\n\t\t\toptions.cssClasses.valueVertical\n\t\t];\n\t\tvar markerOrientationClasses = [\n\t\t\toptions.cssClasses.markerHorizontal,\n\t\t\toptions.cssClasses.markerVertical\n\t\t];\n\n\t\taddClass(element, options.cssClasses.pips);\n\t\taddClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);\n\n\t\tfunction getClasses( type, source ){\n\t\t\tvar a = source === options.cssClasses.value;\n\t\t\tvar orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;\n\t\t\tvar sizeClasses = a ? valueSizeClasses : markerSizeClasses;\n\n\t\t\treturn source + ' ' + orientationClasses[options.ort] + ' ' + sizeClasses[type];\n\t\t}\n\n\t\tfunction addSpread ( offset, values ){\n\n\t\t\t// Apply the filter function, if it is set.\n\t\t\tvalues[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1];\n\n\t\t\t// Add a marker for every point\n\t\t\tvar node = addNodeTo(element, false);\n\t\t\t\tnode.className = getClasses(values[1], options.cssClasses.marker);\n\t\t\t\tnode.style[options.style] = offset + '%';\n\n\t\t\t// Values are only appended for points marked '1' or '2'.\n\t\t\tif ( values[1] ) {\n\t\t\t\tnode = addNodeTo(element, false);\n\t\t\t\tnode.className = getClasses(values[1], options.cssClasses.value);\n\t\t\t\tnode.style[options.style] = offset + '%';\n\t\t\t\tnode.innerText = formatter.to(values[0]);\n\t\t\t}\n\t\t}\n\n\t\t// Append all points.\n\t\tObject.keys(spread).forEach(function(a){\n\t\t\taddSpread(a, spread[a]);\n\t\t});\n\n\t\treturn element;\n\t}\n\n\tfunction removePips ( ) {\n\t\tif ( scope_Pips ) {\n\t\t\tremoveElement(scope_Pips);\n\t\t\tscope_Pips = null;\n\t\t}\n\t}\n\n\tfunction pips ( grid ) {\n\n\t\t// Fix #669\n\t\tremovePips();\n\n\t\tvar mode = grid.mode;\n\t\tvar density = grid.density || 1;\n\t\tvar filter = grid.filter || false;\n\t\tvar values = grid.values || false;\n\t\tvar stepped = grid.stepped || false;\n\t\tvar group = getGroup( mode, values, stepped );\n\t\tvar spread = generateSpread( density, mode, group );\n\t\tvar format = grid.format || {\n\t\t\tto: Math.round\n\t\t};\n\n\t\tscope_Pips = scope_Target.appendChild(addMarking(\n\t\t\tspread,\n\t\t\tfilter,\n\t\t\tformat\n\t\t));\n\n\t\treturn scope_Pips;\n\t}\n\n\n\t// Shorthand for base dimensions.\n\tfunction baseSize ( ) {\n\t\tvar rect = scope_Base.getBoundingClientRect(), alt = 'offset' + ['Width', 'Height'][options.ort];\n\t\treturn options.ort === 0 ? (rect.width||scope_Base[alt]) : (rect.height||scope_Base[alt]);\n\t}\n\n\t// Handler for attaching events trough a proxy.\n\tfunction attachEvent ( events, element, callback, data ) {\n\n\t\t// This function can be used to 'filter' events to the slider.\n\t\t// element is a node, not a nodeList\n\n\t\tvar method = function ( e ){\n\n\t\t\tif ( scope_Target.hasAttribute('disabled') ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Stop if an active 'tap' transition is taking place.\n\t\t\tif ( hasClass(scope_Target, options.cssClasses.tap) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\te = fixEvent(e, data.pageOffset, data.target || element);\n\n\t\t\t// Handle reject of multitouch\n\t\t\tif ( !e ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Ignore right or middle clicks on start #454\n\t\t\tif ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Ignore right or middle clicks on start #454\n\t\t\tif ( data.hover && e.buttons ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\n\t\t\t// iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\n\t\t\t// touch-action: manipulation, but that allows panning, which breaks\n\t\t\t// sliders after zooming/on non-responsive pages.\n\t\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=133112\n\t\t\tif ( !supportsPassive ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\te.calcPoint = e.points[ options.ort ];\n\n\t\t\t// Call the event handler with the event [ and additional data ].\n\t\t\tcallback ( e, data );\n\t\t};\n\n\t\tvar methods = [];\n\n\t\t// Bind a closure on the target for every event type.\n\t\tevents.split(' ').forEach(function( eventName ){\n\t\t\telement.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\n\t\t\tmethods.push([eventName, method]);\n\t\t});\n\n\t\treturn methods;\n\t}\n\n\t// Provide a clean event with standardized offset values.\n\tfunction fixEvent ( e, pageOffset, target ) {\n\n\t\t// Filter the event to register the type, which can be\n\t\t// touch, mouse or pointer. Offset changes need to be\n\t\t// made on an event specific basis.\n\t\tvar touch = e.type.indexOf('touch') === 0;\n\t\tvar mouse = e.type.indexOf('mouse') === 0;\n\t\tvar pointer = e.type.indexOf('pointer') === 0;\n\n\t\tvar x;\n\t\tvar y;\n\n\t\t// IE10 implemented pointer events with a prefix;\n\t\tif ( e.type.indexOf('MSPointer') === 0 ) {\n\t\t\tpointer = true;\n\t\t}\n\n\n\t\t// In the event that multitouch is activated, the only thing one handle should be concerned\n\t\t// about is the touches that originated on top of it.\n\t\tif ( touch && options.multitouch ) {\n\t\t\t// Returns true if a touch originated on the target.\n\t\t\tvar isTouchOnTarget = function (touch) {\n\t\t\t\treturn touch.target === target || target.contains(touch.target);\n\t\t\t};\n\t\t\t// In the case of touchstart events, we need to make sure there is still no more than one\n\t\t\t// touch on the target so we look amongst all touches.\n\t\t\tif (e.type === 'touchstart') {\n\t\t\t\tvar targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\n\t\t\t\t// Do not support more than one touch per handle.\n\t\t\t\tif ( targetTouches.length > 1 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tx = targetTouches[0].pageX;\n\t\t\t\ty = targetTouches[0].pageY;\n\t\t\t} else {\n\t\t\t// In the other cases, find on changedTouches is enough.\n\t\t\t\tvar targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\n\t\t\t\t// Cancel if the target touch has not moved.\n\t\t\t\tif ( !targetTouch ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tx = targetTouch.pageX;\n\t\t\t\ty = targetTouch.pageY;\n\t\t\t}\n\t\t} else if ( touch ) {\n\t\t\t// Fix bug when user touches with two or more fingers on mobile devices.\n\t\t\t// It's useful when you have two or more sliders on one page,\n\t\t\t// that can be touched simultaneously.\n\t\t\t// #649, #663, #668\n\t\t\tif ( e.touches.length > 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// noUiSlider supports one movement at a time,\n\t\t\t// so we can select the first 'changedTouch'.\n\t\t\tx = e.changedTouches[0].pageX;\n\t\t\ty = e.changedTouches[0].pageY;\n\t\t}\n\n\t\tpageOffset = pageOffset || getPageOffset(scope_Document);\n\n\t\tif ( mouse || pointer ) {\n\t\t\tx = e.clientX + pageOffset.x;\n\t\t\ty = e.clientY + pageOffset.y;\n\t\t}\n\n\t\te.pageOffset = pageOffset;\n\t\te.points = [x, y];\n\t\te.cursor = mouse || pointer; // Fix #435\n\n\t\treturn e;\n\t}\n\n\t// Translate a coordinate in the document to a percentage on the slider\n\tfunction calcPointToPercentage ( calcPoint ) {\n\t\tvar location = calcPoint - offset(scope_Base, options.ort);\n\t\tvar proposal = ( location * 100 ) / baseSize();\n\t\treturn options.dir ? 100 - proposal : proposal;\n\t}\n\n\t// Find handle closest to a certain percentage on the slider\n\tfunction getClosestHandle ( proposal ) {\n\n\t\tvar closest = 100;\n\t\tvar handleNumber = false;\n\n\t\tscope_Handles.forEach(function(handle, index){\n\n\t\t\t// Disabled handles are ignored\n\t\t\tif ( handle.hasAttribute('disabled') ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar pos = Math.abs(scope_Locations[index] - proposal);\n\n\t\t\tif ( pos < closest ) {\n\t\t\t\thandleNumber = index;\n\t\t\t\tclosest = pos;\n\t\t\t}\n\t\t});\n\n\t\treturn handleNumber;\n\t}\n\n\t// Moves handle(s) by a percentage\n\t// (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])\n\tfunction moveHandles ( upward, proposal, locations, handleNumbers ) {\n\n\t\tvar proposals = locations.slice();\n\n\t\tvar b = [!upward, upward];\n\t\tvar f = [upward, !upward];\n\n\t\t// Copy handleNumbers so we don't change the dataset\n\t\thandleNumbers = handleNumbers.slice();\n\n\t\t// Check to see which handle is 'leading'.\n\t\t// If that one can't move the second can't either.\n\t\tif ( upward ) {\n\t\t\thandleNumbers.reverse();\n\t\t}\n\n\t\t// Step 1: get the maximum percentage that any of the handles can move\n\t\tif ( handleNumbers.length > 1 ) {\n\n\t\t\thandleNumbers.forEach(function(handleNumber, o) {\n\n\t\t\t\tvar to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o], false);\n\n\t\t\t\t// Stop if one of the handles can't move.\n\t\t\t\tif ( to === false ) {\n\t\t\t\t\tproposal = 0;\n\t\t\t\t} else {\n\t\t\t\t\tproposal = to - proposals[handleNumber];\n\t\t\t\t\tproposals[handleNumber] = to;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// If using one handle, check backward AND forward\n\t\telse {\n\t\t\tb = f = [true];\n\t\t}\n\n\t\tvar state = false;\n\n\t\t// Step 2: Try to set the handles with the found percentage\n\t\thandleNumbers.forEach(function(handleNumber, o) {\n\t\t\tstate = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;\n\t\t});\n\n\t\t// Step 3: If a handle moved, fire events\n\t\tif ( state ) {\n\t\t\thandleNumbers.forEach(function(handleNumber){\n\t\t\t\tfireEvent('update', handleNumber);\n\t\t\t\tfireEvent('slide', handleNumber);\n\t\t\t});\n\t\t}\n\t}\n\n\t// External event handling\n\tfunction fireEvent ( eventName, handleNumber, tap ) {\n\n\t\tObject.keys(scope_Events).forEach(function( targetEvent ) {\n\n\t\t\tvar eventType = targetEvent.split('.')[0];\n\n\t\t\tif ( eventName === eventType ) {\n\t\t\t\tscope_Events[targetEvent].forEach(function( callback ) {\n\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\t// Use the slider public API as the scope ('this')\n\t\t\t\t\t\tscope_Self,\n\t\t\t\t\t\t// Return values as array, so arg_1[arg_2] is always valid.\n\t\t\t\t\t\tscope_Values.map(options.format.to),\n\t\t\t\t\t\t// Handle index, 0 or 1\n\t\t\t\t\t\thandleNumber,\n\t\t\t\t\t\t// Unformatted slider values\n\t\t\t\t\t\tscope_Values.slice(),\n\t\t\t\t\t\t// Event is fired by tap, true or false\n\t\t\t\t\t\ttap || false,\n\t\t\t\t\t\t// Left offset of the handle, in relation to the slider\n\t\t\t\t\t\tscope_Locations.slice()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\n\t// Fire 'end' when a mouse or pen leaves the document.\n\tfunction documentLeave ( event, data ) {\n\t\tif ( event.type === \"mouseout\" && event.target.nodeName === \"HTML\" && event.relatedTarget === null ){\n\t\t\teventEnd (event, data);\n\t\t}\n\t}\n\n\t// Handle movement on document for handle and range drag.\n\tfunction eventMove ( event, data ) {\n\n\t\t// Fix #498\n\t\t// Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).\n\t\t// https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero\n\t\t// IE9 has .buttons and .which zero on mousemove.\n\t\t// Firefox breaks the spec MDN defines.\n\t\tif ( navigator.appVersion.indexOf(\"MSIE 9\") === -1 && event.buttons === 0 && data.buttonsProperty !== 0 ) {\n\t\t\treturn eventEnd(event, data);\n\t\t}\n\n\t\t// Check if we are moving up or down\n\t\tvar movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\n\n\t\t// Convert the movement into a percentage of the slider width/height\n\t\tvar proposal = (movement * 100) / data.baseSize;\n\n\t\tmoveHandles(movement > 0, proposal, data.locations, data.handleNumbers);\n\t}\n\n\t// Unbind move events on document, call callbacks.\n\tfunction eventEnd ( event, data ) {\n\n\t\t// The handle is no longer active, so remove the class.\n\t\tif ( data.handle ) {\n\t\t\tremoveClass(data.handle, options.cssClasses.active);\n\t\t\tscope_ActiveHandlesCount -= 1;\n\t\t}\n\n\t\t// Unbind the move and end events, which are added on 'start'.\n\t\tdata.listeners.forEach(function( c ) {\n\t\t\tscope_DocumentElement.removeEventListener(c[0], c[1]);\n\t\t});\n\n\t\tif ( scope_ActiveHandlesCount === 0 ) {\n\t\t\t// Remove dragging class.\n\t\t\tremoveClass(scope_Target, options.cssClasses.drag);\n\t\t\tsetZindex();\n\n\t\t\t// Remove cursor styles and text-selection events bound to the body.\n\t\t\tif ( event.cursor ) {\n\t\t\t\tscope_Body.style.cursor = '';\n\t\t\t\tscope_Body.removeEventListener('selectstart', preventDefault);\n\t\t\t}\n\t\t}\n\n\t\tdata.handleNumbers.forEach(function(handleNumber){\n\t\t\tfireEvent('change', handleNumber);\n\t\t\tfireEvent('set', handleNumber);\n\t\t\tfireEvent('end', handleNumber);\n\t\t});\n\t}\n\n\t// Bind move events on document.\n\tfunction eventStart ( event, data ) {\n\n\t\tvar handle;\n\t\tif ( data.handleNumbers.length === 1 ) {\n\n\t\t\tvar handleOrigin = scope_Handles[data.handleNumbers[0]];\n\n\t\t\t// Ignore 'disabled' handles\n\t\t\tif ( handleOrigin.hasAttribute('disabled') ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\thandle = handleOrigin.children[0];\n\t\t\tscope_ActiveHandlesCount += 1;\n\n\t\t\t// Mark the handle as 'active' so it can be styled.\n\t\t\taddClass(handle, options.cssClasses.active);\n\t\t}\n\n\t\t// A drag should never propagate up to the 'tap' event.\n\t\tevent.stopPropagation();\n\n\t\t// Record the event listeners.\n\t\tvar listeners = [];\n\n\t\t// Attach the move and end events.\n\t\tvar moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {\n\t\t\t// The event target has changed so we need to propagate the original one so that we keep\n\t\t\t// relying on it to extract target touches.\n\t\t\ttarget: event.target,\n\t\t\thandle: handle,\n\t\t\tlisteners: listeners,\n\t\t\tstartCalcPoint: event.calcPoint,\n\t\t\tbaseSize: baseSize(),\n\t\t\tpageOffset: event.pageOffset,\n\t\t\thandleNumbers: data.handleNumbers,\n\t\t\tbuttonsProperty: event.buttons,\n\t\t\tlocations: scope_Locations.slice()\n\t\t});\n\n\t\tvar endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {\n\t\t\ttarget: event.target,\n\t\t\thandle: handle,\n\t\t\tlisteners: listeners,\n\t\t\thandleNumbers: data.handleNumbers\n\t\t});\n\n\t\tvar outEvent = attachEvent(\"mouseout\", scope_DocumentElement, documentLeave, {\n\t\t\ttarget: event.target,\n\t\t\thandle: handle,\n\t\t\tlisteners: listeners,\n\t\t\thandleNumbers: data.handleNumbers\n\t\t});\n\n\t\t// We want to make sure we pushed the listeners in the listener list rather than creating\n\t\t// a new one as it has already been passed to the event handlers.\n\t\tlisteners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\n\n\t\t// Text selection isn't an issue on touch devices,\n\t\t// so adding cursor styles can be skipped.\n\t\tif ( event.cursor ) {\n\n\t\t\t// Prevent the 'I' cursor and extend the range-drag cursor.\n\t\t\tscope_Body.style.cursor = getComputedStyle(event.target).cursor;\n\n\t\t\t// Mark the target with a dragging state.\n\t\t\tif ( scope_Handles.length > 1 ) {\n\t\t\t\taddClass(scope_Target, options.cssClasses.drag);\n\t\t\t}\n\n\t\t\t// Prevent text selection when dragging the handles.\n\t\t\t// In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,\n\t\t\t// which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,\n\t\t\t// meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.\n\t\t\t// The 'cursor' flag is false.\n\t\t\t// See: http://caniuse.com/#search=selectstart\n\t\t\tscope_Body.addEventListener('selectstart', preventDefault, false);\n\t\t}\n\n\t\tdata.handleNumbers.forEach(function(handleNumber){\n\t\t\tfireEvent('start', handleNumber);\n\t\t});\n\t}\n\n\t// Move closest handle to tapped location.\n\tfunction eventTap ( event ) {\n\n\t\t// The tap event shouldn't propagate up\n\t\tevent.stopPropagation();\n\n\t\tvar proposal = calcPointToPercentage(event.calcPoint);\n\t\tvar handleNumber = getClosestHandle(proposal);\n\n\t\t// Tackle the case that all handles are 'disabled'.\n\t\tif ( handleNumber === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Flag the slider as it is now in a transitional state.\n\t\t// Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\n\t\tif ( !options.events.snap ) {\n\t\t\taddClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n\t\t}\n\n\t\tsetHandle(handleNumber, proposal, true, true);\n\n\t\tsetZindex();\n\n\t\tfireEvent('slide', handleNumber, true);\n\t\tfireEvent('update', handleNumber, true);\n\t\tfireEvent('change', handleNumber, true);\n\t\tfireEvent('set', handleNumber, true);\n\n\t\tif ( options.events.snap ) {\n\t\t\teventStart(event, { handleNumbers: [handleNumber] });\n\t\t}\n\t}\n\n\t// Fires a 'hover' event for a hovered mouse/pen position.\n\tfunction eventHover ( event ) {\n\n\t\tvar proposal = calcPointToPercentage(event.calcPoint);\n\n\t\tvar to = scope_Spectrum.getStep(proposal);\n\t\tvar value = scope_Spectrum.fromStepping(to);\n\n\t\tObject.keys(scope_Events).forEach(function( targetEvent ) {\n\t\t\tif ( 'hover' === targetEvent.split('.')[0] ) {\n\t\t\t\tscope_Events[targetEvent].forEach(function( callback ) {\n\t\t\t\t\tcallback.call( scope_Self, value );\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Attach events to several slider parts.\n\tfunction bindSliderEvents ( behaviour ) {\n\n\t\t// Attach the standard drag event to the handles.\n\t\tif ( !behaviour.fixed ) {\n\n\t\t\tscope_Handles.forEach(function( handle, index ){\n\n\t\t\t\t// These events are only bound to the visual handle\n\t\t\t\t// element, not the 'real' origin element.\n\t\t\t\tattachEvent ( actions.start, handle.children[0], eventStart, {\n\t\t\t\t\thandleNumbers: [index]\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Attach the tap event to the slider base.\n\t\tif ( behaviour.tap ) {\n\t\t\tattachEvent (actions.start, scope_Base, eventTap, {});\n\t\t}\n\n\t\t// Fire hover events\n\t\tif ( behaviour.hover ) {\n\t\t\tattachEvent (actions.move, scope_Base, eventHover, { hover: true });\n\t\t}\n\n\t\t// Make the range draggable.\n\t\tif ( behaviour.drag ){\n\n\t\t\tscope_Connects.forEach(function( connect, index ){\n\n\t\t\t\tif ( connect === false || index === 0 || index === scope_Connects.length - 1 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar handleBefore = scope_Handles[index - 1];\n\t\t\t\tvar handleAfter = scope_Handles[index];\n\t\t\t\tvar eventHolders = [connect];\n\n\t\t\t\taddClass(connect, options.cssClasses.draggable);\n\n\t\t\t\t// When the range is fixed, the entire range can\n\t\t\t\t// be dragged by the handles. The handle in the first\n\t\t\t\t// origin will propagate the start event upward,\n\t\t\t\t// but it needs to be bound manually on the other.\n\t\t\t\tif ( behaviour.fixed ) {\n\t\t\t\t\teventHolders.push(handleBefore.children[0]);\n\t\t\t\t\teventHolders.push(handleAfter.children[0]);\n\t\t\t\t}\n\n\t\t\t\teventHolders.forEach(function( eventHolder ) {\n\t\t\t\t\tattachEvent ( actions.start, eventHolder, eventStart, {\n\t\t\t\t\t\thandles: [handleBefore, handleAfter],\n\t\t\t\t\t\thandleNumbers: [index - 1, index]\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// Split out the handle positioning logic so the Move event can use it, too\n\tfunction checkHandlePosition ( reference, handleNumber, to, lookBackward, lookForward, getValue ) {\n\n\t\t// For sliders with multiple handles, limit movement to the other handle.\n\t\t// Apply the margin option by adding it to the handle positions.\n\t\tif ( scope_Handles.length > 1 ) {\n\n\t\t\tif ( lookBackward && handleNumber > 0 ) {\n\t\t\t\tto = Math.max(to, reference[handleNumber - 1] + options.margin);\n\t\t\t}\n\n\t\t\tif ( lookForward && handleNumber < scope_Handles.length - 1 ) {\n\t\t\t\tto = Math.min(to, reference[handleNumber + 1] - options.margin);\n\t\t\t}\n\t\t}\n\n\t\t// The limit option has the opposite effect, limiting handles to a\n\t\t// maximum distance from another. Limit must be > 0, as otherwise\n\t\t// handles would be unmoveable.\n\t\tif ( scope_Handles.length > 1 && options.limit ) {\n\n\t\t\tif ( lookBackward && handleNumber > 0 ) {\n\t\t\t\tto = Math.min(to, reference[handleNumber - 1] + options.limit);\n\t\t\t}\n\n\t\t\tif ( lookForward && handleNumber < scope_Handles.length - 1 ) {\n\t\t\t\tto = Math.max(to, reference[handleNumber + 1] - options.limit);\n\t\t\t}\n\t\t}\n\n\t\t// The padding option keeps the handles a certain distance from the\n\t\t// edges of the slider. Padding must be > 0.\n\t\tif ( options.padding ) {\n\n\t\t\tif ( handleNumber === 0 ) {\n\t\t\t\tto = Math.max(to, options.padding);\n\t\t\t}\n\n\t\t\tif ( handleNumber === scope_Handles.length - 1 ) {\n\t\t\t\tto = Math.min(to, 100 - options.padding);\n\t\t\t}\n\t\t}\n\n\t\tto = scope_Spectrum.getStep(to);\n\n\t\t// Limit percentage to the 0 - 100 range\n\t\tto = limit(to);\n\n\t\t// Return false if handle can't move\n\t\tif ( to === reference[handleNumber] && !getValue ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn to;\n\t}\n\n\tfunction toPct ( pct ) {\n\t\treturn pct + '%';\n\t}\n\n\t// Updates scope_Locations and scope_Values, updates visual state\n\tfunction updateHandlePosition ( handleNumber, to ) {\n\n\t\t// Update locations.\n\t\tscope_Locations[handleNumber] = to;\n\n\t\t// Convert the value to the slider stepping/range.\n\t\tscope_Values[handleNumber] = scope_Spectrum.fromStepping(to);\n\n\t\t// Called synchronously or on the next animationFrame\n\t\tvar stateUpdate = function() {\n\t\t\tscope_Handles[handleNumber].style[options.style] = toPct(to);\n\t\t\tupdateConnect(handleNumber);\n\t\t\tupdateConnect(handleNumber + 1);\n\t\t};\n\n\t\t// Set the handle to the new position.\n\t\t// Use requestAnimationFrame for efficient painting.\n\t\t// No significant effect in Chrome, Edge sees dramatic performace improvements.\n\t\t// Option to disable is useful for unit tests, and single-step debugging.\n\t\tif ( window.requestAnimationFrame && options.useRequestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame(stateUpdate);\n\t\t} else {\n\t\t\tstateUpdate();\n\t\t}\n\t}\n\n\tfunction setZindex ( ) {\n\n\t\tscope_HandleNumbers.forEach(function(handleNumber){\n\t\t\t// Handles before the slider middle are stacked later = higher,\n\t\t\t// Handles after the middle later is lower\n\t\t\t// [[7] [8] .......... | .......... [5] [4]\n\t\t\tvar dir = (scope_Locations[handleNumber] > 50 ? -1 : 1);\n\t\t\tvar zIndex = 3 + (scope_Handles.length + (dir * handleNumber));\n\t\t\tscope_Handles[handleNumber].childNodes[0].style.zIndex = zIndex;\n\t\t});\n\t}\n\n\t// Test suggested values and apply margin, step.\n\tfunction setHandle ( handleNumber, to, lookBackward, lookForward ) {\n\n\t\tto = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false);\n\n\t\tif ( to === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tupdateHandlePosition(handleNumber, to);\n\n\t\treturn true;\n\t}\n\n\t// Updates style attribute for connect nodes\n\tfunction updateConnect ( index ) {\n\n\t\t// Skip connects set to false\n\t\tif ( !scope_Connects[index] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar l = 0;\n\t\tvar h = 100;\n\n\t\tif ( index !== 0 ) {\n\t\t\tl = scope_Locations[index - 1];\n\t\t}\n\n\t\tif ( index !== scope_Connects.length - 1 ) {\n\t\t\th = scope_Locations[index];\n\t\t}\n\n\t\tscope_Connects[index].style[options.style] = toPct(l);\n\t\tscope_Connects[index].style[options.styleOposite] = toPct(100 - h);\n\t}\n\n\t// ...\n\tfunction setValue ( to, handleNumber ) {\n\n\t\t// Setting with null indicates an 'ignore'.\n\t\t// Inputting 'false' is invalid.\n\t\tif ( to === null || to === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If a formatted number was passed, attemt to decode it.\n\t\tif ( typeof to === 'number' ) {\n\t\t\tto = String(to);\n\t\t}\n\n\t\tto = options.format.from(to);\n\n\t\t// Request an update for all links if the value was invalid.\n\t\t// Do so too if setting the handle fails.\n\t\tif ( to !== false && !isNaN(to) ) {\n\t\t\tsetHandle(handleNumber, scope_Spectrum.toStepping(to), false, false);\n\t\t}\n\t}\n\n\t// Set the slider value.\n\tfunction valueSet ( input, fireSetEvent ) {\n\n\t\tvar values = asArray(input);\n\t\tvar isInit = scope_Locations[0] === undefined;\n\n\t\t// Event fires by default\n\t\tfireSetEvent = (fireSetEvent === undefined ? true : !!fireSetEvent);\n\n\t\tvalues.forEach(setValue);\n\n\t\t// Animation is optional.\n\t\t// Make sure the initial values were set before using animated placement.\n\t\tif ( options.animate && !isInit ) {\n\t\t\taddClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n\t\t}\n\n\t\t// Now that all base values are set, apply constraints\n\t\tscope_HandleNumbers.forEach(function(handleNumber){\n\t\t\tsetHandle(handleNumber, scope_Locations[handleNumber], true, false);\n\t\t});\n\n\t\tsetZindex();\n\n\t\tscope_HandleNumbers.forEach(function(handleNumber){\n\n\t\t\tfireEvent('update', handleNumber);\n\n\t\t\t// Fire the event only for handles that received a new value, as per #579\n\t\t\tif ( values[handleNumber] !== null && fireSetEvent ) {\n\t\t\t\tfireEvent('set', handleNumber);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Reset slider to initial values\n\tfunction valueReset ( fireSetEvent ) {\n\t\tvalueSet(options.start, fireSetEvent);\n\t}\n\n\t// Get the slider value.\n\tfunction valueGet ( ) {\n\n\t\tvar values = scope_Values.map(options.format.to);\n\n\t\t// If only one handle is used, return a single value.\n\t\tif ( values.length === 1 ){\n\t\t\treturn values[0];\n\t\t}\n\n\t\treturn values;\n\t}\n\n\t// Removes classes from the root and empties it.\n\tfunction destroy ( ) {\n\n\t\tfor ( var key in options.cssClasses ) {\n\t\t\tif ( !options.cssClasses.hasOwnProperty(key) ) { continue; }\n\t\t\tremoveClass(scope_Target, options.cssClasses[key]);\n\t\t}\n\n\t\twhile (scope_Target.firstChild) {\n\t\t\tscope_Target.removeChild(scope_Target.firstChild);\n\t\t}\n\n\t\tdelete scope_Target.noUiSlider;\n\t}\n\n\t// Get the current step size for the slider.\n\tfunction getCurrentStep ( ) {\n\n\t\t// Check all locations, map them to their stepping point.\n\t\t// Get the step point, then find it in the input list.\n\t\treturn scope_Locations.map(function( location, index ){\n\n\t\t\tvar nearbySteps = scope_Spectrum.getNearbySteps( location );\n\t\t\tvar value = scope_Values[index];\n\t\t\tvar increment = nearbySteps.thisStep.step;\n\t\t\tvar decrement = null;\n\n\t\t\t// If the next value in this step moves into the next step,\n\t\t\t// the increment is the start of the next step - the current value\n\t\t\tif ( increment !== false ) {\n\t\t\t\tif ( value + increment > nearbySteps.stepAfter.startValue ) {\n\t\t\t\t\tincrement = nearbySteps.stepAfter.startValue - value;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// If the value is beyond the starting point\n\t\t\tif ( value > nearbySteps.thisStep.startValue ) {\n\t\t\t\tdecrement = nearbySteps.thisStep.step;\n\t\t\t}\n\n\t\t\telse if ( nearbySteps.stepBefore.step === false ) {\n\t\t\t\tdecrement = false;\n\t\t\t}\n\n\t\t\t// If a handle is at the start of a step, it always steps back into the previous step first\n\t\t\telse {\n\t\t\t\tdecrement = value - nearbySteps.stepBefore.highestStep;\n\t\t\t}\n\n\n\t\t\t// Now, if at the slider edges, there is not in/decrement\n\t\t\tif ( location === 100 ) {\n\t\t\t\tincrement = null;\n\t\t\t}\n\n\t\t\telse if ( location === 0 ) {\n\t\t\t\tdecrement = null;\n\t\t\t}\n\n\t\t\t// As per #391, the comparison for the decrement step can have some rounding issues.\n\t\t\tvar stepDecimals = scope_Spectrum.countStepDecimals();\n\n\t\t\t// Round per #391\n\t\t\tif ( increment !== null && increment !== false ) {\n\t\t\t\tincrement = Number(increment.toFixed(stepDecimals));\n\t\t\t}\n\n\t\t\tif ( decrement !== null && decrement !== false ) {\n\t\t\t\tdecrement = Number(decrement.toFixed(stepDecimals));\n\t\t\t}\n\n\t\t\treturn [decrement, increment];\n\t\t});\n\t}\n\n\t// Attach an event to this slider, possibly including a namespace\n\tfunction bindEvent ( namespacedEvent, callback ) {\n\t\tscope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];\n\t\tscope_Events[namespacedEvent].push(callback);\n\n\t\t// If the event bound is 'update,' fire it immediately for all handles.\n\t\tif ( namespacedEvent.split('.')[0] === 'update' ) {\n\t\t\tscope_Handles.forEach(function(a, index){\n\t\t\t\tfireEvent('update', index);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Undo attachment of event\n\tfunction removeEvent ( namespacedEvent ) {\n\n\t\tvar event = namespacedEvent && namespacedEvent.split('.')[0];\n\t\tvar namespace = event && namespacedEvent.substring(event.length);\n\n\t\tObject.keys(scope_Events).forEach(function( bind ){\n\n\t\t\tvar tEvent = bind.split('.')[0],\n\t\t\t\ttNamespace = bind.substring(tEvent.length);\n\n\t\t\tif ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) {\n\t\t\t\tdelete scope_Events[bind];\n\t\t\t}\n\t\t});\n\t}\n\n\t// Updateable: margin, limit, padding, step, range, animate, snap\n\tfunction updateOptions ( optionsToUpdate, fireSetEvent ) {\n\n\t\t// Spectrum is created using the range, snap, direction and step options.\n\t\t// 'snap' and 'step' can be updated.\n\t\t// If 'snap' and 'step' are not passed, they should remain unchanged.\n\t\tvar v = valueGet();\n\n\t\tvar updateAble = ['margin', 'limit', 'padding', 'range', 'animate', 'snap', 'step', 'format'];\n\n\t\t// Only change options that we're actually passed to update.\n\t\tupdateAble.forEach(function(name){\n\t\t\tif ( optionsToUpdate[name] !== undefined ) {\n\t\t\t\toriginalOptions[name] = optionsToUpdate[name];\n\t\t\t}\n\t\t});\n\n\t\tvar newOptions = testOptions(originalOptions);\n\n\t\t// Load new options into the slider state\n\t\tupdateAble.forEach(function(name){\n\t\t\tif ( optionsToUpdate[name] !== undefined ) {\n\t\t\t\toptions[name] = newOptions[name];\n\t\t\t}\n\t\t});\n\n\t\tscope_Spectrum = newOptions.spectrum;\n\n\t\t// Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)\n\t\toptions.margin = newOptions.margin;\n\t\toptions.limit = newOptions.limit;\n\t\toptions.padding = newOptions.padding;\n\n\t\t// Update pips, removes existing.\n\t\tif ( options.pips ) {\n\t\t\tpips(options.pips);\n\t\t}\n\n\t\t// Invalidate the current positioning so valueSet forces an update.\n\t\tscope_Locations = [];\n\t\tvalueSet(optionsToUpdate.start || v, fireSetEvent);\n\t}\n\n\t// Throw an error if the slider was already initialized.\n\tif ( scope_Target.noUiSlider ) {\n\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): Slider was already initialized.\");\n\t}\n\n\t// Create the base element, initialise HTML and set classes.\n\t// Add handles and connect elements.\n\taddSlider(scope_Target);\n\taddElements(options.connect, scope_Base);\n\n\tscope_Self = {\n\t\tdestroy: destroy,\n\t\tsteps: getCurrentStep,\n\t\ton: bindEvent,\n\t\toff: removeEvent,\n\t\tget: valueGet,\n\t\tset: valueSet,\n\t\treset: valueReset,\n\t\t// Exposed for unit testing, don't use this in your application.\n\t\t__moveHandles: function(a, b, c) { moveHandles(a, b, scope_Locations, c); },\n\t\toptions: originalOptions, // Issue #600, #678\n\t\tupdateOptions: updateOptions,\n\t\ttarget: scope_Target, // Issue #597\n\t\tremovePips: removePips,\n\t\tpips: pips // Issue #594\n\t};\n\n\t// Attach user events.\n\tbindSliderEvents(options.events);\n\n\t// Use the public value method to set the start values.\n\tvalueSet(options.start);\n\n\tif ( options.pips ) {\n\t\tpips(options.pips);\n\t}\n\n\tif ( options.tooltips ) {\n\t\ttooltips();\n\t}\n\n\taria();\n\n\treturn scope_Self;\n\n}\n\n\n\t// Run the standard initializer\n\tfunction initialize ( target, originalOptions ) {\n\n\t\tif ( !target || !target.nodeName ) {\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): create requires a single element, got: \" + target);\n\t\t}\n\n\t\t// Test the options and create the slider environment;\n\t\tvar options = testOptions( originalOptions, target );\n\t\tvar api = closure( target, options, originalOptions );\n\n\t\ttarget.noUiSlider = api;\n\n\t\treturn api;\n\t}\n\n\t// Use an object instead of a function for future expansibility;\n\treturn {\n\t\tversion: VERSION,\n\t\tcreate: initialize\n\t};\n\n}));","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n"],"sourceRoot":""}